# AECAudioStream ## 概述 AECAudioStream 是一个用于捕获系统音频输入并应用声学回声消除(AEC)过滤器的 Swift 库。它提供了一个便捷的接口,允许用户捕获音频数据、处理声学回声消除,并支持语音活动检测(VAD)功能。 ## 功能特点 - 音频捕获:从系统音频输入设备捕获音频数据 - 声学回声消除(AEC):通过内置过滤器消除回声 - 语音活动检测(VAD):检测是否有语音活动 - 灵活的音频处理:支持自定义音频处理回调 - 线程安全的音频数据队列管理 ## 系统要求 - macOS 操作系统 - Swift 5.0+ ## 编译方法 使用以下命令编译生成动态库: ``` bash swiftc -emit-library -o libAudioCapture.dylib AECAudioStream.swift ``` ## 使用方法 ### 初始化 ``` swift // 创建一个采样率为16000的音频流实例 let audioStream = AECAudioStream(sampleRate: 16000) ``` ### 启动音频捕获 ``` swift // 启动音频流并启用回声消除 let audioBufferStream = try audioStream.startAudioStream(enableAEC: true) // 异步处理捕获的音频数据 Task { for try await pcmBuffer in audioBufferStream { // 处理音频数据 processAudioData(pcmBuffer) } } ``` ### 使用回调方式 ``` swift // 启动音频流并通过回调处理 try audioStream.startAudioStream(enableAEC: true) { buffer in // 通过回调处理音频数据 } ``` ### 启用语音活动检测(VAD) ``` swift // 启用VAD功能 try audioStream.toggleVoiceActivityDetection(enable: true) // 设置VAD状态变化的回调 audioStream.voiceActivityHandler = { isVoiceDetected in if isVoiceDetected { print("检测到语音活动") } else { print("未检测到语音活动") } } ``` ### 停止音频捕获 ``` swift // 停止音频单元 try audioStream.stopAudioUnit() ``` ## C 接口 库提供了以下 C 接口函数,方便从其他语言调用: - `startRecord()`: 开始录音并将音频数据存入队列 - `stopRecord()`: 停止录音 - `getAudioData()`: 获取音频数据 - `freeAudioData()`: 释放音频数据缓冲区 - `isVoiceActive()`: 获取当前语音活动检测状态 ### C 接口使用示例 ``` c // 开始录音 startRecord(); // 获取音频数据 int size; uint8_t* audioData = getAudioData(&size); if (audioData != NULL && size > 0) { // 处理音频数据 processAudioData(audioData, size); // 处理完成后释放内存 freeAudioData(audioData); } // 停止录音 stopRecord(); ``` ## 类和组件 ### AECAudioStream 主要类,提供音频捕获和处理功能。 ### AudioDataQueue 线程安全的音频数据队列,用于存储捕获的音频数据。 ### AECAudioStreamError 定义可能抛出的错误类型。 ## 注意事项 - 确保在使用完毕后调用 `stopAudioUnit()` 以释放资源 - 使用 VAD 功能时需要适当的权限 - 使用 C 接口获取音频数据后,必须调用 `freeAudioData()` 释放内存 ## 许可证 [请在此处添加许可证信息]