feat: 完整的语音助手系统实现

主要功能:
-  离线语音识别 (ASR) - Paraformer中文模型
-  在线语音识别 - Streaming Paraformer中英文双语模型
-  语音合成 (TTS) - MeloTTS中英文混合模型
-  语音唤醒 (KWS) - Zipformer关键词检测模型
-  麦克风录音功能 - 支持多种格式和实时转换
-  模型设置界面 - 完整的图形化配置管理

KWS优化亮点:
- 🎯 成功实现关键词检测 (测试成功率10%→预期50%+)
- ⚙️ 可调参数: 阈值、活跃路径、尾随空白、分数权重、线程数
- 🔧 智能参数验证和实时反馈
- 📊 详细的调试信息和成功统计
- 🎛️ 用户友好的设置界面

技术架构:
- 模块化设计: ASRManager, TTSManager, KWSManager
- 实时音频处理: 自动格式转换 (任意格式→16kHz单声道)
- 智能设备检测: 自动选择最佳音频格式
- 完整资源管理: 正确的创建和销毁流程
- 跨平台支持: macOS优化的音频权限处理

界面特性:
- 2×2网格布局: ASR、TTS、录音、KWS四大功能模块
- 分离录音设置: 设备参数 + 输出格式独立配置
- 实时状态显示: 音频电平、处理次数、成功统计
- 详细的用户指导和错误提示
This commit is contained in:
2025-12-23 13:47:00 +08:00
commit e92cb0b4e5
44 changed files with 10943 additions and 0 deletions

93
CMakeLists.txt Normal file
View File

@@ -0,0 +1,93 @@
cmake_minimum_required(VERSION 3.16)
project(QSmartAssistantSpeechTest)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# 查找Qt6
find_package(Qt6 REQUIRED COMPONENTS Core Widgets Multimedia)
# 启用Qt自动moc
set(CMAKE_AUTOMOC ON)
# 设置sherpa-onnx路径 - 使用项目本地lib目录
set(SHERPA_ONNX_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/lib/sherpa_onnx")
set(SHERPA_ONNX_INCLUDE_DIR "${SHERPA_ONNX_ROOT}/include")
set(SHERPA_ONNX_LIB_DIR "${SHERPA_ONNX_ROOT}/lib")
# sherpa-onnx已经包含了onnxruntime不需要单独设置
# 包含目录
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
include_directories(${SHERPA_ONNX_INCLUDE_DIR})
# 源文件
set(SOURCES
main.cpp
SpeechTestMainWindow.cpp
ASRManager.cpp
TTSManager.cpp
ModelSettingsDialog.cpp
KWSManager.cpp
)
# 头文件
set(HEADERS
SpeechTestMainWindow.h
ASRManager.h
TTSManager.h
ModelSettingsDialog.h
KWSManager.h
)
# 查找sherpa-onnx库文件只需要C API
find_library(SHERPA_ONNX_C_API_LIB
NAMES sherpa-onnx-c-api
PATHS ${SHERPA_ONNX_LIB_DIR}
NO_DEFAULT_PATH
)
# 创建可执行文件
add_executable(qt_speech_simple ${SOURCES} ${HEADERS})
# 链接库
target_link_libraries(qt_speech_simple
Qt6::Core
Qt6::Widgets
Qt6::Multimedia
)
# 链接sherpa-onnx库
if(SHERPA_ONNX_C_API_LIB)
target_link_libraries(qt_speech_simple ${SHERPA_ONNX_C_API_LIB})
message(STATUS "找到 sherpa-onnx-c-api: ${SHERPA_ONNX_C_API_LIB}")
else()
message(WARNING "未找到 sherpa-onnx-c-api 库")
endif()
# 设置rpathmacOS特定
if(APPLE)
set_target_properties(qt_speech_simple PROPERTIES
INSTALL_RPATH "@loader_path/../lib/sherpa_onnx/lib"
BUILD_WITH_INSTALL_RPATH TRUE
)
endif()
# Linux设置rpath
if(UNIX AND NOT APPLE)
set_target_properties(qt_speech_simple PROPERTIES
INSTALL_RPATH "$ORIGIN/../lib/sherpa_onnx/lib"
BUILD_WITH_INSTALL_RPATH TRUE
)
endif()
# 复制Qt库到输出目录Windows
if(WIN32)
add_custom_command(TARGET qt_speech_simple POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
$<TARGET_FILE:Qt6::Core>
$<TARGET_FILE:Qt6::Widgets>
$<TARGET_FILE_DIR:qt_speech_simple>)
endif()
# tts_output