ACA服务程序设计说明.md 4.0 KB

ACA服务设计说明

## ACA服务功能

  • 计算静音过载反相噪音一致性状态
  • 实时发送音量包数据,给客户端绘制波形
  • 提供RTP监听服务,客户端连接后可以实时听正在录音的内容
  • 报警功能,报警时录制报警音频,写入报警信息到数据库中

程序启动

  1. 先启动服务,获取系统声卡信息
  2. 打开设置动态库,设置创建对比项,选择声卡通道
  3. 服务读取到对比项信息,开始创建对比项线程,开始运行

ACA服务数据流转

  • 服务整体分为两个部分,数据采集数据计算部分,数据采集是录音线程类,录音并做初步处理,数据计算是计算线程类,创建对比项线程后,由对比项线程创建和管理各个计算线程类。
  • 对比项线程汇集所有的计算结果后,取出实时音量,拼接成音量包发送到MQTT中
  • 对比项管理线程发送开启的对比项信息到MQTT中,设置消息保留
  • RTP服务监听客户端消息,发送实时音频数据

录音线程

  • 录音线程和声卡录音通道一一对应,一个录音通道会开启6个线程,对原始数据进行处理
  • 录音间隔33ms是为了对应计算音量值所需的数据大小,1秒大概33个音量值

    线程类 功能
    RecordThread 录制原始音频的线程,33ms获取一次
    AssignSrcDataThread 分派数据线程,这个线程可以合并到录音线程中,分派数据只需要几百us
    CreateWAVThread 创建一致性对比需要的wav文件,分离左右声道数据给噪音检测线程
    CreateRecordFileThread 录制长音频文件,录制报警文件
    CreateDBThread 计算1秒的音量包,给计算静音、过载、反相的线程使用,计算实时音量包给对比项线程使用,发送实时音量包
    RTPOneRoadThread 客户端登陆后,实时发送原始音频数据给客户端

计算线程

  • 计算线程和对比项相关联,一个对比项会创建若干计算线程,对比项线程销毁时,也会将计算线程销毁
  • 一个对比项对应的三种计算类并不仅仅是三个线程,这些计算线程和对比项通道相关
  • 计算线程在计算出报警后,将开启CreateRecordFileThread的报警录音,报警结束后通知CreateRecordFileThread线程结束录音,报警结束后通过ThreadWriteDBManager线程将报警信息写入数据库

    线程类 功能
    CompareItemThread 对比项线程类,从这个类中集合静音过载反相噪音一致性检测的结果和音量数据,组合成音量包发送到MQTT
    CalculateDBThread 计算静音过载反相的报警
    ConsistencyCompareThread 计算一致性数据
    NoiseDetectThread 计算噪音报警

RTP服务

  • RTP服务提供实时音频数据发送功能,客户端发送登录请求,RTP服务将客户端信息发送给RTPOneRoadThreadRTPOneRoadThread接收到客户端信息后开始接收分派数据线程发送的数据,然后通过UDP将音频数据发送给客户端

### 其他线程功能

  • 线程功能类 说明
    ThreadManager 录音线程管理类
    ThreadCompareItemManager 对比项管理线程类
    ThreadWriteDBManager 写数据库线程类
  • 录音线程管理线程类ThreadManager,录音线程的创建和销毁由这个线程管理,对比项线程通过这个线程开始录音通道

  • 比项管理线程类ThreadCompareItemManager,定时获取数据库中对比项信息,管理对比项的开启和销毁,同时向MQTT中发送对比项信息

  • 写数据库线程类ThreadWriteDBManager,所有的报警信息,录音文件信息都由这个线程写入数据库,单独搞这一个线程为了防止网络状态差,会阻塞计算线程。这个线程还有一个功能是根据设置的时间定时清理数据库中的日志和录音文件,报警文件