TTS_STT.jpg
TTS_STT.jpg

🌟 项目简介

mlx-audio-plus 是一个基于 Apple 的 MLX 框架构建的 Text-to-Speech (TTS) 和 Speech-to-Speech (STS) 库,专为 Apple Silicon (M 系列芯片) 提供高效的语音合成。


💻 部署与安装

步骤一:配置 Conda Python 环境

为了避免包版本冲突,推荐使用 Conda 创建一个隔离的 Python 虚拟环境

  1. 打开终端或 Anaconda Prompt。
  2. 创建新的 Conda 环境:创建一个名为 mlx_audio_env 的 Python 环境(可自定义名称),并指定 Python 版本(例如 3.12.9)。

    conda create --name mlx_audio_env python=3.12.9
  3. 激活环境:进入新创建的环境。

    conda activate mlx_audio_env

步骤二:安装 mlx-audio-plus

在已激活的 Conda 环境中,使用 pip 安装 mlx-audio-plus 包。

pip install mlx-audio-plus

步骤三:通过 huggingface 下载所需模型

# 安装 huggingface_hub
pip install huggingface_hub

# 预先下载推荐的 TTS 模型
hf download mlx-community/CosyVoice2-0.5B-fp16

# 预先下载推荐的 STT 模型
hf download mlx-community/whisper-large-v3-turbo

推荐的 TTS 模型包括:

  • mlx-community/IndexTTS-1.5
  • mlx-community/CosyVoice2-0.5B-fp16
  • mlx-community/Spark-TTS-0.5B-fp16
  • mlx-community/VoxCPM1.5

推荐的 STT 模型包括:

  • mlx-community/whisper-large-v3-turbo (高性能模型)
  • mlx-community/whisper-small-4bit
  • mlx-community/whisper-tiny-4bit

一、🗣️ 语音生成 (TTS) 功能

1. 参数选项

语音生成使用 mlx_audio.tts.generate 命令行工具。以下是mlx_audio.tts.generate 命令支持的参数选项:

🚀 核心功能参数 (Core Functionality Parameters)

参数描述用法示例
--text TEXT必需(Text-to-Speech):要转换为语音的文本字符串。如果未提供,可能需要使用 --source_audio 进行语音转语音。--text "Hello, world!"
--voice VOICE语音选择:指定用于生成语音的预设或自定义声音名称。--voice af_heart
--model MODEL模型路径/名称:指定要使用的 TTS 模型的路径或 Hugging Face 仓库名称。--model mlx-community/Kokoro-82M-4bit

⚙️ 语音风格与控制参数 (Voice Style and Control Parameters)

参数描述范围/示例
--speed SPEED语速:控制语音的播放速度。通常在 0.5x (慢) 到 2.0x (快) 之间。--speed 1.25
--gender GENDER性别(可能):用于指定或调整语音的感知性别(取决于模型支持)。--gender female
--pitch PITCH音高(可能):用于调整生成语音的音高(取决于模型支持)。--pitch 0.9
--lang_code LANG_CODE语言代码:为模型提供语言提示,以确保正确的发音和风格。--lang_code en
--ref_audio REF_AUDIO参考音频:用于语音克隆或风格转移。模型将尝试模仿此音频的音色、语调或风格。--ref_audio path/to/ref.wav
--ref_text REF_TEXT参考文本:与 ref_audio 对应的文本。用于更好地对齐和理解参考音频的风格。--ref_text "a quick brown fox"
--instruct_text INSTRUCT_TEXT指令文本:用于指导模型的生成行为,例如指定情感或强调。--instruct_text "Speak with a joyful tone."
--source_audio SOURCE_AUDIO源音频:用于语音转语音 (STS) 工作流。模型将转换此音频的内容或风格。--source_audio path/to/source.mp3
--stt_model STT_MODEL语音转文本模型:在 STS 场景中,用于将 source_audio 自动转录为文本的模型。--stt_model whisper-tiny

💾 输出与文件参数 (Output and File Parameters)

