AECAudioStream
概述
AECAudioStream 是一个用于捕获系统音频输入并应用声学回声消除(AEC)过滤器的 Swift 库。它提供了一个便捷的接口,允许用户捕获音频数据、处理声学回声消除,并支持语音活动检测(VAD)功能。
功能特点
- 音频捕获:从系统音频输入设备捕获音频数据
- 声学回声消除(AEC):通过内置过滤器消除回声
- 语音活动检测(VAD):检测是否有语音活动
- 灵活的音频处理:支持自定义音频处理回调
- 线程安全的音频数据队列管理
系统要求
- macOS 操作系统
- Swift 5.0+
编译方法
使用以下命令编译生成动态库:
swiftc -emit-library -o libAudioCapture.dylib AECAudioStream.swift
使用方法
初始化
// 创建一个采样率为16000的音频流实例
let audioStream = AECAudioStream(sampleRate: 16000)
启动音频捕获
// 启动音频流并启用回声消除
let audioBufferStream = try audioStream.startAudioStream(enableAEC: true)
// 异步处理捕获的音频数据
Task {
for try await pcmBuffer in audioBufferStream {
// 处理音频数据
processAudioData(pcmBuffer)
}
}
使用回调方式
// 启动音频流并通过回调处理
try audioStream.startAudioStream(enableAEC: true) { buffer in
// 通过回调处理音频数据
}
启用语音活动检测(VAD)
// 启用VAD功能
try audioStream.toggleVoiceActivityDetection(enable: true)
// 设置VAD状态变化的回调
audioStream.voiceActivityHandler = { isVoiceDetected in
if isVoiceDetected {
print("检测到语音活动")
} else {
print("未检测到语音活动")
}
}
停止音频捕获
// 停止音频单元
try audioStream.stopAudioUnit()
C 接口
库提供了以下 C 接口函数,方便从其他语言调用:
startRecord(): 开始录音并将音频数据存入队列stopRecord(): 停止录音getAudioData(): 获取音频数据freeAudioData(): 释放音频数据缓冲区isVoiceActive(): 获取当前语音活动检测状态
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()释放内存
许可证
[请在此处添加许可证信息]