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