# ZipVoice.AXERA [ZipVoice]((https://github.com/k2-fsa/ZipVoice)) AXERA 板端推理 demo。 ## 功能 - 支持中文和英文语音生成。 - 支持语音克隆。 - 支持 ZipVoice、ZipVoice Distill ## 模型说明 ZipVoice Distill 是 ZipVoice 的蒸馏版本,主要优势是在较小性能损失下提升推理速度。初步测试,AX650 ZipVoice Distill 在长文本场景下相比基础版模型约有 3 倍速度提升,RTF 在 0.3 左右,效果没有明显下降。 AX630C 版本当前推理结果差,RTF 约为 1.5 左右,需要继续调优。 ## 模型转换 模型量化参考: - [Pulsar2 Docs — How to Convert ONNX to axmodel](https://pulsar2-docs.readthedocs.io/en/latest/pulsar2/introduction.html) - [export / quantization Project](https://github.com/AXERA-TECH/ZipVoice.AXERA) ## 支持平台 - AX650 - AX650 demo 板 - [M4N-Dock(爱芯派Pro)](https://wiki.sipeed.com/hardware/zh/maixIV/m4ndock/m4ndock.html) - [M.2 Accelerator Card](https://docs.m5stack.com/zh_CN/ai_hardware/LLM-8850_Card) ## 目录结构 ```text ZipVoice.AXERA/ ├── assets/ │ ├── moss_prompts/ │ └── paragraphs/ ├── models/ │ ├── zipvoice_ax650/ │ ├── zipvoice_distill_ax650/ │ └── zipvoice_distill_ax630C/ ├── resources/ │ ├── vocos-mel-24khz/ │ └── zipvoice_hf/ ├── scripts/ ├── infer_zipvoice_axera.py ├── requirements.txt └── README.md ``` ## 环境 安装 pyaxengine: ```bash pip3 install axengine-x.x.x-py3-none-any.whl ``` 安装依赖: ```bash conda create -n ZipVoice python=3.10 conda activate ZipVoice pip3 install -r requirements.txt ``` ## 推理命令 进入目录: ```bash cd ZipVoice.AXERA ``` ### AX650 ZipVoice 中文句子: ```bash python3 infer_zipvoice_axera.py \ --model-name zipvoice_ax650 \ --text "今天午后天气很好,我打开窗户,听见远处有人聊天,水杯也轻轻晃了一下。" \ --prompt-text "不管怎么样我和汤姆还是要感谢贝尔卡金的援手" \ --prompt-wav assets/moss_prompts/zh_1_4p5s.wav \ --output-wav outputs/zh_sentence_ax650.wav \ --seed 42 ``` 推理结果: ```text 推理耗时: 5.781s 生成语音时长: 6.411s RTF: 0.9018 ``` 音频:[outputs/zh_sentence_ax650.wav](outputs/zh_sentence_ax650.wav) 提示音:[assets/moss_prompts/zh_1_4p5s.wav](assets/moss_prompts/zh_1_4p5s.wav) 英文句子: ```bash python3 infer_zipvoice_axera.py \ --model-name zipvoice_ax650 \ --text "This morning, a small train left the station, carrying sleepy passengers toward a bright coastal town." \ --prompt-text "This is almost twice the current industry production level per train." \ --prompt-wav assets/moss_prompts/en_4_4p5s.wav \ --output-wav outputs/en_sentence_ax650.wav \ --seed 42 ``` 推理结果: ```text 推理耗时: 5.711s 生成语音时长: 6.411s RTF: 0.8909 ``` 音频:[outputs/en_sentence_ax650.wav](outputs/en_sentence_ax650.wav) 提示音:[assets/moss_prompts/en_4_4p5s.wav](assets/moss_prompts/en_4_4p5s.wav) 中文段落: ```bash python3 infer_zipvoice_axera.py \ --model-name zipvoice_ax650 \ --text-file assets/paragraphs/zh_ginkgo.txt \ --prompt-text "不管怎么样我和汤姆还是要感谢贝尔卡金的援手" \ --prompt-wav assets/moss_prompts/zh_1_4p5s.wav \ --output-wav outputs/zh_long_paragraph_ax650.wav \ --seed 42 ``` 推理结果: ```text 推理耗时: 40.292s 生成语音时长: 44.744s RTF: 0.9005 ``` 音频:[outputs/zh_long_paragraph_ax650.wav](outputs/zh_long_paragraph_ax650.wav) 提示音:[assets/moss_prompts/zh_1_4p5s.wav](assets/moss_prompts/zh_1_4p5s.wav) 英文段落: ```bash python3 infer_zipvoice_axera.py \ --model-name zipvoice_ax650 \ --text-file assets/paragraphs/en_scavenger.txt \ --prompt-text "This is almost twice the current industry production level per train." \ --prompt-wav assets/moss_prompts/en_4_4p5s.wav \ --output-wav outputs/en_long_paragraph_ax650.wav \ --seed 42 ``` 推理结果: ```text 推理耗时: 62.161s 生成语音时长: 64.749s RTF: 0.9600 ``` 音频:[outputs/en_long_paragraph_ax650.wav](outputs/en_long_paragraph_ax650.wav) 提示音:[assets/moss_prompts/en_4_4p5s.wav](assets/moss_prompts/en_4_4p5s.wav) ### AX650 ZipVoice Distill 中文句子: ```bash python3 infer_zipvoice_axera.py \ --model-name zipvoice_distill_ax650 \ --text "今天午后天气很好,我打开窗户,听见远处有人聊天,水杯也轻轻晃了一下。" \ --prompt-text "不管怎么样我和汤姆还是要感谢贝尔卡金的援手" \ --prompt-wav assets/moss_prompts/zh_1_4p5s.wav \ --output-wav outputs/zh_sentence_distill_ax650.wav \ --seed 42 ``` 推理结果: ```text 推理耗时: 1.992s 生成语音时长: 6.411s RTF: 0.3107 ``` 音频:[outputs/zh_sentence_distill_ax650.wav](outputs/zh_sentence_distill_ax650.wav) 提示音:[assets/moss_prompts/zh_1_4p5s.wav](assets/moss_prompts/zh_1_4p5s.wav) 英文句子: ```bash python3 infer_zipvoice_axera.py \ --model-name zipvoice_distill_ax650 \ --text "This morning, a small train left the station, carrying sleepy passengers toward a bright coastal town." \ --prompt-text "This is almost twice the current industry production level per train." \ --prompt-wav assets/moss_prompts/en_4_4p5s.wav \ --output-wav outputs/en_sentence_distill_ax650.wav \ --seed 42 ``` 推理结果: ```text 推理耗时: 2.045s 生成语音时长: 6.411s RTF: 0.3189 ``` 音频:[outputs/en_sentence_distill_ax650.wav](outputs/en_sentence_distill_ax650.wav) 提示音:[assets/moss_prompts/en_4_4p5s.wav](assets/moss_prompts/en_4_4p5s.wav) 中文段落: ```bash python3 infer_zipvoice_axera.py \ --model-name zipvoice_distill_ax650 \ --text-file assets/paragraphs/zh_ginkgo.txt \ --prompt-text "不管怎么样我和汤姆还是要感谢贝尔卡金的援手" \ --prompt-wav assets/moss_prompts/zh_1_4p5s.wav \ --output-wav outputs/zh_long_paragraph_distill_ax650.wav \ --seed 42 ``` 推理结果: ```text 推理耗时: 13.457s 生成语音时长: 44.744s RTF: 0.3008 ``` 音频:[outputs/zh_long_paragraph_distill_ax650.wav](outputs/zh_long_paragraph_distill_ax650.wav) 提示音:[assets/moss_prompts/zh_1_4p5s.wav](assets/moss_prompts/zh_1_4p5s.wav) 英文段落: ```bash python3 infer_zipvoice_axera.py \ --model-name zipvoice_distill_ax650 \ --text-file assets/paragraphs/en_scavenger.txt \ --prompt-text "This is almost twice the current industry production level per train." \ --prompt-wav assets/moss_prompts/en_4_4p5s.wav \ --output-wav outputs/en_long_paragraph_distill_ax650.wav \ --seed 42 ``` 推理结果: ```text 推理耗时: 19.715s 生成语音时长: 64.749s RTF: 0.3045 ``` 音频:[outputs/en_long_paragraph_distill_ax650.wav](outputs/en_long_paragraph_distill_ax650.wav) 提示音:[assets/moss_prompts/en_4_4p5s.wav](assets/moss_prompts/en_4_4p5s.wav) ## 参数说明 - `--model-name`:选择模型目录。可选 `zipvoice_ax650`、`zipvoice_distill_ax650`、`zipvoice_distill_ax630C`。 - `--prompt-wav`:参考音频,用于控制音色,建议 3-5s。 - `--prompt-text`:参考音频对应文本,必须尽量和 `prompt-wav` 内容一致。 - `--num-step`:采样步数。默认从模型目录的 `runtime_config.json` 读取。 - `--max-feat-len`:decoder 固定 feature 长度,当前模型均为 1024。 ## 参考 - [ZipVoice](https://github.com/k2-fsa/ZipVoice)