impressionyang
|
ff7318efd6
|
perf: 预打开音频流,消除按键到录音 3-4s 延迟
根因: 每次按键时 Pa_OpenStream() + Pa_StartStream() 耗时 3-4s,
stop() 时又 Pa_CloseStream() + Pa_Terminate() 销毁流。
优化:
- AudioCapture::start() 复用已打开的流(参数匹配时跳过 OpenStream)
- AudioCapture::stop() 只 Pa_StopStream(),保留流
- 新增 stopAndClose() 彻底关闭流(析构和服务停止时使用)
- VoiceInputService::start() 时预打开音频流再立即 stop()
→ 后续 hotkey start() 只需 Pa_StartStream() (<100ms)
效果: 按键到录音延迟从 3-4s 降至 <100ms
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
2026-06-11 16:26:20 +08:00 |
|
|
|
79085b862b
|
fix: 修复 chunkCompleted 信号文件路径为空的 bug
closeCurrentFile() 会清空 currentFilePath_,之前代码在 closeCurrentFile()
之后才读取 currentFilePath_ 赋值给 completedPath,导致 emit 的路径为空。
修复:在 closeCurrentFile() 之前先保存文件路径和时长。
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
2026-06-11 14:08:16 +08:00 |
|
|
|
801dbe1ec2
|
fix: 降低 VAD 能量阈值并添加 STT 推理诊断日志
- VAD 能量阈值从 0.015 降至 0.003,适配低增益麦克风
- transcribeChunk 添加 WAV 文件大小、样本数、RMS 诊断日志
- onChunkCompleted 增加空文件路径检查
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
2026-06-11 13:50:37 +08:00 |
|
|
|
8c2e787a25
|
feat: 添加 Windows 交叉编译支持与 ONNX Runtime MinGW 兼容方案
- 新增 C API shim (ort_api_shim.h) 解决 MinGW 与 ONNX Runtime 的 SAL 注解/_stdcall 兼容性问题
- 新增轻量级 C++ 包装器 (ort_minimal) 替代 onnxruntime_cxx_api.h
- cmake/dependencies.cmake 支持 Windows/ Linux 平台自动识别依赖路径
- 修复音频采集 paNonInterleaved bug(指针被误解析为 float 导致 RMS=inf)
- 修复 Windows 热键和 UI 相关代码
- 添加 MinGW 交叉编译工具链配置
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
2026-06-11 11:50:16 +08:00 |
|
|
|
01a39ddc8c
|
feat: 实现基于 VAD 的流式 WAV 录制识别方案
- 新增 StreamingAudioWriter 组件:持续录制 WAV 文件,VAD 检测静音段自动切换
- 静音检测:检测到 ~1s 连续静音后关闭当前文件,触发 chunkCompleted 信号
- STTTestPage 重构:移除缓冲区推理模式,改为 WAV 文件流式识别
- 每个 WAV 文件完成后在后台线程读取并推理,不阻塞继续录制
- 设置页面新增「调试音频目录」配置项
- 音频存储路径:debug 模式使用配置目录,非 debug 模式使用系统临时目录
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-05-13 15:33:03 +08:00 |
|
|
|
dc4ebab47c
|
feat: 添加音频输入设备选择器与音频电平诊断
- audio_capture 启动时输出详细设备信息(名称、Host API、采样率)
- 录音停止时输出 RMS 电平和峰值,帮助诊断音频质量问题
- 设置页面新增音频输入设备下拉选择,支持从 PortAudio 设备列表中手动选择
- 语音输入服务使用配置的音频设备和采样率参数
- 检测 monitor/output 类型设备时发出警告,避免选错回环设备
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-05-13 15:16:56 +08:00 |
|
|
|
d87b3e1ff8
|
fix: 修复 SenseVoice argmax 偏移 bug + 添加调试音频保存
修复转写结果显示为 token ID 的问题:argmax() 返回的是扁平化数组的
绝对索引,需减去 offset 才能得到正确的 token ID。同时修正置信度
计算使用正确的绝对索引。
添加调试音频保存功能:开启后每次推理将原始 PCM 保存为 WAV 文件
到 /tmp/impress_audio_debug/,并增加 RMS 电平和 NaN 诊断日志。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-05-13 11:12:34 +08:00 |
|
|
|
ecc79aaeb6
|
fix: 修复 PortAudio 无音频设备检测问题 + 初始化生命周期
1. 重新编译 PortAudio 启用 ALSA 支持(原先编译时未启用任何音频后端,
导致设备数为 0,Pa_GetDefaultInputDevice() 返回 -1)
2. 修复 getDeviceList() 中 Pa_Terminate/Pa_Initialize 顺序错误
(先 Terminate 再 Initialize 会导致状态异常)
3. 使用全局 gPaInitialized 标志管理 PortAudio 生命周期,
避免多次 start/stop 后重复初始化或意外终止
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-05-12 20:08:56 +08:00 |
|
|
|
6cb73b43a8
|
fix: 修复应用卡死的两个关键 bug
1. SenseVoiceEngine 死锁:loadModelSync/loadModelAsync 中调用
unloadModel() 获取 mutex 后立即调用 loadInWorker() 再次获取
同一非递归 mutex,导致死锁。改为内联清理逻辑。
2. PortAudio 回调内存分配:实时音频线程中 std::vector 分配
导致 Linux 系统卡顿。改为预分配固定大小缓冲区。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-05-12 19:54:05 +08:00 |
|
|
|
59c12ab931
|
feat: 扩展音频格式支持与推理管线优化
- 新增 MP3/FLAC 格式解码 (dr_mp3/dr_flac)
- 修复 Mel 频谱图使用 magnitude² 替代 magnitude 的问题
- 推理管线增加音频重采样 (非 16kHz 自动转换)
- 更新 README 项目状态
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-05-12 16:35:48 +08:00 |
|
|
|
02e100b318
|
feat: 初始化 Impress Voice Input 项目
基于 ONNX 的实时语音转文本输入法,C++ 跨平台实现。
核心组件:
- Qt 6 跨平台 GUI(实时识别 / 文件转写 / 配置页面)
- ONNX Runtime 推理引擎(异步模型加载)
- PortAudio 音频采集
- dr_libs 音频文件解码
- JSON 配置管理(线程安全,自动持久化)
- 日志系统(控制台 + 文件输出)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-05-12 15:53:05 +08:00 |
|