← 返回文档
API 概述
系统架构
soundSDK 由三个独立层组成,每层提供标准 C 接口:
┌─────────────────────────────────────────────┐
│ 应用程序代码 │
│ cry_detect_init / start / stop / deinit │
├─────────────────────────────────────────────┤
│ 处理层 │
│ cry_processor: Mel → 推理 → 回调 │
├──────────────────┬──────────────────────────┤
│ 音频采集 │ 推理引擎 │
│ (audio_capture) │ (inference_engine) │
├────────┬─────────┴──────┬───────────────────┤
│ MPP │ IMP │ file │ pure_c │ svp_acl │
│(海思) │(君正) │ (PC) │ (FP32) │ .om(NPU) │
└────────┴────────┴────────┴────────┴──────────┘1. 音频采集层 (`audio_capture_interface.h`)
通过 vtable 模式抽象音频输入,支持三种后端:
后端
类型字符串
平台
SDK
MPP
`"mpp"`
海思 Hi3519DV500
`ss_mpi_ai_*`
IMP
`"imp"`
君正 T23/T33
`IMP_AI_*`
File
`"file"`
PC / 任意 Linux
标准文件 I/O
每个后端实现 init()、start()、stop()、destroy()、is_running()。采集线程将 PCM 数据写入无锁环形缓冲区,永不阻塞——缓冲区满时打印警告并继续采集。
2. 处理层 (`cry_processor.h`)
专用处理线程按 1 秒循环运行:
1. 等待环形缓冲 ≥5 个就绪 slot(约 5 秒音频)
2. 计算 Mel 频谱图(225×225 float32)
3. 静音检测:RMS < 阈值 → 跳过推理
4. 执行 CNN 推理 → 概率
5. 触发用户回调
6. 前进 1 个 slot(1 秒步长,4 秒重叠)
3. 推理引擎层 (`inference_engine.h`)
通过工厂模式支持可插拔后端:
引擎
类型字符串
精度
平台
纯 C
`"pure_c"`
float32
所有平台
INT8 量化
`"int8"`
int8
ARM Linux
SVP ACL
`"svp_acl"`
INT8(NPU)
海思 Hi3519DV500
Magik
`"magik"`
INT8(NPU)
君正 T33
环形缓冲区 (`audio_buffer.h`)
线程安全、无锁环形缓冲区,10 个 slot,每个约 1 秒 PCM(15975 采样 × int16 ≈ 32KB),总计 ~330KB。
• 生产者(采集线程):获取空闲 slot → 写入 PCM → 提交
• 消费者(处理线程):等待 ≥5 就绪 → 拷贝 → 前进 1 个 slot
• 统计:跟踪 overrun / underrun 计数,用于诊断
告警策略 (`alarm_strategy.h`)
将帧级概率转换为告警事件。默认 "asymmetric_envelope" 策略采用快起慢放逻辑,避免告警抖动。可配置参数:attack/release 系数、高/低阈值、最小事件时长。
编译期配置 (`config.h`)
音频参数(采样率、帧大小、步长)和平台默认值的编译期常量。构建脚本通过预处理器宏(AUDIO_CAPTURE_MPP、ENGINE_SVP_ACL 等)选择对应后端。