liumaolin
First commit.
7b64dcd
|
raw
history blame
3.03 kB

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() 释放内存

许可证

[请在此处添加许可证信息]