? Moteur Aivispeech: Ai v oice i mitation s ytestem - Texte au moteur vocal
Le moteur Aivispeech est un moteur de synthèse de la parole japonais basé sur le moteur VoiceVox.
Il est intégré à Aivispeech, un logiciel de synthèse de la parole japonais, et peut facilement générer des voix émotionnelles.
AudioQuery modifiéeMora ont changéPresetSi vous cherchez à utiliser Aivispeech, veuillez visiter le site officiel d'Aivispeech.
Cette page contient des informations principalement pour les développeurs.
Vous trouverez ci-dessous un document pour les utilisateurs:
Compatible avec les PC avec Windows, MacOS et Linux.
Pour démarrer le moteur Aivispeech, votre PC a besoin d'au moins 3 Go de mémoire libre (RAM).
Conseil
L'application de bureau, AivispeEch, n'est prise en charge que sur Windows et MacOS.
Pendant ce temps, AivisPpeech Engine, un serveur API de synthèse vocal, est également disponible pour Ubuntu / Debian Linux.
Note
Nous n'avons pas vérifié activement l'opération sur Mac avec des processeurs Intel.
Les Mac avec des processeurs Intel sont déjà hors de production, et il devient de plus en plus difficile de préparer un environnement de vérification et de construction. Nous vous recommandons d'utiliser ce produit sur un Mac avec du silicium Apple autant que possible.
Avertissement
Sur Windows 10, nous vérifions uniquement le fonctionnement de la version 22h2.
Il y a eu des rapports de cas où le moteur Aivispeech se bloque et ne commence pas sur les anciennes versions de Windows 10 qui n'ont aucun support.
Du point de vue de la sécurité, nous vous recommandons fortement d'utiliser les environnements Windows 10 uniquement à la mise à jour de la version minimale 22H2 avant d'utiliser le service.
Le moteur AivispeEch prend en charge les fichiers de modèle de synthèse de la parole dans le format AIVMX ( Ai vis v oice m odel pour onn x ) ( .aivmx ).
AIVM ( AI vis v oice m odel) / aivmx ( ai vis v oice m odel pour onn x ) est un format de fichier ouvert pour les modèles de synthèse de la parole AI qui combine des modèles pré-formés, des hyperparamètres, des vecteurs de style, des métadonnées de haut-parleurs (noms, des vue où l'on
Pour plus d'informations sur les spécifications AIVM et les fichiers AIVM / AIVMX, veuillez vous référer aux spécifications AIVM développées dans le projet AIVIS.
Note
"AIVM" est également un terme général pour les spécifications du format AIVM / AIVMX et les spécifications de métadonnées.
Plus précisément, le fichier AIVM est un fichier de modèle au format de sécurité avec les métadonnées AIVM ajoutés ", et le fichier AIVMX est un fichier de modèle au format" ONNX avec les métadonnées AIVM ajoutées ".
"AIVM Metadata" fait référence à diverses métadonnées liées à un modèle formé tel que défini dans la spécification AIVM.
Important
Le moteur AivispeEch est également une implémentation de référence de la spécification AIVM, mais il est délibérément conçu pour prendre en charge uniquement les fichiers AIVMX.
Cela élimine la dépendance à Pytorch, réduit la taille de l'installation et fournit une inférence CPU rapide avec l'exécution d'ONNX.
Conseil
Le générateur AIVM vous permet de générer des fichiers AIVM / AIVMX à partir des modèles de synthèse de la parole existants et de modifier les métadonnées des fichiers AIVM / AIVMX existants!
Les fichiers AIVMX pour les architectures de modèle suivants sont disponibles:
Style-Bert-VITS2Style-Bert-VITS2 (JP-Extra) Note
La spécification des métadonnées AIVM vous permet de définir des haut-parleurs multilingues, mais le moteur Aivispeech, comme le moteur VoiceVox, ne prend en charge que la synthèse de la parole japonaise.
Par conséquent, même si vous utilisez un modèle de synthèse de la parole qui soutient l'anglais ou le chinois, une synthèse de la parole autre que le japonais ne peut pas être effectuée.
Placez les fichiers AIVMX dans les dossiers suivants pour chaque système d'exploitation:
C:Users(ユーザー名)AppDataRoamingAivisSpeech-EngineModels~/Library/Application Support/AivisSpeech-Engine/Models~/.local/share/AivisSpeech-Engine/Models Le chemin du dossier réel sera affiché en tant que Models directory: dans les journaux immédiatement après le démarrage du moteur Aivispeech.
Conseil
Lorsque vous utilisez AivisPpeech, vous pouvez facilement ajouter des modèles de synthèse de la parole à partir de l'écran de l'interface utilisateur Aivispeech!
Pour les utilisateurs finaux, nous vous recommandons d'ajouter un modèle de synthèse de la parole en utilisant cette méthode.
Important
Le dossier de déploiement de la version de développement (s'il fonctionne sans être construit avec Pyinstaller) n'est pas AivisSpeech-Engine ou inférieur à AivisSpeech-Engine-Dev .
Le moteur Aivispeech propose des options de ligne de commande utiles telles que:
--host 0.0.0.0 permet d'accéder au moteur Aivispeech à partir d'autres appareils du même réseau.--cors_policy_mode all pour autoriser les demandes CORS à tous les domaines.--load_all_models pour précharger tous les modèles de synthèse de la parole installés lorsque le moteur AivisPeEch démarre.--help pour afficher une liste et une description de toutes les options disponibles. Il existe de nombreuses autres options disponibles. Pour plus de détails, veuillez vous référer à l'option --help .
Conseil
Lorsqu'il est exécuté avec l'option --use_gpu , il peut utiliser DirectML sur Windows et Nvidia GPU (CUDA) sur Linux pour la synthèse de la parole à grande vitesse.
De plus, dans les environnements Windows, l'inférence DirectML peut être effectuée sur des PC avec seulement des GPU (IGPU) avec des CPU intégrés, mais dans la plupart des cas, il est beaucoup plus lent que l'inférence du processeur, ce n'est donc pas recommandé.
Pour plus d'informations, voir les questions fréquemment posées.
Note
Le moteur Aivispeech fonctionne avec le numéro de port 10101 par défaut.
S'il entre en conflit avec d'autres applications, vous pouvez le changer en n'importe quel numéro de port à l'aide de l'option --port .
Avertissement
Contrairement au moteur VoiceVox, certaines options ne sont pas implémentées dans le moteur Aivispeech.
Sur Windows / MacOS, vous pouvez installer le moteur Aivispeech seul, mais il est plus facile de démarrer le moteur Aivispeech, qui est livré avec la console Aivispeech, seul.
Le chemin d'accès au fichier exécutable du moteur Aivispeech ( run.exe / run ) qui est expédié avec Aivispeech est le suivant:
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 . Note
Le modèle par défaut (environ 250 Mo) et le modèle Bert (environ 1,3 Go) requis pour l'inférence sont automatiquement téléchargés au premier démarrage, il prendra donc jusqu'à quelques minutes pour que le démarrage se termine.
Veuillez patienter un moment jusqu'à ce que le démarrage soit terminé.
Pour ajouter un modèle de synthèse de la parole au moteur Aivispeech, voir où placer le fichier du modèle.
Vous pouvez également l'ajouter en cliquant sur "Paramètres"> "Gérer le modèle de synthèse de la parole" dans AivispeEch.
Lors de l'exécution dans un environnement GPU Linux + Nvidia, la version CUDA / CUDNN que les supports d'exécution ONNX doivent correspondre à la version CUDA / CUDNN de l'environnement hôte, et les conditions de fonctionnement sont strictes.
Plus précisément, le temps d'exécution ONNX utilisé par Aivispeech Engine nécessite CUDA 12.x / CUDNN 9.x ou plus.
Docker fonctionne quel que soit l'environnement du système d'exploitation hôte, nous vous recommandons donc de l'installer avec Docker.
Lors de l'exécution d'un conteneur Docker, montez toujours ~/.local/share/AivisSpeech-Engine vers /home/user/.local/share/AivisSpeech-Engine-Dev dans le conteneur.
De cette façon, même après avoir arrêté ou redémarré le conteneur, vous pouvez toujours maintenir le modèle de synthèse de la parole installé et le cache du modèle Bert (environ 1,3 Go).
Pour ajouter un modèle de synthèse de la parole au moteur AivispeEch dans un environnement Docker, placez le fichier modèle (.aivmx) sous ~/.local/share/AivisSpeech-Engine/Models dans l'environnement hôte.
Important
Assurez-vous de le monter contre /home/user/.local/share/AivisSpeech-Engine-Dev .
Étant donné que le moteur Aivispeech sur l'image Docker n'est pas construit avec Pyinstaller, le nom du dossier de données reçoit le suffixe de -Dev et 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 Lorsque vous exécutez la ligne unique suivante en bash, le fichier WAV synthétisé par la parole sera sorti sur audio.wav .
Important
Il est supposé que le moteur Aivispeech a été démarré au préalable et que Models directory: Le répertoire suivant contient le modèle de synthèse de la parole (.aivmx) qui correspond à l'ID de style.
# 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.jsonConseil
Pour les spécifications détaillées de la demande d'API et de la réponse, veuillez vous référer à la documentation de l'API et à la compatibilité avec l'API VoiceVox. La documentation de l'API reflète toujours les changements dans la dernière version de développement.
Vous pouvez afficher la documentation de l'API (UI Swagger) pour le moteur Aivispeech en cours d'exécution en accédant à http://127.0.0.1:10101/docs avec le moteur Aivispeech ou l'éditeur Aivispeech en cours.
Le moteur Aivispeech est généralement compatible avec l'API HTTP du moteur de VoiceVox.
Si vous avez un logiciel qui prend en charge l'API HTTP de VoiceVox Engine, vous devriez être en mesure de prendre en charge AivispeEch Engine en remplaçant simplement l'URL de l'API par http://127.0.0.1:10101 .
Important
Cependant, si vous modifiez le contenu AudioQuery obtenu à partir de l'API /audio_query sur le client de l'API, puis le transmet à l'API /synthesis , il peut ne pas être possible de synthétiser correctement la parole en raison de différences de spécifications (voir ci-dessous).
Pour cette raison, l'éditeur AivispeEch peut utiliser à la fois le moteur AivispeEch et le moteur VoiceVox (lorsque vous utilisez des fonctions multi-moteurs), mais vous ne pouvez pas utiliser le moteur Aivispeech de l'éditeur VoiceVox.
L'utilisation du moteur AivispeEch dans l'éditeur VoiceVox réduit considérablement la qualité de la synthèse de la parole en raison des limites de la mise en œuvre de l'éditeur. En plus d'être incapable d'utiliser les paramètres uniques du moteur Aivispeech, il est possible qu'une erreur puisse se produire lors de l'appel des fonctions non compatibles.
Nous vous recommandons fortement de l'utiliser avec l'éditeur AivispeEch pour obtenir de meilleurs résultats de synthèse de la parole.
Note
Bien qu'il devrait être généralement compatible dans les cas d'utilisation générale d'API, il peut y avoir des API incompatibles autres que les éléments suivants, car les systèmes de synthèse de la parole avec des architectures de modèle fondamentalement différents sont inclus de force dans les mêmes spécifications de l'API.
Si vous le signalez via le problème, nous corrigerons toute amélioration de la compatibilité.
Voici des modifications des spécifications de l'API du moteur VoiceVox:
Les identifiants locaux de style haut-parleur dans le manifeste AIVM contenu dans le fichier AIVMX sont gérés en numéros de série à partir de 0 pour chaque haut-parleur.
Dans le modèle de synthèse de la parole de l'architecture Style-Bert-Vits2, cette valeur correspond à la valeur des data.style2id hyperparamètres du modèle.
D'un autre côté, l'API de VoiceVox Engine ne spécifie pas un haut-parleur UUID ( speaker_uuid ) et seul l'ID de style ( style_id ) est transmis à l'API de synthèse de la parole, peut-être pour des raisons historiques.
Le moteur VoiceVox a des haut-parleurs et des styles fixes, donc l'équipe de développement a pu gérer de manière unique «l'ID de style».
Pendant ce temps, AivisPpeech Engine permet aux utilisateurs d'ajouter librement des modèles de synthèse de la parole.
Par conséquent, le "style de style" compatible de l'API VoiceVox doit être unique quel que soit le modèle de synthèse de la parole.
En effet, si la valeur n'est pas unique, le style de haut-parleur et les ID de style inclus dans le modèle existant peuvent se chevaucher lorsqu'un nouveau modèle de synthèse vocale est ajouté.
Par conséquent, le moteur Aivispeech combine le haut-parleur UUID et l'identifiant de style sur le manifeste AIVM pour générer un «ID de style» unique à l'échelle mondiale avec l'API VoiceVox.
La méthode de génération spécifique est la suivante:
Avertissement
Pour cette raison, des problèmes inattendus peuvent se produire avec des logiciels compatibles VOCHEVOX qui ne supposent pas qu'un entier signé 32 bits est inclus dans «l'identifiant de style».
Avertissement
Il est extrêmement faible que les différents ID de style de haut-parleur puissent se chevaucher (collision) car ils sacrifient l'unicité globale des UUID de haut-parleur pour s'adapter à une gamme entière signée 32 bits.
À ce stade, il n'y a pas de solution de contournement pour les ID de style en double, mais en réalité, ce n'est pas un problème dans la plupart des cas.
Conseil
Les "ID de style" compatibles de l'API VoiceVox générés automatiquement par le moteur AivispeEch peuvent être obtenus à partir de l'API /speakers .
Cette API renvoie une liste des informations de haut-parleur installées sur le moteur Aivispeech.
AudioQuery modifiée Le type AudioQuery est une requête pour effectuer une synthèse de la parole en spécifiant des séquences de texte ou de phonèmes.
Les principaux modifications du type AudioQuery dans le moteur VoiceVox sont les suivants:
intonationScale est différente.intonationScale en moteur Aivispeech:intonationScale sont de 0,0 à 1,0, Style-Bert-Vits2 correspond à la plage de 0,0 à 1,0.intonationScale est de 1,0 à 2.0, Style-Bert-Vits2 correspond à la plage de 1,0 à 10.0.tempoDynamicsScale en soi.tempoDynamicsScale dans le moteur Aivispeech:tempoDynamicsScale est de 0,0 à 1,0, Style-Bert-Vits2 correspond à la plage de 0,0 à 0,2.tempoDynamicsScale est de 1,0 à 2,0, Style-Bert-Vits2 correspond à la plage de 0,2 à 1,0.pitchScale sont différentes.pauseLength et pauseLengthScale ne sont pas pris en charge.kana sont différentes.Pour plus d'informations sur les modifications, voir Model.py.
Mora ont changé Mora est une structure de données qui représente le Maura du texte de la parole.
Conseil
Une Mora est la plus petite unité de regroupement du son lorsqu'elle est réellement prononcée (comme "A", "Ka" ou "O").
Les types Mora ne sont pas utilisés seuls pour les réponses de la demande d'API et sont toujours utilisés indirectement via AudioQuery.accent_phrases[n].moras ou AudioQuery.accent_phrases[n].pause_mora .
Les principaux changements du type Mora dans le moteur VoiceVox sont les suivants:
pause_mora , mais dans le moteur Aivispeech, il est traité comme des moras normaux.text est le même symbole et vowel est définie sur "Pau".consonant / vowel est en lecture seule.text est toujours utilisée pour lire du texte pendant la synthèse de la parole.consonant_length / vowel_length / pitch ne sont pas pris en charge.Pour plus d'informations sur les modifications, voir TTS_PIPELINE / MODÈLE.PY.
Preset Preset est des informations prédéfinies pour déterminer la valeur initiale d'une requête de synthèse de la parole sur l'éditeur.
Les modifications correspondent généralement aux changements dans la spécification des champs pour intonationScale / tempoDynamicsScale / pitchScale / pauseLength / pauseLengthScale décrit dans les types AudioQuery .
Pour plus d'informations sur les modifications, voir Preset / Model.py.
Avertissement
Les API de synthèse de la parole de chant et d'annulation ne sont pas prises en charge.
Il existe en tant que point final à des fins de compatibilité, mais renvoie toujours 501 Not Implemented .
Pour plus d'informations, veuillez consulter l'application / routeurs / caractères.py / app / routeurs / tts_pipeline.py.
/singers/singer_info/cancellable_synthesis/sing_frame_audio_query/sing_frame_volume/frame_synthesis Avertissement
L'API /synthesis_morphing qui fournit des fonctionnalités de morphing n'est pas prise en charge.
Parce que le timing vocal diffère pour chaque haut-parleur, il est impossible de mettre en œuvre (cela fonctionne mais ne peut pas être écouté), donc 400 Bad Request est toujours retourné.
Renvoie si le morphing est disponible pour chaque haut-parleur /morphable_targets L'API interdit le morphing pour tous les haut-parleurs.
Pour plus d'informations, veuillez consulter l'application / routeurs / morphing.py.
/synthesis_morphing/morphable_targetsAvertissement
Il existe en tant que paramètre à des fins de compatibilité, mais est toujours ignoré.
Pour plus d'informations, veuillez consulter l'application / routeurs / caractères.py / app / routeurs / tts_pipeline.py.
core_versionenable_interrogative_upspeakどうですか…? Ajoutez simplement un "?" À la fin du texte pour lire à haute voix, comme ceci, et vous pouvez le lire avec une intonation douteuse. Conseil
Veuillez également jeter un œil à la FAQ / Q&A de l'éditeur Aivispeech.
intonationScale ) entraînera une poussée de discours. Il s'agit de la spécification actuelle de l'architecture du modèle Style-Bert-Vits2 prise en charge par Aivispeech Engine.
Selon l'orateur et le style, si vous augmentez trop intonationScale , votre voix peut devenir étrange ou vous pouvez finir par lire une voix contre nature.
La limite supérieure de intonationScale qui vous permet de parler correctement variera en fonction du haut-parleur et du style. Ajustez la valeur de manière appropriée.
Chez Aivispeech Engine, nous essayons de nous assurer que la lecture et l'accent corrects sont corrects en une seule fois, mais il y a des moments où il est inévitable qu'il soit incorrect.
Les mots qui ne sont pas enregistrés dans le dictionnaire intégré, tels que les noms appropriés et les noms des gens (en particulier les noms scintillants), ne sont souvent pas lus correctement.
Vous pouvez modifier la façon dont ces mots sont lus en enregistrant le dictionnaire. Essayez d'enregistrer les mots de l'éditeur AivispeEch ou de l'API.
De plus, pour les mots composés et les mots anglais, le contenu enregistré dans le dictionnaire peut ne pas être reflété quelle que soit la priorité du mot. Il s'agit de la spécification actuelle.
Le moteur Aivispeech est conçu pour synthétiser la parole en phrases relativement courtes, telles que des phrases ou des groupes de sens.
Par conséquent, l'envoi de phrases longues qui dépassent 1000 caractères à la fois à /synthesis peut causer des problèmes comme les suivants:
Lors de la synthèse de longues phrases, nous vous recommandons de séparer les phrases aux positions suivantes et de les envoyer à l'API de synthèse de la parole.
Il n'y a pas de limites difficiles, mais il est souhaitable d'avoir jusqu'à 500 caractères par synthèse de la parole.
Conseil
Diviser les phrases avec des pauses sémantiques a tendance à produire des sons d'intonation plus naturels.
En effet, les expressions émotionnelles et les intonations correspondant au contenu du texte sont appliquées à la phrase entière envoyée à l'API de synthèse de la parole à la fois.
En divisant correctement les phrases, vous pouvez réinitialiser l'expression émotionnelle et l'intonation de chaque phrase, entraînant une lecture plus naturelle.
L'accès Internet n'est requis que lors du démarrage de Aivispeech pour la première fois car les données du modèle sont téléchargées.
Vous pouvez utiliser le PC hors ligne sur le deuxième démarrage ou ultérieur.
Cela peut être fait sur l'écran de configuration du moteur Aivispeech qui est en cours d'exécution.
Lorsque vous accédez http://127.0.0.1:[AivisSpeech Engine のポート番号]/setting de votre navigateur lors du démarrage du moteur Aivispeech, l'écran de configuration du moteur Aivispeech s'ouvrira.
Le numéro de port par défaut pour le moteur Aivispeech est 10101 .
--use_gpu ) et produit toujours la voix plus lente que le mode CPU.Le mode GPU peut être utilisé sur des PC avec CPU intégrés (IGPU), mais dans la plupart des cas, il est beaucoup plus lent que le mode CPU, il n'est donc pas recommandé.
En effet, les GPU avec des CPU intégrés ont des performances plus faibles que les GPU indépendants (DGPU) et ne sont pas bons pour le traitement lourd comme la synthèse de la parole AI.
D'un autre côté, les performances des CPU de nos jours ont été considérablement améliorées, et le CPU seul peut générer de l'audio à grande vitesse.
Par conséquent, nous vous recommandons d'utiliser le mode CPU sur des PC qui n'ont pas de DGPU.
Si vous utilisez un PC avec la 12e génération d'Intel ou CPU ultérieure (configuration hybride P-Core / E-Core), les performances de la génération audio peuvent changer considérablement en fonction des paramètres d'alimentation de Windows.
En effet
Modifiez les paramètres en utilisant les étapes ci-dessous pour tirer le meilleur parti des noyaux P et E et générer plus rapidement la voix.
* Le "plan d'alimentation" dans le panneau de configuration a également un paramètre "haute performance", mais les paramètres sont différents.
Pour les processeurs Intel 12e génération ou ultérieurs, nous vous recommandons de modifier le "mode d'alimentation" de l'écran des paramètres de Windows 11.
Aivispeech vise à être un logiciel de synthèse de parole AI libre qui n'est pas lié par son utilisation.
(Cela dépend de la licence du modèle de synthèse de la parole utilisée dans le livrable) À tout le moins, le logiciel lui-même ne nécessite pas de crédit et peut être utilisé librement, que ce soit pour des particuliers, des sociétés, des fins commerciales ou non commerciales.
... Cependant, je veux aussi que plus de gens connaissent Aivispeech.
Si vous le souhaitez, je serais heureux si vous pouviez créditer Aivispeech quelque part dans le livrable. (Le format de crédit vous est laissé.)
Il est enregistré dans le dossier suivant:
C:Users(ユーザー名)AppDataRoamingAivisSpeech-EngineLogs~/Library/Application Support/AivisSpeech-Engine/Logs~/.local/share/AivisSpeech-Engine/LogsSi vous trouvez un problème, veuillez le signaler en utilisant l'une des méthodes suivantes:
Problème de github (recommandé)
Si vous avez un compte GitHub, veuillez vous présenter via notre problème GitHub et nous pouvons répondre tôt.
Twitter (x)
Vous pouvez répondre au compte officiel du projet AIVIS, DM ou à Tweet avec le hashtag #aivisspeech.
Formulaire de contact
Vous pouvez également vous présenter via le formulaire de contact du projet AIVIS.
Veuillez signaler autant que possible les informations suivantes et nous pourrons répondre plus rapidement.
VoiceVox est un énorme logiciel qui est encore activement développé aujourd'hui.
Par conséquent, le moteur Aivispeech développe la dernière version du moteur VoiceVox sous la politique suivante:
voicevox_engine et la différence dans les modifications de l'instruction IMPORT sera énorme, donc le changement de marque n'est pas effectué. La procédure diffère considérablement du moteur VoiceVox d'origine.
Vous devez faire installer Python 3.11 à l'avance.
# Poetry と pre-commit をインストール
pip install poetry poetry-plugin-export pre-commit
# pre-commit を有効化
pre-commit install
# 依存関係をすべてインストール
poetry installLa procédure diffère considérablement du moteur VoiceVox d'origine.
# 開発環境で 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 buildParmi les licences à double moteur de la base du moteur, seule LGPL-3.0 sera héritée indépendamment.
Ci-dessous et les documents DOCS / les documents suivants sont reportés à partir du document Original VoiceVox Engine sans modification. Il n'est pas garanti que le contenu de ces documents fonctionnera également avec AivisPpeech Engine.
Ceci est le moteur de VoiceVox.
En réalité, il s'agit d'un serveur HTTP, vous pouvez donc synthétiser du texte et de la parole en envoyant une demande.
(L'éditeur est VoiceVox, le noyau est VoiceVox Core, et la structure globale peut être trouvée ici.)
Voici un guide adapté à vos besoins.
Téléchargez le moteur correspondant ici.
Veuillez vous référer à la documentation de l'API.
Avec le moteur ou l'éditeur VoiceVox en cours d'exécution, vous pouvez également afficher la documentation pour le démarrage du moteur.
Pour les plans futurs, la collaboration avec le moteur de synthèse vocale de VoiceVox peut également être utile.
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 Lorsque vous utilisez la version GPU, des erreurs peuvent se produire en fonction de l'environnement. Dans ce cas, vous pouvez résoudre le problème en ajoutant --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.wavL'audio généré a un taux d'échantillonnage légèrement spécial de 24 000 Hz, donc certains lecteurs audio peuvent ne pas être en mesure de le jouer.
La valeur spécifiée pour speaker est style_id obtenu au point de terminaison /speakers . Il est nommé speaker pour compatibilité.
Vous pouvez ajuster l'audio en modifiant les paramètres de la requête de synthèse de la parole obtenue avec /audio_query .
Par exemple, essayez de parler à une vitesse de 1,5 fois plus rapide.
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 Wind Notation " est une notation qui spécifie comment lire uniquement en utilisant uniquement le katakana et les symboles. Aquestalk Ceci est en partie différent de la notation d'origine.
Les styles Aquestalk suivent les règles suivantes:
/ 、 . Les intervalles silencieux ne sont insérés que 、 sont séparés par._ devant Kana, ce kana deviendra silencieux.' . Toutes les phrases d'accent doivent avoir une position d'accent spécifiée.? Vous pouvez prononcer des questions en ajoutant (pleine largeur) La réponse à /audio_query décrit la lecture que le moteur juge.
En modifiant cela, vous pouvez contrôler la lecture du son et l'accent.
# 読ませたい文章を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.wavVous pouvez parcourir le dictionnaire utilisateur, ajouter, modifier et supprimer les mots de l'API.
Vous pouvez récupérer une liste du dictionnaire utilisateur en soumettant une demande GET à /user_dict .
curl -s -X GET " 127.0.0.1:50021/user_dict " Vous pouvez ajouter des mots à votre dictionnaire utilisateur en soumettant une demande publique à /user_dict_word .
Les paramètres URL suivants sont nécessaires:
Cet article sera utile pour l'emplacement du noyau d'accent.
La partie numérique avec le type 〇 devient la position de noyau d'accent.
https://tdmelodic.readthedocs.io/ja/latest/pages/introduction.html
La valeur de retour sur le succès est une chaîne d'UUID attribuée au mot.
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 " Vous pouvez modifier des mots dans le dictionnaire utilisateur en soumettant une demande de put à /user_dict_word/{word_uuid} .
Les paramètres URL suivants sont nécessaires:
Word_UUID peut être vérifié lors de l'ajout de mots et peut également être vérifié en faisant référence à un dictionnaire utilisateur.
En cas de succès, la valeur de retour est 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 " Vous pouvez supprimer des mots dans le dictionnaire utilisateur en soumettant une demande de suppression à /user_dict_word/{word_uuid} .
Word_UUID peut être vérifié lors de l'ajout de mots et peut également être vérifié en faisant référence à un dictionnaire utilisateur.
成功した場合の返り値は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 サーバーにて、開発の議論や雑談を行っています。気軽にご参加ください。
なお、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