Kokoro-82M是一个8200万参数语音合成(TTS)模型,尽管其参数量较小,但它能够在多种语言之间切换,并提供高质量的语音输出。该模型支持英语、法语、日语、韩语和中文等多种语言,且采用Apache 2.0许可证发布,允许商业用途。
我们首先在huggingface.co下载v1.1的中文模型到本地。
git lfs clone https://huggingface.co/hexgrad/Kokoro-82M-v1.1-zh
基于此模型需要下载相关依赖:
pip install -q kokoro>=0.8.2 "misaki[zh]>=0.8.2" soundfile pydub
接下来开始写一个示例代码咯。
import os import io import torch import soundfile as sf from pydub import AudioSegment from kokoro import KModel, KPipeline device = 'cuda:0' if torch.cuda.is_available() else 'cpu' model_base = '/opt/model/Kokoro-82M-v1.1-zh' CONFIG_PATH = f'{model_base}/config.json' MODEL_PATH = f'{model_base}/kokoro-v1_1-zh.pth' model = KModel(config=CONFIG_PATH, model=MODEL_PATH, repo_id="hexgrad/Kokoro-82M-v1.1-zh").to(device).eval() # 支持英语发音 en_pipeline = KPipeline(lang_code='a', repo_id="hexgrad/Kokoro-82M", model=False) def en_callable(text): if text == 'Uzen': return 'ˈjuːzən' return next(en_pipeline(text)).phonemes # 选择语言代码 pipeline = KPipeline(lang_code='z', repo_id=model_base, model=model, en_callable=en_callable) text = 'Uzen Zone说:床前明月光,It\'s地上霜。举头warming月,低头school乡。' generator = pipeline( text, voice=f'{model_base}/voices/zf_073.pt', speed=1.0, split_pattern=r'[。;!?]+' ) output_file = "output_combined.wav" # 创建空的音频段 combined_audio = AudioSegment.silent(duration=0) for gs, ps, audio in generator: # 使用 BytesIO 避免磁盘IO audio_buffer = io.BytesIO() sf.write(audio_buffer, audio, 24000, format='WAV') audio_buffer.seek(0) # 直接从 BytesIO 读取音频 segment = AudioSegment.from_file(audio_buffer, format="wav") combined_audio += segment # 保存合并后的音频 combined_audio.export(output_file, format='wav') print(f"音频合成完成,已保存至 {output_file}")
以上脚本即加载本地模型,可以在离线环境运行,因为模型较小,甚至可以在端侧运行。
我们运行脚本后就能得要一个中英双语的音频了,需要注意的是Kokoro-82M模型并不能克隆声音,使用的是预置已有的声音模型,我这里使用的是zf_73,其中z代表中文f代表女性,如果需要男性声音,请使用模型voices文件夹下的zm_开头的声音模型吧。
下一篇:没有了
Copyright ©2017-2024 uzen.zone
湘ICP备17013178号-3