? Aivisspeech引擎: AI V OICE I系统- 文字到语音引擎
Aivisspeech引擎是基于VoiceVox引擎的日本语音合成引擎。
它内置在aivisspeech(日本语音综合软件)中,可以轻松产生情感声音。
AudioQuery类型规格Mora类型规格更改Preset类型的规格如果您想使用AivissPeech,请访问Aivisspeech官方网站。
此页面包含主要针对开发人员的信息。
以下是用户的文档:
与Windows,MacOS和Linux兼容的PC。
要启动Aivisspeech引擎,您的PC至少需要3GB的免费内存(RAM)。
提示
桌面应用程序AivissPeech仅在Windows和MacOS上支持。
同时,ubuntu/debian linux也可以使用语音合成API服务器Aivisspeech引擎。
笔记
我们尚未通过Intel CPU积极验证Mac上的操作。
具有Intel CPU的Mac已经停产,准备验证和建立环境变得越来越困难。我们建议尽可能多地在带有苹果硅的Mac上使用此产品。
警告
在Windows 10上,我们仅检查版本22H2的操作。
有报道称,Aivisspeech引擎崩溃并且无法从没有支持的Windows 10的旧版本开始。
从安全角度来看,我们强烈建议您在使用该服务之前仅使用Windows 10环境更新到最低版本22H2。
Aivisspeech引擎支持AIVMX(onn X的AI Vis v oice M Odel)( .aivmx )格式中的语音合成模型文件。
AIVM ( AI Vis v oice M Odel) / AIVMX ( AI Vis v oice M Odel for Onn X )是AI语音合成模型的开放文件格式,该模型结合了预训练的模型,超参数,样式矢量,样式矢量,扬声器,扬声器,扬声器元数据(名称,概述,概述,概述,许可,ICONS,ICONS,ICONS,ICONS,ICONS,ICONS,语音样本等) 。
有关AIVM规格和AIVM/AIVMX文件的更多信息,请参阅AIVIS项目中开发的AIVM规格。
笔记
“ AIVM”也是AIVM/AIVMX格式规格和元数据规范的一般术语。
具体来说,AIVM文件是“添加了具有AIVM元数据的SafetEnsors格式”中的模型文件,并且AIVMX文件是“添加了AIVM Metadata”的“ ONNX格式”中的模型文件。
“ AIVM元数据”是指与AIVM规范中定义的训练模型相关的各种元数据。
重要的
Aivisspeech引擎也是AIVM规范的参考实现,但故意设计仅用于支持AIVMX文件。
这消除了对Pytorch的依赖,减少了安装大小,并提供了使用ONNX运行时快速推断。
提示
AIVM Generator允许您从现有语音合成模型中生成AIVM/AIVMX文件,并编辑现有AIVM/AIVMX文件的元数据!
可用于以下模型体系结构的AIVMX文件:
Style-Bert-VITS2Style-Bert-VITS2 (JP-Extra) 笔记
AIVM元数据规范使您可以定义多语言扬声器,但是Aivisspeech引擎(如VoiceVox引擎)仅支持日本语音综合。
因此,即使您使用支持英语或中文的语音综合模型,也无法执行日语以外的语音综合。
将AIVMX文件放在每个OS的以下文件夹中:
C:Users(ユーザー名)AppDataRoamingAivisSpeech-EngineModels~/Library/Application Support/AivisSpeech-Engine/Models~/.local/share/AivisSpeech-Engine/Models实际的文件夹路径将显示为Models directory:启动Aivisspeech引擎后立即在日志中显示。
提示
使用AivissPeech时,您可以轻松地从AivissPeech UI屏幕上添加语音合成模型!
对于最终用户,我们建议您使用此方法添加语音综合模型。
重要的
开发版本的部署文件夹(如果不使用Pyinstaller构建)不是AivisSpeech-Engine ,也不是AivisSpeech-Engine-Dev 。
Aivisspeech引擎提供有用的命令行选项,例如:
--host 0.0.0.0允许从同一网络中的其他设备访问Aivisspeech引擎。--cors_policy_mode all允许所有域中的CORS请求。--load_all_models预订所有安装的语音合成模型。--help以显示所有可用选项的列表和描述。还有许多其他选择。有关详细信息,请参阅--help选项。
提示
使用--use_gpu选项执行时,它可以在Linux上使用Windows和Nvidia GPU(CUDA)上的DirectML进行高速语音合成。
此外,在Windows环境中,可以在只有内置CPU的GPU(IGPU)上执行DirectML推理,但是在大多数情况下,它比CPU推断要慢得多,因此不建议这样做。
有关更多信息,请参阅常见问题。
笔记
默认情况下,AivissPeech引擎可与端口号10101一起使用。
如果它与其他应用程序发生冲突,则可以使用--port选项将其更改为任何端口号。
警告
与VoiceVox引擎不同,Aivisspeech引擎未实现某些选项。
在Windows/MacOS上,您可以自己安装AivissPeech引擎,但是启动Aivisspeech引擎(随附Aivisspeech控制台)本身更容易。
使用AivissPeech发货的AivissPeech引擎run run.exe的路径如下:
C:Program FilesAivisSpeechAivisSpeech-Enginerun.exeC:Users(ユーザー名)AppDataLocalProgramsAivisSpeechAivisSpeech-Enginerun.exe 。/Applications/AivisSpeech.app/Contents/Resources/AivisSpeech-Engine/run~/Applications/AivisSpeech.app/Contents/Resources/AivisSpeech-Engine/run 。 笔记
默认模型(约250MB)和推理所需的BERT模型(大约1.3GB)将在第一个启动时自动下载,因此该初创公司最多需要几分钟才能完成。
请等待一段时间,直到创业完成。
要将语音综合模型添加到Aivisspeech引擎中,请参阅位于位置。
您还可以通过单击AivissPeech中的“设置”>“管理语音合成模型”来添加它。
在Linux + NVIDIA GPU环境中运行时,Onnx运行时支持的CUDA/CUDNN版本必须与主机环境的CUDA/CUDNN版本匹配,并且操作条件严格。
具体而言,Aivisspeech发动机使用的ONX运行时需要CUDA 12.x / cudnn 9.x或更高。
Docker的工作原理不管主机OS环境如何,因此我们建议与Docker一起安装它。
运行Docker容器时,请始终安装~/.local/share/AivisSpeech-Engine to/home /home/user/.local/share/AivisSpeech-Engine-Dev /share/aivisspeech-eengine-dev在容器中。
这样,即使您停止或重新启动了容器,您仍然可以维护已安装的语音合成模型和BERT模型缓存(约1.3GB)。
要将语音合成模型添加到Docker环境中的Aivisspeech引擎,请将模型文件(.AIVMX)放在~/.local/share/AivisSpeech-Engine/Models中。
重要的
确保将其固定在/home/user/.local/share/AivisSpeech-Engine-Dev上。
由于Docker映像上的Aivisspeech引擎不是使用Pyinstaller构建的,因此将数据文件夹名称命名为-Dev和AivisSpeech-Engine-Dev 。
docker pull ghcr.io/aivis-project/aivisspeech-engine:cpu-latest
docker run --rm -p ' 10101:10101 '
-v ~ /.local/share/AivisSpeech-Engine:/home/user/.local/share/AivisSpeech-Engine-Dev
ghcr.io/aivis-project/aivisspeech-engine:cpu-latestdocker pull ghcr.io/aivis-project/aivisspeech-engine:nvidia-latest
docker run --rm --gpus all -p ' 10101:10101 '
-v ~ /.local/share/AivisSpeech-Engine:/home/user/.local/share/AivisSpeech-Engine-Dev
ghcr.io/aivis-project/aivisspeech-engine:nvidia-latest当您在Bash中运行以下单线时,语音合成的WAV文件将输出到audio.wav 。
重要的
假定Aivisspeech引擎已经事先启动,并且Models directory:以下目录包含与样式ID相对应的语音合成模型(.AIVMX)。
# STYLE_ID は音声合成対象のスタイル ID 、別途 /speakers API から取得が必要
STYLE_ID=888753760 &&
echo -n "こんにちは、音声合成の世界へようこそ! " > text.txt &&
curl -s -X POST " 127.0.0.1:10101/audio_query?speaker= $STYLE_ID " --get --data-urlencode [email protected] > query.json &&
curl -s -H " Content-Type: application/json " -X POST -d @query.json " 127.0.0.1:10101/synthesis?speaker= $STYLE_ID " > audio.wav &&
rm text.txt query.json提示
有关详细的API请求和响应规格,请参阅API文档以及与VoiceVox API的兼容性。 API文档始终反映最新开发版本中的变化。
您可以通过访问http://127.0.0.1:10101/docs使用Aivisspeech引擎或正在进行的AivissPeech编辑器,查看运行Aivisspeech引擎的API文档(Swagger UI)。
Aivisspeech发动机通常与VoiceVox引擎的HTTP API兼容。
如果您的软件支持VoiceVox引擎的HTTP API,则应该能够通过简单地用http://127.0.0.1:10101 1010替换API URL来支持Aivisspeech引擎。
重要的
但是,如果您编辑从API客户端上的/audio_query API获得的AudioQuery内容,然后将其传递到/synthesis API,则由于规范的差异,可能无法正确合成语音(请参见下文)。
因此, Aivisspeech编辑器可以同时使用Aivisspeech引擎和VoiceVox引擎(使用多引擎功能时),但是您无法使用VoiceVox编辑器中的Aivisspeech引擎。
在VoiceVox编辑器中使用AivissPeech引擎大大降低了由于编辑器实现的限制而导致的语音合成质量。除了无法利用Aivisspeech引擎的唯一参数外,在调用非兼容函数时可能会发生错误。
我们强烈建议将其与Aivisspeech编辑器一起使用,以获得更好的语音综合结果。
笔记
尽管通常在一般API用例中应兼容,但除了以下内容以外,可能存在不兼容的API,因为具有根本不同模型架构的语音合成系统被强行包含在同一API规范中。
如果您通过问题报告,我们将修复任何兼容性改进。
以下是VoiceVox引擎对API规格的更改:
AIVM清单中包含的AIVMX文件中包含的扬声器风格的本地ID按序列号管理,从每个说话者开始为0。
在样式bert-vits2体系结构的语音综合模型中,此值与模型的超参数data.style2id的值匹配。
另一方面,VoiceVox Engine的API并未指定扬声器uuid( speaker_uuid ),并且仅将样式ID( style_id )传递给语音合成API,也许是由于历史原因。
VoiceVox引擎具有固定的扬声器和样式,因此开发团队能够唯一地管理“样式ID”。
同时,Aivisspeech引擎允许用户自由添加语音合成模型。
因此,无论添加哪种语音综合模型,VoiceVox API兼容的“样式ID”都必须是唯一的。
这是因为如果值不是唯一的,那么当添加新的语音合成模型时,现有模型中包含的扬声器样式和样式ID可能会重叠。
因此,Aivisspeech引擎在AIVM上结合了扬声器UUID和样式ID,以生成与VoiceVox API兼容的全球唯一“样式ID”。
特定的生成方法如下:
警告
因此,启用VoiceVox API的软件可能会出现意外问题,该软件不认为“样式ID”中包含32位签名的整数。
警告
不同的扬声器样式ID可以重叠(碰撞)的可能性极低,因为它们牺牲了扬声器UUID的全球唯一性,以适合32位签名的整数范围。
在这一点上,重复样式ID没有解决方法,但实际上,在大多数情况下,这并不是问题。
提示
可以从/speakers API中获得aivisspeech引擎自动生成的VoiceVox API兼容的“样式ID”。
此API返回Aivisspeech引擎上安装的扬声器信息列表。
AudioQuery类型规格AudioQuery类型是通过指定文本或音素序列来执行语音综合的查询。
VoiceVox引擎中AudioQuery类型的主要变化如下:
intonationScale字段的含义不同。intonationScale时:intonationScale为0.0至1.0,则style-bert-vits2对应于0.0至1.0的范围。intonationScale为1.0至2.0,则style-bert-vits2对应于1.0至10.0的范围。tempoDynamicsScale字段。tempoDynamicsScale时,如下所示:tempoDynamicsScale为0.0至1.0,则style-bert-vits2对应于0.0至0.2的范围。tempoDynamicsScale为1.0至2.0,则style-bert-vits2对应于0.2至1.0的范围。pitchScale场的规格不同。pauseLength和pauseLengthScale字段。kana场的规格不同。有关更改的更多信息,请参见model.py。
Mora类型规格更改Mora类型是代表语音文本的毛拉的数据结构。
提示
莫拉是实际发音时最小的声音分组单位(例如“ a”,“ ka”或“ o”)。
Mora类型不单独用于API请求响应,并且始终通过AudioQuery.accent_phrases[n].moras或AudioQuery.accent_phrases[n].pause_mora间接使用。
VoiceVox引擎中Mora类型的主要变化如下:
pause_mora ,但在Aivisspeech引擎中,它被视为正常的Moras。text是相同的符号, vowel设置为“ pau”。consonant / vowel字段仅读取。text字段的价值始终用于读取语音综合期间的文本。consonant_length / vowel_length / pitch场。有关更改的更多信息,请参见tts_pipeline/model.py。
Preset类型的规格Preset类型是用于确定编辑器上语音合成查询的初始值的预设信息。
这些变化通常对应于AudioQuery intonationScale / tempoDynamicsScale / pitchscale / pitchScale / pauseLength / pauseLengthScale中的字段规范中的更改。
有关更改的更多信息,请参见Preset/model.py。
警告
不支持唱歌和可取消的语音综合API。
它作为兼容性目的的终点而存在,但始终返回501 Not Implemented 。
有关更多信息,请查看应用程序/路由器/targin.py/app/路由器/tts_pipeline.py。
/singers/singer_info/cancellable_synthesis/sing_frame_audio_query/sing_frame_volume/frame_synthesis 警告
不支持提供变形功能的/synthesis_morphing API。
由于每个说话者的语音正时正常不同,因此无法实现(它有效但无法忍受),因此始终返回400 Bad Request 。
返回是否适用于每个扬声器/morphable_targets API是否可以使用变形。
有关更多信息,请检查应用程序/路由器/变形。
/synthesis_morphing/morphable_targets警告
它作为兼容性目的的参数存在,但始终被忽略。
有关更多信息,请查看应用程序/路由器/targin.py/app/路由器/tts_pipeline.py。
core_version参数enable_interrogative_upspeak参数どうですか…?只需添加一个“?”在文本的末尾大声朗读,您可以用可疑的语调阅读。 提示
请看一下Aivisspeech编辑的常见问题解答/问答。
intonationScale )将引起言语的突破。这是Aivisspeech引擎支持的Style-Bert-Vits2模型体系结构的当前规范。
根据扬声器和风格,如果您过多地提高了intonationScale ,则您的声音可能会变得奇怪,或者您最终可能会阅读不自然的声音。
允许您正确说话的intonationScale值的上限会因扬声器和样式而异。适当调整值。
在Aivisspeech引擎上,我们尝试确保正确的阅读和重音是正确的,但是有时候不可避免地是不正确的。
在内置词典中未注册的单词,例如专有名词和人们的名字(尤其是闪闪发光的名字),通常是不正确的。
您可以通过注册字典来更改这些单词的阅读方式。尝试从Aivisspeech编辑器或API中注册单词。
此外,对于复合单词和英语单词,无论单词的优先级如何,字典中注册的内容都不得反映。这是当前的规范。
Aivisspeech引擎旨在以相对较短的句子(例如句子或含义分组)中的语音综合。
因此,将长期句子一次超过1000个字符发送到/synthesis API可能会引起以下问题:
合成长句子时,我们建议将句子分开以下位置并将其发送到语音合成API。
没有硬性限制,但是每个语音综合最多具有500个字符是可取的。
提示
用语义休息的分隔句子往往会产生更自然的语调声音。
这是因为将与文本内容相对应的情感表达和语调一次应用于发送给语音综合API的整个句子。
通过正确划分句子,您可以重置每个句子的情感表达和语调,从而产生更自然的阅读。
仅在第一次启动AivissPeech时才需要Internet访问,因为下载了模型数据。
您可以在第二个或更高版本的启动下使用PC脱机。
这可以在当前正在运行的Aivisspeech引擎配置屏幕上完成。
当您访问http://127.0.0.1:[AivisSpeech Engine のポート番号]/setting时,Aivisspeech引擎配置屏幕将打开。
Aivisspeech引擎的默认端口号为10101 。
--use_gpu ),并且与CPU模式相比,语音仍然慢。GPU模式只能在具有内置CPU(IGPU)的PC上使用,但是在大多数情况下,它比CPU模式慢得多,因此不建议使用。
这是因为带有内置CPU的GPU的性能低于独立GPU(DGPU),并且不擅长像AI语音合成这样的重处理。
另一方面,如今CPU的性能得到了显着改善,仅CPU就可以高速产生音频。
因此,我们建议在没有DGPU的PC上使用CPU模式。
如果您使用的是Intel的第12代或更高版本的CPU(P-Core/E-Core混合配置),则音频生成的性能会根据Windows的功率设置而发生巨大变化。
这是因为默认的“平衡”模式使语音生成任务更容易分配到节省电力的电子核。
使用以下步骤更改设置,以充分利用P和E芯,并更快地产生语音。
*控制面板中的“电源计划”也具有“高性能”设置,但设置不同。
对于Intel第12代或更高版本的CPU,我们建议从Windows 11设置屏幕更改“电源模式”。
AivissPeech的目标是成为不受其使用限制的免费AI语音合成软件。
(这取决于交付可交付的语音综合模型的许可)至少,软件本身不需要信用,并且可以自由使用,无论是个人,公司,商业还是非商业目的。
...但是,我也希望更多的人了解Aivisspeech。
如果您愿意,如果您可以在可交付的某个地方归功于Aivisspeech,我将很高兴。 (信用格式留给您。)
它保存在以下文件夹中:
C:Users(ユーザー名)AppDataRoamingAivisSpeech-EngineLogs~/Library/Application Support/AivisSpeech-Engine/Logs~/.local/share/AivisSpeech-Engine/Logs如果发现问题,请使用以下方法之一进行报告:
GitHub问题(建议)
如果您有GitHub帐户,请通过我们的GitHub问题进行报告,我们可以提早回复。
Twitter(x)
您可以使用#AIVISSPEECH标签回复官方的AIVIS项目帐户,DM或Tweet。
接触表格
您也可以通过AIVIS项目联系表进行报告。
请尽可能地报告以下信息,我们将能够更快地响应。
VoiceVox是一个巨大的软件,如今仍在积极开发。
因此,Aivisspeech引擎正在根据以下策略开发最新版本的VoiceVox引擎:
voicevox_engine目录,导入语句更改的差异将是巨大的,因此未执行品牌重塑。该过程与原始VoiceVox发动机明显不同。
您必须事先安装Python 3.11。
# Poetry と pre-commit をインストール
pip install poetry poetry-plugin-export pre-commit
# pre-commit を有効化
pre-commit install
# 依存関係をすべてインストール
poetry install该过程与原始VoiceVox发动机明显不同。
# 開発環境で AivisSpeech Engine を起動
poetry run task serve
# AivisSpeech Engine のヘルプを表示
poetry run task serve --help
# コードフォーマットを自動修正
poetry run task format
# コードフォーマットをチェック
poetry run task lint
# typos によるタイポチェック
poetry run task typos
# テストを実行
poetry run task test
# テストのスナップショットを更新
poetry run task update-snapshots
# ライセンス情報を更新
poetry run task update-licenses
# AivisSpeech Engine をビルド
poetry run task build在基本VoiceVox引擎双重许可中,只有LGPL-3.0将独立继承。
下面的文档/以下文档是从原始的VoiceVox引擎文档中删除的,而无需修改。不能保证这些文档的内容也将与Aivisspeech引擎一起使用。
这是VoiceVox的引擎。
实际上,它是HTTP服务器,因此您可以通过发送请求来综合文本和语音。
(编辑器是VoiceVox,核心是VoiceVox Core,可以在此处找到整体结构。)
这是根据您的需求量身定制的指南。
在此处下载相应的引擎。
请参阅API文档。
通过运行VoiceVox引擎或编辑器,您还可以查看正在启动的引擎的文档。
对于未来的计划,与VoiceVox语音合成引擎的合作也可能很有用。
docker pull voicevox/voicevox_engine:cpu-latest
docker run --rm -p ' 127.0.0.1:50021:50021 ' voicevox/voicevox_engine:cpu-latestdocker pull voicevox/voicevox_engine:nvidia-latest
docker run --rm --gpus all -p ' 127.0.0.1:50021:50021 ' voicevox/voicevox_engine:nvidia-latest使用GPU版本时,可能会根据环境发生错误。在这种情况下,您可以通过在docker run中添加--runtime=nvidia来解决问题。
echo -n "こんにちは、音声合成の世界へようこそ" > text.txt
curl -s
-X POST
" 127.0.0.1:50021/audio_query?speaker=1 "
--get --data-urlencode [email protected]
> query.json
curl -s
-H " Content-Type: application/json "
-X POST
-d @query.json
" 127.0.0.1:50021/synthesis?speaker=1 "
> audio.wav生成的音频的采样率为24,000Hz,因此有些音频播放器可能无法播放它。
speaker指定的值是在/speakers端点处获得的style_id 。它被任命为speaker的兼容性。
您可以通过编辑使用/audio_query获得的语音合成查询的参数来调整音频。
例如,尝试以更快的速度说话1.5倍。
echo -n "こんにちは、音声合成の世界へようこそ" > text.txt
curl -s
-X POST
" 127.0.0.1:50021/audio_query?speaker=1 "
--get --data-urlencode [email protected]
> query.json
# sed を使用して speedScale の値を 1.5 に変更
sed -i -r ' s/"speedScale":[0-9.]+/"speedScale":1.5/ ' query.json
curl -s
-H " Content-Type: application/json "
-X POST
-d @query.json
" 127.0.0.1:50021/synthesis?speaker=1 "
> audio_fast.wav“ Aquestalk风符号”是一种指定,它指定了如何仅使用Katakana和符号读取。 Aquestalk这部分与原始符号不同。
Aquestalk样式遵循以下规则:
/ 、 。仅在分开、插入静音间隔。_放在卡纳面前,那个卡纳将变得沉默。'指定重音位置。所有重音词都必须指定一个重音位置。?您可以通过添加(全宽)来发表问题对/audio_query的响应描述了引擎法官的读数。
通过修改此过程,您可以控制声音阅读和口音。
# 読ませたい文章をutf-8でtext.txtに書き出す
echo -n "ディープラーニングは万能薬ではありません" > text.txt
curl -s
-X POST
" 127.0.0.1:50021/audio_query?speaker=1 "
--get --data-urlencode [email protected]
> query.json
cat query.json | grep -o -E " " kana " : " .* " "
# 結果... "kana":"ディ'イプ/ラ'アニングワ/バンノオヤクデワアリマセ'ン"
# "ディイプラ'アニングワ/バンノ'オヤクデワ/アリマセ'ン"と読ませたいので、
# is_kana=trueをつけてイントネーションを取得しnewphrases.jsonに保存
echo -n "ディイプラ'アニングワ/バンノ'オヤクデワ/アリマセ'ン" > kana.txt
curl -s
-X POST
" 127.0.0.1:50021/accent_phrases?speaker=1&is_kana=true "
--get --data-urlencode [email protected]
> newphrases.json
# query.jsonの"accent_phrases"の内容をnewphrases.jsonの内容に置き換える
cat query.json | sed -e " s/[{.*}]/ $( cat newphrases.json ) /g " > newquery.json
curl -s
-H " Content-Type: application/json "
-X POST
-d @newquery.json
" 127.0.0.1:50021/synthesis?speaker=1 "
> audio.wav您可以浏览用户字典,添加,编辑和删除API中的单词。
您可以通过向/user_dict提交get请求来检索用户字典列表。
curl -s -X GET " 127.0.0.1:50021/user_dict " 您可以通过向/user_dict_word提交帖子请求将单词添加到您的用户字典中。
需要以下URL参数:
本文对于重音核心的位置将很有用。
〇类型的数字部分变成了重音核心位置。
https://tdmelodic.readthedocs.io/ja/latest/pages/introduction.html
成功的返回值是分配给单词的UUID字符串。
surface= " test "
pronunciation= "テスト"
accent_type= " 1 "
curl -s -X POST " 127.0.0.1:50021/user_dict_word "
--get
--data-urlencode " surface= $surface "
--data-urlencode " pronunciation= $pronunciation "
--data-urlencode " accent_type= $accent_type " 您可以通过向/user_dict_word/{word_uuid}提交put请求来修改用户字典中的单词。
需要以下URL参数:
添加单词时可以检查word_uuid,也可以通过引用用户字典来检查。
如果成功,返回值为204 No Content 。
surface= " test2 "
pronunciation= "テストツー"
accent_type= " 2 "
# 環境によってword_uuidは適宜書き換えてください
word_uuid= " cce59b5f-86ab-42b9-bb75-9fd3407f1e2d "
curl -s -X PUT " 127.0.0.1:50021/user_dict_word/ $word_uuid "
--get
--data-urlencode " surface= $surface "
--data-urlencode " pronunciation= $pronunciation "
--data-urlencode " accent_type= $accent_type " 您可以通过将删除请求提交到/user_dict_word/{word_uuid}中删除用户字典中的单词。
添加单词时可以检查word_uuid,也可以通过引用用户字典来检查。
如果成功,返回值为204 No Content 。
# 環境によってword_uuidは適宜書き換えてください
word_uuid= " cce59b5f-86ab-42b9-bb75-9fd3407f1e2d "
curl -s -X DELETE " 127.0.0.1:50021/user_dict_word/ $word_uuid " 您可以在引擎设置页面上的“导出和导入用户词典”部分中导入和导出用户词典。
您还可以使用API导入和导出用户词典。
使用POST /import_user_dict进行导入和GET /user_dict导出。
有关论点的详细信息,请参阅API文档。
ユーザーディレクトリにあるpresets.yamlを編集することでキャラクターや話速などのプリセットを使うことができます。
echo -n "プリセットをうまく活用すれば、サードパーティ間で同じ設定を使うことができます" > text.txt
# プリセット情報を取得
curl -s -X GET " 127.0.0.1:50021/presets " > presets.json
preset_id= $( cat presets.json | sed -r ' s/^.+"id":s?([0-9]+?).+$/1/g ' )
style_id= $( cat presets.json | sed -r ' s/^.+"style_id":s?([0-9]+?).+$/1/g ' )
# 音声合成用のクエリを取得
curl -s
-X POST
" 127.0.0.1:50021/audio_query_from_preset?preset_id= $preset_id "
--get --data-urlencode [email protected]
> query.json
# 音声合成
curl -s
-H " Content-Type: application/json "
-X POST
-d @query.json
" 127.0.0.1:50021/synthesis?speaker= $style_id "
> audio.wavspeaker_uuidは、 /speakersで確認できますidは重複してはいけません/synthesis_morphingでは、2 種類のスタイルでそれぞれ合成された音声を元に、モーフィングした音声を生成します。
echo -n "モーフィングを利用することで、2種類の声を混ぜることができます。 " > text.txt
curl -s
-X POST
" 127.0.0.1:50021/audio_query?speaker=8 "
--get --data-urlencode [email protected]
> query.json
# 元のスタイルでの合成結果
curl -s
-H " Content-Type: application/json "
-X POST
-d @query.json
" 127.0.0.1:50021/synthesis?speaker=8 "
> audio.wav
export MORPH_RATE=0.5
# スタイル2種類分の音声合成+WORLDによる音声分析が入るため時間が掛かるので注意
curl -s
-H " Content-Type: application/json "
-X POST
-d @query.json
" 127.0.0.1:50021/synthesis_morphing?base_speaker=8&target_speaker=10&morph_rate= $MORPH_RATE "
> audio.wav
export MORPH_RATE=0.9
# query、base_speaker、target_speakerが同じ場合はキャッシュが使用されるため比較的高速に生成される
curl -s
-H " Content-Type: application/json "
-X POST
-d @query.json
" 127.0.0.1:50021/synthesis_morphing?base_speaker=8&target_speaker=10&morph_rate= $MORPH_RATE "
> audio.wav追加情報の中の portrait.png を取得するコードです。
(jqを使用して json をパースしています。)
curl -s -X GET " 127.0.0.1:50021/speaker_info?speaker_uuid=7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff "
| jq -r " .portrait "
| base64 -d
> portrait.png/cancellable_synthesisでは通信を切断した場合に即座に計算リソースが開放されます。
( /synthesisでは通信を切断しても最後まで音声合成の計算が行われます)
この API は実験的機能であり、エンジン起動時に引数で--enable_cancellable_synthesisを指定しないと有効化されません。
音声合成に必要なパラメータは/synthesisと同様です。
echo -n ' {
"notes": [
{ "key": null, "frame_length": 15, "lyric": "" },
{ "key": 60, "frame_length": 45, "lyric": "ド" },
{ "key": 62, "frame_length": 45, "lyric": "レ" },
{ "key": 64, "frame_length": 45, "lyric": "ミ" },
{ "key": null, "frame_length": 15, "lyric": "" }
]
} ' > score.json
curl -s
-H " Content-Type: application/json "
-X POST
-d @score.json
" 127.0.0.1:50021/sing_frame_audio_query?speaker=6000 "
> query.json
curl -s
-H " Content-Type: application/json "
-X POST
-d @query.json
" 127.0.0.1:50021/frame_synthesis?speaker=3001 "
> audio.wav楽譜のkeyは MIDI 番号です。
lyricは歌詞で、任意の文字列を指定できますが、エンジンによってはひらがな・カタカナ1モーラ以外の文字列はエラーになることがあります。
フレームレートはデフォルトが 93.75Hz で、エンジンマニフェストのframe_rateで取得できます。
1つ目のノートは無音である必要があります。
/sing_frame_audio_queryで指定できるspeakerは、 /singersで取得できるスタイルの内、種類がsingかsinging_teacherなスタイルのstyle_idです。
/frame_synthesisで指定できるspeakerは、 /singersで取得できるスタイルの内、種類がframe_decodeのstyle_idです。
引数がspeakerという名前になっているのは、他の API と一貫性をもたせるためです。
/sing_frame_audio_queryと/frame_synthesisに異なるスタイルを指定することも可能です。
VOICEVOX ではセキュリティ保護のためlocalhost・127.0.0.1・app://・Origin なし以外の Origin からリクエストを受け入れないようになっています。 そのため、一部のサードパーティアプリからのレスポンスを受け取れない可能性があります。
これを回避する方法として、エンジンから設定できる UI を用意しています。
実行時引数--disable_mutable_apiか環境変数VV_DISABLE_MUTABLE_API=1を指定することで、エンジンの設定や辞書などを変更する API を無効にできます。
リクエスト・レスポンスの文字コードはすべて UTF-8 です。
エンジン起動時に引数を指定できます。詳しいことは-h引数でヘルプを確認してください。
$ python run.py -h
usage: run.py [-h] [--host HOST] [--port PORT] [--use_gpu] [--voicevox_dir VOICEVOX_DIR] [--voicelib_dir VOICELIB_DIR] [--runtime_dir RUNTIME_DIR] [--enable_mock] [--enable_cancellable_synthesis]
[--init_processes INIT_PROCESSES] [--load_all_models] [--cpu_num_threads CPU_NUM_THREADS] [--output_log_utf8] [--cors_policy_mode {CorsPolicyMode.all,CorsPolicyMode.localapps}]
[--allow_origin [ALLOW_ORIGIN ...]] [--setting_file SETTING_FILE] [--preset_file PRESET_FILE] [--disable_mutable_api]
VOICEVOX のエンジンです。
options:
-h , --help show this help message and exit
--host HOST 接続を受け付けるホストアドレスです。
--port PORT 接続を受け付けるポート番号です。
--use_gpu GPUを使って音声合成するようになります。
--voicevox_dir VOICEVOX_DIR
VOICEVOXのディレクトリパスです。
--voicelib_dir VOICELIB_DIR
VOICEVOX COREのディレクトリパスです。
--runtime_dir RUNTIME_DIR
VOICEVOX COREで使用するライブラリのディレクトリパスです。
--enable_mock VOICEVOX COREを使わずモックで音声合成を行います。
--enable_cancellable_synthesis
音声合成を途中でキャンセルできるようになります。
--init_processes INIT_PROCESSES
cancellable_synthesis機能の初期化時に生成するプロセス数です。
--load_all_models 起動時に全ての音声合成モデルを読み込みます。
--cpu_num_threads CPU_NUM_THREADS
音声合成を行うスレッド数です。指定しない場合、代わりに環境変数 VV_CPU_NUM_THREADS の値が使われます。VV_CPU_NUM_THREADS が空文字列でなく数値でもない場合はエラー終了します。
--output_log_utf8 ログ出力をUTF-8でおこないます。指定しない場合、代わりに環境変数 VV_OUTPUT_LOG_UTF8 の値が使われます。VV_OUTPUT_LOG_UTF8 の値が1の場合はUTF-8で、0または空文字、値がない場合は環境によって自動的に決定されます。
--cors_policy_mode {CorsPolicyMode.all,CorsPolicyMode.localapps}
CORSの許可モード。allまたはlocalappsが指定できます。allはすべてを許可します。localappsはオリジン間リソース共有ポリシーを、app://.とlocalhost関連に限定します。その他のオリジンはallow_originオプションで追加できます。デフォルトはlocalapps。このオプションは--
setting_fileで指定される設定ファイルよりも優先されます。
--allow_origin [ALLOW_ORIGIN ...]
許可するオリジンを指定します。スペースで区切ることで複数指定できます。このオプションは--setting_fileで指定される設定ファイルよりも優先されます。
--setting_file SETTING_FILE
設定ファイルを指定できます。
--preset_file PRESET_FILE
プリセットファイルを指定できます。指定がない場合、環境変数 VV_PRESET_FILE、ユーザーディレクトリのpresets.yamlを順に探します。
--disable_mutable_api
辞書登録や設定変更など、エンジンの静的なデータを変更するAPIを無効化します。指定しない場合、代わりに環境変数 VV_DISABLE_MUTABLE_API の値が使われます。VV_DISABLE_MUTABLE_API の値が1の場合は無効化で、0または空文字、値がない場合は無視されます。エンジンディレクトリ内にあるファイルを全て消去し、新しいものに置き換えてください。
VOICEVOX ENGINE は皆さんのコントリビューションをお待ちしています!
詳細は CONTRIBUTING.md をご覧ください。
We also have development discussions and chats on the VOICEVOX unofficial Discord server.请随时加入我们。
なお、Issue を解決するプルリクエストを作成される際は、別の方と同じ Issue に取り組むことを避けるため、Issue 側で取り組み始めたことを伝えるか、最初に Draft プルリクエストを作成することを推奨しています。
Python 3.11.9を用いて開発されています。 インストールするには、各 OS ごとの C/C++ コンパイラ、CMake が必要になります。
# 実行環境のインストール
python -m pip install -r requirements.txt
# 開発環境・テスト環境・ビルド環境のインストール
python -m pip install -r requirements-dev.txt -r requirements-build.txtコマンドライン引数の詳細は以下のコマンドで確認してください。
python run.py --help # 製品版 VOICEVOX でサーバーを起動
VOICEVOX_DIR= " C:/path/to/voicevox " # 製品版 VOICEVOX ディレクトリのパス
python run.py --voicevox_dir= $VOICEVOX_DIR # モックでサーバー起動
python run.py --enable_mock # ログをUTF8に変更
python run.py --output_log_utf8
# もしくは VV_OUTPUT_LOG_UTF8=1 python run.py CPU スレッド数が未指定の場合は、論理コア数の半分が使われます。(殆どの CPU で、これは全体の処理能力の半分です)
もし IaaS 上で実行していたり、専用サーバーで実行している場合など、
エンジンが使う処理能力を調節したい場合は、CPU スレッド数を指定することで実現できます。
python run.py --voicevox_dir= $VOICEVOX_DIR --cpu_num_threads=4 export VV_CPU_NUM_THREADS=4
python run.py --voicevox_dir= $VOICEVOX_DIR VOICEVOX Core 0.5.4 以降のコアを使用する事が可能です。
Mac での libtorch 版コアのサポートはしていません。
製品版 VOICEVOX もしくはコンパイル済みエンジンのディレクトリを--voicevox_dir引数で指定すると、そのバージョンのコアが使用されます。
python run.py --voicevox_dir= " /path/to/voicevox " Mac では、 DYLD_LIBRARY_PATHの指定が必要です。
DYLD_LIBRARY_PATH= " /path/to/voicevox " python run.py --voicevox_dir= " /path/to/voicevox " VOICEVOX Core の zip ファイルを解凍したディレクトリを--voicelib_dir引数で指定します。
また、コアのバージョンに合わせて、libtorchやonnxruntime (共有ライブラリ) のディレクトリを--runtime_dir引数で指定します。
ただし、システムの探索パス上に libtorch、onnxruntime がある場合、 --runtime_dir引数の指定は不要です。
--voicelib_dir引数、 --runtime_dir引数は複数回使用可能です。
API エンドポイントでコアのバージョンを指定する場合はcore_version引数を指定してください。(未指定の場合は最新のコアが使用されます)
python run.py --voicelib_dir= " /path/to/voicevox_core " --runtime_dir= " /path/to/libtorch_or_onnx " Mac では、 --runtime_dir引数の代わりにDYLD_LIBRARY_PATHの指定が必要です。
DYLD_LIBRARY_PATH= " /path/to/onnx " python run.py --voicelib_dir= " /path/to/voicevox_core " 以下のディレクトリにある音声ライブラリは自動で読み込まれます。
<user_data_dir>/voicevox-engine/core_libraries/<user_data_dir>/voicevox-engine-dev/core_libraries/ <user_data_dir>は OS によって異なります。
C:Users<username>AppDataLocal/Users/<username>/Library/Application Support//home/<username>/.local/share/pyinstallerを用いたパッケージ化と Dockerfile を用いたコンテナ化によりローカルでビルドが可能です。
手順の詳細は 貢献者ガイド#ビルド を御覧ください。
GitHub を用いる場合、fork したリポジトリで GitHub Actions によるビルドが可能です。
Actions を ON にし、workflow_dispatch でbuild-engine-package.ymlを起動すればビルドできます。 成果物は Release にアップロードされます。 ビルドに必要な GitHub Actions の設定は 貢献者ガイド#GitHub Actions を御覧ください。
pytestを用いたテストと各種リンターを用いた静的解析が可能です。
手順の詳細は 貢献者ガイド#テスト, 貢献者ガイド#静的解析 を御覧ください。
依存関係はpoetryで管理されています。また、導入可能な依存ライブラリにはライセンス上の制約があります。
詳細は 貢献者ガイド#パッケージ を御覧ください。
VOICEVOX エディターでは、複数のエンジンを同時に起動することができます。 この機能を利用することで、自作の音声合成エンジンや既存の音声合成エンジンを VOICEVOX エディター上で動かすことが可能です。
VOICEVOX API に準拠した複数のエンジンの Web API をポートを分けて起動し、統一的に扱うことでマルチエンジン機能を実現しています。 エディターがそれぞれのエンジンを実行バイナリ経由で起動し、EngineID と結びつけて設定や状態を個別管理します。
VOICEVOX API 準拠エンジンを起動する実行バイナリを作ることで対応が可能です。 VOICEVOX ENGINE リポジトリを fork し、一部の機能を改造するのが簡単です。
改造すべき点はエンジン情報・キャラクター情報・音声合成の3点です。
エンジンの情報はルート直下のマニフェストファイル( engine_manifest.json )で管理されています。 この形式のマニフェストファイルは VOICEVOX API 準拠エンジンに必須です。 マニフェストファイル内の情報を見て適宜変更してください。 音声合成手法によっては、例えばモーフィング機能など、VOICEVOX と同じ機能を持つことができない場合があります。 その場合はマニフェストファイル内のsupported_features内の情報を適宜変更してください。
キャラクター情報はresources/character_infoディレクトリ内のファイルで管理されています。 ダミーのアイコンなどが用意されているので適宜変更してください。
音声合成はvoicevox_engine/tts_pipeline/tts_engine.pyで行われています。 VOICEVOX API での音声合成は、エンジン側で音声合成用のクエリAudioQueryの初期値を作成してユーザーに返し、ユーザーが必要に応じてクエリを編集したあと、エンジンがクエリに従って音声合成することで実現しています。 クエリ作成は/audio_queryエンドポイントで、音声合成は/synthesisエンドポイントで行っており、最低この2つに対応すれば VOICEVOX API に準拠したことになります。
VVPP ファイルとして配布するのがおすすめです。 VVPP は「VOICEVOX プラグインパッケージ」の略で、中身はビルドしたエンジンなどを含んだディレクトリの Zip ファイルです。 拡張子を.vvppにすると、ダブルクリックで VOICEVOX エディターにインストールできます。
エディター側は受け取った VVPP ファイルをローカルディスク上に Zip 展開したあと、ルートの直下にあるengine_manifest.jsonに従ってファイルを探査します。 VOICEVOX エディターにうまく読み込ませられないときは、エディターのエラーログを参照してください。
また、 xxx.vvppは分割して連番を付けたxxx.0.vvpppファイルとして配布することも可能です。 これはファイル容量が大きくて配布が困難な場合に有用です。 インストールに必要なvvppおよびvvpppファイルはvvpp.txtファイルにリストアップしています。
voicevox-client @voicevox-client ・・・ VOICEVOX ENGINE の各言語向け API ラッパー
LGPL v3 と、ソースコードの公開が不要な別ライセンスのデュアルライセンスです。 別ライセンスを取得したい場合は、ヒホに求めてください。
X アカウント: @hiho_karuta