5.6 KiB
5.6 KiB
多进程音频控制系统 - 主进程控制功能
概述
本系统已经重构,支持主进程对输入进程的校准和监听功能进行精确控制。通过这些新功能,你可以:
- 手动控制校准过程:在适当的时间启动语音检测器校准
- 精确控制监听状态:按需启用或禁用音频监听
- 获取实时状态:查询校准进度和监听状态
主要功能
1. 校准功能
启动校准
# 启动语音检测器校准
success = control_system.start_calibration()
if success:
print("校准已启动")
获取校准状态
# 获取当前校准状态
status = control_system.get_calibration_status()
if status:
print(f"校准进度: {status['progress']*100:.1f}%")
print(f"是否在校准中: {status['calibrating']}")
等待校准完成
# 等待校准完成(30秒超时)
if control_system.wait_for_calibration_complete(timeout=30):
print("校准完成")
else:
print("校准超时")
2. 监听功能
启动监听
# 启动音频监听
success = control_system.start_monitoring()
if success:
print("监听已启动")
停止监听
# 停止音频监听
success = control_system.stop_monitoring()
if success:
print("监听已停止")
获取监听状态
# 获取当前监听状态
status = control_system.get_monitoring_status()
if status:
print(f"监听启用: {status['enabled']}")
print(f"正在录音: {status['recording']}")
print(f"音频流活跃: {status['audio_stream_active']}")
使用示例
方法1:自动启动(推荐)
from control_system import ControlSystem
# 1. 创建控制系统
config = {
'system': {'log_level': "INFO"},
'audio': {'sample_rate': 16000, 'channels': 1, 'chunk_size': 1024},
'recording': {'min_duration': 2.0, 'max_duration': 30.0, 'silence_threshold': 3.0},
'processing': {'enable_asr': True, 'enable_llm': True, 'enable_tts': True, 'character': 'libai'}
}
control_system = ControlSystem(config)
# 2. 一键启动(自动校准和监听)
control_system.start(auto_calibration=True, auto_monitoring=True)
# 系统现在正在运行,会自动处理语音检测和录音
方法2:手动控制
from control_system import ControlSystem
import time
# 1. 创建控制系统
config = {
'system': {'log_level': "INFO"},
'audio': {'sample_rate': 16000, 'channels': 1, 'chunk_size': 1024},
'recording': {'min_duration': 2.0, 'max_duration': 30.0, 'silence_threshold': 3.0},
'processing': {'enable_asr': True, 'enable_llm': True, 'enable_tts': True, 'character': 'libai'}
}
control_system = ControlSystem(config)
# 2. 启动进程(但不自动启用监听)
control_system._start_processes()
# 3. 步骤1:校准
print("开始校准...")
control_system.start_calibration()
# 等待校准完成
if control_system.wait_for_calibration_complete(timeout=30):
print("校准完成")
else:
print("校准失败")
exit(1)
# 4. 步骤2:启动监听
print("开始监听...")
control_system.start_monitoring()
# 5. 运行一段时间
print("系统运行中...")
try:
while True:
# 检查事件和显示状态
control_system.check_events()
control_system.display_status()
time.sleep(0.1)
except KeyboardInterrupt:
print("用户中断")
# 6. 停止监听
print("停止监听...")
control_system.stop_monitoring()
# 7. 关闭系统
control_system.shutdown()
方法3:混合控制
from control_system import ControlSystem
# 1. 创建控制系统
control_system = ControlSystem(config)
# 2. 自动启动,但只校准,不自动监听
control_system.start(auto_calibration=True, auto_monitoring=False)
# 3. 手动控制监听
control_system.start_monitoring() # 启动监听
# ... 运行一段时间 ...
control_system.stop_monitoring() # 停止监听
control_system.start_monitoring() # 重新启动监听
# 4. 关闭系统
control_system.shutdown()
自动化示例
查看 example_manual_control.py 文件获取完整的自动化控制示例。
关键变化
1. 默认行为变化
- 之前:输入进程启动后自动开始校准和监听
- 现在:输入进程启动后处于静默状态,等待主进程命令
2. 新增控制接口
在 ControlSystem 类中新增了以下方法:
start_calibration()- 启动校准start_monitoring()- 启动监听stop_monitoring()- 停止监听get_calibration_status()- 获取校准状态get_monitoring_status()- 获取监听状态wait_for_calibration_complete(timeout)- 等待校准完成
3. 新增命令支持
在 InputProcess 中支持以下新命令:
start_calibration- 开始校准start_monitoring- 开始监听stop_monitoring- 停止监听get_calibration_status- 获取校准状态get_monitoring_status- 获取监听状态
使用建议
- 初始化顺序:建议按照"启动进程 → 校准 → 启动监听"的顺序进行
- 错误处理:建议对每个操作进行错误检查和重试
- 状态监控:定期检查状态以确保系统正常运行
- 资源清理:使用完毕后正确关闭系统
注意事项
- 进程间通信:所有控制都是通过进程间队列实现的,可能会有轻微延迟
- 超时处理:建议为所有状态查询操作设置合理的超时时间
- 并发安全:确保在多线程环境中正确使用这些方法
- 音频设备:启动和停止监听会重新初始化音频设备,可能有短暂延迟