AEC(Acoustic Echo Cancellation,声学回声消除)是一种用于消除扬声器播放声音被麦克风再次录制的回声的技术。本模块支持Windows和Linux平台的系统级AEC功能。
系统级AEC: 自动使用操作系统提供的回声消除功能
工作原理: Windows系统通过音频驱动层自动处理回声消除,应用层无需额外处理。系统会自动检测并消除扬声器到麦克风的回声。
系统级AEC: 使用PulseAudio模块化AEC
方案1: 使用PulseAudio AEC模块
# 下载配置脚本
git clone https://github.com/W-E-A/PulseAudio-AEC-Script.git
cd PulseAudio-AEC-Script
# 设置执行权限
chmod +x setup_aec.sh uninstall_aec.sh
# 配置AEC
./setup_aec.sh
# 卸载AEC
./uninstall_aec.sh
方案2: 手动配置PulseAudio
# 编辑PulseAudio配置文件
nano ~/.config/pulse/default.pa
# 添加AEC模块
load-module module-echo-cancel aec_args='"frame_size_ms=8"'
# 重启PulseAudio
pulseaudio --kill && pulseaudio --start
Q1: 脚本运行后找不到 echo cancellation 设备
# 检查PulseAudio设备
pactl list sinks short
pactl list sources short
# 重启PulseAudio
pulseaudio --kill && pulseaudio --start
Q2: 配置后音频延迟增加
# 检查缓冲区设置
pactl list sources | grep -A10 "echo-cancel"
# 调整延迟参数(可选)
# 编辑 ~/.config/pulse/default.pa
# 添加: load-module module-echo-cancel aec_args='"frame_size_ms=8"'
Q3: AEC效果不明显
# 检查AEC模块是否加载
pactl list modules | grep echo-cancel
# 检查音频路由
pactl list sources
pactl list sinks
# 调整AEC参数
# 编辑配置文件,调整frame_size_ms参数
import asyncio
from wake_word_module import WakeWordDetector, AudioCapture, WakeWordConfig
async def main():
# 创建配置
config = WakeWordConfig(
model_path="models",
sample_rate=16000,
)
# 创建音频采集器(启用AEC)
audio_capture = AudioCapture(
sample_rate=16000,
channels=1,
enable_aec=True, # 启用AEC回音消除
)
# 创建检测器
detector = WakeWordDetector(config)
# 设置回调
detector.on_detected(lambda r, t: print(f"检测到唤醒词: {r}"))
# 连接并启动
audio_capture.add_audio_listener(detector)
await audio_capture.start()
await detector.start()
# 保持运行
while True:
await asyncio.sleep(1)
asyncio.run(main())
# 创建音频采集器(不启用AEC)
audio_capture = AudioCapture(
sample_rate=16000,
channels=1,
enable_aec=False, # 不启用AEC
)
应用层(Python)
│
▼
┌─────────────────────┐
│ AudioCapture │
│ - 采集音频 │
│ - 启用AEC标志 │
└─────────────────────┘
│
▼
┌─────────────────────┐
│ Windows音频驱动 │
│ - 系统级AEC │
│ - 自动回声消除 │
└─────────────────────┘
│
▼
输出音频(已消除回声)
特点:
enable_aec=True应用层(Python)
│
▼
┌─────────────────────┐
│ AudioCapture │
│ - 采集音频 │
│ - 启用AEC标志 │
└─────────────────────┘
│
▼
┌─────────────────────┐
│ PulseAudio │
│ - AEC模块 │
│ - 回声消除 │
└─────────────────────┘
│
▼
输出音频(已消除回声)
特点:
解决方案:
解决方案:
解决方案:
解决方案:
解决方案:
Windows平台的AEC主要通过系统设置配置:
调整AEC参数:
# 编辑PulseAudio配置
nano ~/.config/pulse/default.pa
# 调整帧大小(影响延迟和效果)
load-module module-echo-cancel aec_args='"frame_size_ms=8"' # 8ms帧
# 调整其他参数
load-module module-echo-cancel aec_args='"frame_size_ms=8;filter_length_ms=100"'
参数说明:
frame_size_ms: 帧大小(8-16ms),越小延迟越低filter_length_ms: 滤波器长度(50-200ms),越大效果越好AEC功能基于操作系统提供的系统级实现,遵循相应操作系统的许可证。