? Motor AIVISSPeech: Ai Voice I Matting System - Texto para o mecanismo de fala
O Aivisspeech Engine é um mecanismo de síntese de fala japonês baseado no mecanismo VoiceVox.
Ele é incorporado ao AIVISSPEECH, um software de síntese de fala japonês e pode facilmente gerar vozes emocionais.
AudioQuery alteradasMora alteradasPresetSe você deseja usar o AIVISSPEECH, visite o site oficial do AIVISSPEECH.
Esta página contém informações principalmente para desenvolvedores.
Abaixo está um documento para os usuários:
Compatível com PCs com Windows, MacOS e Linux.
Para iniciar o mecanismo AIVISSPEECH, seu PC precisa de pelo menos 3 GB de memória livre (RAM).
Dica
O aplicativo de desktop, Aivisspeech, é suportado apenas no Windows e MacOS.
Enquanto isso, o mecanismo AIVISSPeech, um servidor de síntese de fala, também está disponível para o Ubuntu/Debian Linux.
Observação
Não verificamos ativamente a operação em Macs com CPUs Intel.
Os Macs com CPUs Intel já estão fora de produção e está se tornando mais difícil preparar um ambiente de verificação e construção. Recomendamos o uso deste produto em um Mac com Apple Silicon o máximo possível.
Aviso
No Windows 10, verificamos apenas a operação da versão 22H2.
Houve relatos de casos em que o AIVISSPeech Engine falha e não começa em versões mais antigas do Windows 10 que não têm suporte.
Do ponto de vista da segurança, recomendamos fortemente que você use o Windows 10 Ambientes apenas atualize para a versão mínima 22H2 antes de usar o serviço.
O mecanismo AIVISSPEECH suporta arquivos de modelo de síntese de fala no formato AIVMX ( AI Vis Voice Model para Onn X ) ( .aivmx ).
AIVM ( Ai Vis Voice M odel) / AIVMX ( Ai Vis Voice Model para Onn X ) é um formato de arquivo aberto para modelos de síntese de fala de IA que combinam modelos pré-treinados, hiperparameters, vetores de estilo, metadados de alto-falantes (nomes, lojas, licencios, icons, amostras de voz etc.), em filmes .
Para obter mais informações sobre as especificações do AIVM e os arquivos AIVM/AIVMX, consulte as especificações do AIVM desenvolvidas no projeto AIVIS.
Observação
"AIVM" também é um termo geral para as especificações do formato AIVM/AIVMX e especificações de metadados.
Especificamente, o arquivo AIVM é um arquivo de modelo no "Formato SafeTetenss com metadados AIVM adicionado", e o arquivo AIVMX é um arquivo de modelo em "Formato OnNX com metadados AIVM adicionados".
"Metadados AIVM" refere -se a vários metadados que estão ligados a um modelo treinado, conforme definido na especificação do AIVM.
Importante
O mecanismo AIVISSPEECH também é uma implementação de referência da especificação AIVM, mas é deliberadamente projetada para suportar apenas arquivos AIVMX.
Isso elimina a dependência do Pytorch, reduz o tamanho da instalação e fornece uma inferência rápida da CPU com o tempo de execução do ONNX.
Dica
O gerador AIVM permite gerar arquivos AIVM/AIVMX dos modelos de síntese de fala existentes e editar os metadados dos arquivos AIVM/AIVMX existentes!
Os arquivos AIVMX para as seguintes arquiteturas de modelo estão disponíveis:
Style-Bert-VITS2Style-Bert-VITS2 (JP-Extra) Observação
A especificação de metadados do AIVM permite definir alto -falantes multilíngues, mas o motor AIVISSPEECH, como o motor VoiceVox, suporta apenas a síntese de fala japonesa.
Portanto, mesmo se você usar um modelo de síntese de fala que suporta inglês ou chinês, a síntese de fala diferente de japonês não pode ser realizada.
Coloque os arquivos AIVMX nas seguintes pastas para cada sistema operacional:
C:Users(ユーザー名)AppDataRoamingAivisSpeech-EngineModels~/Library/Application Support/AivisSpeech-Engine/Models~/.local/share/AivisSpeech-Engine/Models O caminho da pasta real será exibido como Models directory: nos logs imediatamente após o início do mecanismo AIVISSPEECH.
Dica
Ao usar o AIVISSPEECH, você pode adicionar facilmente modelos de síntese de fala da tela da interface do usuário do AIVISSPEECH!
Para usuários finais, recomendamos que você adicione um modelo de síntese de fala usando esse método.
Importante
A pasta de implantação para a versão de desenvolvimento (se estiver em execução sem ser construída com o PyInstaller) não é AivisSpeech-Engine ou abaixo AivisSpeech-Engine-Dev .
O mecanismo AIVISSPeech oferece opções úteis de linha de comando, como:
--host 0.0.0.0 permite que o mecanismo AIVISSPEECH seja acessado de outros dispositivos na mesma rede.--cors_policy_mode all para permitir solicitações CORS de todos os domínios.--load_all_models para pré -carregar todos os modelos de síntese de fala instalados quando o mecanismo AIVISSPEECH iniciar.--help para exibir uma lista e descrição de todas as opções disponíveis. Existem muitas outras opções disponíveis. Para detalhes, consulte a opção --help .
Dica
Quando executado com a opção --use_gpu , ele pode utilizar o DirectML no Windows e NVIDIA GPU (CUDA) no Linux para a síntese de fala de alta velocidade.
Além disso, nos ambientes do Windows, a inferência DirectML pode ser realizada em PCs com apenas GPUs (IGPUs) com CPUs embutidas, mas na maioria dos casos é muito mais lenta que a inferência da CPU, portanto isso não é recomendado.
Para mais informações, consulte Perguntas frequentes.
Observação
O mecanismo AIVISSPEECH trabalha com o número da porta 10101 por padrão.
Se entrar em conflito com outros aplicativos, você poderá alterá -lo para qualquer número da porta usando a opção --port .
Aviso
Ao contrário do mecanismo VoiceVox, algumas opções não são implementadas no mecanismo AIVISSPEECH.
No Windows/MacOS, você pode instalar o mecanismo AIVISSPEECH por conta própria, mas é mais fácil iniciar o mecanismo AIVISSPEECH, que vem com o console AIVISSPEECH, por conta própria.
O caminho para o arquivo executável do mecanismo AIVISSPEECH ( run.exe / run ) que é enviado com aivisspeech é o seguinte:
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 . Observação
O modelo padrão (aprox. 250 MB) e o modelo BERT (aproximadamente 1,3 GB) necessários para a inferência são baixados automaticamente na primeira inicialização, portanto, levará alguns minutos para a startup ser concluída.
Por favor, espere um pouco até que a startup esteja concluída.
Para adicionar um modelo de síntese de fala ao mecanismo AIVISSPEECH, consulte onde colocar o arquivo de modelo.
Você também pode adicioná -lo clicando em "Configurações"> "Gerenciar o modelo de síntese de fala" no AIVISSPEECH.
Ao executar em um ambiente Linux + NVIDIA GPU, a versão CUDA/CUDNN que o OnNX Runttime suporta deve corresponder à versão CUDA/CUDNN do ambiente do host, e as condições operacionais são rigorosas.
Especificamente, o tempo de execução do ONNX usado pelo mecanismo AIVISSPEECH requer CUDA 12.x / cudnn 9.x ou superior.
O Docker funciona independentemente do ambiente do sistema operacional host, por isso recomendamos instalá -lo com o Docker.
Ao executar um contêiner do docker, sempre monte ~/.local/share/AivisSpeech-Engine para /home/user/.local/share/AivisSpeech-Engine-Dev no contêiner.
Dessa forma, mesmo depois de parar ou reiniciar o contêiner, você ainda pode manter o modelo de síntese de fala instalado e o cache do modelo BERT (aproximadamente 1,3 GB).
Para adicionar um modelo de síntese de fala ao mecanismo AIVISSPEECH em um ambiente do Docker, coloque o arquivo de modelo (.AIVMX) em ~/.local/share/AivisSpeech-Engine/Models no ambiente do host.
Importante
Certifique-se de montá-lo contra /home/user/.local/share/AivisSpeech-Engine-Dev .
Como o mecanismo AIVISSPEECH na imagem do Docker não é construído com o PyInstaller, o nome da pasta de dados recebe o sufixo de -Dev e 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 Quando você executa a seguinte liner em bash, o arquivo WAV sintetizado de fala será emitido para audio.wav .
Importante
Supõe -se que o mecanismo AIVISSPEECH tenha sido iniciado com antecedência e que Models directory: o diretório a seguir contém o modelo de síntese de fala (.AIVMX) que corresponde ao ID do estilo.
# 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.jsonDica
Para obter especificações detalhadas de solicitação e resposta da API, consulte a documentação e a compatibilidade da API com a API VoiceVox. A documentação da API sempre reflete alterações na versão mais recente de desenvolvimento.
Você pode visualizar a documentação da API (interface do usuário da Swagger) para o mecanismo AIVISSPEECH em execução acessando http://127.0.0.1:10101/docs com o mecanismo AIVISSPEECH ou o AIVISSPEECH Editor em andamento.
O mecanismo AIVISSPeech é geralmente compatível com a API HTTP do mecanismo VoiceVox.
Se você possui software que suporta a API HTTP do VoiceVox Engine, poderá suportar o mecanismo AIVISSPEECH simplesmente substituindo o URL da API por http://127.0.0.1:10101 .
Importante
No entanto, se você editar o conteúdo AudioQuery obtido da API /audio_query no cliente da API e depois a passar para a API /synthesis , pode não ser possível sintetizar adequadamente a fala devido a diferenças nas especificações (veja abaixo).
Devido a isso, o editor AIVISSPEECH pode usar o mecanismo AIVISSPEECH e o mecanismo VoiceVox (ao usar funções multi-motor), mas você não pode usar o mecanismo AIVISSPEECH do editor VoiceVox.
O uso do mecanismo AIVISSPEECH no editor VoiceVox reduz significativamente a qualidade da síntese de fala devido a limitações na implementação do editor. Além de não conseguir utilizar os parâmetros exclusivos do mecanismo AIVISSPEECH, existe a possibilidade de que um erro possa ocorrer ao chamar funções não compatíveis.
É altamente recomendável usá -lo com o editor AIVISSPEECH para obter melhores resultados de síntese de fala.
Observação
Embora geralmente deva ser compatível nos casos gerais de uso da API, pode haver APIs incompatíveis que não sejam as seguintes, pois os sistemas de síntese de fala com arquiteturas modelo fundamentalmente diferentes são incluídas à força nas mesmas especificações da API.
Se você o denunciar por meio do problema, corrigiremos quaisquer melhorias de compatibilidade.
A seguir, são apresentadas alterações nas especificações da API do mecanismo VoiceVox:
Os IDs locais no estilo do alto-falante no manifesto AIVM contido no arquivo AIVMX são gerenciados em números de série a partir de 0 para cada orador.
No modelo de síntese de fala da arquitetura Style-Bert-Vits2, esse valor corresponde ao valor dos data.style2id hyperparameter do modelo.style2id.
Por outro lado, a API do mecanismo VoiceVox não especifica um alto -falante UUID ( speaker_uuid ) e apenas o ID do estilo ( style_id ) é passado para a API de síntese de fala, talvez devido a razões históricas.
O mecanismo VoiceVox possui alto -falantes e estilos fixos, para que a equipe de desenvolvimento conseguiu gerenciar exclusivamente o "ID do estilo".
Enquanto isso, o mecanismo AIVISSPEECH permite que os usuários adicionem livremente modelos de síntese de fala.
Portanto, o "ID do estilo" compatível com a API VoiceVox deve ser único, independentemente do modelo de síntese de fala.
Isso ocorre porque se o valor não for exclusivo, os IDs de estilo e estilo do alto -falante incluídos no modelo existente podem se sobrepor quando um novo modelo de síntese de fala é adicionado.
Portanto, o mecanismo AIVISSPEECH combina o alto -falante Uuid e o ID de estilo no manifesto do AIVM para gerar um "ID de estilo" globalmente único compatível com a API VoiceVox.
O método de geração específico é o seguinte:
Aviso
Devido a isso, problemas inesperados podem ocorrer com o software habilitado para API VoiceVox que não assume que um número inteiro assinado de 32 bits está incluído no "ID do estilo".
Aviso
É uma probabilidade extremamente baixa que diferentes IDs de estilo de alto-falante possam se sobrepor (colisão) porque eles estão sacrificando a singularidade global dos Uuids do falante para caber dentro de uma faixa inteira assinada de 32 bits.
Neste ponto, não há solução alternativa para IDs de estilo duplicado, mas, na realidade, isso não é um problema na maioria dos casos.
Dica
Os "IDs de estilo" compatíveis com API VoiceVox gerados automaticamente pelo mecanismo AIVISSPEECH podem ser obtidos na API /speakers .
Esta API retorna uma lista de informações do alto -falante instaladas no mecanismo AIVISSPEECH.
AudioQuery alteradas O tipo AudioQuery é uma consulta para realizar a síntese de fala, especificando seqüências de texto ou fonemas.
As principais mudanças do tipo AudioQuery no mecanismo VoiceVox são as seguintes:
intonationScale é diferente.intonationScale no mecanismo AIVISSPEECH:intonationScale for de 0,0 a 1,0, o estilo-bert-vits2 corresponde à faixa de 0,0 a 1,0.intonationScale for de 1,0 a 2.0, o estilo-bert-vits2 corresponde ao intervalo de 1,0 a 10,0.tempoDynamicsScale por si só.tempoDynamicsScale no mecanismo AIVISSPEECH:tempoDynamicsScale for de 0,0 a 1,0, o estilo-bert-vits2 corresponde à faixa de 0,0 a 0,2.tempoDynamicsScale for de 1,0 a 2,0, o estilo-bert-vits2 corresponde à faixa de 0,2 a 1,0.pitchScale são diferentes.pauseLength e pauseLengthScale não são suportados.kana são diferentes.Para obter mais informações sobre as alterações, consulte Model.py.
Mora alteradas Mora é uma estrutura de dados que representa o maura do texto da fala.
Dica
Uma mora é a menor unidade de agrupamento de som quando realmente pronunciada (como "a", "ka" ou "o").
Os tipos Mora não são usados sozinhos para respostas da solicitação da API e sempre são usados indiretamente através do AudioQuery.accent_phrases[n].moras ou AudioQuery.accent_phrases[n].pause_mora .
As principais mudanças do tipo Mora no mecanismo VoiceVox são as seguintes:
pause_mora , mas no mecanismo Aivisspeech, é tratado como morais normais.text é o mesmo símbolo e vowel está definida como "Pau".consonant / vowel é somente leitura.text é sempre usado para ler o texto durante a síntese de fala.consonant_length / vowel_length / pitch não são suportados.Para obter mais informações sobre as alterações, consulte TTS_PIPINE/Model.py.
Preset Preset é informações predefinidas para determinar o valor inicial de uma consulta de síntese de fala no editor.
As alterações geralmente correspondem às alterações na especificação dos campos para intonationScale / tempoDynamicsScale / pitchScale / pauseLength / pauseLengthScale descritas em tipos de AudioQuery .
Para obter mais informações sobre as alterações, consulte Preset/Model.py.
Aviso
As APIs de síntese de fala canceladas e canceláveis não são suportadas.
Existe como um ponto de extremidade para fins de compatibilidade, mas sempre retorna 501 Not Implemented .
Para obter mais informações, verifique o aplicativo/roteadores/caracteres.py/app/roteadores/tts_pipline.py.
/singers/singer_info/cancellable_synthesis/sing_frame_audio_query/sing_frame_volume/frame_synthesis Aviso
A API /synthesis_morphing que fornece funcionalidade de transformação não é suportada.
Como o tempo de voz difere para cada alto -falante, é impossível implementar (ele funciona, mas não suporta a audição), portanto, 400 Bad Request é sempre devolvida.
Retorna se a Morphing está disponível para cada alto -falante /morphable_targets API não permite que se transforme para todos os alto -falantes.
Para mais informações, consulte o aplicativo/roteadores/morphing.py.
/synthesis_morphing/morphable_targetsAviso
Existe como um parâmetro para fins de compatibilidade, mas é sempre ignorado.
Para obter mais informações, verifique o aplicativo/roteadores/caracteres.py/app/roteadores/tts_pipline.py.
core_versionenable_interrogative_upspeakどうですか…? Basta adicionar um "?" até o final do texto para ler em voz alta, como este, e você pode lê -lo com uma entonação questionável. Dica
Por favor, dê uma olhada nas Perguntas frequentes do Aivisspeech Editor/perguntas e respostas.
intonationScale ) causará um surto de fala. Esta é a especificação atual da arquitetura do modelo de estilo-bert-vits2 suportada pelo mecanismo AIVISSPEECH.
Dependendo do alto -falante e estilo, se você aumentar demais intonationScale , sua voz pode se tornar estranha ou você pode acabar lendo uma voz não natural.
O limite superior do valor de intonationScale que permite que você fale adequadamente varia dependendo do alto -falante e estilo. Ajuste o valor adequadamente.
No mecanismo AIVISSPeech, tentamos garantir que a leitura e o sotaque corretos estejam corretos de uma só vez, mas há momentos em que é inevitável que esteja incorreto.
As palavras que não são registradas no dicionário interno, como substantivos adequados e nomes das pessoas (especialmente nomes brilhantes), geralmente não são lidos corretamente.
Você pode mudar a maneira como essas palavras são lidas registrando o dicionário. Tente registrar palavras do editor AIVISSPEECH ou da API.
Além disso, para palavras compostas e palavras em inglês, o conteúdo registrado no dicionário não pode ser refletido, independentemente da prioridade da palavra. Esta é a especificação atual.
O mecanismo AIVISSPEECH foi projetado para sintetizar a fala em frases relativamente curtas, como sentenças ou agrupamentos de significado.
Portanto, o envio de frases longas que excedem 1000 caracteres de uma só vez à API /synthesis pode causar problemas como o seguinte:
Ao sintetizar frases longas, recomendamos separar as frases nas seguintes posições e enviá -las para a API de síntese de fala.
Não há limites duros, mas é desejável ter até 500 caracteres por síntese de fala.
Dica
A divisão de frases com intervalos semânticos tende a produzir mais sons de entonação natural.
Isso ocorre porque expressões emocionais e entonações correspondentes ao conteúdo do texto são aplicadas a toda a frase enviada à API de síntese de fala de uma só vez.
Ao dividir adequadamente as frases, você pode redefinir a expressão emocional e a entonação de cada frase, resultando em uma leitura mais natural.
O acesso à Internet é necessário apenas ao iniciar o AIVISSPEECH pela primeira vez porque os dados do modelo são baixados.
Você pode usar o PC offline na segunda ou posterior inicialização.
Isso pode ser feito na tela de configuração do mecanismo AIVISSPEECH que está em execução no momento.
Quando você acessa http://127.0.0.1:[AivisSpeech Engine のポート番号]/setting do seu navegador Ao iniciar o mecanismo AIVISSPEECH, a tela de configuração do mecanismo AIVISSPEECH será aberta.
O número da porta padrão para o motor AIVISSPEECH é 10101 .
--use_gpu ) e ainda produz voz mais lenta que o modo CPU.O modo GPU pode ser usado apenas em PCs com CPU interno (IGPU), mas na maioria dos casos é muito mais lenta que o modo CPU, por isso não é recomendado.
Isso ocorre porque as GPUs com CPUs embutidas têm desempenho menor que as GPUs independentes (DGPUs) e não são boas em processamento pesado, como a síntese de fala da IA.
Por outro lado, o desempenho das CPUs hoje em dia foi significativamente melhorado e a CPU sozinha pode gerar áudio em alta velocidade.
Portanto, recomendamos o uso do modo CPU em PCs que não possuem DGPU.
Se você estiver usando um PC com a 12ª geração da Intel ou posterior CPU (configuração híbrida-core/e-core), o desempenho da geração de áudio pode mudar drasticamente, dependendo das configurações de energia do Windows.
Isso ocorre porque o modo de "equilíbrio" padrão facilita a atribuição de tarefas de geração de voz aos núcleos eletrônicos que economizam energia.
Altere as configurações usando as etapas abaixo para aproveitar ao máximo os núcleos P e E e gerar voz mais rápida.
*O "plano de energia" no painel de controle também possui uma configuração de "alto desempenho", mas as configurações são diferentes.
Para a Intel 12th Generation ou posterior CPUs, recomendamos alterar o "modo de energia" da tela Configurações do Windows 11.
O Aivisspeech pretende ser um software de síntese de fala de IA gratuito que não está vinculado ao seu uso.
(Depende da licença do modelo de síntese de fala usado na entrega), no mínimo, o próprio software não requer crédito e pode ser usado livremente, seja para indivíduos, corporações, fins comerciais ou não comerciais.
... No entanto, também quero que mais pessoas saibam sobre a Aivisspeech.
Se você quiser, eu ficaria feliz se você pudesse creditar a Aivisspeech em algum lugar da entrega. (O formato de crédito é deixado para você.)
É salvo na seguinte pasta:
C:Users(ユーザー名)AppDataRoamingAivisSpeech-EngineLogs~/Library/Application Support/AivisSpeech-Engine/Logs~/.local/share/AivisSpeech-Engine/LogsSe você encontrar um problema, denuncie -o usando um dos seguintes métodos:
Problema do GitHub (recomendado)
Se você possui uma conta do GitHub, relate -se por meio de nosso problema no GitHub e podemos responder mais cedo.
Twitter (X)
Você pode responder à conta oficial do projeto AIVIS, DM ou tweet com a hashtag #aivisspeech.
Formulário de contato
Você também pode se reportar através do formulário de contato do projeto AIVIS.
Relate as seguintes informações o máximo possível, e poderemos responder mais rapidamente.
O VoiceVox é um software enorme que ainda está ativamente desenvolvido hoje.
Portanto, o mecanismo AIVISSPEECH está desenvolvendo a versão mais recente do mecanismo VoiceVox sob a seguinte política:
voicevox_engine e a diferença nas alterações da declaração de importação serão enormes, portanto, a rebranding não será realizada.手順はオリジナルの VOICEVOX ENGINE と大幅に異なります。
事前に Python 3.11 がインストールされている必要があります。
# Poetry と pre-commit をインストール
pip install poetry poetry-plugin-export pre-commit
# pre-commit を有効化
pre-commit install
# 依存関係をすべてインストール
poetry install手順はオリジナルの VOICEVOX ENGINE と大幅に異なります。
# 開発環境で 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 ENGINE のデュアルライセンスのうち、LGPL-3.0 のみを単独で継承します。
下記ならびに docs/ 以下のドキュメントは、VOICEVOX ENGINE 本家のドキュメントを改変なしでそのまま引き継いでいます。これらのドキュメントの内容が AivisSpeech Engine にも通用するかは保証されません。
VOICEVOX のエンジンです。
実態は HTTP サーバーなので、リクエストを送信すればテキスト音声合成できます。
(エディターは VOICEVOX 、 コアは VOICEVOX CORE 、 全体構成は こちら に詳細があります。)
目的に合わせたガイドはこちらです。
こちらから対応するエンジンをダウンロードしてください。
API ドキュメントをご参照ください。
VOICEVOX エンジンもしくはエディタを起動した状態で http://127.0.0.1:50021/docs にアクセスすると、起動中のエンジンのドキュメントも確認できます。
今後の方針などについては 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 版を利用する場合、環境によってエラーが発生することがあります。その場合、 --runtime=nvidiaをdocker runにつけて実行すると解決できることがあります。
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生成される音声はサンプリングレートが 24000Hz と少し特殊なため、音声プレーヤーによっては再生できない場合があります。
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 風記法」はカタカナと記号だけで読み方を指定する記法です。AquesTalk 本家の記法とは一部が異なります。
AquesTalk 風記法は次のルールに従います:
/または、で区切る。 、で区切った場合に限り無音区間が挿入される。_を入れるとそのカナは無声化される'で指定する。全てのアクセント句にはアクセント位置を 1 つ指定する必要がある。? (全角)を入れることにより疑問文の発音ができる/audio_queryのレスポンスにはエンジンが判断した読み方がAquesTalk 風記法で記述されます。
これを修正することで音声の読み仮名やアクセントを制御できます。
# 読ませたい文章を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.wavAPI からユーザー辞書の参照、単語の追加、編集、削除を行うことができます。
/user_dictに GET リクエストを投げることでユーザー辞書の一覧を取得することができます。
curl -s -X GET " 127.0.0.1:50021/user_dict " /user_dict_wordに POST リクエストを投げる事でユーザー辞書に単語を追加することができます。
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}に DELETE リクエストを投げる事でユーザー辞書の単語を削除することができます。
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 をご覧ください。
また VoiceVox 非公式 Discord サーバーにて、開発の議論や雑談を行っています。 Por favor, sinta -se à vontade para se juntar a nós.
なお、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