Forráskód Böngészése

V1.1
1、创建了新的流程图说明

Apple 1 hónapja
szülő
commit
5c83978257

+ 3 - 0
ACA服务程序设计说明.md

@@ -0,0 +1,3 @@
+# ACA服务设计说明
+
+## 整体

+ 131 - 5
JSON/音量包信息.json

@@ -14,9 +14,71 @@
             "is_silence": false,
             "item_road_name": "主通道",
             "item_road_num": 1,
-            "left_db_array": [-90,-90,-90,-90,-90,-90,-90,65446,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+            "left_db_array": [
+                -90,
+                -90,
+                -90,
+                -90,
+                -90,
+                -90,
+                -90,
+                65446,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0
+            ],
             "left_real_time_db": 0,
-            "right_db_array": [-90,-90,-90,-90,-90,-90,-90,65446,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+            "right_db_array": [
+                -90,
+                -90,
+                -90,
+                -90,
+                -90,
+                -90,
+                -90,
+                65446,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0
+            ],
             "right_real_time_db": 0,
             "similarity": 0.0,
             "soundCard_id": "AudioPCI",
@@ -32,13 +94,77 @@
             "is_silence": false,
             "item_road_name": "第2通道",
             "item_road_num": 2,
-            "left_db_array": [-90,-90,-90,-90,-90,-90,-90,65446,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+            "left_db_array": [
+                -90,
+                -90,
+                -90,
+                -90,
+                -90,
+                -90,
+                -90,
+                65446,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0
+            ],
             "left_real_time_db": 0,
-            "right_db_array": [-90,-90,-90,-90,-90,-90,-90,65446,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
+            "right_db_array": [
+                -90,
+                -90,
+                -90,
+                -90,
+                -90,
+                -90,
+                -90,
+                65446,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0,
+                0
+            ],
             "right_real_time_db": 0,
             "similarity": 0.0,
             "soundCard_id": "AudioPCI",
             "soundCard_road_id": 0
         }
     ]
-}
+}
+
+

+ 1 - 1
Server/ACAServer.cpp

@@ -131,6 +131,7 @@ bool ACAServer::initGlobalInfo()
         }
     }
 
+
     /*------------------------------------------------------------------------------------*/
     /* 应用一些配置选项 */
 #if defined(C_RELEASE)
@@ -147,7 +148,6 @@ bool ACAServer::initGlobalInfo()
     /* 发送服务信息到MQTT中,设置为保留信息 */
     sendServerInfoToMQTT();
 
-
     /*------------------------------------------------------------------------------------*/
     printACAServerConfig();
 

+ 1 - 1
Server/ThreadCalculate/NoiseDetectThread.cpp

@@ -256,7 +256,7 @@ bool NoiseDetectThread::detectNoise()
         isNoiseRight = jsonOutput["noise"].is_null() ? false : jsonOutput["noise"].get<bool>();
 
         // SPDLOG_LOGGER_DEBUG(m_logger, "{} 右声道噪音检测结果: {}", m_logBase, jsonOutput["silence_state"].dump(4));
-        SPDLOG_LOGGER_DEBUG(m_logger, "{} 右声道噪音检测结果: {}, silence_state: {}", m_logBase, isNoiseRight, jsonOutput["silence_state"].dump(4));
+        // SPDLOG_LOGGER_DEBUG(m_logger, "{} 右声道噪音检测结果: {}, silence_state: {}", m_logBase, isNoiseRight, jsonOutput["silence_state"].dump(4));
 
 
     }

+ 1 - 1
Server/ThreadManager/ThreadWriteDBManager.cpp

