8

La primera parte de esta pregunta es ahora su propia, aquí: Analyzing Text for AccentsAdición de acentos a voz Generación

Pregunta: ¿Cómo se podrían añadir acentos a voz generada?

Lo que yo he llegado con:

no me refiero sólo marcas de acento, o de inflexión, o cualquier cosa singular por el estilo. Me refiero a algo así como un acento británico completo, o un acento escocés, o ruso, etc.

Creo que esto podría hacerse fuera del idioma también. Ex: algo en ruso se podría generar con acento británico, o algo en mandarín podría tener un acento ruso.

creo que el proceso básico sería la siguiente:

  1. analizar el texto
    • Comparar con una base de datos (o algo así) para determinar lo que hay un acento, lo fuerte que debería ser, etc.
  2. Generar el discurso en el idioma especificado
    • E asy con procesadores normales de texto a voz.
  3. Determine el acento especificado basándose en el texto analizado.
    • Esta es la parte en cuestión.
    • Creo que un conjunto de amplitudes y filtros funcionaría mejor para el siguiente paso.
  4. Mal discurso y acento.
    • Esta sería la parte fácil.
    • Probablemente podría hacerse multiplicando el habla por el acento, como lo hacen muchos otros métodos DSP.

Esto es realmente más de una pregunta general DSP, pero me gustaría llegar a un algoritmo programático para hacer esto en lugar de una idea general.

+0

Hay (al menos) dos cuestiones completamente disjuntos aquí: la parte de análisis de texto, y la parte de síntesis de voz. Estos deben formularse como preguntas separadas de SO. –

+0

@Oli. Pensé en eso, pero la parte de análisis está tan estrechamente ligada a la parte de generación que creo que deberían estar juntas. – Jon

+0

Hmmm. El primero es esencialmente un problema de análisis sintáctico/textual; el segundo es esencialmente un problema de DSP. El alcance parece demasiado amplio para una pregunta de desbordamiento de pila ... –

Respuesta

2

¿Qué es un acento?

Un acento no es un filtro de sonido; es un patrón de realización acústica de texto en un idioma. No puede tomar una grabación de inglés americano, ejecutarla a través de "una serie de amplitudes y filtros" y hacer que salga el inglés británico. Para qué DSP es útil es en la implementación de prosody, no acento.

Básicamente (y más simple de modelar), un acento consiste en reglas para la realización fonética de una secuencia de fonemas. La percepción del acento se ve influenciada adicionalmente por by prosody y por los fonemas que elige un hablante al leer el texto.

generación de voz

El proceso de generación de voz tiene dos etapas básicas:

  1. texto a fonemas: Convertir texto escrito a una secuencia de fonemas (más suprasegmentales como el estrés, y la información prosódica como límites de locución). Esto es algo acento-dependiente (por ejemplo, la salida para "laboratorio" difiere entre los altavoces estadounidenses y británicas).

  2. Fonema a voz: dada la secuencia de fonemas, genere audio de acuerdo con las reglas del dialecto para realizaciones fonéticas de fonemas. (Normalmente, usted combina los difonos y luego ajusta acústicamente la prosodia). Esto es altamente dependiente del acento, y es este paso el que imparte la calidad principal del acento. Un fonema particular, incluso si se comparte entre dos acentos, puede tener realizaciones acústicas sorprendentemente diferentes.

Normalmente estos están sincronizados. Mientras que podría tener un generador de voz con acento británico que utiliza pronunciaciones estadounidenses, eso sonaría extraño.

generador de voz con un acento determinado

Escribir un programa de texto a voz es una enorme cantidad de trabajo (en particular, para implementar un esquema común, tiene que grabar un hablante nativo de habla cada posible diphone en el idioma), por lo que sería mejor usar uno existente.

En resumen, si desea un acento británico, use un motor de texto a texto en inglés británico junto con un motor de conversión de fonemas en inglés británico.

