? AIVISSPEECH MOTOR: AI VICE I Mitation System - Texto al motor del habla
El motor Aivisspeech es un motor de síntesis de habla japonés basado en el motor Voicevox.
Está integrado en Aivisspeech, un software de síntesis de habla japonés, y puede generar fácilmente voces emocionales.
AudioQuery cambiadaMora cambiaronPresetSi está buscando usar AivissPeech, visite el sitio web oficial de AivissPeech.
Esta página contiene información principalmente para desarrolladores.
A continuación se muestra un documento para los usuarios:
Compatible con PC con Windows, MacOS y Linux.
Para iniciar el motor AIVISSPeech, su PC necesita al menos 3 GB de memoria libre (RAM).
Consejo
La aplicación de escritorio, aivisspeech, solo es compatible con Windows y macOS.
Mientras tanto, Aivisspeech Engine, un servidor API de síntesis de discurso, también está disponible para Ubuntu/Debian Linux.
Nota
No hemos verificado activamente la operación en MAC con CPU de Intel.
Las MAC con CPU Intel ya están fuera de producción, y es cada vez más difícil preparar un entorno de verificación y construcción. Recomendamos usar este producto en una Mac con Apple Silicon tanto como sea posible.
Advertencia
En Windows 10, solo verificamos la operación de la versión 22H2.
Ha habido informes de casos en los que el motor Aivisspeech se bloquea y no se inicia en versiones anteriores de Windows 10 que no tienen soporte.
Desde una perspectiva de seguridad, recomendamos encarecidamente que use entornos de Windows 10 solo se actualiza a la versión mínima 22H2 antes de usar el servicio.
El motor AIVISSPeech admite archivos del modelo de síntesis de voz en el formato AIVMX ( Ai Vis V oice Model para el formato ONN X ) ( .aivmx ).
AIVM ( Ai Vis V oice M Odel) / AIVMX ( Ai Vis V oice M Odel para Onn X ) es un formato de archivo abierto para modelos de síntesis de voz de IA que combina modelos previamente capacitados, hiperparámetros, vectores de estilo, metadatos de altavoces (nombres, vistas sobre sobrecargadores, licencias, iconos, muestras de voz, etc.) en un archivo .
Para obtener más información sobre las especificaciones AIVM y los archivos AIVM/AIVMX, consulte las especificaciones AIVM desarrolladas en el proyecto AIVIS.
Nota
"AIVM" también es un término general para las especificaciones de formato AIVM/AIVMX y las especificaciones de metadatos.
Específicamente, el archivo AIVM es un archivo modelo en "formato Safetensors con metadatos AIVM agregados", y el archivo AIVMX es un archivo de modelo en "formato ONNX con metadatos AIVM agregados".
"Metadatos AIVM" se refiere a varios metadatos que están vinculados a un modelo entrenado como se define en la especificación AIVM.
Importante
El motor AIVISSPeech también es una implementación de referencia de la especificación AIVM, pero está diseñada deliberadamente para admitir solo archivos AIVMX.
Esto elimina la dependencia de Pytorch, reduce el tamaño de la instalación y proporciona una inferencia rápida de CPU con el tiempo de ejecución de ONNX.
Consejo
¡AIVM Generator le permite generar archivos AIVM/AIVMX a partir de modelos de síntesis de voz existentes y editar los metadatos de los archivos AIVM/AIVMX existentes!
Los archivos AIVMX para las siguientes arquitecturas del modelo están disponibles:
Style-Bert-VITS2Style-Bert-VITS2 (JP-Extra) Nota
La especificación de metadatos AIVM le permite definir altavoces multilingües, pero el motor Aivisspeech, como el motor VoiceVox, solo admite la síntesis de habla japonesa.
Por lo tanto, incluso si usa un modelo de síntesis de voz que apoya inglés o chino, no se puede realizar una síntesis de habla que no sea japonesa.
Coloque los archivos AIVMX en las siguientes carpetas para cada sistema operativo:
C:Users(ユーザー名)AppDataRoamingAivisSpeech-EngineModels~/Library/Application Support/AivisSpeech-Engine/Models~/.local/share/AivisSpeech-Engine/Models La ruta de carpeta real se mostrará como Models directory: en los registros inmediatamente después de iniciar el motor AivissPeech.
Consejo
¡Cuando use AivissPeech, puede agregar fácilmente modelos de síntesis de voz desde la pantalla de UI de AivissPeech!
Para los usuarios finales, le recomendamos que agregue un modelo de síntesis de voz utilizando este método.
Importante
La carpeta de implementación para la versión de desarrollo (si se ejecuta sin ser construida con Pyinstaller) no es AivisSpeech-Engine o debajo de AivisSpeech-Engine-Dev .
El motor AIVISSPeech ofrece opciones de línea de comandos útiles como:
--host 0.0.0.0 permite acceder al motor Aivisspeech desde otros dispositivos en la misma red.--cors_policy_mode all para permitir las solicitudes CORS de todos los dominios.--load_all_models para precargar todos los modelos de síntesis de voz instalados cuando se inicia el motor aivisspeech.--help para mostrar una lista y una descripción de todas las opciones disponibles. Hay muchas otras opciones disponibles. Para más detalles, consulte la opción --help .
Consejo
Cuando se ejecuta con la opción --use_gpu , puede utilizar DirectML en Windows y NVIDIA GPU (CUDA) en Linux para una síntesis de voz de alta velocidad.
Además, en los entornos de Windows, la inferencia DirectML se puede realizar en PC con solo GPU (IGPUS) con CPU incorporadas, pero en la mayoría de los casos es mucho más lento que la inferencia de la CPU, por lo que esto no se recomienda.
Para obtener más información, consulte las preguntas frecuentes.
Nota
El motor AIVISSPeech funciona con el número de puerto 10101 de forma predeterminada.
Si entra en conflicto con otras aplicaciones, puede cambiarlo a cualquier número de puerto utilizando la opción --port .
Advertencia
A diferencia del motor VoiceVox, algunas opciones no se implementan en el motor Aivisspeech.
En Windows/macOS, puede instalar el motor AivissPeech por sí solo, pero es más fácil iniciar el motor AivissPeech, que viene con la consola AivissPeech, por sí solo.
La ruta al archivo ejecutable del motor AIVISSPeech ( run.exe / run ) que se envía con aivisspeech es el siguiente:
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 . Nota
El modelo predeterminado (aproximadamente 250MB) y el modelo BERT (aproximadamente 1.3GB) requerido para la inferencia se descargan automáticamente en el primer inicio, por lo que tardará hasta unos minutos en que el inicio se complete.
Espere un tiempo hasta que esté completa el inicio.
Para agregar un modelo de síntesis de voz al motor AivissPeech, consulte dónde colocar el archivo del modelo.
También puede agregarlo haciendo clic en "Configuración"> "Manejar el modelo de síntesis de voz" en AIVISSPeech.
Cuando se ejecuta en un entorno GPU Linux + NVIDIA, la versión CUDA/CUDNN que admite el tiempo de ejecución de ONNX debe coincidir con la versión CUDA/CUDNN del entorno host, y las condiciones de funcionamiento son estrictas.
Específicamente, el tiempo de ejecución de ONNX utilizado por el motor Aivisspeech requiere CUDA 12.x / Cudnn 9.x o superior.
Docker funciona independientemente del entorno del sistema operativo host, por lo que recomendamos instalarlo con Docker.
Al ejecutar un contenedor Docker, siempre monte ~/.local/share/AivisSpeech-Engine a /home/user/.local/share/AivisSpeech-Engine-Dev en el contenedor.
De esta manera, incluso después de haber detenido o reiniciado el contenedor, aún puede mantener el modelo de síntesis de voz instalado y el caché del modelo Bert (aproximadamente 1.3GB).
Para agregar un modelo de síntesis de voz al motor AivissPeech en un entorno de Docker, coloque el archivo del modelo (.AIVMX) en ~/.local/share/AivisSpeech-Engine/Models en el entorno host.
Importante
Asegúrese de montarlo contra /home/user/.local/share/AivisSpeech-Engine-Dev .
Dado que el motor AivissPeech en la imagen Docker no está construido con Pyinstaller, el nombre de la carpeta de datos tiene el sufijo de -Dev y 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 Cuando ejecuta la siguiente línea de una línea en Bash, el archivo WAV sintetizado del habla se emitirá a audio.wav .
Importante
Se supone que el motor Aivisspeech se ha iniciado de antemano y que Models directory: el siguiente directorio contiene el modelo de síntesis de voz (.AivMx) que corresponde a la ID de 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.jsonConsejo
Para obtener una solicitud de API detallada y especificaciones de respuesta, consulte la documentación y la compatibilidad de la API con la API de VoiceVox. La documentación de la API siempre refleja los cambios en la última versión de desarrollo.
Puede ver la documentación de la API (UI Swagger) para el motor AivissPeech en ejecución accediendo a http://127.0.0.1:10101/docs con el motor Aivisspeech o el editor de Aivisspeech en progreso.
El motor Aivisspeech es generalmente compatible con la API HTTP del motor VoiceVox.
Si tiene un software que admite la API HTTP del motor VoiceVox, debería poder admitir el motor Aivisspeech simplemente reemplazando la URL de la API con http://127.0.0.1:10101 .
Importante
Sin embargo, si edita el contenido AudioQuery obtenido de la API /audio_query en el cliente API y luego lo pasa a la API /synthesis , es posible que no sea posible sintetizar adecuadamente el habla debido a las diferencias en las especificaciones (ver más abajo).
Debido a esto, el editor AIVISSPeech puede usar el motor AivissPeech y el motor VoiceVox (cuando se usa funciones multimotor), pero no puede usar el motor AivissPeech del editor VoiceVox.
El uso del motor Aivisspeech en el editor VoiceVox reduce significativamente la calidad de la síntesis del habla debido a las limitaciones en la implementación del editor. Además de no poder utilizar los parámetros únicos del motor AivissPeech, existe la posibilidad de que pueda ocurrir un error al llamar a funciones no compatibles.
Recomendamos encarecidamente usarlo con el editor de Aivisspeech para obtener mejores resultados de síntesis de voz.
Nota
Aunque debería ser generalmente compatible en los casos generales de uso de API, puede haber API incompatibles distintas de las siguientes, ya que los sistemas de síntesis de voz con arquitecturas de modelos fundamentalmente diferentes se incluyen por la fuerza en las mismas especificaciones de API.
Si lo informa a través del problema, solucionaremos cualquier mejora de compatibilidad.
Los siguientes son cambios en las especificaciones API del motor VoiceVox:
Las ID locales de estilo altavoz en el manifiesto AIVM contenido en el archivo AIVMX se administran en números de serie a partir de 0 para cada altavoz.
En el modelo de síntesis de voz de la arquitectura Style-Bert-VITS2, este valor coincide con el valor de data.style2id hiperparameter del modelo.
Por otro lado, la API de VoiceVox Engine no especifica un altavoz UUID ( speaker_uuid ) y solo la ID de Style ( style_id ) se pasa a la API de síntesis del habla, tal vez debido a razones históricas.
El motor VoiceVox tiene altavoces y estilos fijos, por lo que el equipo de desarrollo pudo administrar de manera única la "identificación de estilo".
Mientras tanto, el motor Aivisspeech permite a los usuarios agregar libremente modelos de síntesis de voz.
Por lo tanto, la "ID de estilo" compatible con VoiceVox API debe ser única sin importar qué modelo de síntesis de voz se agrega.
Esto se debe a que si el valor no es único, el estilo del altavoz y las ID de estilo incluidos en el modelo existente pueden superponerse cuando se agrega un nuevo modelo de síntesis de voz.
Por lo tanto, el motor Aivisspeech combina el UUID y la identificación de estilo del altavoz en el manifiesto AIVM para generar una "identificación de estilo" globalmente única compatible con la API de VoiceVox.
El método de generación específico es el siguiente:
Advertencia
Debido a esto, pueden ocurrir problemas inesperados con el software habilitado para VoiceVox API que no asume que un entero firmado de 32 bits está incluido en la "ID de estilo".
Advertencia
Es una probabilidad extremadamente baja que diferentes ID de estilo de altavoces puedan superponerse (colisión) porque están sacrificando la singularidad global de los uuids de los altavoces para que se ajusten dentro de un rango entero firmado de 32 bits.
En este punto, no existe una solución para identificaciones de estilo duplicados, pero en realidad, esto no es un problema en la mayoría de los casos.
Consejo
Las "ID de estilo" compatibles con la API de VoiceVox generadas automáticamente por el motor Aivisspeech se pueden obtener de la API /speakers .
Esta API devuelve una lista de información de altavoces instalada en el motor Aivisspeech.
AudioQuery cambiada El tipo AudioQuery es una consulta para realizar la síntesis de habla especificando secuencias de texto o fonema.
Los principales cambios del tipo AudioQuery en el motor VoiceVox son los siguientes:
intonationScale es diferente.intonationScale en el motor Aivisspeech:intonationScale es 0.0 a 1.0, Style-Bert-VITS2 corresponde al rango de 0.0 a 1.0.intonationScale es de 1.0 a 2.0, Style-Bert-VITS2 corresponde al rango de 1.0 a 10.0.tempoDynamicsScale por sí mismo.tempoDynamicsScale en el motor Aivisspeech:tempoDynamicsScale es de 0.0 a 1.0, Style-Bert-VITS2 corresponde al rango de 0.0 a 0.2.tempoDynamicsScale es de 1.0 a 2.0, Style-Bert-VITS2 corresponde al rango de 0.2 a 1.0.pitchScale son diferentes.pauseLength y pauseLengthScale no son compatibles.kana son diferentes.Para obtener más información sobre los cambios, consulte Model.py.
Mora cambiaron Mora es una estructura de datos que representa la maura del texto del habla.
Consejo
Una mora es la unidad más pequeña de agrupación de sonido cuando realmente se pronuncia (como "a", "ka" o "o").
Los tipos Mora no se usan solos para las respuestas de solicitud de API, y siempre se usan indirectamente a través de AudioQuery.accent_phrases[n].moras o AudioQuery.accent_phrases[n].pause_mora .
Los principales cambios del tipo Mora en el motor VoiceVox son los siguientes:
pause_mora , pero en el motor de aivisspeech se trata como moras normales.text es el mismo símbolo y vowel está establecida en "Pau".consonant / vowel es de solo lectura.text siempre se usa para leer el texto durante la síntesis del habla.consonant_length / vowel_length / pitch no son compatibles.Para obtener más información sobre los cambios, consulte TTS_Pipeline/Model.py.
Preset Preset es información preestablecida para determinar el valor inicial de una consulta de síntesis de voz en el editor.
Los cambios generalmente corresponden a los cambios en la especificación de campos para intonationScale / tempoDynamicsScale / pitchScale / pauseLength / pauseLengthScale descrito en tipos AudioQuery .
Para obtener más información sobre los cambios, consulte Preset/Model.py.
Advertencia
Las API de síntesis de discurso de canto y cancelable no son compatibles.
Existe como punto final para fines de compatibilidad, pero siempre devuelve 501 Not Implemented .
Para obtener más información, consulte la aplicación/enrutadores/carácter.py/app/routers/tts_pipeline.py.
/singers/singer_info/cancellable_synthesis/sing_frame_audio_query/sing_frame_volume/frame_synthesis Advertencia
La API /synthesis_morphing que proporciona funcionalidad de transformación no es compatible.
Debido a que el tiempo de voz difiere para cada altavoz, es imposible de implementar (funciona pero no puede soportar escuchar), por lo que siempre se devuelve 400 Bad Request .
Devuelve si la transformación está disponible para cada altavoz /morphable_targets API no permite la transformación para todos los altavoces.
Para obtener más información, consulte la aplicación/enrutadores/morphing.py.
/synthesis_morphing/morphable_targetsAdvertencia
Existe como un parámetro para fines de compatibilidad, pero siempre se ignora.
Para obtener más información, consulte la aplicación/enrutadores/carácter.py/app/routers/tts_pipeline.py.
core_versionenable_interrogative_upspeak parámetroどうですか…? Simplemente agregue un "?" Al final del texto para leer en voz alta, como este, y puede leerlo con una entonación cuestionable. Consejo
También eche un vistazo a las preguntas frecuentes del editor de Aivisspeech/preguntas y respuestas.
intonationScale ) causará un brote de habla. Esta es la especificación actual de la arquitectura del modelo Style-Bert-VITS2 compatible con el motor Aivisspeech.
Dependiendo del altavoz y el estilo, si eleva demasiado intonationScale , su voz puede volverse extraña o puede terminar leyendo una voz antinatural.
El límite superior del valor de intonationScale que le permite hablar correctamente variará según el altavoz y el estilo. Ajuste el valor adecuadamente.
En el motor Aivisspeech, tratamos de asegurarnos de que la lectura y el acento correctos sean correctos de una vez, pero hay momentos en que es inevitable que sea incorrecto.
Las palabras que no están registradas en el diccionario incorporado, como los sustantivos propios y los nombres de las personas (especialmente los nombres brillantes), a menudo no se leen correctamente.
Puede cambiar la forma en que se leen estas palabras registrando el diccionario. Intente registrar palabras del editor AIVISSPeech o la API.
Además, para las palabras compuestas y las palabras en inglés, el contenido registrado en el diccionario puede no reflejarse independientemente de la prioridad de la palabra. Esta es la especificación actual.
El motor Aivisspeech está diseñado para sintetizar el habla en oraciones relativamente cortas, como oraciones o agrupaciones de significado.
Por lo tanto, enviar oraciones largas que superen los 1000 caracteres a la vez a /synthesis puede causar problemas como los siguientes:
Al sintetizar oraciones largas, recomendamos separar las oraciones en las siguientes posiciones y enviarlas a la API de síntesis del habla.
No hay límites duros, pero es deseable tener hasta 500 caracteres por síntesis de discurso.
Consejo
Las oraciones divididas con descansos semánticos tienden a producir sonidos de entonación más naturales.
Esto se debe a que las expresiones emocionales y las entonaciones correspondientes al contenido del texto se aplican a toda la oración enviada a la API de síntesis del habla a la vez.
Al dividir adecuadamente las oraciones, puede restablecer la expresión emocional y la entonación de cada oración, lo que resulta en una lectura más natural.
El acceso a Internet solo se requiere al iniciar AIVISSPeech por primera vez porque se descargan datos del modelo.
Puede usar la PC fuera de línea en el segundo o posterior arranque.
Esto se puede hacer en la pantalla de configuración del motor AIVISSPeech que se está ejecutando actualmente.
Cuando accede http://127.0.0.1:[AivisSpeech Engine のポート番号]/setting desde su navegador mientras comienza el motor AIVISSPeech, se abrirá la pantalla de configuración del motor AIVISSPeech.
El número de puerto predeterminado para el motor AivissPeech es 10101 .
--use_gpu ) y aún produce una voz más lenta que el modo CPU.El modo GPU se puede usar en PC con CPU incorporado (IGPU) solamente, pero en la mayoría de los casos es mucho más lento que el modo CPU, por lo que no se recomienda.
Esto se debe a que las GPU con CPU incorporadas tienen un rendimiento más bajo que las GPU independientes (DGPU) y no son buenas para un procesamiento pesado como la síntesis de voz de IA.
Por otro lado, el rendimiento de las CPU en estos días se ha mejorado significativamente, y la CPU sola puede generar audio a alta velocidad.
Por lo tanto, recomendamos usar el modo CPU en las PC que no tienen DGPU.
Si está utilizando una PC con la 12ª generación de Intel o CPU posterior (configuración híbrida P-Core/E-Core), el rendimiento de la generación de audio puede cambiar drásticamente dependiendo de la configuración de potencia de Windows.
Esto se debe a que el modo de "equilibrio" predeterminado facilita que las tareas de generación de voz se asignen a los coro electrónicos de ahorro de energía.
Cambie la configuración utilizando los pasos a continuación para aprovechar al máximo los núcleos P y E y generar voz más rápido.
*El "plan de potencia" en el panel de control también tiene una configuración de "alto rendimiento", pero la configuración es diferente.
Para las CPU de la 12ª generación Intel o posterior, recomendamos cambiar el "modo de alimentación" desde la pantalla de configuración de Windows 11.
Aivisspeech tiene como objetivo ser un software de síntesis de voz de IA gratuito que no esté obligado por su uso.
(Depende de la licencia del modelo de síntesis del habla utilizado en el entregable) Como mínimo, el software en sí no requiere crédito y puede usarse libremente, ya sea para individuos, corporaciones, fines comerciales o no comerciales.
... Sin embargo, también quiero que más personas sepan sobre Aivisspeech.
Si lo desea, estaría feliz si pudiera acreditar a AivissPeech en algún lugar de la entrega. (El formato de crédito se lo deja).
Se guarda en la siguiente carpeta:
C:Users(ユーザー名)AppDataRoamingAivisSpeech-EngineLogs~/Library/Application Support/AivisSpeech-Engine/Logs~/.local/share/AivisSpeech-Engine/LogsSi encuentra un problema, informarlo utilizando uno de los siguientes métodos:
Problema de Github (recomendado)
Si tiene una cuenta de GitHub, informe a través de nuestro problema de GitHub y podemos responder temprano.
Twitter (x)
Puede responder a la cuenta oficial del Proyecto Aivis, DM o Tweet con el hashtag #AivissPeech.
Formulario de contacto
También puede informar a través del formulario de contacto del proyecto AIVIS.
Informe la siguiente información tanto como sea posible, y podremos responder más rápidamente.
Voicevox es un gran software que todavía se desarrolla activamente hoy.
Por lo tanto, el motor Aivisspeech está desarrollando la última versión del motor VoiceVox en la siguiente política:
voicevox_engine y la diferencia en los cambios de la declaración de importación será enorme, por lo que no se realiza el cambio de marca. El procedimiento difiere significativamente del motor VoiceVox original.
Debe tener Python 3.11 instalado de antemano.
# Poetry と pre-commit をインストール
pip install poetry poetry-plugin-export pre-commit
# pre-commit を有効化
pre-commit install
# 依存関係をすべてインストール
poetry installEl procedimiento difiere significativamente del motor VoiceVox original.
# 開発環境で 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 buildDe las licencias duales del motor Base VoiceVox, solo LGPL-3.0 se heredará de forma independiente.
A continuación y Docs/ los siguientes documentos se transportan desde el documento original del motor VoiceVox sin modificación. No se garantiza que el contenido de estos documentos también funcionará con el motor Aivisspeech.
Este es el motor de VoiceVox.
En realidad, es un servidor HTTP, por lo que puede sintetizar el texto y el discurso enviando una solicitud.
(El editor es VoiceVox, el núcleo es VoiceVox Core y la estructura general se puede encontrar aquí).
Aquí hay una guía adaptada a sus necesidades.
Descargue el motor correspondiente aquí.
Consulte la documentación de la API.
Con el motor o editor de VoiceVox, también puede ver la documentación del motor que se inicia.
Para planes futuros, la colaboración con el motor de síntesis de voz de Voicevox también puede ser útil.
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 Al usar la versión GPU, pueden ocurrir errores dependiendo del entorno. En ese caso, puede resolver el problema agregando --runtime=nvidia a 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.wavEl audio generado tiene una tasa de muestreo ligeramente especial de 24,000Hz, por lo que es posible que algunos reproductores de audio no puedan jugarlo.
El valor especificado para speaker es style_id obtenido en el punto final /speakers . Se llama speaker por compatibilidad.
Puede ajustar el audio editando los parámetros de la consulta de síntesis de voz obtenida con /audio_query .
Por ejemplo, intente hablar a una velocidad de 1,5 veces más rápido.
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 La " notación del viento de Aquestalk " es una notación que especifica cómo leer solo usando solo katakana y símbolos. Aquestalk Esto es en parte diferente de la notación original.
Los estilos de Aquestalk siguen las siguientes reglas:
/ 、 . Los intervalos mudos se insertan solo 、 se separan por._ frente a Kana, que Kana se quedará en silencio.' . Todas las frases de acento deben tener una posición de acento especificada.? Puede pronunciar preguntas agregando (ancho completo) La respuesta a /audio_query describe la lectura que el motor juzga.
Al modificar esto, puede controlar la lectura de sonido y el acento.
# 読ませたい文章を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.wavPuede explorar el diccionario de usuario, agregar, editar y eliminar palabras de la API.
Puede recuperar una lista de diccionario de usuario enviando una solicitud GET a /user_dict .
curl -s -X GET " 127.0.0.1:50021/user_dict " Puede agregar palabras a su diccionario de usuario enviando una solicitud de publicación a /user_dict_word .
Se requieren los siguientes parámetros de URL:
Este artículo será útil para la ubicación del núcleo de acento.
La parte numérica con el tipo 〇 se convierte en la posición del núcleo de acento.
https://tdmelodic.readthedocs.io/ja/latest/pages/introduction.html
El valor de retorno en el éxito es una cadena de UUID asignado a la palabra.
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 " Puede modificar las palabras en el diccionario de usuario enviando una solicitud PUT a /user_dict_word/{word_uuid} .
Se requieren los siguientes parámetros de URL:
Word_uuid se puede verificar al agregar palabras, y también se puede verificar haciendo referencia a un diccionario de usuario.
Si tiene éxito, el valor de retorno es 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 " Puede eliminar palabras en el diccionario de usuario enviando una solicitud de eliminación a /user_dict_word/{word_uuid} .
Word_uuid se puede verificar al agregar palabras, y también se puede verificar haciendo referencia a un diccionario de usuario.
Si tiene éxito, el valor de retorno es 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 " Puede importar y exportar diccionarios de usuarios en la sección "Exportar e importar diccionario de usuario" en la página de configuración del motor.
También puede importar y exportar diccionarios de usuarios utilizando la API.
Use POST /import_user_dict para importar y GET /user_dict para exportar.
Para obtener detalles sobre los argumentos, consulte la documentación de la 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