参数描述用法示例
--file_prefix FILE_PREFIX输出文件前缀:为生成的音频文件设置一个前缀名称。--file_prefix audiobook_chapter1
--audio_format AUDIO_FORMAT音频格式:指定输出音频的文件格式。常见选项包括 wav, mp3 等。--audio_format mp3
--join_audio合并音频段:如果输入文本很长,模型可能会分段生成。此标志将所有生成的音频段合并为一个文件。--join_audio
--play播放音频:生成完成后,尝试使用系统默认播放器播放生成的音频文件。--play

生成与流式传输参数 (Generation and Streaming Parameters)

这些参数通常用于控制模型的采样和解码过程,影响语音的随机性和质量。

参数描述范围/示例
--max_tokens MAX_TOKENS最大令牌数:限制模型在单个生成调用中可以生成的最大音频片段(token)数量。--max_tokens 1024
--temperature TEMPERATURE温度:控制采样的随机性。值越高(如 1.0),结果越随机/富有创意;值越低(如 0.0),结果越确定。--temperature 0.7
--top_p TOP_PTop-P 采样:一种解码策略,仅考虑累计概率达到 $P$ 的最小词集进行采样。控制生成的多样性。--top_p 0.9
--top_k TOP_KTop-K 采样:一种解码策略,仅从概率最高的 $K$ 个词中进行采样。--top_k 50
--repetition_penalty REPETITION_PENALTY重复惩罚:对已经生成的 token 施加惩罚,以减少重复,提高流畅性。--repetition_penalty 1.1
--stream流式传输:启用音频生成结果的流式传输,允许在整个音频生成完成之前开始播放或处理。--stream
--streaming_interval STREAMING_INTERVAL流式传输间隔:指定在流式传输模式下,模型输出音频片段的时间间隔或大小。--streaming_interval 0.5

2. 基础用法:Zero-Shot 模式 (零样本克隆)

该模式需要一个参考音频 (ref_audio) 和对应的转录文本 (ref_text) 来学习参考语音的风格,并用该风格朗读目标文本 (text)。

mlx_audio.tts.generate --model mlx-community/CosyVoice2-0.5B-fp16 \
    --text "Hello, this is a test of text to speech." \
    --ref_audio reference.wav \
    --ref_text "This is what I said in the reference audio."
参数解释
--model必需。指定要使用的 TTS 模型。
--text必需。希望模型朗读的目标文本。
--ref_audio必需。提供目标音色的音频文件路径。
--ref_text必需。参考音频中内容的准确转录文本。

3. 进阶用法示例

  • 跨语言模式 (Cross-Lingual):

    mlx_audio.tts.generate --model mlx-community/CosyVoice2-0.5B-fp16 \
        --text "Bonjour, comment allez-vous?" \
        --ref_audio reference.wav
  • 指令模式 (Instruct Mode):

    mlx_audio.tts.generate --model mlx-community/CosyVoice2-0.5B-fp16 \
        --text "I have exciting news!" \
        --ref_audio reference.wav \
        --instruct_text "Speak with excitement and enthusiasm"
  • 语音转换 (Voice Conversion):

    mlx_audio.tts.generate --model mlx-community/CosyVoice2-0.5B-fp16 \
        --ref_audio target_speaker.wav \
        --source_audio source_speech.wav
  • 直接播放:

    mlx_audio.tts.generate --model mlx-community/CosyVoice2-0.5B-fp16 \
        --text "Hello world" \
        --ref_audio reference.wav \
        --play

二、📝 语音转文字 (STT) 功能

字幕识别(Speech-to-Text)功能使用 mlx_audio.stt.generate 命令行工具,主要基于 Whisper 模型。

1. 参数选项

以下是对mlx_audio.stt.generate 语音转文字(Speech-to-Text, STT)命令行工具支持的参数选项的详细解析,以表格形式呈现:

参数类型是否必需描述示例用法
-h, --help选项显示帮助信息并退出程序。mlx_audio.stt.generate -h
--model MODEL路径/名称模型路径或名称。指定用于语音转文字的模型路径或 Hugging Face 模型名称(例如 openai/whisper-base)。如果未指定,通常会使用一个默认模型。--model whisper-large-v3
--audio AUDIO路径输入音频文件路径。指定要进行转录的音频文件(如 .wav, .mp3 等)的路径。--audio /data/recording.mp3
--output OUTPUT路径输出文件路径。指定转录结果将保存到的文件的路径和名称。文件扩展名不决定格式,格式由 --format 决定。--output transcript.txt
--format {txt,srt,vtt,json}选项输出格式。指定转录结果的输出格式。支持以下四种: - txt: 纯文本格式。 - srt: SubRip 格式,常用于字幕。 - vtt: WebVTT 格式,常用于网页视频字幕。 - json: JSON 格式,包含详细的时间戳和信息。--format srt
--verbose标志详细输出模式。启用后,会在控制台输出更多关于模型加载、转录进度和最终结果的详细信息。--verbose
--max_tokens MAX_TOKENS整数最大生成令牌数。限制模型在转录过程中可以生成的最大新令牌(token)数量,有助于控制生成长度或防止无限循环。--max_tokens 4096

2. 基础用法:使用 Whisper-Large-V3-Turbo 进行转录

使用高性能的 mlx-community/whisper-large-v3-turbo 模型对音频文件进行转录。

mlx_audio.stt.generate --model mlx-community/whisper-large-v3-turbo \
    --audio input_speech.wav --output transcript.txt
参数解释
--audio必需。需要转录的音频文件路径。
--model必需。指定要使用的 Whisper 模型名称或路径。
--output必需。指定输出的文件路径及文件名。

3. 进阶用法:指定输出格式和语言

可以指定输出格式(例如字幕文件格式 srt)以及音频中使用的语言,以提高准确性。

mlx_audio.stt.generate --model mlx-community/whisper-large-v3-turbo \
    --audio long_meeting.mp3 \
    --format srt \
    --output transcript.srt    
  • --output_format srt: 将输出格式指定为 srt (字幕文件格式)。其他常见格式包括 vtt 或纯 text

三、🌐 服务器启动功能

mlx-audio-plus 允许启动一个 Web 服务器,通过 REST API 或 Web UI 提供语音合成和识别服务。

1. 基础用法:启动服务器

使用 mlx_audio.server 命令启动服务,默认在本地主机和特定端口运行。

mlx_audio.server --host 0.0.0.0 --port 8000
参数解释
--host可选。指定服务器监听的 IP 地址。0.0.0.0 表示监听所有网络接口。
--port可选。指定服务器监听的端口号。

通过浏览器访问 http://localhost:8000/docs/ 查看API接口相关信息

2. 进阶用法:预加载模型

在启动服务器时,可以预先加载特定的 TTS 或 STT 模型,以加快推理速度。

mlx_audio.server --tts_model mlx-community/CosyVoice2-0.5B-fp16 \
    --stt_model mlx-community/whisper-large-v3-turbo
  • --tts_model: 指定启动时加载的 TTS 模型。
  • --stt_model: 指定启动时加载的 STT 模型。

服务器启动成功后,即可通过浏览器访问指定的地址(例如 http://localhost:8000)来使用 Web UI,或通过 API 客户端发送 HTTP 请求进行调用。


🗑️ 清理与移除项目

步骤一:使用 pip-autoremove 卸载软件包及依赖

为了彻底清除 mlx-audio-plus 及其不再需要的依赖项,使用 pip-autoremove 工具。

  1. 激活环境

    conda activate mlx_audio_env
  2. 安装 pip-autoremove

    pip install pip-autoremove
  3. 卸载 mlx-audio-plus 及其依赖

    pip-autoremove mlx-audio-plus huggingface_hub -y

步骤二:移除 Conda 虚拟环境

  1. 退出当前环境

    conda deactivate
  2. 删除 Conda 环境

    conda remove --name mlx_audio_env --all

步骤三:清理缓存的模型文件(可选)

TTS/STT 模型在首次运行时会被下载到本地缓存。可以手动删除 MLX 或 Hugging Face 模型在系统上的默认缓存目录中的文件,以释放磁盘空间。