Para acentos comunes como inglés americano y británico, mandarín estándar, francés metropolitano, etc., habrá varias opciones, incluidas las de código abierto, que podrá modificar (como a continuación). Por ejemplo, mira FreeTTS y eSpeak. Para acentos menos comunes, desafortunadamente los motores existentes pueden no existir.

texto Hablando con un acento extranjero

Inglés-with-a-extranjera-acento es socialmente no de mucho prestigio, por lo que probablemente no existen sistemas completos.

Una estrategia sería combinar un motor estándar de texto a teléfono para un acento nativo con un motor de fonema a voz para el idioma extranjero. Por ejemplo, un hablante nativo de ruso que aprendió inglés en los EE. UU. Utilizaría plausiblemente las pronunciaciones estadounidenses de palabras como laboratorio, y correlacionaría sus fonemas con sus fonemas rusos nativos, pronunciándolos como en ruso. (Creo que hay un sitio web que hace esto para inglés y japonés, pero no tengo el enlace.)

El problema es que el resultado es demasiado extremo. Un aprendiz de inglés real intentaría reconocer y generar fonemas que no existen en su lengua materna, y también alteraría su realización de sus fonemas nativos para aproximar la pronunciación nativa. El grado de coincidencia del resultado con un hablante nativo por supuesto varía, pero usar el extremo extranjero puro suena ridículo (y casi incomprensible).

Por lo tanto, para generar un plausible americano-inglés-con-un-acento ruso (por ejemplo), tendría que escribir un motor de texto a fonema. Puede utilizar los motores existentes de texto a teléfono de inglés americano y ruso como punto de partida. Si no está dispuesto a buscar y grabar dicho altavoz, probablemente aún pueda obtener una aproximación decente usando DSP para combinar las muestras de esos dos motores. Para eSpeak, usa síntesis de formantes en lugar de muestras grabadas, por lo que podría ser más fácil combinar información de múltiples idiomas.

Otra cosa a considerar es que los hablantes extranjeros a menudo modifican la secuencia de fonemas bajo la influencia de la fonética de su lengua materna, normalmente simplificando grupos de consonantes, insertando vocales epentéticas o diptongando o rompiendo secuencias de vocales.

There is some literature on this topic.

+1

Guau ... esa es mucha información útil. No estoy seguro de qué más decir, pero esta es la mejor respuesta que creo que obtendré. – Jon

4

Esta pregunta no es realmente "programación" per se: es lingüística. La programación es comparativamente fácil. Para el análisis, eso será realmente difícil, y en verdad es mejor que el usuario especifique el acento; ¿O vas a buscar un lector automático de historias?

Sin embargo, un acento básico es factible con el moderno texto a voz. ¿Conoces el alfabeto fonético internacional? http://en.wikipedia.org/wiki/International_Phonetic_Alphabet Básicamente enumera todos los sonidos que una voz humana puede hacer. Un acento es simplemente un mapeo (una función) del alfabeto a sí mismo. Por ejemplo, para hacer que un acento americano suene británico para una persona estadounidense (aunque no es suficiente para hacer que suene británico para una persona británica), puede desautorizar todos los sonidos "r" en el medio de una palabra.Así, por ejemplo, la vibrante alveolar sería reemplazado con la fricativa uvular sonora. (Muchos casos de esquina para resolver solo para esto).

Largo y corto: No es fácil, lo cual es probablemente la razón por la cual nadie lo ha hecho. Estoy seguro de que un par de profesores de lingüística dirían que es imposible. Pero eso es lo que hacen los profesores de lingüística. Pero básicamente necesitarás leer varios libros de texto gruesos sobre acentos y pronunciación para avanzar en este problema. ¡Buena suerte!

+0

+1. Voy por el enfoque del "lector de historias", y tu respuesta definitivamente proporciona algunos buenos consejos. ¿Crees que podrías proporcionar una "hoja de ruta" de algún tipo? ¿Algo como pseudocódigo? – Jon

+1

Dios no. Esto no es de ninguna manera un proyecto pequeño. – DanielOfTaebl

+0

El IPA es impreciso para este propósito; pretende ser un alfabeto * fonémico * (a pesar de su nombre). –