
Persian TTS es un motor de sintetización de texto a favor de texto y una aplicación reacttativa que inicialmente he desarrollado como mi proyecto de graduación de licenciatura.
Sin embargo, el proyecto está destinado a obtener mejoras graduales con el tiempo.


![]()
![]()
![]()
Las aplicaciones Persian-TTS funcionan con React Native, por lo que lo necesitará para compilar las aplicaciones correctamente. Para compilar la versión de Android, tener un SDK de Android adecuado en su máquina es imprescindible y, evidentemente, la compilación de iOS Varient necesita que tenga una copia de Xcode que funcione y una herramienta funcional de gestión de dependencia de Cocoapods en una máquina alimentada por el sistema operativo MACOS.
También deberá tener una herramienta de gestión de dependencias para acceder a NPM y descargar las dependencias del proyecto. El hilo se usa en este proyecto, pero también se podrían usar NPM u otras herramientas.
Primero puede obtener el código fuente clonándolo
git clone [email protected]:amfolio/persian-tts.git cd ios
pod install Luego, muévase al directorio del paquete e instale sus dependencias usando yarn install o npm install
Para iniciar aplicaciones en emuladores de Android y/o sistemas operativos iOS, puede usar los siguientes comandos:
react-native run-androidreact-native run-iosLa estructura de este proyecto es simplemente idéntica a muchas otras estructuras de proyectos reactivos. A continuación se muestra solo un panorama general de la estructura principal:
En breve, el proyecto utiliza una aprobación de "sintetización concatinativa" para lograr su objetivo. En el idioma persa, se podría construir un conjunto ilimitado de palabras concatiendo pares de "consonantes+vocales". Para Bravity aquí llamamos a estos pares simplemente "sílabas".
Para hacer que la sintetización funcione, el proyecto inicialmente tiene un conjunto de 169 voces de sílabas, recodificadas de mi propia voz (¿por lo que no es una narración profesional?). Este número se dedica como a continuación:
| Tipo de voz | Recuento de archivos correspondientes |
|---|---|
| vocales | 6 |
| consonantes silenciosas | 23 |
| Syllable (consonante+vocal) | 138 |
| espacios | 2 |
| Total | 169 |
El proceso de sintetización se puede facturar mediante la concatía de sílabas utilizando la biblioteca FFMPEG y es una envoltura react-nativa-ffmpeg. Aquí hay un esquema rápido de lo que sucede.
En el primer paso, el fonético correspondiente a la entrada persa se crea utilizando la función de utilidad Texttofonems.
const input = "سلام" ; // means "Hello" in persian
const output = textToPhonems ( input ) ; // ["sa", "lā", "m"];El resultado del paso 1 pasa a través de la función de utilidad PhonemstoffMpeg y obtiene un comando válido de concatnación FFMPEG:
const ffmpeg = phonemsToFFMpeg ( output ) ;y el resultado sería:
ffmpeg
-I sa.wav -I lā.wav -I m.wav
-filter_complex ‘[0:0][1:0][2:0]concat=n=3:v=0:a=1[out]’
-map ‘[out]’ output.wavLa aplicación llama a FFMPEG usando React-Native-FFMPEG y los siguientes pasos se realizan detrás de escena:
| Antes de concatnación | ||
![]() | ![]() | ![]() |
| sa.wav | lā.wav | M.wav |
| Después de la concatía | ||
![]() | ||
| salida.wav | ||
El archivo de audio de salida se reproduce a través de las plataformas iOS y Android gracias a la biblioteca react-nativa-sonido. Leer los recursos del paquete y transferirlos a la ubicación de Sandbox/SD-Card también es posible gracias a React-Native-FS
El agradecimiento especial para el director de mi proyecto, el Dr. Mohammad Taheri, quien me dio la confianza de abordar este tema y me guió a través de los mejores pasos para hacerlo posible. Sin él, probablemente nunca me hubiera metido en tales investigaciones académicas.
El próximo gran agradecimiento es a la comunidad de desarrolladores que generosamente comparten la tecnología de vanguardia con otros. Es solo gracias a esta comunidad que reinventar las ruedas ya no es necesario.
Aquí hay una breve lista de bibliotecas que me ayudaron infinitamente en mi camino de desarrollo:
Este repositorio se construye inicialmente como un esfuerzo mínimo para una solución de texto a voz abierta de lengua persa. Estaría muy agradecido por cualquier contribución de los problemas de informes a correcciones de errores y mejoras.
La contribución al agregar más voces al proyecto también es muy bienvenida y también puede mencionar su nombre en Voices.json.
No dude en enviar solicitudes de extracción en caso de sentir alguna necesidad.