菜单

音频处理

相关源文件

本文档描述了 GPT Academic 系统内的音频处理能力。它涵盖了从语音到文本(语音输入)和从文本到语音(音频输出)的功能,详细介绍了音频如何被捕获、处理和用于与大型语言模型 (LLM) 进行交互。

架构概述

GPT Academic 中的音频处理包含两个主要组件:

  1. 语音转文本 - 使用阿里云的 ASR(自动语音识别)服务将用户的语音转换为文本。
  2. 文本转语音 - 将 LLM 的文本回复转换为语音以进行音频播放。

来源: crazy_functions/live_audio/aliyunASR.py crazy_functions/live_audio/audio_io.py themes/tts.js

语音转文本系统

语音转文本功能使用阿里云的云端 ASR 服务将语音转换为可由 LLM 处理的文本。

组件交互

来源: crazy_functions/live_audio/aliyunASR.py crazy_functions/live_audio/audio_io.py

语音活动检测

系统使用 WebRTC VAD(语音活动检测)来判断用户何时在说话,这有助于:

  1. 在未检测到语音时减少不必要的 API 调用。
  2. 通过仅发送相关的音频片段来提高识别准确性。
  3. 保持活跃连接,最大限度地减少数据传输。

来源: crazy_functions/live_audio/aliyunASR.py87-104 crazy_functions/live_audio/audio_io.py

音频分发和处理

RealtimeAudioDistribution 类使用单例模式管理音频数据流,以确保应用程序中一致的音频处理。

来源: crazy_functions/live_audio/audio_io.py16-41 crazy_functions/live_audio/aliyunASR.py107-136

阿里云 ASR 集成

AliyunASR 类负责连接到阿里云的语音识别服务。

  1. 使用阿里云凭证获取认证令牌。
  2. 在单独的线程中处理音频,以保持 UI 响应性。
  3. 处理流式音频输入和连续识别。
  4. 管理服务连接和错误处理。

配置需要设置配置文件中的阿里云访问凭证。

  • ALIYUN_TOKEN
  • ALIYUN_APPKEY
  • ALIYUN_ACCESSKEY
  • ALIYUN_SECRET

来源: crazy_functions/live_audio/aliyunASR.py107-256

文本转语音系统

文本转语音功能将 LLM 生成的文本转换为语音,以便在浏览器中播放。

客户端处理

来源: themes/tts.js152-243 themes/tts.js80-78

音频播放器实现

客户端 JavaScript 实现了一个 AudioPlayer 类,该类:

  1. 使用 Web Audio API 播放音频。
  2. 维护音频块队列以确保顺序播放。
  3. 处理并发音频请求和响应。
  4. 提供停止和控制播放的方法。

来源: themes/tts.js5-78

文本处理逻辑

系统使用以下关键函数处理 TTS 文本:

  1. process_latest_text_output:根据上下文确定如何处理新文本。
  2. process_increased_text:处理流式响应中的增量文本更新。
  3. push_text_to_audio:将文本发送到 TTS API 以生成音频。
  4. UpdatePlayQueue:维护音频播放的正确顺序。

系统通过自然断点(句号和换行符)智能地分割文本,以创造自然的语音。

来源: themes/tts.js152-204 themes/tts.js246-272

TTS API 通信

文本被发送到 /vits 端点进行处理。

来源: themes/tts.js246-272 themes/tts.js308-319

音频格式和转换

系统处理各种音频格式转换,以确保组件之间的兼容性。

  1. 采样率转换change_sample_rate 函数在不同的采样率之间进行转换(例如,从 48kHz 转换为 16kHz 以用于 ASR)。
  2. PCM 音频:音频以 PCM(脉冲编码调制)数据格式进行处理,以兼容语音识别服务。
  3. WAV 格式write_numpy_to_wave 函数将 NumPy 数组转换为 WAV 格式进行处理。

来源: crazy_functions/live_audio/audio_io.py43-51 crazy_functions/live_audio/aliyunASR.py6-85

与 LLM 系统的集成

音频处理系统与 LLM 桥接器集成,以实现与各种模型的语音交互。

来源: request_llms/bridge_moonshot.py request_llms/bridge_deepseekcoder.py request_llms/bridge_llama2.py

配置和设置

要使用音频处理功能,需要进行几个配置步骤:

  1. 阿里云 API 设置:

    • 注册阿里云 ASR 服务。
    • 获取 API 密钥和访问令牌。
    • 在应用程序设置中进行配置。
  2. 客户端配置:

    • TTS 功能可以通过浏览器 Cookie 开/关。
    • 设置通过 UI 界面管理。
  3. 性能考量:

    • 音频处理会增加系统资源使用量。
    • 考虑并发语音处理的硬件要求。

来源: themes/common.py48-76 crazy_functions/live_audio/aliyunASR.py223-256

限制和注意事项

  • ASR功能目前依赖于阿里云的云服务
  • TTS的质量取决于底层的VITS模型
  • 音频处理会增加交互的延迟
  • 网络连接会影响ASR和TTS的性能