@@ -289,7 +289,7 @@ bool ThreadWriteDBManager::processFilePath(QString& strFilePath)
         注意: 这个函数需要在删除数据库记录之前执行,删除文件路径是从数据库中读取的 */
 void ThreadWriteDBManager::deleteTimeoutFile()
 {
-    if(m_lastDeleteFileTime.secsTo(m_currentTime) < 6)
+    if(m_lastDeleteFileTime.secsTo(m_currentTime) < 600)
     {
         return; // 十分钟检查一次
     }

+ 1 - 1
Server/ThreadRecord/RecordThread.h

@@ -14,7 +14,7 @@
 
 
 /* 设置为true,读取本地文件模拟录音 */
-#define RECORD_READFILE true
+#define RECORD_READFILE false
 
 
 class AssignSrcDataThread;

+ 1 - 1
Server/main.cpp

@@ -23,7 +23,7 @@ int main(int argc, char* argv[])
     QCoreApplication a(argc, argv);
 
     /* 初始化日志库 */
-    initLog("SecurePlayAuxServer", g_apiLhQLog);
+    initLog("ACAServer", g_apiLhQLog);
     auto logger = spdlog::get("main");
     if(logger == nullptr)
     {

+ 62 - 0
旧程序说明.md

@@ -0,0 +1,62 @@
+# ACA服务设计说明
+
+## 程序架构说明
+### 整体流程
+    读取数据(录音)-> 调用动态库分析数据-> 将结果通过TCP或者MQTT发送出去
+1. 原始采集数据存放在采集类中,由采集类管理
+2. 可以再创建一个生成wav文件的类,用于生成wav文件,管理wav文件
+3. 比对类获取wav文件数据,调用比对动态库进行比对
+4. 
+
+### 数据形式
+1. 从声卡读取出的原始数据是char[]数组,存储在一个环形队列中
+2. 对比时要从环形队列中取出,转换成wav文件,传入动态库API中进行比对
+
+
+### 其他功能
+    噪音对比功能
+
+## 老代码中的东西
+### 使用到的文件和类
+1. Old代码中使用到的文件和类说明
+    |文件|类、结构体|说明|
+    |---|---|---|
+    |Road.h|CRoad类|录音功能|
+    |||生成wav小文件功能|
+    ||DBCalcThread|计算出音量和反相,存储在缓存中,给外部线程使用|
+    |||调用动态库计算噪音功能,计算噪音使用的是原始文件|
+    ||DBCalcRealTimeThread|计算实时音量,貌似只是为了写日志,不向外发送|
+    ||SendForListenThread|发送原始数据|
+    |Channel.h|CompareNewThread()|对比线程|
+    ||CChannel类|对比类,在里面实现对比的相关操作|
+    |SecondData.h|CCacheDataListOfSecond类|维护一个环形队列,存储180秒的音频缓存|
+    ||OneSecondData结构体|环形队列的元素,一秒的录音数据|
+    |ChannelList.h|CChannelList类|开启录制进程,开启对比进程|
+    |TCPServer.h|SendInfo()函数|发送客户端请求的信息|
+    
+## 功能流程
+
+### 初始化一些数据
+
+### 录音功能
+1. 录音到原始文件
+2. 原始文件拷贝一份到计算比对线程,存储到一个环形队列中,队列中的每个单元包含一秒或者几秒的音频数据,计算时取出一定的时间长度,计算出音量,生成wav小文件,进行比对
+3. 原始文件拷贝一份到记录线程,记录到录音文件,1小时一个文件,可以用于发送给客户端
+4. 比对报警时记录报警的时间长度,单独生成一个小的音频文件,单独存放到一个文件夹中。
+
+#### 录音功能处理流程(线程设计)
+1. 获取原始音频的线程,在这里进行数据分发
+2. 一个缓存到环形队列中,生成wav小文件
+3. 一个记录原始音频到文件的线程,每1小时一个wav文件
+4. 一个线程,计算出音量和反相,保存到缓存中
+5. 一个线程,实时向外发送原始音频数据
+6. 一个线程,计算实时音量,写日志,这个貌似不重要,可以合并到其他线程中
+
+### 对比功能
+1. 取出相同时间的两个wav小文件,传入动态库进行比对,获取结果,进行其他操作
+
+### 其他功能(TCP监听服务,UDP发送服务)
+
+
+
+

+ 0 - 133
流程图/.$ACA服务处理流程.drawio.bkp

@@ -1,133 +0,0 @@
-<mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/27.0.9 Chrome/134.0.6998.205 Electron/35.4.0 Safari/537.36" version="27.0.9">
-  <diagram id="C5RBs43oDa-KdzZeNtuy" name="Page-1">
-    <mxGraphModel dx="2253" dy="809" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
-      <root>
-        <mxCell id="WIyWlLk6GJQsqaUBKTNV-0" />
-        <mxCell id="WIyWlLk6GJQsqaUBKTNV-1" parent="WIyWlLk6GJQsqaUBKTNV-0" />
-        <mxCell id="58AM0ZFqBsn02e19VYqP-2" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="58AM0ZFqBsn02e19VYqP-0" target="58AM0ZFqBsn02e19VYqP-1" edge="1">
-          <mxGeometry relative="1" as="geometry" />
-        </mxCell>
-        <mxCell id="58AM0ZFqBsn02e19VYqP-0" value="录音线程,获取到原始数据SrcData" style="rounded=1;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
-          <mxGeometry y="210" width="120" height="60" as="geometry" />
-        </mxCell>
-        <mxCell id="58AM0ZFqBsn02e19VYqP-7" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="58AM0ZFqBsn02e19VYqP-1" target="58AM0ZFqBsn02e19VYqP-6" edge="1">
-          <mxGeometry relative="1" as="geometry" />
-        </mxCell>
-        <mxCell id="58AM0ZFqBsn02e19VYqP-1" value="数据分发线程&lt;br&gt;将原始的录音数据进行分发" style="rounded=1;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
-          <mxGeometry x="-5" y="310" width="130" height="60" as="geometry" />
-        </mxCell>
-        <mxCell id="58AM0ZFqBsn02e19VYqP-4" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0;exitY=1;exitDx=0;exitDy=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="58AM0ZFqBsn02e19VYqP-1" target="58AM0ZFqBsn02e19VYqP-5" edge="1">
-          <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint y="360" as="sourcePoint" />
-            <mxPoint x="-140" y="430" as="targetPoint" />
-            <Array as="points" />
-          </mxGeometry>
-        </mxCell>
-        <mxCell id="58AM0ZFqBsn02e19VYqP-9" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="58AM0ZFqBsn02e19VYqP-5" target="58AM0ZFqBsn02e19VYqP-8" edge="1">
-          <mxGeometry relative="1" as="geometry" />
-        </mxCell>
-        <mxCell id="58AM0ZFqBsn02e19VYqP-5" value="生成WAV小文件线程" style="rounded=1;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
-          <mxGeometry x="-230" y="430" width="120" height="60" as="geometry" />
-        </mxCell>
-        <mxCell id="58AM0ZFqBsn02e19VYqP-19" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="58AM0ZFqBsn02e19VYqP-6" target="58AM0ZFqBsn02e19VYqP-16" edge="1">
-          <mxGeometry relative="1" as="geometry" />
-        </mxCell>
-        <mxCell id="58AM0ZFqBsn02e19VYqP-6" value="生成噪音检测线程所需要的数据的线程" style="rounded=1;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
-          <mxGeometry y="430" width="120" height="60" as="geometry" />
-        </mxCell>
-        <mxCell id="58AM0ZFqBsn02e19VYqP-8" value="WAV小文件&lt;br&gt;" style="ellipse;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
-          <mxGeometry x="-230" y="520" width="120" height="80" as="geometry" />
-        </mxCell>
-        <mxCell id="58AM0ZFqBsn02e19VYqP-18" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="58AM0ZFqBsn02e19VYqP-13" target="58AM0ZFqBsn02e19VYqP-17" edge="1">
-          <mxGeometry relative="1" as="geometry" />
-        </mxCell>
-        <mxCell id="58AM0ZFqBsn02e19VYqP-13" value="计算出音量值、反相相关的数据线程" style="whiteSpace=wrap;html=1;rounded=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
-          <mxGeometry x="220" y="430" width="120" height="60" as="geometry" />
-        </mxCell>
-        <mxCell id="58AM0ZFqBsn02e19VYqP-15" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.954;exitY=1.007;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitPerimeter=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="58AM0ZFqBsn02e19VYqP-1" target="58AM0ZFqBsn02e19VYqP-13" edge="1">
-          <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="50" y="560" as="sourcePoint" />
-            <mxPoint x="100" y="510" as="targetPoint" />
-          </mxGeometry>
-        </mxCell>
-        <mxCell id="58AM0ZFqBsn02e19VYqP-16" value="未知数据" style="ellipse;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
-          <mxGeometry y="520" width="120" height="80" as="geometry" />
-        </mxCell>
-        <mxCell id="58AM0ZFqBsn02e19VYqP-17" value="环形队列,存储计算出来的音量值" style="ellipse;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
-          <mxGeometry x="220" y="520" width="120" height="80" as="geometry" />
-        </mxCell>
-        <mxCell id="58AM0ZFqBsn02e19VYqP-20" value="相似度比对线程&lt;br&gt;调用第三方动态库进行比对;&lt;br&gt;获取WAV小文件,进行处理;" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
-          <mxGeometry x="-235" y="660" width="130" height="100" as="geometry" />
-        </mxCell>
-        <mxCell id="58AM0ZFqBsn02e19VYqP-22" value="环形队列,存储wav小文件路径" style="ellipse;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
-          <mxGeometry x="-380" y="520" width="120" height="80" as="geometry" />
-        </mxCell>
-        <mxCell id="58AM0ZFqBsn02e19VYqP-23" value="" style="endArrow=classic;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="58AM0ZFqBsn02e19VYqP-5" target="58AM0ZFqBsn02e19VYqP-22" edge="1">
-          <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="-340" y="460" as="sourcePoint" />
-            <mxPoint x="-290" y="410" as="targetPoint" />
-          </mxGeometry>
-        </mxCell>
-        <mxCell id="58AM0ZFqBsn02e19VYqP-24" value="" style="endArrow=classic;html=1;rounded=0;exitX=0;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="58AM0ZFqBsn02e19VYqP-20" target="58AM0ZFqBsn02e19VYqP-22" edge="1">
-          <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="-220" y="470" as="sourcePoint" />
-            <mxPoint x="-310" y="530" as="targetPoint" />
-          </mxGeometry>
-        </mxCell>
-        <mxCell id="58AM0ZFqBsn02e19VYqP-26" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="58AM0ZFqBsn02e19VYqP-16" target="58AM0ZFqBsn02e19VYqP-25" edge="1">
-          <mxGeometry relative="1" as="geometry">
-            <mxPoint x="110" y="630" as="targetPoint" />
-          </mxGeometry>
-        </mxCell>
-        <mxCell id="58AM0ZFqBsn02e19VYqP-25" value="噪音检测线程&lt;br&gt;调用三方动态库进行检测&lt;br&gt;" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
-          <mxGeometry x="-2.5" y="665" width="125" height="90" as="geometry" />
-        </mxCell>
-        <mxCell id="58AM0ZFqBsn02e19VYqP-27" value="静音、过载、反相检测线程,比对出一致性" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
-          <mxGeometry x="217.5" y="665" width="125" height="90" as="geometry" />
-        </mxCell>
-        <mxCell id="58AM0ZFqBsn02e19VYqP-29" value="TCP服务,监听客户端消息,并发送消息" style="rounded=1;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
-          <mxGeometry x="-310" y="915" width="120" height="60" as="geometry" />
-        </mxCell>
-        <mxCell id="58AM0ZFqBsn02e19VYqP-30" value="数据发送函数&lt;br&gt;,获取信息发送给客户端" style="rhombus;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
-          <mxGeometry x="-45" y="880" width="210" height="130" as="geometry" />
-        </mxCell>
-        <mxCell id="58AM0ZFqBsn02e19VYqP-31" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="58AM0ZFqBsn02e19VYqP-8" target="58AM0ZFqBsn02e19VYqP-20" edge="1">
-          <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="50" y="700" as="sourcePoint" />
-            <mxPoint x="100" y="650" as="targetPoint" />
-          </mxGeometry>
-        </mxCell>
-        <mxCell id="58AM0ZFqBsn02e19VYqP-32" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="58AM0ZFqBsn02e19VYqP-17" target="58AM0ZFqBsn02e19VYqP-27" edge="1">
-          <mxGeometry relative="1" as="geometry">
-            <mxPoint x="70" y="610" as="sourcePoint" />
-            <mxPoint x="70" y="675" as="targetPoint" />
-          </mxGeometry>
-        </mxCell>
-        <mxCell id="58AM0ZFqBsn02e19VYqP-33" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="58AM0ZFqBsn02e19VYqP-20" target="58AM0ZFqBsn02e19VYqP-30" edge="1">
-          <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="50" y="700" as="sourcePoint" />
-            <mxPoint x="100" y="650" as="targetPoint" />
-          </mxGeometry>
-        </mxCell>
-        <mxCell id="58AM0ZFqBsn02e19VYqP-34" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="58AM0ZFqBsn02e19VYqP-25" target="58AM0ZFqBsn02e19VYqP-30" edge="1">
-          <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="-160" y="770" as="sourcePoint" />
-            <mxPoint x="20" y="975" as="targetPoint" />
-          </mxGeometry>
-        </mxCell>
-        <mxCell id="58AM0ZFqBsn02e19VYqP-35" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="58AM0ZFqBsn02e19VYqP-27" target="58AM0ZFqBsn02e19VYqP-30" edge="1">
-          <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="70" y="765" as="sourcePoint" />
-            <mxPoint x="100" y="910" as="targetPoint" />
-          </mxGeometry>
-        </mxCell>
-        <mxCell id="58AM0ZFqBsn02e19VYqP-37" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="58AM0ZFqBsn02e19VYqP-29" target="58AM0ZFqBsn02e19VYqP-30" edge="1">
-          <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="50" y="690" as="sourcePoint" />
-            <mxPoint x="100" y="640" as="targetPoint" />
-          </mxGeometry>
-        </mxCell>
-      </root>
-    </mxGraphModel>
-  </diagram>
-</mxfile>

+ 0 - 159
流程图/.$ACA服务流程.drawio.bkp

@@ -1,159 +0,0 @@
-<mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/27.0.9 Chrome/134.0.6998.205 Electron/35.4.0 Safari/537.36" version="27.0.9">
-  <diagram name="Page-1" id="_q9Hk0N0-nweOAnfAhH3">
-    <mxGraphModel dx="2253" dy="809" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
-      <root>
-        <mxCell id="0" />
-        <mxCell id="1" parent="0" />
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-1" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="PJICHrniSQ2v9oinf_Ty-2" target="PJICHrniSQ2v9oinf_Ty-4" edge="1">
-          <mxGeometry relative="1" as="geometry" />
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-2" value="录音线程,获取到原始数据SrcData" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
-          <mxGeometry x="-215" y="230" width="120" height="60" as="geometry" />
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-4" value="数据分发线程&lt;br&gt;将原始的录音数据进行分发" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
-          <mxGeometry x="-5" y="230" width="130" height="60" as="geometry" />
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-5" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="PJICHrniSQ2v9oinf_Ty-4" target="PJICHrniSQ2v9oinf_Ty-7" edge="1">
-          <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint y="360" as="sourcePoint" />
-            <mxPoint x="-140" y="430" as="targetPoint" />
-            <Array as="points" />
-          </mxGeometry>
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-7" value="生成WAV小文件线程" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
-          <mxGeometry y="330" width="120" height="60" as="geometry" />
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-10" value="WAV小文件&lt;br&gt;" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
-          <mxGeometry x="80" y="440" width="120" height="80" as="geometry" />
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-11" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="PJICHrniSQ2v9oinf_Ty-12" target="PJICHrniSQ2v9oinf_Ty-15" edge="1">
-          <mxGeometry relative="1" as="geometry" />
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-12" value="计算出音量值、反相相关的数据线程" style="whiteSpace=wrap;html=1;rounded=1;" parent="1" vertex="1">
-          <mxGeometry x="217.5" y="330" width="120" height="60" as="geometry" />
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-13" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.954;exitY=1.007;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitPerimeter=0;" parent="1" source="PJICHrniSQ2v9oinf_Ty-4" target="PJICHrniSQ2v9oinf_Ty-12" edge="1">
-          <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="50" y="560" as="sourcePoint" />
-            <mxPoint x="100" y="510" as="targetPoint" />
-          </mxGeometry>
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-15" value="环形队列,存储计算出来的音量值" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
-          <mxGeometry x="217.5" y="440" width="120" height="80" as="geometry" />
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-16" value="相似度比对线程&lt;br&gt;调用第三方动态库进行比对;&lt;br&gt;获取WAV小文件,进行处理;" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" parent="1" vertex="1">
-          <mxGeometry x="-5" y="660" width="130" height="100" as="geometry" />
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-17" value="环形队列,存储wav小文件路径" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
-          <mxGeometry x="-60" y="440" width="120" height="80" as="geometry" />
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-18" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="PJICHrniSQ2v9oinf_Ty-7" target="PJICHrniSQ2v9oinf_Ty-17" edge="1">
-          <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="-340" y="460" as="sourcePoint" />
-            <mxPoint x="-290" y="410" as="targetPoint" />
-          </mxGeometry>
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-21" value="噪音检测线程&lt;br&gt;调用三方动态库进行检测&lt;br&gt;" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" parent="1" vertex="1">
-          <mxGeometry x="-220" y="660" width="125" height="90" as="geometry" />
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-22" value="静音、过载、反相检测线程,比对出一致性" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" parent="1" vertex="1">
-          <mxGeometry x="215" y="665" width="125" height="90" as="geometry" />
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-23" value="TCP服务,监听客户端消息,并发送消息" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
-          <mxGeometry x="-310" y="915" width="120" height="60" as="geometry" />
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-24" value="数据发送函数&lt;br&gt;,获取信息发送给客户端" style="rhombus;whiteSpace=wrap;html=1;" parent="1" vertex="1">
-          <mxGeometry x="-45" y="880" width="210" height="130" as="geometry" />
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-26" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="PJICHrniSQ2v9oinf_Ty-15" target="PJICHrniSQ2v9oinf_Ty-22" edge="1">
-          <mxGeometry relative="1" as="geometry">
-            <mxPoint x="70" y="610" as="sourcePoint" />
-            <mxPoint x="70" y="675" as="targetPoint" />
-          </mxGeometry>
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-27" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="PJICHrniSQ2v9oinf_Ty-16" target="PJICHrniSQ2v9oinf_Ty-22" edge="1">
-          <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="50" y="700" as="sourcePoint" />
-            <mxPoint x="-10" y="640" as="targetPoint" />
-            <Array as="points" />
-          </mxGeometry>
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-28" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="PJICHrniSQ2v9oinf_Ty-21" target="PJICHrniSQ2v9oinf_Ty-24" edge="1">
-          <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="-160" y="770" as="sourcePoint" />
-            <mxPoint x="20" y="975" as="targetPoint" />
-          </mxGeometry>
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-29" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="PJICHrniSQ2v9oinf_Ty-22" target="PJICHrniSQ2v9oinf_Ty-24" edge="1">
-          <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="70" y="765" as="sourcePoint" />
-            <mxPoint x="100" y="910" as="targetPoint" />
-          </mxGeometry>
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-30" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="PJICHrniSQ2v9oinf_Ty-23" target="PJICHrniSQ2v9oinf_Ty-24" edge="1">
-          <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="50" y="690" as="sourcePoint" />
-            <mxPoint x="100" y="640" as="targetPoint" />
-          </mxGeometry>
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-32" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.75;exitY=1;exitDx=0;exitDy=0;" parent="1" source="PJICHrniSQ2v9oinf_Ty-7" target="PJICHrniSQ2v9oinf_Ty-10" edge="1">
-          <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="-170" y="670" as="sourcePoint" />
-            <mxPoint x="-240" y="720" as="targetPoint" />
-          </mxGeometry>
-        </mxCell>
-        <mxCell id="gz7Ag7FggBXV80HZ7l5Y-1" value="数据管理单例类,管理这些环形队列" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
-          <mxGeometry x="5" y="560" width="120" height="60" as="geometry" />
-        </mxCell>
-        <mxCell id="gz7Ag7FggBXV80HZ7l5Y-2" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="PJICHrniSQ2v9oinf_Ty-17" target="gz7Ag7FggBXV80HZ7l5Y-1" edge="1">
-          <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="-170" y="570" as="sourcePoint" />
-            <mxPoint x="-120" y="520" as="targetPoint" />
-          </mxGeometry>
-        </mxCell>
-        <mxCell id="gz7Ag7FggBXV80HZ7l5Y-3" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="PJICHrniSQ2v9oinf_Ty-10" target="gz7Ag7FggBXV80HZ7l5Y-1" edge="1">
-          <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="-410" y="560" as="sourcePoint" />
-            <mxPoint x="-355" y="600" as="targetPoint" />
-          </mxGeometry>
-        </mxCell>
-        <mxCell id="gz7Ag7FggBXV80HZ7l5Y-4" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;rounded=0;entryX=0;entryY=1;entryDx=0;entryDy=0;exitX=1;exitY=0;exitDx=0;exitDy=0;" parent="1" source="gz7Ag7FggBXV80HZ7l5Y-1" target="PJICHrniSQ2v9oinf_Ty-15" edge="1">
-          <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="-340" y="570" as="sourcePoint" />
-            <mxPoint x="-290" y="520" as="targetPoint" />
-          </mxGeometry>
-        </mxCell>
-        <mxCell id="gz7Ag7FggBXV80HZ7l5Y-5" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.45;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="gz7Ag7FggBXV80HZ7l5Y-1" target="PJICHrniSQ2v9oinf_Ty-16" edge="1">
-          <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="70" y="640" as="sourcePoint" />
-            <mxPoint x="120" y="590" as="targetPoint" />
-          </mxGeometry>
-        </mxCell>
-        <mxCell id="j5mIEffdRgkVqhNrF_-w-1" value="将数据分开,分成左右声道(应该可以集成到其他线程中)" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
-          <mxGeometry x="-217.5" y="330" width="120" height="60" as="geometry" />
-        </mxCell>
-        <mxCell id="j5mIEffdRgkVqhNrF_-w-2" value="" style="endArrow=classic;html=1;rounded=0;entryX=1;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="PJICHrniSQ2v9oinf_Ty-4" target="j5mIEffdRgkVqhNrF_-w-1">
-          <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="-230" y="520" as="sourcePoint" />
-            <mxPoint x="-180" y="470" as="targetPoint" />
-          </mxGeometry>
-        </mxCell>
-        <mxCell id="j5mIEffdRgkVqhNrF_-w-3" value="环形队列,存储分开的左右声道原始数据" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
-          <mxGeometry x="-217.5" y="440" width="120" height="80" as="geometry" />
-        </mxCell>
-        <mxCell id="j5mIEffdRgkVqhNrF_-w-4" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="j5mIEffdRgkVqhNrF_-w-1" target="j5mIEffdRgkVqhNrF_-w-3">
-          <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="-370" y="520" as="sourcePoint" />
-            <mxPoint x="-400" y="570" as="targetPoint" />
-          </mxGeometry>
-        </mxCell>
-        <mxCell id="j5mIEffdRgkVqhNrF_-w-5" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="j5mIEffdRgkVqhNrF_-w-3" target="PJICHrniSQ2v9oinf_Ty-21">
-          <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="-260" y="590" as="sourcePoint" />
-            <mxPoint x="-290" y="640" as="targetPoint" />
-          </mxGeometry>
-        </mxCell>
-      </root>
-    </mxGraphModel>
-  </diagram>
-</mxfile>

+ 365 - 0
流程图/ACAServer.drawio

@@ -0,0 +1,365 @@
+<mxfile host="65bd71144e">
+    <diagram name="Page-1" id="_q9Hk0N0-nweOAnfAhH3">
+        <mxGraphModel dx="2338" dy="1064" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" background="none" math="0" shadow="0">
+            <root>
+                <mxCell id="0"/>
+                <mxCell id="1" parent="0"/>
+                <mxCell id="PJICHrniSQ2v9oinf_Ty-1" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="PJICHrniSQ2v9oinf_Ty-2" target="PJICHrniSQ2v9oinf_Ty-4" edge="1">
+                    <mxGeometry relative="1" as="geometry"/>
+                </mxCell>
+                <mxCell id="PJICHrniSQ2v9oinf_Ty-2" value="&lt;span style=&quot;color: rgb(78, 201, 176); background-color: rgb(31, 31, 31); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; white-space: pre;&quot;&gt;RecordThread&lt;/span&gt;&lt;div style=&quot;text-align: left;&quot;&gt;录音线程,获取到原始数据SrcData&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;align=center;" parent="1" vertex="1">
+                    <mxGeometry x="-278.75" y="90" width="175" height="90" as="geometry"/>
+                </mxCell>
+                <mxCell id="PJICHrniSQ2v9oinf_Ty-4" value="&lt;span style=&quot;color: rgb(78, 201, 176); background-color: rgb(31, 31, 31); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; white-space: pre;&quot;&gt;AssignSrcDataThread&lt;/span&gt;&lt;div style=&quot;text-align: left;&quot;&gt;数据分发线程,将获取到的录音数据整理分发,有如下两种方式&lt;br&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;1、直接实时分发&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;2、整理成1秒的数据进行分发&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;align=center;" parent="1" vertex="1">
+                    <mxGeometry x="-45" y="90" width="222.5" height="90" as="geometry"/>
+                </mxCell>
+                <mxCell id="PJICHrniSQ2v9oinf_Ty-5" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="PJICHrniSQ2v9oinf_Ty-4" target="PJICHrniSQ2v9oinf_Ty-7" edge="1">
+                    <mxGeometry width="50" height="50" relative="1" as="geometry">
+                        <mxPoint y="260" as="sourcePoint"/>
+                        <mxPoint x="-140" y="330" as="targetPoint"/>
+                        <Array as="points"/>
+                    </mxGeometry>
+                </mxCell>
+                <mxCell id="PJICHrniSQ2v9oinf_Ty-7" value="&lt;span style=&quot;color: rgb(78, 201, 176); background-color: rgb(31, 31, 31); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; white-space: pre;&quot;&gt;CreateDBThread&lt;/span&gt;&lt;div style=&quot;text-align: left;&quot;&gt;1、将1秒的数据计算成音量,给静音、过载、反相计算线程使用&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;align=center;" parent="1" vertex="1">
+                    <mxGeometry x="-40.620000000000005" y="225" width="213.75" height="115" as="geometry"/>
+                </mxCell>
+                <mxCell id="PJICHrniSQ2v9oinf_Ty-12" value="&lt;span style=&quot;color: rgb(78, 201, 176); background-color: rgb(31, 31, 31); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; white-space: pre;&quot;&gt;CreateRecordFileThread&lt;/span&gt;&lt;div style=&quot;text-align: left;&quot;&gt;1、录音线程,实时录制长音频&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;2、录制报警音频&lt;/div&gt;" style="whiteSpace=wrap;html=1;rounded=1;fillColor=#d5e8d4;strokeColor=#82b366;align=center;" parent="1" vertex="1">
+                    <mxGeometry x="240" y="225" width="192.5" height="110" as="geometry"/>
+                </mxCell>
+                <mxCell id="PJICHrniSQ2v9oinf_Ty-13" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="PJICHrniSQ2v9oinf_Ty-4" target="PJICHrniSQ2v9oinf_Ty-12" edge="1">
+                    <mxGeometry width="50" height="50" relative="1" as="geometry">
+                        <mxPoint x="50" y="460" as="sourcePoint"/>
+                        <mxPoint x="100" y="410" as="targetPoint"/>
+                    </mxGeometry>
+                </mxCell>
+                <mxCell id="PJICHrniSQ2v9oinf_Ty-16" value="&lt;span style=&quot;color: rgb(78, 201, 176); background-color: rgb(31, 31, 31); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; white-space: pre;&quot;&gt;CalculateDBThread&lt;/span&gt;&lt;div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;计算音量线程,计算出静音、过载、反相的报警信息&lt;/div&gt;&lt;/div&gt;" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+                    <mxGeometry x="-52.5" y="560" width="230" height="110" as="geometry"/>
+                </mxCell>
+                <mxCell id="PJICHrniSQ2v9oinf_Ty-21" value="&lt;span style=&quot;color: rgb(78, 201, 176); background-color: rgb(31, 31, 31); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; white-space: pre;&quot;&gt;NoiseDetectThread&lt;/span&gt;&lt;div style=&quot;line-height: 150%;&quot;&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;background-color: light-dark(#ffffff, var(--ge-dark-color, #121212));&quot;&gt;&lt;font&gt;&lt;span&gt;噪音检测线程&lt;/span&gt;&lt;span style=&quot;text-align: center;&quot;&gt;调用三方动态库进行检测&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+                    <mxGeometry x="-294.38" y="560" width="206.25" height="110" as="geometry"/>
+                </mxCell>
+                <mxCell id="j5mIEffdRgkVqhNrF_-w-1" value="&lt;div&gt;&lt;div style=&quot;color: rgb(204, 204, 204); background-color: rgb(31, 31, 31); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; line-height: 22px; white-space: pre;&quot;&gt;&lt;span style=&quot;color: rgb(78, 201, 176);&quot;&gt;CreateWAVThread&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;1、创建n秒的wav文件,给一致性比较线程使用&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;2、分离左右声道,给噪音检测线程使用&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;align=center;" parent="1" vertex="1">
+                    <mxGeometry x="-287.5" y="225" width="192.5" height="110" as="geometry"/>
+                </mxCell>
+                <mxCell id="j5mIEffdRgkVqhNrF_-w-2" value="" style="endArrow=classic;html=1;rounded=0;entryX=1;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="PJICHrniSQ2v9oinf_Ty-4" target="j5mIEffdRgkVqhNrF_-w-1" edge="1">
+                    <mxGeometry width="50" height="50" relative="1" as="geometry">
+                        <mxPoint x="-230" y="420" as="sourcePoint"/>
+                        <mxPoint x="-180" y="370" as="targetPoint"/>
+                    </mxGeometry>
+                </mxCell>
+                <mxCell id="13" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;fillColor=#d5e8d4;strokeColor=#82b366;" edge="1" parent="1">
+                    <mxGeometry width="50" height="50" relative="1" as="geometry">
+                        <mxPoint x="-320" y="380" as="sourcePoint"/>
+                        <mxPoint x="-320" y="380" as="targetPoint"/>
+                        <Array as="points">
+                            <mxPoint x="460" y="380"/>
+                            <mxPoint x="460" y="40"/>
+                            <mxPoint x="-320" y="40"/>
+                        </Array>
+                    </mxGeometry>
+                </mxCell>
+                <mxCell id="15" value="" style="shape=flexArrow;endArrow=classic;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="19">
+                    <mxGeometry width="50" height="50" relative="1" as="geometry">
+                        <mxPoint x="-460" y="325" as="sourcePoint"/>
+                        <mxPoint x="-320" y="210" as="targetPoint"/>
+                    </mxGeometry>
+                </mxCell>
+                <mxCell id="19" value="&lt;span style=&quot;color: rgb(78, 201, 176); background-color: rgb(31, 31, 31); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; white-space: pre;&quot;&gt;ThreadManager&lt;/span&gt;&lt;div style=&quot;&quot;&gt;&lt;font style=&quot;font-size: 16px;&quot;&gt;录音管理线程,这个线程管理录音线程的创建和销毁,对比项线程会通知这个管理线程需要哪些录音通道,然后创建对应的录音线程,计算线程通过这里获取所需要的录音功能线程,从中获取数据&lt;/font&gt;&lt;/div&gt;" style="shape=hexagon;perimeter=hexagonPerimeter2;whiteSpace=wrap;html=1;fixedSize=1;align=center;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
+                    <mxGeometry x="-714" y="140" width="300" height="150" as="geometry"/>
+                </mxCell>
+                <mxCell id="20" value="&lt;font style=&quot;font-size: 16px;&quot;&gt;录音线程只有声卡信息,&lt;/font&gt;&lt;span style=&quot;font-size: 16px; background-color: transparent;&quot;&gt;&lt;font&gt;和对比项无关&lt;/font&gt;&lt;/span&gt;&lt;div&gt;&lt;div&gt;&lt;font style=&quot;font-size: 16px;&quot;&gt;&lt;br&gt;&lt;/font&gt;&lt;/div&gt;&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
+                    <mxGeometry x="-294.38" y="50" width="300" height="50" as="geometry"/>
+                </mxCell>
+                <mxCell id="22" value="&lt;span style=&quot;color: rgb(78, 201, 176); background-color: rgb(31, 31, 31); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; white-space: pre;&quot;&gt;CompareItemThread&lt;/span&gt;&lt;div style=&quot;text-align: left;&quot;&gt;对比项线程&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;1、这个线程开启计算线程,&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;2、获取实时音量值,报警信息等,将其组合成数据通过MQTT发送出去&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;3、这里控制计算线程的检测时间段等功能&lt;/div&gt;" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
+                    <mxGeometry x="-620" y="560" width="225" height="130" as="geometry"/>
+                </mxCell>
+                <mxCell id="25" value="" style="endArrow=classic;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="j5mIEffdRgkVqhNrF_-w-1" target="PJICHrniSQ2v9oinf_Ty-21">
+                    <mxGeometry relative="1" as="geometry">
+                        <mxPoint x="-278.75" y="490" as="sourcePoint"/>
+                        <mxPoint x="-178.75" y="490" as="targetPoint"/>
+                    </mxGeometry>
+                </mxCell>
+                <mxCell id="28" value="获取分离的&lt;div&gt;左右声道数据&lt;/div&gt;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="25">
+                    <mxGeometry x="-0.0614" relative="1" as="geometry">
+                        <mxPoint y="-40" as="offset"/>
+                    </mxGeometry>
+                </mxCell>
+                <mxCell id="29" value="" style="endArrow=classic;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="PJICHrniSQ2v9oinf_Ty-7" target="PJICHrniSQ2v9oinf_Ty-16">
+                    <mxGeometry relative="1" as="geometry">
+                        <mxPoint x="-80" y="440" as="sourcePoint"/>
+                        <mxPoint x="20" y="440" as="targetPoint"/>
+                    </mxGeometry>
+                </mxCell>
+                <mxCell id="30" value="获取计算完成的&lt;div&gt;音量值数据&lt;/div&gt;" style="edgeLabel;resizable=0;html=1;;align=center;verticalAlign=middle;" connectable="0" vertex="1" parent="29">
+                    <mxGeometry relative="1" as="geometry">
+                        <mxPoint x="-2" y="10" as="offset"/>
+                    </mxGeometry>
+                </mxCell>
+                <mxCell id="31" value="" style="endArrow=classic;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="j5mIEffdRgkVqhNrF_-w-1" target="PJICHrniSQ2v9oinf_Ty-22">
+                    <mxGeometry relative="1" as="geometry">
+                        <mxPoint x="76" y="350" as="sourcePoint"/>
+                        <mxPoint x="73" y="570" as="targetPoint"/>
+                        <Array as="points">
+                            <mxPoint x="-140" y="510"/>
+                            <mxPoint x="180" y="510"/>
+                        </Array>
+                    </mxGeometry>
+                </mxCell>
+                <mxCell id="33" value="" style="endArrow=none;dashed=1;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="PJICHrniSQ2v9oinf_Ty-21" target="PJICHrniSQ2v9oinf_Ty-12">
+                    <mxGeometry width="50" height="50" relative="1" as="geometry">
+                        <mxPoint x="-50" y="500" as="sourcePoint"/>
+                        <mxPoint y="450" as="targetPoint"/>
+                        <Array as="points">
+                            <mxPoint x="-100" y="400"/>
+                            <mxPoint x="336" y="400"/>
+                        </Array>
+                    </mxGeometry>
+                </mxCell>
+                <mxCell id="35" value="" style="endArrow=none;dashed=1;html=1;exitX=0.75;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="PJICHrniSQ2v9oinf_Ty-16" target="PJICHrniSQ2v9oinf_Ty-12">
+                    <mxGeometry width="50" height="50" relative="1" as="geometry">
+                        <mxPoint x="140" y="510" as="sourcePoint"/>
+                        <mxPoint x="130" y="390" as="targetPoint"/>
+                        <Array as="points">
+                            <mxPoint x="120" y="400"/>
+                            <mxPoint x="336" y="400"/>
+                        </Array>
+                    </mxGeometry>
+                </mxCell>
+                <mxCell id="37" value="" style="endArrow=none;dashed=1;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="PJICHrniSQ2v9oinf_Ty-22" target="PJICHrniSQ2v9oinf_Ty-12">
+                    <mxGeometry width="50" height="50" relative="1" as="geometry">
+                        <mxPoint x="40" y="560" as="sourcePoint"/>
+                        <mxPoint x="340" y="340" as="targetPoint"/>
+                        <Array as="points">
+                            <mxPoint x="336" y="490"/>
+                        </Array>
+                    </mxGeometry>
+                </mxCell>
+                <mxCell id="38" value="开启或结束&lt;div&gt;报警录音&lt;/div&gt;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="1">
+                    <mxGeometry x="336.2475525499344" y="359.9999856666538" as="geometry"/>
+                </mxCell>
+                <mxCell id="39" value="获取wav文件地址" style="edgeLabel;resizable=0;html=1;;align=center;verticalAlign=middle;" connectable="0" vertex="1" parent="1">
+                    <mxGeometry x="170.0031400018288" y="509.9997468700874" as="geometry"/>
+                </mxCell>
+                <mxCell id="41" value="" style="endArrow=classic;startArrow=classic;html=1;exitX=0.75;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="22" target="PJICHrniSQ2v9oinf_Ty-21">
+                    <mxGeometry width="50" height="50" relative="1" as="geometry">
+                        <mxPoint x="-430" y="740" as="sourcePoint"/>
+                        <mxPoint x="-170" y="750" as="targetPoint"/>
+                        <Array as="points">
+                            <mxPoint x="-451" y="760"/>
+                            <mxPoint x="-191" y="760"/>
+                        </Array>
+                    </mxGeometry>
+                </mxCell>
+                <mxCell id="53" value="&lt;span style=&quot;color: rgb(18, 18, 18); font-size: 12px; background-color: rgb(211, 213, 214);&quot;&gt;获取噪音检测结果&lt;/span&gt;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="41">
+                    <mxGeometry x="0.8029" y="2" relative="1" as="geometry">
+                        <mxPoint x="13" y="-3" as="offset"/>
+                    </mxGeometry>
+                </mxCell>
+                <mxCell id="42" value="" style="endArrow=classic;startArrow=classic;html=1;exitX=0.75;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="22" target="PJICHrniSQ2v9oinf_Ty-16">
+                    <mxGeometry width="50" height="50" relative="1" as="geometry">
+                        <mxPoint x="-390" y="850" as="sourcePoint"/>
+                        <mxPoint x="-340" y="800" as="targetPoint"/>
+                        <Array as="points">
+                            <mxPoint x="-451" y="760"/>
+                            <mxPoint x="63" y="760"/>
+                        </Array>
+                    </mxGeometry>
+                </mxCell>
+                <mxCell id="57" value="&lt;span style=&quot;color: rgb(18, 18, 18); font-size: 12px; background-color: rgb(211, 213, 214);&quot;&gt;获取静音、过载、反相结果&lt;/span&gt;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="42">
+                    <mxGeometry x="0.893" y="-1" relative="1" as="geometry">
+                        <mxPoint as="offset"/>
+                    </mxGeometry>
+                </mxCell>
+                <mxCell id="43" value="" style="endArrow=classic;startArrow=classic;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.75;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="22" target="PJICHrniSQ2v9oinf_Ty-22">
+                    <mxGeometry width="50" height="50" relative="1" as="geometry">
+                        <mxPoint x="290" y="790" as="sourcePoint"/>
+                        <mxPoint x="340" y="740" as="targetPoint"/>
+                        <Array as="points">
+                            <mxPoint x="-451" y="760"/>
+                            <mxPoint x="370" y="760"/>
+                        </Array>
+                    </mxGeometry>
+                </mxCell>
+                <mxCell id="56" value="&lt;span style=&quot;color: rgb(18, 18, 18); font-size: 12px; background-color: rgb(211, 213, 214);&quot;&gt;获取一致性检测结果&lt;/span&gt;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="43">
+                    <mxGeometry x="0.9067" relative="1" as="geometry">
+                        <mxPoint as="offset"/>
+                    </mxGeometry>
+                </mxCell>
+                <mxCell id="50" value="" style="endArrow=classic;html=1;entryX=1;entryY=0;entryDx=0;entryDy=0;exitX=0;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="PJICHrniSQ2v9oinf_Ty-7" target="22">
+                    <mxGeometry width="50" height="50" relative="1" as="geometry">
+                        <mxPoint x="-510" y="510" as="sourcePoint"/>
+                        <mxPoint x="-460" y="460" as="targetPoint"/>
+                    </mxGeometry>
+                </mxCell>
+                <mxCell id="51" value="获取实时计算的音量数据" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="50">
+                    <mxGeometry x="0.3216" y="-2" relative="1" as="geometry">
+                        <mxPoint x="-63" y="40" as="offset"/>
+                    </mxGeometry>
+                </mxCell>
+                <mxCell id="59" value="&lt;div&gt;&lt;div style=&quot;color: rgb(204, 204, 204); background-color: rgb(31, 31, 31); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; line-height: 22px; white-space: pre;&quot;&gt;&lt;span style=&quot;color: rgb(78, 201, 176);&quot;&gt;ThreadCompareItemManager&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;background-color: transparent;&quot;&gt;对比项管理线程,定时获取数据库中的对比项信息,管理对比项&lt;/span&gt;&lt;/div&gt;" style="shape=hexagon;perimeter=hexagonPerimeter2;whiteSpace=wrap;html=1;fixedSize=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
+                    <mxGeometry x="-670" y="820" width="267.5" height="120" as="geometry"/>
+                </mxCell>
+                <mxCell id="62" value="MQTT" style="ellipse;shape=cloud;whiteSpace=wrap;html=1;fontSize=24;fillColor=#dae8fc;strokeColor=#6c8ebf;gradientColor=#7ea6e0;" vertex="1" parent="1">
+                    <mxGeometry x="-640" y="1030" width="120" height="80" as="geometry"/>
+                </mxCell>
+                <mxCell id="63" value="" style="endArrow=classic;html=1;exitX=0;exitY=0.75;exitDx=0;exitDy=0;entryX=0.16;entryY=0.55;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="22" target="62">
+                    <mxGeometry relative="1" as="geometry">
+                        <mxPoint x="-290" y="590" as="sourcePoint"/>
+                        <mxPoint x="-770" y="1030" as="targetPoint"/>
+                        <Array as="points">
+                            <mxPoint x="-750" y="660"/>
+                            <mxPoint x="-750" y="880"/>
+                            <mxPoint x="-750" y="1074"/>
+                        </Array>
+                    </mxGeometry>
+                </mxCell>
+                <mxCell id="99" value="&lt;span&gt;&lt;font&gt;对比项信息,设置信息保留&lt;/font&gt;&lt;/span&gt;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="63">
+                    <mxGeometry x="-0.7407" y="-1" relative="1" as="geometry">
+                        <mxPoint x="-13" y="52" as="offset"/>
+                    </mxGeometry>
+                </mxCell>
+                <mxCell id="65" value="" style="endArrow=classic;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=0.16;entryY=0.55;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="59" target="62">
+                    <mxGeometry relative="1" as="geometry">
+                        <mxPoint x="-570" y="1010" as="sourcePoint"/>
+                        <mxPoint x="-470" y="1010" as="targetPoint"/>
+                        <Array as="points">
+                            <mxPoint x="-750" y="880"/>
+                            <mxPoint x="-750" y="1074"/>
+                        </Array>
+                    </mxGeometry>
+                </mxCell>
+                <mxCell id="98" value="&lt;span&gt;&lt;font&gt;音量包&lt;/font&gt;&lt;/span&gt;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="65">
+                    <mxGeometry x="-0.8299" y="-1" relative="1" as="geometry">
+                        <mxPoint as="offset"/>
+                    </mxGeometry>
+                </mxCell>
+                <mxCell id="67" value="&lt;div style=&quot;color: rgb(204, 204, 204); background-color: rgb(31, 31, 31); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; line-height: 22px; white-space: pre;&quot;&gt;&lt;span style=&quot;color: rgb(78, 201, 176);&quot;&gt;RTPOneRoadThread&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;RTP发送数据线程,这个线程也是一个录音线程,RTP服务会设置客户端信息到这里,有客户端信息就接收分派线程的数据然后通过UDP发送给客户端&lt;/div&gt;" style="whiteSpace=wrap;html=1;rounded=1;fillColor=#d5e8d4;strokeColor=#82b366;align=center;" vertex="1" parent="1">
+                    <mxGeometry x="230" y="80" width="192.5" height="110" as="geometry"/>
+                </mxCell>
+                <mxCell id="68" value="" style="endArrow=classic;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="PJICHrniSQ2v9oinf_Ty-4" target="67">
+                    <mxGeometry width="50" height="50" relative="1" as="geometry">
+                        <mxPoint x="380" y="190" as="sourcePoint"/>
+                        <mxPoint x="430" y="140" as="targetPoint"/>
+                    </mxGeometry>
+                </mxCell>
+                <mxCell id="73" value="" style="group" vertex="1" connectable="0" parent="1">
+                    <mxGeometry x="220" y="555" width="300" height="115" as="geometry"/>
+                </mxCell>
+                <mxCell id="PJICHrniSQ2v9oinf_Ty-22" value="&lt;div style=&quot;font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; line-height: 22px; white-space: pre;&quot;&gt;&lt;span style=&quot;font-family: Helvetica; font-size: 12px; text-align: left; white-space: normal;&quot;&gt;&lt;font&gt;一致性检测线程,调用第三方动态库检测主通道和次通道的一致性&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=light-dark(#000000,#000000);" parent="73" vertex="1">
+                    <mxGeometry width="300" height="115" as="geometry"/>
+                </mxCell>
+                <mxCell id="70" value="&lt;span style=&quot;font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; white-space-collapse: preserve; background-color: light-dark(rgb(255, 255, 255), rgb(210, 210, 210));&quot;&gt;&lt;font style=&quot;color: light-dark(rgb(6, 112, 90), rgb(6, 112, 90));&quot;&gt;ConsistencyCompareThread&lt;/font&gt;&lt;/span&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="73">
+                    <mxGeometry x="35" width="230" height="30" as="geometry"/>
+                </mxCell>
+                <mxCell id="74" value="" style="group;" vertex="1" connectable="0" parent="1">
+                    <mxGeometry x="530" y="80" width="260" height="140" as="geometry"/>
+                </mxCell>
+                <mxCell id="75" value="" style="group;fillColor=#fff2cc;strokeColor=#d6b656;" vertex="1" connectable="0" parent="74">
+                    <mxGeometry x="0.0015151515151519135" width="260" height="140" as="geometry"/>
+                </mxCell>
+                <mxCell id="71" value="1、RTP服务,监听客户端的连接,将客户端信息发送给RTPOneRoadThread线程&lt;div&gt;2、线程需要定时接收客户端心跳包,超时就踢客户端下线&lt;/div&gt;" style="shape=hexagon;perimeter=hexagonPerimeter2;whiteSpace=wrap;html=1;fixedSize=1;align=center;fillColor=#fff2cc;strokeColor=#d6b656;" vertex="1" parent="75">
+                    <mxGeometry width="260" height="140" as="geometry"/>
+                </mxCell>
+                <mxCell id="72" value="&lt;div style=&quot;color: rgb(204, 204, 204); background-color: rgb(31, 31, 31); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; line-height: 22px; white-space-collapse: preserve;&quot;&gt;&lt;span style=&quot;color: #4ec9b0;&quot;&gt;RTPServer&lt;/span&gt;&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="75">
+                    <mxGeometry x="80.75757575757576" width="100" height="40" as="geometry"/>
+                </mxCell>
+                <mxCell id="76" value="" style="endArrow=classic;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="72" target="67">
+                    <mxGeometry relative="1" as="geometry">
+                        <mxPoint x="610" y="690" as="sourcePoint"/>
+                        <mxPoint x="710" y="690" as="targetPoint"/>
+                    </mxGeometry>
+                </mxCell>
+                <mxCell id="78" value="&lt;font&gt;客户端信息&lt;/font&gt;&lt;div&gt;&lt;font&gt;或心跳包&lt;/font&gt;&lt;/div&gt;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="76">
+                    <mxGeometry x="-0.0223" y="2" relative="1" as="geometry">
+                        <mxPoint x="-30" y="-3" as="offset"/>
+                    </mxGeometry>
+                </mxCell>
+                <mxCell id="81" value="" style="endArrow=none;dashed=1;html=1;entryX=0.75;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="79" target="PJICHrniSQ2v9oinf_Ty-21">
+                    <mxGeometry width="50" height="50" relative="1" as="geometry">
+                        <mxPoint x="-130" y="810" as="sourcePoint"/>
+                        <mxPoint x="-220" y="810" as="targetPoint"/>
+                        <Array as="points">
+                            <mxPoint x="20" y="840"/>
+                            <mxPoint x="-140" y="840"/>
+                        </Array>
+                    </mxGeometry>
+                </mxCell>
+                <mxCell id="86" value="写入报警数据" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="81">
+                    <mxGeometry x="-0.1269" y="-2" relative="1" as="geometry">
+                        <mxPoint x="128" y="12" as="offset"/>
+                    </mxGeometry>
+                </mxCell>
+                <mxCell id="83" value="" style="group" vertex="1" connectable="0" parent="1">
+                    <mxGeometry x="-170" y="870" width="380" height="150" as="geometry"/>
+                </mxCell>
+                <mxCell id="79" value="&lt;div style=&quot;font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; line-height: 22px; white-space: pre;&quot;&gt;&lt;div style=&quot;scrollbar-color: rgb(75, 75, 75) rgb(27, 29, 30); font-family: Helvetica; white-space: normal;&quot;&gt;&lt;div style=&quot;text-align: left; scrollbar-color: rgb(75, 75, 75) rgb(27, 29, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; line-height: 22px; white-space: pre;&quot;&gt;&lt;span style=&quot;font-family: Helvetica; white-space: normal;&quot;&gt;&lt;font&gt;1、写数据库线程,这个线程接收各个计算线程发送过来的报警信息,将其写入数据库,单独有这个线程是为了防止网络差导致计算线程阻塞&lt;/font&gt;&lt;/span&gt;&lt;font&gt;&lt;span style=&quot;color: rgb(192, 192, 192); font-family: Helvetica; white-space: normal; background-color: transparent;&quot;&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;scrollbar-color: rgb(75, 75, 75) rgb(27, 29, 30); font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; line-height: 22px; white-space: pre;&quot;&gt;&lt;span style=&quot;font-family: Helvetica; white-space: normal; background-color: transparent;&quot;&gt;&lt;font&gt;2、这个线程也负责定期删除录音文件和报警音频文件,文件路径是从数据库获取到的,在这里获取文件路径比较方便&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;" style="shape=hexagon;perimeter=hexagonPerimeter2;whiteSpace=wrap;html=1;fixedSize=1;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;fillColor=#ffcd28;gradientColor=#ffa500;strokeColor=#d79b00;align=center;" vertex="1" parent="83">
+                    <mxGeometry width="380" height="150" as="geometry"/>
+                </mxCell>
+                <mxCell id="80" value="&lt;span style=&quot;font-family: Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 16px; white-space-collapse: preserve; background-color: light-dark(rgb(210, 210, 210), rgb(210, 210, 210));&quot;&gt;&lt;font style=&quot;color: light-dark(rgb(6, 112, 90), rgb(6, 112, 90));&quot;&gt;ThreadWriteDBManager&lt;/font&gt;&lt;/span&gt;" style="text;html=1;align=center;verticalAlign=middle;resizable=1;points=[];autosize=1;strokeColor=none;fillColor=none;movable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" vertex="1" parent="83">
+                    <mxGeometry x="75" y="8" width="200" height="30" as="geometry"/>
+                </mxCell>
+                <mxCell id="84" value="" style="endArrow=none;dashed=1;html=1;entryX=0.75;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="79" target="PJICHrniSQ2v9oinf_Ty-16">
+                    <mxGeometry width="50" height="50" relative="1" as="geometry">
+                        <mxPoint x="40" y="840" as="sourcePoint"/>
+                        <mxPoint x="90" y="790" as="targetPoint"/>
+                        <Array as="points">
+                            <mxPoint x="20" y="840"/>
+                            <mxPoint x="120" y="840"/>
+                        </Array>
+                    </mxGeometry>
+                </mxCell>
+                <mxCell id="87" value="" style="endArrow=none;dashed=1;html=1;entryX=0.75;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="79" target="PJICHrniSQ2v9oinf_Ty-22">
+                    <mxGeometry width="50" height="50" relative="1" as="geometry">
+                        <mxPoint x="280" y="850" as="sourcePoint"/>
+                        <mxPoint x="330" y="800" as="targetPoint"/>
+                        <Array as="points">
+                            <mxPoint x="20" y="840"/>
+                            <mxPoint x="445" y="840"/>
+                        </Array>
+                    </mxGeometry>
+                </mxCell>
+                <mxCell id="93" value="&lt;font style=&quot;font-size: 14px;&quot;&gt;1、绿色是录音线程,获取音频后稍加处理&lt;/font&gt;&lt;div style=&quot;&quot;&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;2、蓝色是计算线程,从录音线程获取处理好的数据进行计算&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;&quot;&gt;&lt;font style=&quot;font-size: 14px;&quot;&gt;3、这两种线程都有对应的管理线程,由他们控制创建和销毁&lt;/font&gt;&lt;/div&gt;" style="text;html=1;align=left;verticalAlign=middle;resizable=0;points=[];autosize=1;strokeColor=none;fillColor=none;" vertex="1" parent="1">
+                    <mxGeometry x="360" y="990" width="400" height="60" as="geometry"/>
+                </mxCell>
+                <mxCell id="94" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;fillColor=#dae8fc;strokeColor=#6c8ebf;" edge="1" parent="1">
+                    <mxGeometry width="50" height="50" relative="1" as="geometry">
+                        <mxPoint x="-690" y="730" as="sourcePoint"/>
+                        <mxPoint x="-690" y="730" as="targetPoint"/>
+                        <Array as="points">
+                            <mxPoint x="-690" y="500"/>
+                            <mxPoint x="540" y="490"/>
+                            <mxPoint x="540" y="730"/>
+                        </Array>
+                    </mxGeometry>
+                </mxCell>
+                <mxCell id="95" value="" style="endArrow=classic;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="PJICHrniSQ2v9oinf_Ty-12" target="79">
+                    <mxGeometry width="50" height="50" relative="1" as="geometry">
+                        <mxPoint x="530" y="294.9999999999998" as="sourcePoint"/>
+                        <mxPoint x="450" y="970" as="targetPoint"/>
+                        <Array as="points">
+                            <mxPoint x="620" y="280"/>
+                            <mxPoint x="620" y="945"/>
+                        </Array>
+                    </mxGeometry>
+                </mxCell>
+                <mxCell id="96" value="写入录音文件信息" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="95">
+                    <mxGeometry x="-0.6136" relative="1" as="geometry">
+                        <mxPoint as="offset"/>
+                    </mxGeometry>
+                </mxCell>
+                <mxCell id="97" value="" style="shape=flexArrow;endArrow=classic;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="59">
+                    <mxGeometry width="50" height="50" relative="1" as="geometry">
+                        <mxPoint x="-560" y="790" as="sourcePoint"/>
+                        <mxPoint x="-536" y="730" as="targetPoint"/>
+                    </mxGeometry>
+                </mxCell>
+                <mxCell id="100" value="" style="endArrow=classic;html=1;entryX=0.25;entryY=1;entryDx=0;entryDy=0;exitX=0.375;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="59" target="22">
+                    <mxGeometry width="50" height="50" relative="1" as="geometry">
+                        <mxPoint x="-640" y="790" as="sourcePoint"/>
+                        <mxPoint x="-590" y="740" as="targetPoint"/>
+                    </mxGeometry>
+                </mxCell>
+            </root>
+        </mxGraphModel>
+    </diagram>
+</mxfile>

+ 0 - 144
流程图/ACA服务流程.drawio

@@ -1,144 +0,0 @@
-<mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/27.0.9 Chrome/134.0.6998.205 Electron/35.4.0 Safari/537.36" version="27.0.9">
-  <diagram name="Page-1" id="_q9Hk0N0-nweOAnfAhH3">
-    <mxGraphModel dx="2253" dy="809" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
-      <root>
-        <mxCell id="0" />
-        <mxCell id="1" parent="0" />
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-1" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="PJICHrniSQ2v9oinf_Ty-2" target="PJICHrniSQ2v9oinf_Ty-4" edge="1">
-          <mxGeometry relative="1" as="geometry" />
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-2" value="录音线程,获取到原始数据SrcData" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
-          <mxGeometry x="-215" y="230" width="120" height="60" as="geometry" />
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-4" value="数据分发线程&lt;br&gt;将原始的录音数据进行分发" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
-          <mxGeometry x="-5" y="230" width="130" height="60" as="geometry" />
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-5" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="PJICHrniSQ2v9oinf_Ty-4" target="PJICHrniSQ2v9oinf_Ty-7" edge="1">
-          <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint y="360" as="sourcePoint" />
-            <mxPoint x="-140" y="430" as="targetPoint" />
-            <Array as="points" />
-          </mxGeometry>
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-7" value="生成WAV小文件线程" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
-          <mxGeometry y="330" width="120" height="60" as="geometry" />
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-10" value="WAV小文件&lt;br&gt;" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
-          <mxGeometry x="80" y="440" width="120" height="80" as="geometry" />
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-11" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="PJICHrniSQ2v9oinf_Ty-12" target="PJICHrniSQ2v9oinf_Ty-15" edge="1">
-          <mxGeometry relative="1" as="geometry" />
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-12" value="计算出音量值、反相相关的数据线程" style="whiteSpace=wrap;html=1;rounded=1;" parent="1" vertex="1">
-          <mxGeometry x="217.5" y="330" width="120" height="60" as="geometry" />
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-13" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.954;exitY=1.007;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitPerimeter=0;" parent="1" source="PJICHrniSQ2v9oinf_Ty-4" target="PJICHrniSQ2v9oinf_Ty-12" edge="1">
-          <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="50" y="560" as="sourcePoint" />
-            <mxPoint x="100" y="510" as="targetPoint" />
-          </mxGeometry>
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-15" value="环形队列,存储计算出来的音量值" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
-          <mxGeometry x="217.5" y="440" width="120" height="80" as="geometry" />
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-16" value="相似度比对线程&lt;br&gt;调用第三方动态库进行比对;&lt;br&gt;获取WAV小文件,进行处理;" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" parent="1" vertex="1">
-          <mxGeometry x="-5" y="660" width="130" height="100" as="geometry" />
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-17" value="环形队列,存储wav小文件路径" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
-          <mxGeometry x="-60" y="440" width="120" height="80" as="geometry" />
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-18" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="PJICHrniSQ2v9oinf_Ty-7" target="PJICHrniSQ2v9oinf_Ty-17" edge="1">
-          <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="-340" y="460" as="sourcePoint" />
-            <mxPoint x="-290" y="410" as="targetPoint" />
-          </mxGeometry>
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-21" value="噪音检测线程&lt;br&gt;调用三方动态库进行检测&lt;br&gt;" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" parent="1" vertex="1">
-          <mxGeometry x="-220" y="660" width="125" height="90" as="geometry" />
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-22" value="静音、过载、反相检测线程,比对出一致性" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" parent="1" vertex="1">
-          <mxGeometry x="215" y="665" width="125" height="90" as="geometry" />
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-23" value="TCP服务,监听客户端消息,并发送消息" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
-          <mxGeometry x="-310" y="915" width="120" height="60" as="geometry" />
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-24" value="数据发送函数&lt;br&gt;,获取信息发送给客户端" style="rhombus;whiteSpace=wrap;html=1;" parent="1" vertex="1">
-          <mxGeometry x="-45" y="880" width="210" height="130" as="geometry" />
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-26" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="PJICHrniSQ2v9oinf_Ty-15" target="PJICHrniSQ2v9oinf_Ty-22" edge="1">
-          <mxGeometry relative="1" as="geometry">
-            <mxPoint x="70" y="610" as="sourcePoint" />
-            <mxPoint x="70" y="675" as="targetPoint" />
-          </mxGeometry>
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-27" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="PJICHrniSQ2v9oinf_Ty-16" target="PJICHrniSQ2v9oinf_Ty-22" edge="1">
-          <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="50" y="700" as="sourcePoint" />
-            <mxPoint x="-10" y="640" as="targetPoint" />
-            <Array as="points" />
-          </mxGeometry>
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-28" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="PJICHrniSQ2v9oinf_Ty-21" target="PJICHrniSQ2v9oinf_Ty-24" edge="1">
-          <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="-160" y="770" as="sourcePoint" />
-            <mxPoint x="20" y="975" as="targetPoint" />
-          </mxGeometry>
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-29" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="PJICHrniSQ2v9oinf_Ty-22" target="PJICHrniSQ2v9oinf_Ty-24" edge="1">
-          <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="70" y="765" as="sourcePoint" />
-            <mxPoint x="100" y="910" as="targetPoint" />
-          </mxGeometry>
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-30" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="PJICHrniSQ2v9oinf_Ty-23" target="PJICHrniSQ2v9oinf_Ty-24" edge="1">
-          <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="50" y="690" as="sourcePoint" />
-            <mxPoint x="100" y="640" as="targetPoint" />
-          </mxGeometry>
-        </mxCell>
-        <mxCell id="PJICHrniSQ2v9oinf_Ty-32" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.75;exitY=1;exitDx=0;exitDy=0;" parent="1" source="PJICHrniSQ2v9oinf_Ty-7" target="PJICHrniSQ2v9oinf_Ty-10" edge="1">
-          <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="-170" y="670" as="sourcePoint" />
-            <mxPoint x="-240" y="720" as="targetPoint" />
-          </mxGeometry>
-        </mxCell>
-        <mxCell id="gz7Ag7FggBXV80HZ7l5Y-2" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="PJICHrniSQ2v9oinf_Ty-17" target="PJICHrniSQ2v9oinf_Ty-16" edge="1">
-          <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="-170" y="570" as="sourcePoint" />
-            <mxPoint x="65" y="560" as="targetPoint" />
-          </mxGeometry>
-        </mxCell>
-        <mxCell id="gz7Ag7FggBXV80HZ7l5Y-3" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="PJICHrniSQ2v9oinf_Ty-10" target="PJICHrniSQ2v9oinf_Ty-16" edge="1">
-          <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="-410" y="560" as="sourcePoint" />
-            <mxPoint x="65" y="560" as="targetPoint" />
-          </mxGeometry>
-        </mxCell>
-        <mxCell id="j5mIEffdRgkVqhNrF_-w-1" value="将数据分开,分成左右声道(应该可以集成到其他线程中)" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
-          <mxGeometry x="-217.5" y="330" width="120" height="60" as="geometry" />
-        </mxCell>
-        <mxCell id="j5mIEffdRgkVqhNrF_-w-2" value="" style="endArrow=classic;html=1;rounded=0;entryX=1;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="PJICHrniSQ2v9oinf_Ty-4" target="j5mIEffdRgkVqhNrF_-w-1">
-          <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="-230" y="520" as="sourcePoint" />
-            <mxPoint x="-180" y="470" as="targetPoint" />
-          </mxGeometry>
-        </mxCell>
-        <mxCell id="j5mIEffdRgkVqhNrF_-w-3" value="环形队列,存储分开的左右声道原始数据" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
-          <mxGeometry x="-217.5" y="440" width="120" height="80" as="geometry" />
-        </mxCell>
-        <mxCell id="j5mIEffdRgkVqhNrF_-w-4" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="j5mIEffdRgkVqhNrF_-w-1" target="j5mIEffdRgkVqhNrF_-w-3">
-          <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="-370" y="520" as="sourcePoint" />
-            <mxPoint x="-400" y="570" as="targetPoint" />
-          </mxGeometry>
-        </mxCell>
-        <mxCell id="j5mIEffdRgkVqhNrF_-w-5" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="j5mIEffdRgkVqhNrF_-w-3" target="PJICHrniSQ2v9oinf_Ty-21">
-          <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="-260" y="590" as="sourcePoint" />
-            <mxPoint x="-290" y="640" as="targetPoint" />
-          </mxGeometry>
-        </mxCell>
-      </root>
-    </mxGraphModel>
-  </diagram>
-</mxfile>