mlx-audio
综合介绍
mlx-audio是一个专为苹果MLX框架打造的语音处理库。 它主要为Apple Silicon(M系列芯片)设备提供高效的语音功能,包括文本转语音(TTS)、语音转文本(STT)和语音转语音(STS)。 这个工具利用苹果芯片的统一内存架构,实现了快速的语音生成和分析。 该项目支持多种语言,用户可以选择不同的声音风格,并根据需要调整语速。 除了作为Python库在代码中调用外,mlx-audio还提供了一个带有3D音频可视化功能的交互式Web界面和REST API,方便用户进行语音生成和管理。 它还支持模型量化等高级功能,能够优化模型性能,减少资源占用。 对于希望在苹果设备上进行音频处理的开发者和研究人员来说,这是一个非常实用的工具。
功能列表
- 专为Apple Silicon优化: 基于苹果的MLX框架构建,在M系列芯片上实现快速、高效的推理。
- 多功能语音处理: 支持文本转语音(TTS)、语音转文本(STT)和语音转语音(STS)。
- 多语言支持: 内置支持多种语言,如美式英语、英式英语、日语和中文。
- 语音克隆: 支持使用参考音频样本来克隆和定制声音。
- 声音定制: 提供多种预设声音风格,并允许用户调整0.5倍到2.0倍的语速。
- 交互式Web界面: 提供一个带有3D音频可视化功能的Web用户界面,用于实时生成和播放音频。
- REST API: 内置一个API服务器,允许通过HTTP请求进行语音生成,方便与其他应用集成。
- 模型量化: 支持对模型进行量化,以提升运行性能并减少内存占用。
- 文件管理: 生成的音频文件会自动保存,并可以通过Web界面直接在文件管理器中打开。
使用帮助
mlx-audio是一个功能强大的工具,本节将详细介绍其安装和使用方法,让你能快速上手。
1. 安装
安装过程非常简单,只需要通过pip
命令即可完成。如果需要使用Web界面和API功能,则需要安装额外的依赖项。
打开终端,输入以下命令安装核心库:
pip install mlx-audio
如果希望使用Web界面和API服务器,需要安装requirements.txt
中列出的依赖:
pip install -r requirements.txt
注意:某些语言(如日语和中文)需要额外安装特定的依赖包。
2. 快速上手:命令行工具
安装完成后,你可以直接在命令行中使用mlx_audio
进行文本转语音。这是最快捷的使用方式。
基本用法生成一段简单的英文语音:mlx_audio.tts.generate --text "Hello, world"
执行后,程序将生成一个音频文件并保存在默认目录中。
指定输出文件名和语速你可以自定义输出文件的名称和说话的语速。--speed
参数支持0.5到2.0之间的值。mlx_audio.tts.generate --text "Hello, world" --file_prefix hello --speed 1.4
语音克隆使用CSM模型时,你可以通过--ref_audio
参数指定一个参考音频文件,来克隆其中的音色。python -m mlx_audio.tts.generate --model mlx-community/csm-1b --text "Hello from Sesame." --play --ref_audio ./sample_audio.wav
3. 在Python代码中使用
除了命令行,你也可以在自己的Python项目中导入mlx_audio
库来生成音频。
下面是一个在Python脚本中生成音频并保存为.wav
文件的示例:
from mlx_audio.tts.generate import generate_audio
# 定义要转换的文本、模型和声音参数
text_to_generate = ("In the beginning, the universe was created...\n"
"...or the simulation was booted up.")
model_id = "prince-canuma/Kokoro-82M"
voice_style = "af_heart" # 尝试 'af_nova', 'af_bella' 等不同声音
speech_speed = 1.2
language_code = "a" # 'a' 代表美式英语
# 调用函数生成音频
generate_audio(
text=text_to_generate,
model_path=model_id,
voice=voice_style,
speed=speech_speed,
lang_code=language_code,
file_prefix="audiobook_chapter1", # 输出文件前缀
audio_format="wav", # 音频格式
sample_rate=24000,
join_audio=True, # 如果文本分段,是否合并音频
verbose=True # 打印详细日志
)
print("音频文件已成功生成!")
4. Web界面和API服务器
mlx-audio自带一个基于FastAPI的Web服务器,提供了一个图形化的操作界面和一组REST API。
启动服务器在终端中运行以下命令来启动服务器:mlx_audio.server
服务器默认在http://127.0.0.1:8000
上运行。 你可以通过参数指定主机和端口:mlx_audio.server --host 0.0.0.0 --port 9000
Web界面功能启动后,在浏览器中打开http://127.0.0.1:8000
,你将看到一个操作界面,其功能包括:
- 文本输入与生成: 在文本框中输入文字,选择声音和语速,然后点击生成。
- 3D音频可视化: 界面中有一个3D球体,会根据当前播放音频的频率做出实时响应。
- 音频上传: 你可以上传自己的音频文件进行播放和可视化。
- 直接访问文件夹: 界面上有一个按钮,可以让你直接在本地文件管理器中打开存放生成音频的文件夹。
API接口服务器同时提供了多个API接口,方便开发者进行程序化调用。
POST /tts
: 用于文本转语音。- 参数:
text
(必需),voice
(可选),speed
(可选)。 - 返回: 包含生成文件名的JSON。
- 参数:
GET /audio/{filename}
: 获取已生成的音频文件。POST /play
: 在服务器上播放指定的音频文件。- 参数:
filename
(必需)。
- 参数:
POST /stop
: 停止当前正在播放的音频。
5. 高级功能:模型量化
为了在保持可接受质量的同时提高性能和减少内存占用,你可以对模型进行量化。量化会将模型的权重从高精度(如32位浮点数)转换为低精度(如8位整数)。
以下是如何将模型量化为8位的示例代码:
from mlx_audio.tts.utils import quantize_model, load_model
import json
import mlx.core as mx
# 加载原始模型
model = load_model(repo_id='prince-canuma/Kokoro-82M')
config = model.config
# 设置量化参数并执行量化
group_size = 64
bits = 8
weights, config = quantize_model(model, config, group_size, bits)
# 保存量化后的模型和配置文件
with open('./8bit/config.json', 'w') as f:
json.dump(config, f)
mx.save_safetensors("./8bit/kokoro-v1_0.safetensors", weights, metadata={"format": "mlx"})
量化后的模型体积更小,推理速度更快,尤其适用于资源有限的环境。
应用场景
- 个人化内容创作用户可以利用这个工具快速生成有声读物、播客或视频配音。通过调整声音、语速或使用语音克隆功能,可以创作出具有鲜明个人风格的音频内容。
- 应用开发与集成开发者可以将mlx-audio的API集成到自己的macOS或iOS应用程序中,为应用增加语音交互功能,例如朗读文章、语音通知或作为虚拟助手的发声模块。
- 辅助功能工具对于有视力障碍的用户,可以开发一个工具,利用
mlx-audio
将屏幕上的文本内容实时转换为语音,提高信息获取的便利性。 - 语音克隆与AI研究研究人员和AI爱好者可以使用支持语音克隆的CSM模型,通过提供一小段参考音频来生成具有特定音色的语音,用于语音合成技术的研究和实验。
QA
- mlx-audio主要支持什么操作系统?mlx-audio主要为运行在Apple Silicon(M1, M2, M3等芯片)上的macOS系统设计和优化。 虽然它可能在其他系统上运行,但最佳性能表现在苹果设备上。
- 这个工具支持中文吗?是的,支持中文。使用
Kokoro
模型时,将语言代码设置为z
即可生成中文语音。不过,这需要额外安装中文处理相关的依赖库。 - 我可以使用自己的声音来生成语音吗?可以。通过使用CSM(Conversational Speech Model)模型,并提供一个你自己的参考音频文件(
--ref_audio
),mlx-audio
可以克隆该音频中的音色来生成新的语音。 - 使用这个项目是免费的吗?会产生额外费用吗?是的,mlx-audio项目本身是免费的,它基于MIT许可证开源。 你可以在本地设备上自由使用,不会产生任何费用。