Post on 30-Jan-2018
UNIVERSIDAD POLITÉCNICA DE MADRIDESCUELA TÉCNICA SUPERIOR DE INGENIEROS
DE TELECOMUNICACIÓNDEPARTAMENTO DE INGENIERÍA ELECTRÓNICA
PROYECTO FIN DE CARRERA
Desarrollo de un conversor texto-voz multiemoción en castellano
por concatenación de difonemas
Mª DOLORES SEGOVIA TORRESIngeniero de Telecomunicación
Madrid, 2010
UNIVERSIDAD POLITÉCNICA DE MADRIDDEPARTAMENTO DE INGENIERÍA ELECTRÓNICAESCUELA TÉCNICA SUPERIOR DE INGENIEROS
DE TELECOMUNICACIÓN
PROYECTO FIN DE CARRERADesarrollo de un conversor
texto-voz multiemoción en castellano por concatenación de difonemas
Mª DOLORES SEGOVIA TORRESIngeniero de Telecomunicación
Tutor del ProyectoJUAN MANUEL MONTERO MARTÍNEZ
Doctor Ingeniero de Telecomunicación2010
PROYECTO FIN DE CARRERA
Título: Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas
Autora: Mª Dolores Segovia Torres
Tutor: Dr. Ingeniero Juan Manuel Montero Martínez
Departamento: Ingeniería Electrónica de la Escuela Técnica Superior de Ingenieros de Telecomunicación de Madrid de la Universidad Politécnica de Madrid
Grupo: Tecnología del Habla
MIEMBROS DEL TRIBUNAL
Presidente: D. José Manuel Pardo Muñoz Firma:
Vocal: D. Ricardo de Córdoba Herralde Firma:
Secretario: D. Juan Manuel Montero Martínez Firma:
Suplente: D. Rubén San Segundo Hernández Firma:
Fecha de Lectura:
Calificación:
RESUMEN:La interacción entre seres humanos y máquinas se está convirtiendo poco a poco
en una realidad en nuestra sociedad y se busca que día a día esa interacción se
realice de forma lo más fácil y accesible posible para el ser humano. La forma básica
de comunicación humana es mediante la voz y la expresión corporal. A pesar de que
ya existen sistemas que permiten la interacción mediante la voz, en ocasiones, estos
carecen de naturalidad por lo que en este proyecto se ha implementado una primera
versión de un sintetizador de habla con emociones, por concatenación de difonemas,
para así poder humanizar los sistemas.
A lo largo de la memoria, se explica todo el proceso seguido para la generación de
la nueva versión multiemoción.
Finalmente, se presentan las conclusiones obtenidas y las posibles líneas futuras
de investigación.
PALABRAS CLAVE:
síntesis de emociones, síntesis por concatenación, difonema, modelado de prosodia
A mis padres
ÍNDICE GENERAL ÍNDICE DE FIGURAS...................................................................................................XV
ÍNDICE DE TABLAS.................................................................................................XVIII
ÍNDICE DE CUADROS.................................................................................................XX
GLOSARIO..................................................................................................................XXI
1. INTRODUCCIÓN......................................................................................................1
1.1 INTRODUCCIÓN A LOS SISTEMAS DE SÍNTESIS DE VOZ...........................................1
1.2 OBJETIVOS DEL PROYECTO..................................................................................2
1.3 FASES DEL PROYECTO........................................................................................2
1.4 HERRAMIENTAS UTILIZADAS.................................................................................3
2. INTRODUCCIÓN A LOS SISTEMAS DE SÍNTESIS DE VOZ.................................5
2.1 INTRODUCCIÓN...................................................................................................5
2.2 ARQUITECTURA GENERAL DE UN SINTETIZADOR DE HABLA.....................................5
2.2.1 Procesamiento de Lenguaje Natural (NLP).................................................6
2.2.2 Proceso de síntesis......................................................................................7
2.2.2.1 Clasificación de los procesos de síntesis de habla..............................................7
2.2.2.2 Síntesis por formantes........................................................................................10
2.2.2.3 Síntesis por concatenación................................................................................11
2.2.2.4 Comparación de los métodos de síntesis...........................................................13
2.3 APLICACIONES DE LA SÍNTESIS DE HABLA...........................................................14
3. ANÁLISIS DE LAS EMOCIONES..........................................................................15
3.1 INTRODUCCIÓN.................................................................................................15
3.2 CONCEPTO DE EMOCIÓN...................................................................................15
3.2.1 Componentes de la emoción......................................................................17
3.2.2 Función de las emociones..........................................................................17
3.3 CLASIFICACIÓN DE LAS EMOCIONES...................................................................18
3.3.1 Clasificación discreta o básica de las emociones.......................................18
3.3.2 Estudio dimensional de las emociones.......................................................19
3.4 EFECTOS DE LAS EMOCIONES EN EL HABLA........................................................20
3.4.1 Pitch............................................................................................................21
3.4.2 Duración.....................................................................................................21
3.4.3 Cualidad de la voz......................................................................................21
3.5 EMOCIONES IMPLEMENTADAS EN EL SINTETIZADOR BORIS...................................22
3.5.1 La emoción Tristeza...................................................................................22
3.5.2 La emoción Alegría.....................................................................................23
3.5.3 La emoción Sorpresa..................................................................................24
3.5.4 La emoción Enfado.....................................................................................24
4. SEGMENTACIÓN Y MARCADO DE LA BASE DE DATOS.................................26
4.1 INTRODUCCIÓN.................................................................................................26
4.2 BASE DE DATOS O CORPUS DE LOGATOMOS......................................................26
4.3 SEGMENTACIÓN FONÉTICA Y MARCACIÓN DE F0 AUTOMÁTICAS............................27
4.3.1 Técnicas de segmentación fonética............................................................27
4.3.1.1 Segmentación fonética automática basada en Modelos Ocultos de Markov.....28
4.3.2 Técnicas de marcación de pitch.................................................................28
4.4 SEGMENTACIÓN FONÉTICA Y MARCACIÓN DE F0 MANUAL....................................30
4.4.1 Problemas detectados durante la revisión manual.....................................32
4.4.1.1 Fonemas de duración 0 segundos (ModificaTextgrid.exe).................................32
4.4.1.2 Fonema ‘sp’ no contemplado en sintetizador de difonemas (CambiaSp.exe). . .36
4.4.2 Conclusiones de la revisión manual de segmentación...............................37
4.4.3 Conclusiones de la revisión manual de la marcación.................................41
5. GENERACIÓN DE LA BASE DE DATOS DE DIFONEMAS.................................44
5.1 INTRODUCCIÓN.................................................................................................44
5.2 PROCESO DE GENERACIÓN DEL CORPUS............................................................44
5.3 DETALLE DE PROGRAMAS..................................................................................50
5.3.1 GeneraParPcm.exe....................................................................................50
5.3.2 SacadifVC.exe............................................................................................52
5.3.2.1 Problemas detectados y modificaciones realizadas...........................................58
5.4 OBTENLISTADIF.EXE.........................................................................................61
5.5 GENDB.EXE......................................................................................................63
5.5.1.1 Problemas detectados y modificaciones realizadas...........................................65
6. SINTETIZADOR DE VOZ BORIS...........................................................................68
6.1 INTRODUCCIÓN.................................................................................................68
6.2 DESCRIPCIÓN GENERAL.....................................................................................68
6.3 BLOQUE DE PROCESADO DE LENGUAJE DEL SINTETIZADOR..................................70
6.3.1 Descripción general del Bloque..................................................................70
6.3.2 Implementación del bloque de procesado..................................................71
6.3.2.1 Inicialización del sistema....................................................................................72
6.3.2.2 Generación de los bloques de palabra...............................................................78
6.3.2.3 Generación de los bloques de fonema...............................................................84
6.3.2.4 Asignación de tono y duraciones a los fonemas................................................89
6.4 BLOQUE DE SÍNTESIS DE HABLA.........................................................................93
6.4.1 Descripción general del bloque...................................................................93
6.4.2 La síntesis TD-PSOLA................................................................................94
6.4.2.1 El proceso de síntesis........................................................................................95
6.4.3 Implementación del bloque de síntesis.......................................................97
6.5 BLOQUE DE SALIDA.........................................................................................100
6.5.1 Descripción general del Bloque de Salida................................................100
6.5.2 Implementación del bloque.......................................................................101
6.5.2.1 Liberación de recursos del sistema..................................................................102
6.6 MODIFICACIONES REALIZADAS EN EL SINTETIZADOR..........................................102
6.6.1 Módulos de entonación y duraciones heredados......................................102
6.6.1.1 Asignación de duraciones a los fonemas.........................................................102
6.6.1.2 Asignación de frecuencia media a los fonemas...............................................107
6.6.2 Adaptación al nuevo formato del archivo de base de datos.....................119
6.6.3 Control de unidades ensordecidas en el sintetizador...............................119
6.6.4 Las Secuencias de Control.......................................................................120
6.6.4.1 Descripción e implementación en el programa................................................120
6.6.4.2 Análisis de las secuencias de control disponibles............................................121
6.6.5 Introducción de emociones con distinto grado..........................................127
7. IMPLEMENTACIÓN DE EMOCIONES EN EL HABLA.......................................130
7.1 CORPUS S.E.S...............................................................................................130
7.2 ESTRUCTURA DE LOS FICHEROS DE INICIALIZACIÓN DE EMOCIONES...................131
7.3 MODELADO PROSÓDICO DEL ESTADO NEUTRO..................................................133
7.3.1 Caracterización del estado neutro............................................................133
7.4 MODELADO PROSÓDICO DE LA EMOCIÓN ALEGRÍA.............................................143
7.4.1 Caracterización de la emoción alegría......................................................144
7.5 MODELADO PROSÓDICO DE LA EMOCIÓN TRISTEZA...........................................154
7.5.1 Caracterización de la emoción tristeza.....................................................155
7.6 MODELADO PROSÓDICO DE LA EMOCIÓN SORPRESA.........................................163
7.6.1 Caracterización de la emoción sorpresa...................................................164
7.7 MODELADO PROSÓDICO DE LA EMOCIÓN ENFADO.............................................174
7.7.1 Caracterización de la emoción enfado......................................................175
8. CONCLUSIONES OBTENIDAS DURANTE EL PROCESO Y LÍNEAS FUTURAS DE INVESTIGACIÓN...........................................................................................186
8.1 CONCLUSIONES..............................................................................................186
8.2 LÍNEAS FUTURAS DE INVESTIGACIÓN................................................................190
9. BIBLIOGRAFÍA....................................................................................................191
10. PLIEGO DE CONDICIONES................................................................................194
10.1 CONDICIONES GENERALES...............................................................................194
10.2 CONDICIONES GENERALES A TODOS LOS PROGRAMAS......................................195
10.3 CONDICIONES GENERALES DE PRUEBA.............................................................195
10.4 RECURSOS MATERIALES..................................................................................195
10.5 RECURSOS LÓGICOS.......................................................................................195
11. PRESUPUESTO...................................................................................................196
11.1 PRESUPUESTO DE EJECUCIÓN MATERIAL..........................................................196
11.1.1 Relación de salarios................................................................................196
11.1.2 Relación de obligaciones sociales..........................................................197
11.1.3 Relación de salarios efectivos totales.....................................................197
11.1.4 Coste de la mano de obra.......................................................................197
11.1.5 Coste total de materiales........................................................................198
11.1.6 Importe total del presupuesto de ejecución material...............................198
11.2 IMPORTE DE EJECUCIÓN POR CONTRATA..........................................................199
11.3 HONORARIOS FACULTATIVOS...........................................................................199
11.4 IMPORTE TOTAL DEL PROYECTO......................................................................200
I. ANEXO I...............................................................................................................203
1. MANUAL PROGRAMA PRAAT................................................................................203
Menús y manejo del programa............................................................................203Análisis de etiquetas.......................................................................................................204
Análisis de marcas de F0................................................................................................206
2. MANUAL REVISIÓN MANUAL DE MARCAS Y SEGMENTACIÓN....................................208
Revisión de marcas F0........................................................................................208
Revisión de la segmentación...............................................................................218
3. LENGUAJE PERL.................................................................................................222
Variables y datos.................................................................................................222
Entrada/Salida.....................................................................................................222
Estructuras de control..........................................................................................223
Expresiones regulares y patrones de búsqueda..................................................223
Manejo de archivos..............................................................................................225
4. CREACIÓN FICHERO POR LOTES...........................................................................225
ÍNDICE DE FIGURAS FIGURA 1: ESQUEMA DE UN SINTETIZADOR DE HABLA.......................................................................6
FIGURA 2: SISTEMA DE SÍNTESIS DE HABLA BASADO EN HMM (HTS) [KTHZ 09]..............................9
FIGURA 3: ESQUEMA DEL SINTETIZADOR POR FORMANTES DE KLATT [KLATT 1987].........................11
FIGURA 4: REPRESENTACIÓN TEMPORAL DE LOS CONCEPTOS: EMOCIÓN, ESTADO DE ÁNIMO Y
PERSONALIDAD..................................................................................................................... 16
FIGURA 5: REPRESENTACIÓN BIDIMENSIONAL DE LAS EMOCIONES (ADAPTACIÓN DEL MODELO
PROPUESTO POR RUSSELL) [RUSSELL 1980].........................................................................20
FIGURA 6: RELACIÓN ENTRE SEÑAL EGG Y EL CIERRE Y APERTURA DE LA GLOTIS [HCMT 04]........29
FIGURA 7: SEÑAL DE EGG FILTRADA Y MARCAS DE PITCH GENERADAS...........................................30
FIGURA 8: VISUALIZACIÓN DEL ERROR PRODUCIDO EN EL PROCEDIMIENTO DE SEGMENTACIÓN
AUTOMÁTICO EN EL FICHERO L_A_18600..............................................................................33
FIGURA 9: SOLUCIÓN DEL ERROR PRODUCIDO EN EL PROCEDIMIENTO DE SEGMENTACIÓN AUTOMÁTICO
EN EL FICHERO L_A_18600..................................................................................................34
FIGURA 10: FRONTERA FONÉTICA DE SEPARACIÓN ENTRE LOS FONEMAS /N/ Y /M/...........................38
FIGURA 11: RUIDO PREVIO AL LOGATOMO “BUZO” EN EL FICHERO L_T_09100................................39
FIGURA 12: ENSORDECIMIENTO DE FONEMAS FINALES EN LA EMOCIÓN TRISTEZA.............................40
FIGURA 13: DIAGRAMA DE FLUJO DEL PROCESO DE GENERACIÓN DEL CORPUS DE DIFONEMAS.........44
FIGURA 14: DIAGRAMA GENERACIÓN FICHEROS DE MUESTRAS Y PARÁMETROS................................45
FIGURA 15: DIAGRAMA DE FICHEROS NECESARIOS Y GENERADOS EN LA SÍNTESIS DE DIFONEMAS....47
FIGURA 16: EJEMPLO REAL DE ORDENACIÓN DE DIFONEMAS CON MISMO NOMBRE DE LA SERIE
L_N_07600......................................................................................................................... 48
FIGURA 17: DETALLE DE FICHEROS QUE INTERVIENEN EN LA SELECCIÓN AUTOMÁTICA.....................49
FIGURA 18: ESQUEMA DE FICHEROS QUE INTERVIENEN EN LA GENERACIÓN DEL ARCHIVO DE BASE
DATOS FINAL........................................................................................................................ 50
FIGURA 19: ESQUEMA DEL SINTETIZADOR DE HABLA POR CONCATENACIÓN BORIS...........................69
FIGURA 20: ESQUEMA DEL BLOQUE DE PROCESADO DE TEXTO......................................................71
FIGURA 21: ESTRUCTURA EMOLISTA..............................................................................................76
FIGURA 22: ESQUEMA DE LA ESTRUCTURA TBLKPALABRA..............................................................83
FIGURA 23: DIAGRAMA PSD_MAIN HASTA GENERACIÓN DE BLOQUES DE PALABRA...........................84
FIGURA 24: ESQUEMA DE LA ESTRUCTURA TBLKFONEMA...............................................................89
FIGURA 25: ESQUEMA DEL BLOQUE DE SÍNTESIS DE HABLA...........................................................94
FIGURA 26: SEÑAL DE VOZ CON SUS MARCAS DE PITCH.................................................................95
FIGURA 27: POSICIÓN DE LAS MARCAS EN EL EJE DE SÍNTESIS.......................................................96
FIGURA 28: CORRELACIÓN ENTRE LOS EJES DE ANÁLISIS Y SÍNTESIS [MGCM00]............................97
FIGURA 29: ESQUEMA DEL BLOQUE DE SALIDA............................................................................101
FIGURA 30: GRABACIÓN FRASE “NO QUEDA FRUTA LOS VIERNES.” CON EMOCIÓN NEUTRA.............134
FIGURA 31: GRABACIÓN FRASE “EL FINAL DEL SIGLO VEINTE” CON ESTADO NEUTRO......................135
FIGURA 32: GRABACIÓN FRASE “TENGO LA LLAVE EN EL BOLSILLO” EN ESTADO NEUTRO...............136
FIGURA 33: GRABACIÓN FRASE “GOZAN DE PERFECTA SALUD.” CON EMOCIÓN NEUTRA.................138
FIGURA 34: GRABACIÓN FRASE “VIVIRÁS UNA FELIZ EXPERIENCIA” EN ESTADO NEUTRO.................139
FIGURA 35: GRABACIÓN FRASE “LE GUSTA MUCHO EL GREGORIANO” EN ESTADO NEUTRO.............140
FIGURA 36: GRABACIÓN FRASE “LLEGÓ LA REINA DEL PUÑO CERRADO” EN ESTADO NEUTRO.........141
FIGURA 37: GRABACIÓN FRASE “NO QUEDA FRUTA LOS VIERNES” EN EMOCIÓN ALEGRÍA................145
FIGURA 38: GRABACIÓN FRASE “EL FINAL DEL SIGLO VEINTE” CON LA EMOCIÓN ALEGRÍA...............146
FIGURA 39: GRABACIÓN FRASE “TENGO LA LLAVE EN EL BOLSILLO” CON EMOCIÓN ALEGRÍA...........148
FIGURA 40: GRABACIÓN FRASE “VIVIRÁS UNA FELIZ EXPERIENCIA” CON EMOCIÓN ALEGRÍA............149
FIGURA 41: GRABACIÓN FRASE “LE GUSTA MUCHO EL GREGORIANO” EN EMOCIÓN ALEGRÍA...........150
FIGURA 42: GRABACIÓN “LLEGÓ LA REINA DEL PUÑO CERRADO.” CON EMOCIÓN ALEGRÍA.............152
FIGURA 43: GRABACIÓN FRASE “NO QUEDA FRUTA LOS VIERNES.” CON EMOCIÓN TRISTEZA...........156
FIGURA 44: GRABACIÓN FRASE “LA PUERTA TIENE CERROJO.” CON TRISTEZA...............................157
FIGURA 45: GRABACIÓN FRASE “GOZAN DE PERFECTA SALUD.” CON EMOCIÓN TRISTEZA...............158
FIGURA 46: GRABACIÓN FRASE “VIVIRÁS UNA FELIZ EXPERIENCIA” CON TRISTEZA..........................160
FIGURA 47: GRABACIÓN FRASE “LE GUSTA MUCHO EL GREGORIANO” CON TRISTEZA......................161
FIGURA 48: GRABACIÓN FRASE “NO QUEDA FRUTA LOS VIERNES.” CON EMOCIÓN SORPRESA.........165
FIGURA 49: GRABACIÓN FRASE “EL FINAL DEL SIGLO VEINTE” CON EMOCIÓN SORPRESA................167
FIGURA 50: GRABACIÓN FRASE “VIVIRÁS UNA FELIZ EXPERIENCIA” CON SORPRESA.......................168
FIGURA 51: GRABACIÓN FRASE “LE GUSTA MUCHO EL GREGORIANO” CON SORPRESA....................170
FIGURA 52: GRABACIÓN FRASE “LLEGÓ LA REINA DEL PUÑO CERRADO” CON SORPRESA................171
FIGURA 53: GRABACIÓN FRASE “NO QUEDA FRUTA LOS VIERNES.” CON EMOCIÓN ENFADO.............176
FIGURA 54: GRABACIÓN FRASE “EL FINAL DEL SIGLO VEINTE” CON EMOCIÓN ENFADO....................178
FIGURA 55: GRABACIÓN FRASE “TENGO LA LLAVE EN EL BOLSILLO” CON EMOCIÓN ENFADO...........179
FIGURA 56: GRABACIÓN FRASE “VIVIRÁS UNA FELIZ EXPERIENCIA” CON ENFADO...........................180
FIGURA 57: GRABACIÓN FRASE “LE GUSTA MUCHO EL GREGORIANO” CON ENFADO........................182
FIGURA 58: GRABACIÓN FRASE “LLEGÓ LA REINA DEL PUÑO CERRADO” CON ENFADO....................183
FIGURA 59: OBJECT WINDOW DEL PROGRAMA PRAAT CON OBJETOS CARGADOS...........................204
FIGURA 60: EDITOR DE TEXTGRID EN EL QUE APARECE EL OBJETO RESULTANTE DE LA
SEGMENTACIÓN AUTOMÁTICA PARA SU MODIFICACIÓN E INFORMACIÓN ADICIONAL..................205
FIGURA 61: EDITOR DE TEXTGRID EN EL QUE APARECE EL OBJETO MODIFICADO...........................206
FIGURA 62: EDITOR DE OBJETO TEXTGRID CON NIVEL TEXTTIER (1) E INTERVALTIER (2)..............207
FIGURA 63: EDITOR DE SCRIPT DEL PROGRAMA PRAAT................................................................208
FIGURA 64: FONEMA OCLUSIVO...................................................................................................209
FIGURA 65: FONEMA FRICATIVO..................................................................................................210
FIGURA 66: FONEMA FINAL DE LOGATOMO...................................................................................211
FIGURA 67: EJEMPLO DE MARCADO DEL HIATO /OA/.....................................................................212
FIGURA 68: FONEMA APROXIMANTE /G/ ENTRE DOS VOCALES EN ESTADO NEUTRO........................213
FIGURA 69: FONEMA APROXIMANTE /G/ ENTRE DOS VOCALES EN EMOCIÓN SORPRESA...................213
FIGURA 70: EJEMPLO FONEMA OCLUSIVO INICIO DE LOGATOMO....................................................214
FIGURA 71: EJEMPLO FONEMA NASAL /M/ ENTRE DOS VOCALES....................................................215
FIGURA 72: FONEMA LATERAL /L/ ENTRE DOS VOCALES................................................................216
FIGURA 73: MARCADO FONEMA VIBRANTE /R/ ENTRE VOCALES.....................................................217
FIGURA 74: MARCADO FONEMA VIBRANTE MÚLTIPLE /RR/ ENTRE VOCALES....................................217
FIGURA 75: EJEMPLO SEGMENTACIÓN FONEMA OCLUSIVO /K/.......................................................219
FIGURA 76: EJEMPLO SEGMENTACIÓN FONEMA FRICATIVO /T/......................................................220
FIGURA 77: EJEMPLO SEGMENTACIÓN FONEMA /Ñ/.......................................................................221
FIGURA 78: EJEMPLO SEGMENTACIÓN HIATO /AE/.........................................................................221
ÍNDICE DE TABLAS TABLA 1: MODIFICACIONES REALIZADAS EN EL ARRAY TTRADFON DEL PROGRAMA SACADIFVC.EXE.59
TABLA 2: DIFERENCIAS DETECTADAS EN EL TAMAÑO DE VARIABLES EN GENDB.EXE.........................66
TABLA 3: ASIGNACIÓN DE F0 PARA GRUPOS FÓNICOS CON UNA TÓNICA........................................114
TABLA 4: ASIGNACIÓN DE F0 EN LA ZONA INICIAL.........................................................................115
TABLA 5: COEFICIENTES PARA LA ASIGNACIÓN DE F0 EN LA PARTE FINAL......................................117
TABLA 6: SECUENCIA DE CONTROL [T:X] (TONO GLOBAL DEL HABLA, FACTOR ADITIVO)..................122
TABLA 7: SECUENCIA DE CONTROL [P:X] (TONO LOCAL DEL HABLA, FACTOR ADITIVO)...................122
TABLA 8: SECUENCIA DE CONTROL [M:X] (TONO GLOBAL DEL HABLA, FACTOR MULTIPLICATIVO).....123
TABLA 9: SECUENCIA DE CONTROL [W:X] (TONO LOCAL DEL HABLA, FACTOR MULTIPLICATIVO).......124
TABLA 10: SECUENCIA DE CONTROL [V:X] (VELOCIDAD GLOBAL DE HABLA)....................................125
TABLA 11: SECUENCIA DE CONTROL [U:X] (VELOCIDAD LOCAL DE HABLA)......................................125
TABLA 12: SECUENCIA DE CONTROL [E:X] (EMOCIONES)...............................................................126
TABLA 13: SECUENCIA DE CONTROL [N:X] (GRADOS EN EMOCIONES)............................................127
TABLA 14: SECUENCIA DE CONTROL [B:X] (INTRODUCCIÓN DE PAUSAS).........................................127
TABLA 15: PARÁMETROS ENTONACIÓN "NO QUEDA FRUTA LOS VIERNES" (ESTADO NEUTRO)..........135
TABLA 16: PARÁMETROS ENTONACIÓN "EL FINAL DEL SIGLO VEINTE" (ESTADO NEUTRO)................136
TABLA 17: PARÁMETROS ENTONACIÓN "TENGO LA LLAVE EN EL BOLSILLO" (ESTADO NEUTRO).......137
TABLA 18: PARÁMETROS ENTONACIÓN "GOZAN DE PERFECTA SALUD" (ESTADO NEUTRO)..............138
TABLA 19: PARÁMETROS ENTONACIÓN "VIVIRÁS UNA FELIZ EXPERIENCIA" (ESTADO NEUTRO).........139
TABLA 20: PARÁMETROS ENTONACIÓN "LE GUSTA MUCHO EL GREGORIANO" (ESTADO NEUTRO).....141
TABLA 21: PARÁMETROS ENTONACIÓN "LLEGÓ LA REINA DEL PUÑO CERRADO" (ESTADO NEUTRO). 142
TABLA 22: RESUMEN PARÁMETROS ENTONACIÓN ESTADO NEUTRO...............................................142
TABLA 23: CARACTERIZACIÓN DE LA ENTONACIÓN DEL ESTADO NEUTRO.......................................143
TABLA 24: PARÁMETROS ENTONACIÓN "NO QUEDA FRUTA LOS VIERNES" (EMOCIÓN ALEGRÍA).......146
TABLA 25: PARÁMETROS ENTONACIÓN "EL FINAL DEL SIGLO VEINTE" (EMOCIÓN ALEGRÍA).............147
TABLA 26: PARÁMETROS ENTONACIÓN "TENGO LA LLAVE EN EL BOLSILLO" (EMOCIÓN ALEGRÍA).....148
TABLA 27: PARÁMETROS ENTONACIÓN "VIVIRÁS UNA FELIZ EXPERIENCIA" (EMOCIÓN ALEGRÍA).......150
TABLA 28: PARÁMETROS ENTONACIÓN "LE GUSTA MUCHO EL GREGORIANO" (EMOCIÓN ALEGRÍA)...151
TABLA 29: PARÁMETROS ENTONACIÓN "LLEGÓ LA REINA DEL PUÑO CERRADO" (EMOCIÓN ALEGRÍA)
......................................................................................................................................... 152
TABLA 30: RESUMEN PARÁMETROS ENTONACIÓN ALEGRÍA............................................................153
TABLA 31: CARACTERIZACIÓN DE LA ENTONACIÓN DE LA EMOCIÓN ALEGRÍA..................................153
TABLA 32: VALORES FINALES DE PARÁMETROS DE ENTONACIÓN CON ALEGRÍA..............................154
TABLA 33: PARÁMETROS ENTONACIÓN "NO QUEDA FRUTA LOS VIERNES" (EMOCIÓN TRISTEZA)......157
TABLA 34: PARÁMETROS ENTONACIÓN "LA PUERTA TIENE CERROJO" (EMOCIÓN TRISTEZA)............158
TABLA 35: PARÁMETROS ENTONACIÓN "GOZAN DE PERFECTA SALUD" (EMOCIÓN TRISTEZA)..........159
TABLA 36: PARÁMETROS ENTONACIÓN "VIVIRÁS UNA FELIZ EXPERIENCIA" (EMOCIÓN TRISTEZA).....160
TABLA 37: PARÁMETROS ENTONACIÓN "LE GUSTA MUCHO EL GREGORIANO" (EMOCIÓN TRISTEZA). 162
TABLA 38: RESUMEN PARÁMETROS ENTONACIÓN EMOCIÓN TRISTEZA...........................................162
TABLA 39: CARACTERIZACIÓN DE LA ENTONACIÓN DE LA EMOCIÓN TRISTEZA.................................163
TABLA 40: PARÁMETROS ENTONACIÓN "NO QUEDA FRUTA LOS VIERNES" (EMOCIÓN SORPRESA)....166
TABLA 41: PARÁMETROS ENTONACIÓN "EL FINAL DEL SIGLO VEINTE" (EMOCIÓN SORPRESA)..........167
TABLA 42: PARÁMETROS ENTONACIÓN "VIVIRÁS UNA FELIZ EXPERIENCIA" (EMOCIÓN SORPRESA)...169
TABLA 43: PARÁMETROS ENTONACIÓN "LE GUSTA MUCHO EL GREGORIANO" (EMOCIÓN SORPRESA)
......................................................................................................................................... 171
TABLA 44: PARÁMETROS ENTONACIÓN "LLEGÓ LA REINA DEL PUÑO CERRADO" (EMOCIÓN SORPRESA)
......................................................................................................................................... 172
TABLA 45: RESUMEN PARÁMETROS ENTONACIÓN EMOCIÓN SORPRESA.........................................172
TABLA 46: CARACTERIZACIÓN DE LA ENTONACIÓN DE LA EMOCIÓN SORPRESA..............................173
TABLA 47: VALORES FINALES DE PARÁMETROS DE ENTONACIÓN EN SORPRESA.............................174
TABLA 48: PARÁMETROS ENTONACIÓN "NO QUEDA FRUTA LOS VIERNES" (EMOCIÓN ENFADO)........177
TABLA 49: PARÁMETROS ENTONACIÓN "EL FINAL DEL SIGLO VEINTE" (EMOCIÓN ENFADO)..............178
TABLA 50: PARÁMETROS ENTONACIÓN "TENGO LA LLAVE EN EL BOLSILLO" (EMOCIÓN ENFADO)......180
TABLA 51: PARÁMETROS ENTONACIÓN "VIVIRÁS UNA FELIZ EXPERIENCIA" (EMOCIÓN ENFADO).......181
TABLA 52: PARÁMETROS ENTONACIÓN "LE GUSTA MUCHO EL GREGORIANO" (EMOCIÓN ENFADO).. .182
TABLA 53: PARÁMETROS ENTONACIÓN "LLEGÓ LA REINA DEL PUÑO CERRADO" (EMOCIÓN ENFADO)184
TABLA 54: RESUMEN PARÁMETROS ENTONACIÓN EMOCIÓN ENFADO.............................................184
TABLA 55: CARACTERIZACIÓN DE LA ENTONACIÓN DE LA EMOCIÓN SORPRESA..............................185
TABLA 56: SUELDOS DE LAS PERSONAS QUE HAN INTERVENIDO EN EL PROYECTO.........................196
TABLA 57: OBLIGACIONES SOCIALES...........................................................................................197
TABLA 58: SALARIOS EFECTIVOS TOTALES...................................................................................197
TABLA 59: COSTE DE LA MANO DE OBRA.....................................................................................197
TABLA 60: COSTE DE MATERIALES..............................................................................................198
TABLA 61: PRESUPUESTO DE EJECUCIÓN MATERIAL.....................................................................198
TABLA 62: IMPORTE DE EJECUCIÓN POR CONTRATA.....................................................................199
TABLA 63: HONORARIOS FACULTATIVOS......................................................................................199
TABLA 64: HONORARIOS TOTALES...............................................................................................199
TABLA 65: IMPORTE TOTAL DEL PROYECTO..................................................................................200
TABLA 66: PATRONES DE BÚSQUEDA EN PERL.............................................................................224
TABLA 67: COMANDOS PARA SUSTITUCIONES EN PERL.................................................................224
TABLA 68: SÍMBOLOS EMPLEADOS EN FICHEROS POR LOTES........................................................226
ÍNDICE DE CUADROS CUADRO 1: SOLUCIÓN MANUAL DEL PROBLEMA DE FONEMAS DE DURACIÓN 0.................................34
CUADRO 2: ASIGNACIONES DE VARIABLES EN PERL......................................................................222
CUADRO 3: ESQUEMA DE ESTRUCTURAS DE CONTROL EN PERL....................................................223
CUADRO 4: EJEMPLO MANEJO DE FICHEROS EN PERL..................................................................225
GLOSARIO BSC: Boundary Specific Correction
DTW: Dynamic Time Warping
EGG: Electroglotógrafo
F0: Frecuencia fundamental
GNU: GNU No es Unix
GPL: Licencia Pública General de GNU
HMM: Hidden Markov Models
HTK: Hidden Markov Model Toolkit
LPC: Linear Predictive Coding
MFCCs: Mel-frequency Cepstral Coefficients
NLP: Natural Languaje Processing
PSOLA: Pitch Synchronous Overlapp-Add
TD-PSOLA: Time Domain Pitch Synchronous Overlapp-App
TTS: Text To Speech
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
1. INTRODUCCIÓN
1.1 Introducción a los sistemas de síntesis de voz
Durante los últimos años, los sistemas de síntesis de habla se han ido incorporando
a la sociedad a través de aplicaciones reales en diferentes áreas y cada vez crece
más el número de máquinas que hablan. Por ejemplo, los anuncios electrónicos en la
megafonía de estaciones y de aeropuertos, los servicios de información telefónica sin
operadores humanos, los sistemas interactivos de voz, los audio libros, los sistemas
de respuesta automatizada, etc.
Actualmente la inteligibilidad de estos sistemas de síntesis de habla es similar a la
de la voz humana pero, es importante tener en cuenta que la lengua hablada es capaz
de transmitir una riqueza de información que va más allá del significado obvio
lingüístico de las palabras. Esa riqueza adicional viene dada por lo que se denomina
prosodia, es decir, la información transmitida a través de la melodía y el ritmo del habla
y que está relacionada con parámetros como son: la frecuencia fundamental, el acento
y la duración.
En la mayoría de los casos las voces sintéticas suenan todavía en cierto modo
aburridas, con un mismo estilo de habla estándar, lo que hace que resulte una voz
sintetizada no natural. Para mejorar la naturalidad de la voz sintética se debe
considerar la variabilidad que existe en la comunicación oral entre los humanos
mencionada anteriormente.
Así pues, desde el inicio del desarrollo de los sintetizadores de habla ha habido
diferentes intentos de dotarlos de la capacidad para generar voces con emoción y
estilos de habla diferenciados del estilo por defecto habitual de los sistemas TTS (text
to speech). Los primeros intentos de síntesis de emociones se realizaron sobre
sistemas basados en reglas, mediante sistemas de síntesis por formantes. Éstos son
capaces de producir los diferentes alófonos del habla a partir de una serie de
parámetros que controlan el sintetizador y permiten la manipulación de las
características de la fuente de voz, lo cual resulta muy útil a la hora de sintetizar
algunas emociones [ARCL + 08] . Sin embargo, la inteligibilidad y naturalidad del habla
generada es comparativamente peor que la de los sistemas de síntesis utilizados
actualmente. Estos sistemas son los sistemas de síntesis de habla por concatenación
de unidades o segmentos, los cuales concatenan las unidades pregrabadas extraídas
de una base de datos para generar nuevas frases. Este hecho provoca que la voz
generada mantenga las características propias del locutor y en cierta medida del estilo
1
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
en que fueron grabadas haciendo que la calidad y naturalidad de la voz sintetizada
aumente notablemente.
El presente proyecto, abarca todo el proceso de síntesis de habla mediante
concatenación de unidades (difonemas) pregrabadas para diferentes emociones,
desde el procesado de las grabaciones iniciales de una locutora, hasta la integración
final en el sintetizador de los resultados obtenidos.
1.2 Objetivos del proyecto
El objetivo fundamental del proyecto es la obtención de voz sintetizada con
emociones (alegría, enfado, miedo, sorpresa y tristeza). Para ello es necesaria la
mejora del conversor texto-voz existente conocido como Boris y la adaptación del
mismo a la síntesis de emociones.
De forma paralela se obtiene, a partir del corpus de grabaciones existente, la base
de datos necesaria para la síntesis multiemoción.
1.3 Fases del proyecto
A continuación se enumeran las tareas más importantes que ha habido que afrontar
durante el desarrollo del proyecto. Algunas de estas tareas se pueden realizar de
forma paralela a otras mientras que otras son requisito previo para poder realizar las
siguientes.
Extracción de difonemas, a partir de los logatomos grabados en diferentes
ficheros de voz, para cada una de las emociones a utilizar. Se crea una base
de datos multiemoción con todos los difonemas que utilizará la adaptación del
sintetizador.
Adaptación del sintetizador existente a la nueva situación de multiemoción. Se
modifica la carga de la base de datos y su utilización dentro del sintetizador. Se
incorpora el lenguaje de etiquetas específico para las emociones.
Modificación de los módulos prosódicos de entonación y duraciones del
sintetizador existente para la adaptación al entorno multiemoción con el que se
trabaja a lo largo del proyecto.
Adaptación del modelo de prosodia (duración, entonación e intensidad) a las
características propias de la nueva locutora.
Interpretación de los resultados obtenidos en la síntesis de un conjunto de
frases disponibles.
2
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
1.4 Herramientas utilizadas
Se han utilizado diferentes herramientas durante las distintas etapas del proyecto
para conseguir los diferentes objetivos de una forma eficaz y rápida.
Praat: Es un programa para el análisis, síntesis y la manipulación de habla
creado por Paul Boersma y David Weenink del Instituto de Ciencias Fonéticas
de la Universidad de Amsterdam. Entre todas las funciones de las que está
dotado las que destacan son las de análisis y entre ellas, el análisis espectral,
de formantes, de pitch, de intensidad y de cualidad de la voz son los que se
usan de forma preferente en el análisis de voz [Praat]. También tiene funciones
de manipulación de pitch, de duración, de intensidad y de formantes, y
funciones de filtrado del habla. El programa, además, permite la creación y
utilización de scripts para realizar tareas de forma automática. En el manual
adjunto se puede obtener más información sobre el manejo del programa y
sobre su utilización en la revisión del marcado y la segmentación automática.
C: Es un lenguaje de programación de propósito general que ofrece economía
sintáctica, control de flujo, estructuras sencillas y un buen conjunto de
operadores. No es un lenguaje de muy alto nivel, es sencillo y no está
especializado en ningún tipo de aplicación, por lo cual se puede decir que es un
lenguaje potente con un campo de aplicación ilimitado. Este lenguaje se ha
ligado estrechamente al sistema operativo UNIX, ya que se desarrollaron
conjuntamente, pero a la hora de utilizarlo se puede decir que C no está ligado
a ningún sistema operativo ni máquina concreta y permite desarrollar cualquier
tipo de aplicación.
Perl: Son las siglas de Practical Extraction and Report Language (lenguaje
práctico de extracción e informes). Es un lenguaje de programación de
propósito general creado por Larry Wall y originalmente desarrollado, partiendo
de diferentes herramientas UNIX, para la manipulación de texto y que en la
actualidad es utilizado para un amplio rango de tareas incluyendo
administración de sistemas, desarrollo web, programación en red, desarrollo de
GUI, etc. Hereda ciertas estructuras de los intérpretes de comandos de UNIX
como el csh, awk y sed. [Perl 6] Está diseñado para que sea práctico, eficiente,
completo. Es multiplataforma, soporta tanto la programación estructurada como
la programación orientada a objetos y la programación funcional. Perl es un
lenguaje interpretado aunque compila los programas antes de ejecutarlos. En el
manual anexo se muestra brevemente la estructura del lenguaje.
3
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Batch: Los archivos batch son archivos de procesamiento por lotes que
contienen un conjunto de comandos MS-DOS y se guardan con extensión
*.bat. Los archivos sólo pueden ser ejecutados mediante el intérprete de
MS_DOS, CMD. Las instrucciones o los comandos contenidos son ejecutados
de forma secuencial. Los archivos por lotes se utilizan para automatizar
procesos y se introdujeron alrededor de 1956 para aumentar la capacidad de
procesamiento de programas, siendo el mecanismo más tradicional y antiguo
para ejecutar tareas que se conoce [Barajas 96]. En principio cualquier
comando de MS-DOS puede formar parte de un archivo por lotes. En el anexo
adjunto se explica brevemente las herramientas necesarias para crear un
archivo por lotes.
Audacity: Es un programa de código abierto distribuido bajo la Licencia
Pública General de GNU (GPL). Es un editor de audio que resulta muy útil para
el trabajo con muestras de habla. Es fácil de usar, multilingüe y dispone de
diferentes versiones para Windows, Mac OS X, GNU/Linux y otros sistemas
operativos [Audacity]. Puede grabar y editar audio en varias pistas, pudiendo
cortar, copiar, unir y mezclar distintos sonidos. Entre sus funciones destaca
también la posibilidad de modificar la velocidad y el tono de una grabación.
4
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
2. INTRODUCCIÓN A LOS SISTEMAS DE SÍNTESIS DE VOZ
2.1 Introducción
La finalidad que tienen los sistemas de síntesis de habla es generar voz a partir de
un determinado texto que se pasa como entrada. A esta voz generada se le denomina
voz sintetizada o artificial. La síntesis de habla ha supuesto un avance muy importante
en el mundo de la tecnología, y especialmente en el desarrollo de sistemas que
necesitan comunicarse con el usuario de manera verbal.
En la actualidad, existe un gran número de aplicaciones que utilizan la síntesis de
voz como base. Estas aplicaciones las podemos encontrar de forma habitual en
nuestra vida cotidiana, como puede ser en los sistemas de notificación o advertencias
del transporte público, estaciones o aeropuertos, en los sistemas de respuesta
automatizada o en los servicios de información telefónica automáticos entre otros
[Alcázar 08].La evolución que se ha dado en los sistemas de conversión de texto a voz (TTS
‘text to speech’) ha sido posible gracias a los progresos realizados en distintas áreas
entre los que destacan: los avances en teoría lingüística, en el modelo de la
caracterización acústica-fonética de los sonidos, en el modelado matemático para la
generación de voz, en la programación estructurada y en el diseño hardware de los
ordenadores.
2.2 Arquitectura general de un sintetizador de habla
Hoy en día, existe una amplia gama de procedimientos a través de los cuales se
puede generar voz artificial. A pesar de la variedad, todos los procesos de síntesis de
habla comparten una arquitectura común que se puede dividir en dos etapas o
subprocesos. El primero de estos está formado por un conjunto de módulos que se
encargan de leer el texto de entrada, procesarlo para determinar la estructura de las
frases y la composición fonética de cada palabra, y generar una serie de parámetros
con información variada sobre las características de la voz. El segundo, por su parte,
consta de un conjunto de módulos que transforman la información que se obtiene del
proceso anterior en una señal de voz artificial de salida. A estos dos subprocesos se
les denomina comúnmente Módulo de Procesamiento de Lenguaje Natural (Natural
Language Processing o NLP) y Módulo de Síntesis, respectivamente [Alcázar 08].
5
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
En la siguiente figura se muestra el proceso de síntesis descrito:
FIGURA 1: ESQUEMA DE UN SINTETIZADOR DE HABLA
A continuación se describe en detalle cada uno de los bloques.
2.2.1 PROCESAMIENTO DE LENGUAJE NATURAL (NLP)
Este bloque del proceso de síntesis de habla genera, a partir del texto de entrada,
una lista de parámetros que representan la variación con el tiempo de las
características de la voz (descripción prosódica del texto) y una lista de fonemas que
representan la transcripción fonética del texto (descripción fonética). La descripción
prosódica establece el ritmo, la intensidad y la entonación que se imprimirán a la voz
artificial de salida. La descripción fonética se refiere a los fonemas que aparecen
cuando las palabras del texto son pronunciadas [Alcázar 08]. En el bloque de Procesamiento de Lenguaje Natural se pueden distinguir tres
módulos con funciones diferenciadas:
Analizador de Texto: Toma el texto de entrada y lo adapta al formato
necesario para poder ser tratado por el resto de módulos del bloque de
procesamiento. El módulo de análisis tiene como fin principal la generación de
una cadena de palabras a partir del texto de entrada. Por ello, se realizará una
conversión a palabras de los números, abreviaturas, siglas, etc. que aparezcan.
Se dará un tratamiento especial a los signos de puntuación que puedan formar
parte del texto para obtener información adicional como puede ser asignación
de pausas o entonación.
Convertidor de Texto a Fonemas: Una vez que el analizador ha convertido el
texto de entrada en una cadena de palabras que este módulo puede manejar,
se procede a realizar la trascripción fonética del texto, que consiste en la
extracción de los fonemas que componen cada una de las palabras.
Generador Prosódico: Asigna a cada uno de los fonemas de la cadena
obtenida en el convertidor, la duración, intensidad y entonación que cada uno
6
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
de ellos deberá tener a la hora de la síntesis para dotar a la voz sintetizada de
la variabilidad requerida. Los valores asignados dependen del sentido, el
énfasis o la emoción de la que se quiera transmitir en cada palabra o en la
sentencia completa.
La información que se obtiene al final de este bloque se pasa al segundo módulo, el
Bloque de Síntesis, que es donde realmente se generará el habla.
2.2.2 PROCESO DE SÍNTESIS Una vez generadas la descripción fonética y prosódica del texto de entrada en el
NLP se procede a sintetizar la señal de voz en el bloque de síntesis. Es en este punto,
donde se producen las principales diferencias entre los distintos tipos de sintetizadores
conocidos.
2.2.2.1 Clasificación de los procesos de síntesis de habla
Como ya se ha mencionado, en la actualidad existe una amplia variedad de
métodos que se utilizan en la síntesis del habla. Aunque los sistemas se pueden
agrupar atendiendo a distintas características, la más empleada es aquella que los
clasifica de acuerdo a las reglas que siguen para la reconstrucción del habla.
Se pueden distinguir cuatro tipos diferentes de sintetizadores:
Sintetizadores articulatorios: Están basados en los mecanismos naturales
del procesamiento de la voz. El principal objetivo de estos sintetizadores es
controlar, de forma similar a como lo hace el cerebro, un modelo del aparato
fonador humano. Para ello se realizará una analogía entre los parámetros de
control circuitales y los parámetros relativos a los órganos articulatorios y sus
movimientos. Estos sintetizadores son los menos desarrollados hoy en día,
debido a la dificultad que presentan a la hora de obtener y controlar
automáticamente los parámetros (tamaño de la cavidad oral y la tráquea, la
posición en la que se encuentra la lengua, etc.) [MGCM 00].
Sintetizadores por formantes: Estos sintetizadores están basados en un
modelo fonético del mecanismo de producción del habla (modelo de fuente y
filtro). Están constituidos por una serie de filtros que modelan la resonancia del
tracto vocal, siendo estos filtros excitados por una fuente que simula las
cuerdas vocales. La voz es generada mediante la variación de distintos
parámetros que aplican a señales armónicas. La principal ventaja de estos
sistemas es que son muy flexibles y fácilmente manipulables. Resultan muy
interesantes para realizar estudios fonéticos [Alcázar 08].
7
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Sintetizadores derivados de las técnicas de predicción lineal (LPC): Se
basan en la posibilidad de modelar el tracto vocal como una serie de cilindros
huecos de diámetro variable. Cada cilindro condiciona la forma de la onda
sonora al entrar en el siguiente. Por esta razón, las propiedades de la onda
sonora final pueden predecirse. Son sintetizadores de análisis-síntesis, en los
que los parámetros que controlan la función de transferencia del filtro todo
polos, que simula el tracto vocal, son parámetros calculados utilizando la
predicción lineal y aprovechando la periodicidad de la onda sonora.
Dependiendo del método de codificación que se utiliza, existen varios tipos de
sintetizadores siendo los más comunes los multipulso (MLPC).
Sintetizadores por concatenación de forma de onda: Para generar el habla,
concatenan unidades digitalizadas previamente grabadas, minimizando así el
ruido de codificación, y ajustan la prosodia original de estas unidades a la del
texto a sintetizar. Este tipo de sintetizadores están basados en métodos
PSOLA (Pitch Synchronous Overlap-Add) que permiten modificar el tono y
duración de las unidades pregrabadas en el momento de la síntesis. Modifican
la frecuencia fundamental de la señal actuando directamente sobre la
representación de la misma en el dominio del tiempo, pudiendo modificar de
forma sencilla la curva prosódica a los requisitos deseados. La complejidad de
estos sistemas es alta, pero la calidad obtenida es buena, especialmente
cuando se dispone de una gran cantidad de unidades y se puede realizar una
selección dinámica. Dependiendo de la unidad elegida para la concatenación
existen diferentes tipos de sintetizadores entre los que se encuentran: los de
concatenación de fonemas, de difonemas, de trifonemas, de sílabas, de
palabras y de segmentos de longitud variable. La unidad a concatenar se elige
de forma que se logre minimizar el ruido de concatenación presente en este
tipo de sintetizadores manteniendo un equilibrio con el tamaño de la base de
datos necesaria para el almacenamiento de las unidades. Un caso particular de
este tipo de sintetizadores son los sistemas de selección de unidades, en los
cuales no se modifica la prosodia de las unidades pregrabadas. Es necesario,
por tanto, disponer de un mayor número de unidades grabadas en diferentes
contextos para así concatenar directamente unas con otras [MGCM 00].
Sintetizadores estadísticos paramétricos basados en Modelos ocultos de Markov (HMM): Son los sintetizadores más recientes. La idea surge en 1995
con Keiichi Tokuda y es desarrollada en el Nagoya Institute of Technology y
Tokyo Institute of Technology. En el año 2002 aparece la primera versión del
sintetizador HTS de código abierto y durante los últimos años ha aumentado su
8
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
popularidad y uso debido a la calidad de los resultados obtenidos y a la
flexibilidad que ofrece a la hora de modificar las características de la voz del
corpus de partida para la síntesis de habla [HTS]. Estos sistemas pueden
reproducir fácilmente las características del habla original porque el espectro de
frecuencias (tracto vocal), la frecuencia fundamental (fuente glotal) y la
duración (prosodia) se modelan de forma simultánea por HMM pudiendo ser
generados después por los modelos entrenados. Se trabaja con un árbol de
decisión para cada uno de los tres parámetros (modelado independiente). En el
proceso de síntesis, se utiliza un modelo de excitación mixta que se basa en la
suma de un tren de impulsos con manipulación de fase y un ruido gausiano
[BCYM+08]. Las características del habla se modifican transformando los
parámetros modelados, mediante técnicas de adaptación de locutores
utilizadas en sistemas de reconocimiento. De este modo, partiendo de un
corpus de unidades de habla neutra se pueden sintetizar distintas emociones e
incluso se puede obtener voz femenina partiendo de un corpus de voz
masculina. Entre las ventajas de este sistema destaca la robustez del mismo
evitando discontinuidades y errores graves. Es menos sensible a las
imprecisiones que se puedan producir en la segmentación que el sistema
anterior. Ofrece una buena calidad de la voz y flexibilidad de las características
del habla generada.
En la figura 2 se muestra el esquema del modelo propuesto por Tokuda:
FIGURA 2: SISTEMA DE SÍNTESIS DE HABLA BASADO EN HMM (HTS) [KTHZ 09]
9
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Se describen seguidamente, los dos sistemas de síntesis más clásicos que se han
descrito: el sintetizador de formantes y el de concatenación.
2.2.2.2 Síntesis por formantes
Como ya se ha comentado, los sistemas que utilizan la síntesis por formantes se
basan en la teoría acústica de producción de habla, que en su forma más sencilla
postula que es posible ver la voz como el resultado de la excitación de un filtro lineal
por una o más fuentes de sonido [Alcázar 08].
Modelado de la fuente de voz
Las fuentes primarias del sonido son:
Fuente cuasi periódica: Excitación producida por la vibración de las cuerdas
vocales (fonemas sonoros).
Fuente aperiódica (ruido): Turbulencia causada por una diferencia de presión a
través de una constricción, es decir, el ruido producido por la fricación (fonemas
sordos).
La fuente de voz usada en los sintetizadores por formantes ha evolucionado desde
los trenes de impulsos filtrados utilizados en los primeros diseños, hasta modelos
matemáticos mucho más complejos que permiten tener mayor control sobre
parámetros como la frecuencia fundamental, la amplitud, la proporción de tiempo que
la glotis está abierta en un periodo, etc..
Modelado de la función de transferencia del tracto vocal
El tracto vocal filtra la onda glotal generada amplificando cada componente de
frecuencia con una determinada ganancia. En el modelo de síntesis por formantes se
dispone de un conjunto de filtros lineales que tienen como objetivo simular los efectos
resonantes del tubo acústico formado por la faringe, la cavidad bucal y los labios. La
función de transferencia del tracto vocal se puede modelar como un filtro todo polos.
Cada par de polos complejos conjugados produce un pico local en la parte positiva del
espectro, conocido como formante1.
H ( z )= G
1+∑k=1
p
ak z−k
1 Los formantes son resonancias producidas en las cavidades de los órganos de producción de la voz. Las frecuencias a las que se dan dependen de la longitud del tracto, de la posición de las constricciones o estrechamientos del mismo y del grado de estos estrechamientos.
10
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
A veces, la representación de la función de transferencia del tracto vocal en
términos de polos se ha completado con ceros (antirresonadores) para modelar las
propiedades absorbentes del sonido que tienen los tubos secundarios en
articulaciones complejas como las nasales y las vocales nasalizadas.
En el sistema desarrollado por Holmes se suman las salidas de un conjunto de
resonadores conectados en paralelo, estando la ganancia de cada formante
controlada por un parámetro independiente. Por otra parte, está el modelo propuesto
por Klatt [ Klatt 1987] que consta de un sintetizador con formantes en cascada o serie
para la síntesis de los fonemas sonoros y con formantes en paralelo para la síntesis de
los fricativos.
En la figura 3 se muestra el esquema del modelo propuesto por Klatt.
FIGURA 3: ESQUEMA DEL SINTETIZADOR POR FORMANTES DE KLATT [KLATT 1987]
Parámetros de un sintetizador por formantes
Los parámetros que controlan un sintetizador de formantes son del tipo ‘Ancho de
banda del primer resonador serie’, ‘Frecuencia central del cuarto resonador paralelo’ o
‘Ganancia del generador de onda glotal’. Dependiendo del tipo de control que se
realice sobre estos parámetros, se tiene una subdivisión de sintetizadores de
formantes:
Sistemas de síntesis por regla : Los parámetros se calculan de acuerdo a un
conjunto de reglas dependientes del contexto, ya que cada fonema tiene un
espectro diferente dependiendo del contexto en el que se encuentra [Alcázar 08].
Sistemas de análisis-síntesis: Los parámetros se obtienen por análisis o
parametrización de segmentos de voz natural.
Los sintetizadores de formantes tienen también un conjunto de reglas para predecir
las duraciones de los segmentos sintetizados y la curva de tono fundamental.
11
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
2.2.2.3 Síntesis por concatenación
La síntesis del habla por concatenación se basa en grabar y almacenar voz natural
fragmentada en segmentos o unidades de síntesis (base o corpus de unidades) y
concatenar las unidades adecuadas para producir cualquier mensaje. Es muy común
su utilización por los buenos resultados que ofrece.
Selección de unidades de concatenación
El tipo de unidad a concatenar es un parámetro crítico para conseguir una buena
calidad en la voz sintetizada. Las limitaciones en la calidad del habla generada se
deben fundamentalmente a dos tipos de distorsión:
De concatenación: los segmentos de voz utilizados están condicionados por
la coarticulación con el contexto de donde se extraen (en general diferente
del contexto donde se insertan).
De unidad: las características prosódicas de los segmentos de voz son, por
norma, diferentes a la prosodia requerida para el habla sintética (si se
modifica la prosodia se introduce distorsión y si no se modifica existe una
pérdida de naturalidad).
Se debe llegar a un compromiso entre la mejor calidad segmental posible (a mayor
longitud de los segmentos, menos puntos de concatenación) y la cantidad de memoria
necesaria para almacenar las unidades pregrabadas [Alcázar 08].Los efectos de coarticulación tienden a minimizarse en el centro acústico de un
fonema, lo cual llevó a Peterson a proponer el difonema (unidad de voz que incluye la
transición entre dos alófonos2 consecutivos, formados por la parte estacionaria del
primer alófono, la transición del primero al segundo y la parte estacionaria del segundo
alófono) como la unidad más satisfactoria para la concatenación. Ésta es la unidad con
la que se ha trabajado en el proyecto.
Si se considera que en el castellano existen unos 30 alófonos, el número máximo
de difonemas sería de 302=900. Aunque no todos los difonemas se utilizan, si se
muestrean a 16 KHz y con un tamaño de 16 bits ocuparían unos 5 Mbyte. [Alcázar 08] Por otro lado, se hace necesaria la inclusión de trifonemas, que son una extensión
a agrupaciones de tres fonemas cuando los efectos de coarticulación son tan grandes
que no es posible la segmentación en difonemas (por ejemplo, oclusiva + “r” + vocal).
2 Un fonema es la unidad teórica básica del habla que permite distinguir palabras en una lengua. Un alófono es la realización concreta y específica de un sonido. Un fonema puede ser representado por una familia de alófonos asociados a un sonido específico. Por ejemplo, el grafema “d” tiene un fonema, /d/ y el fonema /d/ tiene dos alófonos, [d] y [δ] (diferenciados por la forma de articular el fonema).
12
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Se puede reducir el tamaño de la memoria necesaria para el almacenamiento de
las unidades de concatenación de las siguientes formas:
Evitando guardar las unidades difonema formadas por consonante +
consonante que no se puedan dar nunca en el lenguaje.
Tratando algunos alófonos en determinados contextos como una unidad de tipo
fonema, como por ejemplo los fricativos sordos.
Grabación de los elementos de concatenación
Los difonemas deben ser grabados por un locutor que sea capaz de controlar y
mantener constante la cualidad de la voz, de forma que no haya cambios repentinos
en el espectro de la fuente en el medio de las sílabas. Éstas no son unidades que
puedan ser grabadas aisladamente sino que deben ser extraídas de algún contexto.
Entre todos los posibles contextos de los que se pueden extraer difonemas (frase
natural, portadora, palabras aisladas y logatomos), se ha elegido los logatomos para la
grabación del locutor. Los logatomos son palabras cortas que incluyen la unidad
requerida y que no tienen por qué tener significado semántico.
Una vez obtenida la grabación, quedan por realizar dos tareas fundamentales:
Marcado de los fonemas que componen la grabación : Debido al gran
volumen de trabajo que supone realizar un marcado manual de las grabaciones
de una base de datos, se realiza, en la mayoría de los casos un marcado
automático mediante técnicas de reconocimiento de habla. Aunque el marcado
manual es el que mejores resultados ofrece, el tiempo que se utiliza es amplio
y existe el peligro de que si la segmentación se realiza por varias personas se
puedan producir errores en el criterio de segmentación. El marcado automático
ofrece un mismo criterio de segmentación y reduce el tiempo de procesado.
Los errores que se puedan producir con la segmentación automática se ven
compensados por la reducción del tiempo de procesado [Alcázar 08]. Selección del punto de corte : En este punto pueden destacarse dos
estrategias que buscan la suavización de la transición entre unidades
adyacentes para reducir el efecto sonoro del habla cortada o de la diptongación
[Alcázar 08]. Estas estrategias son:
Escoger el punto de corte mediante un procesado previo o algoritmo de
selección óptimo que tenga como objetivo minimizar la distancia entre el
alófono de la unidad actual y el mismo alófono de la unidad siguiente.
No utilizar ningún algoritmo de selección óptima para resolver la falta de
continuidad formántica por métodos de suavizado durante la síntesis.
13
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
2.2.2.4 Comparación de los métodos de síntesis
Al analizar las distintas técnicas disponibles para la síntesis de habla, se observa
que los sintetizadores por concatenación son los que presentan mejores resultados en
lo referente a calidad de voz sintetizada y grado de naturalidad. Los sintetizadores por
formantes obtienen buenos resultados en inteligibilidad pero la voz generada tiene un
tono robótico y poco natural. Los sintetizadores por formantes presentan una
importante ventaja frente a los de concatenación ya que permiten la manipulación de
las características de la voz, lo cual resulta de gran importancia para la síntesis de
emociones, puesto que, las características de la fuente de voz así como del tracto
vocal pueden cambiar de una emoción a otra. En los sintetizadores por concatenación
la fuente de voz es única y corresponde a la grabación previa de los difonemas. Es por
ello que en casos de síntesis con emociones se requieren diferentes bases de datos
para que las unidades pregrabadas no sufran grandes alteraciones al ajustar la
prosodia requerida por el texto.
2.3 Aplicaciones de la síntesis de habla
Como ya se ha mencionado anteriormente, la síntesis de voz tiene aplicaciones en
varias áreas y cada vez crece más el número de máquinas que interactúan con los
humanos. En cualquiera de las aplicaciones el mensaje a reproducir se especifica de
forma simbólica y después se convierte en voz.
Algunas de las aplicaciones que se pueden mencionar son:
Interfaces habladas de videojuegos y sistemas multimedia
Lectores de correo electrónico
Sistemas de respuesta automatizada o sistemas telefónicos sin operadores
Sistemas de anuncio de viajes en autobuses o aeropuertos
Los audio libros y sistemas de apoyo a la enseñanza
Asimismo, la síntesis de voz también tiene aplicaciones en apoyo a personas con
determinados tipos de discapacidad. En el caso de personas con discapacidad visual,
la síntesis de voz representa una gran ayuda en la interacción del usuario con los
ordenadores, ya que una forma de que los invidentes reciban información del
ordenador es a través del sonido.
14
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
3. ANÁLISIS DE LAS EMOCIONES
3.1 Introducción
El habla es el principal medio de comunicación entre los hombres. Es por ello que
siempre se ha tenido un gran interés en los mecanismos de producción de voz y se
han creado sistemas capaces simular y reconocer voz electrónicamente. El mayor
inconveniente que se presenta a la hora de simular la voz se debe a la variabilidad de
ésta. Numerosos estudios demuestran que con la voz se pueden expresar diferentes
aspectos del estado físico y emocional del locutor, incluyendo la edad, el sexo, la
personalidad, etc.
Muchos sintetizadores ofrecen la posibilidad de cambiar los parámetros que
controlan la voz para dotarla de diferentes tonalidades y conseguir la naturalidad
esperada, sin afectar seriamente a la inteligibilidad del habla. Si las modificaciones que
se realizan a la voz sintetizada reflejan adecuadamente los cambios que experimenta
la voz humana cuando expresa emociones es posible simular diferentes emociones a
través de la voz sintetizada.
Para implementar con éxito los efectos emocionales en la voz sintetizada hay que
tener en cuenta dos factores fundamentales:
Conocer cómo pueden distinguirse las características emocionales de la voz y
cómo pueden describirse dichas características usando los métodos de
procesado de voz.
Incorporar a los algoritmos de síntesis de voz, los parámetros o reglas
necesarias para implementar las emociones.
El objetivo del presente proyecto es expresar la emoción alegría, tristeza, sorpresa
y enfado, a través de la voz generada mediante el sintetizador por concatenación.
Para conseguir el propósito, en este caso, es necesario obtener bases de datos
diferenciadas para cada emoción a implementar.
3.2 Concepto de emoción
El concepto de emoción ha sido estudiado y analizado en muchas ocasiones. A
pesar de que existen multitud de modelos teóricos al respecto, se tiene un
conocimiento poco preciso de la emoción. Esto es debido a que la emoción es un
campo difícil de investigar, en el que los estudios sistemáticos son escasos y la
metodología que se utiliza para la investigación es diversa y variada. [Chóliz 05]
15
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
En general la definición más aceptada es la que considera que la emoción es un
estado complejo del organismo que se origina en respuesta a la información percibida
del entorno y predispone a una cierta respuesta o acción, es decir, la emoción es un
cambio que lleva a la persona a la acción en un sentido determinado. [Bisquerra 2000]
Las emociones disponen a la acción, pero también contienen un elemento más
interno que forma los sentimientos o estados de ánimo, los cuales son más duraderos
y menos espontáneos por lo que no están tan relacionados con la acción directa e
inmediata que se obtiene con la emoción. La naturaleza de los estados de ánimo es
más ambigua que la de la emoción. Aunque se pueden diferenciar fácilmente las
emociones de los estados de ánimo, resulta imposible definir cuándo una emoción se
convierte en un estado de ánimo.
Por otro lado, más allá de emociones y estados de ánimo, está el rasgo a largo
plazo de la personalidad, que puede definirse como el tono emocional característico de
una persona a lo largo del tiempo. La personalidad de cada persona actúa como
moduladora de las emociones y de los estados de ánimo de forma diferenciada y
característica.
Así, representando estos tres conceptos en un eje temporal se tendría:
FIGURA 4: REPRESENTACIÓN TEMPORAL DE LOS CONCEPTOS: EMOCIÓN, ESTADO DE ÁNIMO Y PERSONALIDAD
En el proceso que desencadena cualquier emoción pueden distinguirse dos fases
[Bisquerra 2000] :
Percepción de algún cambio en las condiciones internas o externas de la
persona.
Evaluación y valoración del cambio para producir una tendencia hacia la acción
o hacia el afrontamiento. Como consecuencia de esto se producen una serie de
cambios fisiológicos, modificaciones en la expresión corporal, etc., aunque los
efectos que finalmente se exteriorizan sufren determinadas modificaciones que
en general van asociadas a la culturización y el aprendizaje.
16
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
3.2.1 COMPONENTES DE LA EMOCIÓN
Existen un gran número de factores a tener en cuenta a la hora de caracterizar
cada emoción. Todos los análisis sobre una emoción tienen al menos tres
componentes característicos según [FJM 03] :
Componente fisiológico: Como resultado del fenómeno emocional, se
obtienen respuestas psicofisiológicas involuntarias. Algunas de ellas pueden
ser taquicardia, rubor, sudoración, sequedad en la boca, variación en el tono
muscular, etc.
Componente conductual–expresivo: Toda emoción lleva implícito un
lenguaje no verbal que aporta señales precisas que facilitan su identificación,
de forma que si se analiza el comportamiento de un individuo se puede
averiguar la emoción que experimenta. Este lenguaje no verbal viene dado en
gran parte por las expresiones del rostro y el tono de voz empleado. Esta
componente de la emoción es en cierta medida controlable y está muy influida
por factores socioculturales.
Componente experiencial–cognitivo: Relacionado con la vivencia afectiva,
con el hecho de sentir y de experimentar propiamente la emoción. La
experiencia emocional varía en intensidad dependiendo de diversos factores,
como la importancia que se le da a la situación que genera la emoción o su
proximidad temporal.
3.2.2 FUNCIÓN DE LAS EMOCIONES
A partir del propio concepto de la emoción se puede comprender que ésta, tiene
una función importante en el comportamiento humano, ya que es el elemento que lo
origina y que le da sentido. Todas las emociones tienen una función que las hace
útiles y permiten que la persona reaccione adecuadamente ante determinadas
circunstancias. Según [Reeve 94], las tres funciones principales de las emociones son:
Función adaptativa: Las emociones desarrollan un papel fundamental en la
adaptación al entorno. Preparan fisiológica y físicamente al organismo para la
acción, facilitando la conducta apropiada a cada situación.
Función social: Comunican el estado del organismo y sus intenciones de
comportamiento. La expresión de las emociones permite a los demás predecir
el comportamiento asociado con las mismas, lo cual tiene un indudable valor en
los procesos de relación interpersonal. Por tanto, las emociones facilitan la
interacción social, controlan la conducta de los demás y permiten la
comunicación de los estados afectivos o promueven la conducta prosocial
[Izard 89]. Así, emociones como la felicidad favorecen los vínculos sociales y
17
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
las relaciones interpersonales, mientras que otras como la ira pueden generar
situaciones de evitación o de confrontación.
Función motivacional: Facilita las conductas motivadas. La emoción energiza
la conducta motivada. La relación entre motivación y emoción no se limita al
hecho de que en toda conducta motivada se producen reacciones emocionales,
sino que una emoción puede determinar la aparición de la propia conducta
motivada, dirigirla hacia determinado objetivo y hacer que se ejecute con
intensidad. Se puede decir que toda conducta motivada produce una reacción
emocional y a su vez la emoción facilita la aparición de unas conductas
motivadas y no otras.
3.3 Clasificación de las emociones
A la hora de clasificar o distinguir las distintas emociones se pueden seguir dos
enfoques o criterios distintos. Por un lado se pueden clasificar las emociones
suponiendo que cada una de ellas es única frente al resto, que son reacciones
afectivas innatas presentes en todos los humanos y que se expresan de forma
característica (clasificación discreta), y por otro suponiendo un escenario en una
determinada dimensión en el que la distinción se establece en términos de gradación
(clasificación continua). [LMGC 01]
3.3.1 CLASIFICACIÓN DISCRETA O BÁSICA DE LAS EMOCIONES
Este enfoque es originado por el hecho de que algunas emociones poseen unas
características que las hace únicas y distinguibles del resto. En este punto, se puede
distinguir entre emociones primarias y emociones secundarias. La cuestión de la
existencia de emociones básicas es un tema controvertido, sobre el que no existe
todavía el suficiente consenso entre los investigadores. [Chóliz 05]
Según este criterio, las emociones primarias están determinadas por una expresión
facial característica y por una disposición típica de afrontamiento de las situaciones.
Las emociones secundarias derivan de las primarias, obteniéndose a veces como
combinación de ellas. Además, éstas no presentan rasgos faciales distintivos ni una
tendencia específica a la acción.
En cuanto a las emociones que se podrían considerar primarias, cada autor
propone un número y unas emociones determinadas que no suelen coincidir con las
que proponen otros investigadores. A pesar de ello, la mayoría de los analistas
consideran sólo 6: alegría, tristeza, ira, sorpresa, miedo y asco. Por el contrario, hay
un numeroso grupo de emociones secundarias como pueden ser aburrimiento,
impaciencia, vergüenza o ternura.
18
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
3.3.2 ESTUDIO DIMENSIONAL DE LAS EMOCIONES
Este método de clasificación tiene su fundamento en la existencia de importantes
diferencias individuales en el modo en el que las personas pueden desarrollar una
emoción, por lo que se considera que el empleo de categorías discretas no es la mejor
forma de describir la realidad. Para la distinción entre emociones se utilizan unas
dimensiones generales que definen un mapa donde se sitúan todas las posibles
emociones que existen (incluidas las definidas en el otro método como primarias y
secundarias).
Entre las técnicas empleadas para la clasificación de las emociones mediante este
enfoque, la más utilizada es la desarrollada por Russell [RWM 89] [Hofer 04] que
sugiere que todas las emociones pueden ser ubicadas en el interior de un círculo
definido en un espacio bidimensional, siendo estas dimensiones:
Valencia afectiva: Permite diferenciar las emociones en función de lo
placenteras o agradables que sean (positivas ↔ negativas). Así, un suceso
desencadenará una emoción positiva cuando favorezca el logro de
determinados objetivos, mientras que si el suceso aleja esos objetivos, la
emoción que se desencadenará tendrá valencia negativa.
Actividad: Permite diferenciar las emociones por la presencia o no de energía
y tensión.
Según este criterio, la representación de las distintas emociones en un plano
bidimensional sería la siguiente:
FIGURA 5: REPRESENTACIÓN BIDIMENSIONAL DE LAS EMOCIONES (ADAPTACIÓN DEL MODELO PROPUESTO POR RUSSELL) [RUSSELL 1980]
19
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
En distintos estudios se ha demostrado que se confunden más entre sí las
emociones con un nivel similar de actividad (como por ejemplo alegría y enfado) que
las que presentan similitudes en el nivel de valencia. Esto lleva a la conclusión de que
la dimensión actividad está más correlacionada con las variables auditivas
relativamente más simples de la voz, como pueden ser el tono y la intensidad,
mientras que la valencia está probablemente relacionada con factores más sutiles y
complejos.
3.4 Efectos de las emociones en el habla
Las primeras investigaciones sobre cómo afectaban las emociones al
comportamiento y al lenguaje de los animales fueron descritas brevemente por Darwin
[Darwin 1872]. Recientemente los efectos de las emociones en el habla han sido
estudiados por investigadores acústicos que han analizado la señal de voz, por
lingüistas que han estudiado los efectos léxicos y prosódicos, y por psicólogos.
Muchas de las investigaciones en este campo hacen hincapié en la importancia de los
rasgos prosódicos (velocidad de la voz, el contorno de intensidad, frecuencia
fundamental (F0), rango de F0, etc.) y de la cualidad de voz a la hora de expresar
diferentes emociones en la comunicación verbal [Cosi 07].
En los sistemas TTS, los algoritmos de procesamiento de voz para la síntesis de
voz emocional se han centrado principalmente en el control de la duración y el tono de
fonemas, que son los principales parámetros prosódicos que transmiten la información
emocional, pero hay que destacar que la calidad de voz juega un papel importante en
el discurso emotivo.
A continuación, se analiza en detalle el efecto de las emociones en la duración, el
tono y la calidad de la voz.
3.4.1 P ITCH
El pitch es la frecuencia de vibración de las cuerdas vocales. Se considera que las
características de la frecuencia fundamental son las principales portadoras de la
información sobre las emociones. Entre estas podemos resaltar:
Valor medio F0: Expresa el nivel de excitación del locutor. Una media elevada
de F0 indica un mayor grado de excitación.
Rango de F0: Distancia entre el valor máximo y mínimo de la frecuencia
fundamental. Las variaciones del rango respecto al estado neutro reflejan la
excitación emocional.
Fluctuaciones de F0: Que las fluctuaciones entre los valores altos y bajos de
pitch sean abruptas o suaves depende de las emociones. La curva de tono es
20
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
discontinua para las emociones consideradas como negativas (miedo, enfado)
y es suave para las emociones positivas (alegría).
3.4.2 DURACIÓN
La duración es el componente de la prosodia descrita por la velocidad del habla y la
situación de los acentos, y cuyos efectos son el ritmo y la velocidad. El ritmo en el
habla deriva de la situación de los acentos y de la combinación de las duraciones de
las pausas y los fonemas. Las emociones pueden distinguirse por una serie de
parámetros que conciernen a la duración, como son:
Velocidad de locución: Se mide en sílabas por segundo o palabras por
minuto. Normalmente un locutor en estado de excitación acortará la duración
de las sílabas por lo que la velocidad se verá incrementada.
Número de pausas y duración: Un locutor exaltado tenderá a hablar
rápidamente con menos pausas y más cortas, mientras que un locutor
deprimido hablará más lentamente, introduciendo pausas más largas.
3.4.3 CUALIDAD DE LA VOZ
La intensidad, las variaciones en la amplitud de la onda y en la duración, el cociente
entre energías a baja y alta frecuencia, el nivel de ruido de aspiración y el índice de
ruido armónico son algunas de las características relacionadas con la cualidad de la
voz que se pueden controlar en los sintetizadores.
Intensidad: Está relacionada con la percepción del volumen y se refleja en la
amplitud de la forma de onda.
Irregularidades vocales (shimmer, jitter): El shimmer refleja las fluctuaciones
de la amplitud de onda de un ciclo a otro, mientras que el jitter muestra las
variaciones del periodo fundamental.
Cantidad relativa de energía en alta frecuencia frente a baja frecuencia del espectro de voz: Una gran cantidad de energía en altas frecuencias está
asociada con agitación, mientras que una baja concentración de energía
denota calma o depresión.
Nivel de ruido de aspiración: Describe la generación de ruido respiratorio. La
componente fundamental tiende a ser más fuerte mientras que las altas
frecuencias son reemplazadas por ruido aspiratorio. Es una de las
características del tracto vocal más relacionada con la personalización de la
voz.
Índice de ruido armónico: Cociente entre la cantidad de energía de la parte
armónica de la señal y el resto.
21
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
3.5 Emociones implementadas en el sintetizador Boris
Como ya se ha comentado este proyecto pretende generar voz emocional a través
de un sintetizador por concatenación. Aunque el sintetizador parta de unidades
pregrabadas con emociones, será necesario realizar ciertas modificaciones en la
prosodia para conseguir los efectos deseados en cada emoción.
A continuación se realiza el análisis de cada una de las emociones que se desea
sintetizar: tristeza, alegría, sorpresa y enfado. Sólo se detallan los efectos producidos
en el habla y algunas de las características principales que las distinguen, a pesar de
que, como ya se ha mencionado, cada emoción lleva asociado un determinado
comportamiento fisiológico así como una serie de gestos, movimientos corporales y
expresiones vocales específicos que facilitan su reconocimiento por parte de
observadores externos [Cefire 2005].
3.5.1 LA EMOCIÓN TRISTEZA
La tristeza es un sentimiento negativo caracterizado por un decaimiento en el
estado de ánimo habitual, que se acompaña de una reducción significativa del nivel de
activación cognitiva y conductual. Aparece como consecuencia de algún cambio en el
entorno que no necesariamente tiene que venir provocado por agentes externos al
individuo y que es valorado como algo desagradable. La tristeza empuja al abandono
de un objetivo o a su sustitución por otro (motivación hacia la reintegración).
En general, las causas que originan la emoción tristeza también pueden actuar
como desencadenantes de un enfado. Sin embargo, existe una importante diferencia
entre ambos estados emocionales y es que, mientras que en el caso de la tristeza no
se encuentra ningún plan o procedimiento que permita aderezar la situación, en el
enfado tras evaluar las circunstancias se deduce que mediante un plan de acción
preciso se puede llegar a una solución [Cefire 2005].
En el caso de la tristeza, las variaciones que se producen en la expresión vocal son
[Alcázar 08]:
Descenso del tono medio y homogeneidad de la curva. Estrechamiento del
rango de F0.
Disminución de la intensidad de la señal vocal.
Velocidad de locución lenta y alargamiento de las pausas.
Introducción de suspiros.
La implementación de las características vocales de la emoción tristeza en el
sintetizador se tratará en los siguientes capítulos.
22
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
3.5.2 LA EMOCIÓN ALEGRÍA
La alegría es el sentimiento positivo que surge cuando un objeto o acontecimiento
se evalúa como deseable o favorable para la obtención de determinadas metas u
objetivos. De forma general, es una experiencia emocional de duración breve, aunque
ocasionalmente puede experimentarse como un estado de placer intenso. La alegría
favorece las relaciones interpersonales al mostrar una clara disposición para iniciar un
contacto social (induce a la reproducción del suceso) [Cefire 2005].
Dentro de la alegría se pueden distinguir distintas categorías o niveles de
intensidad. Así, las manifestaciones específicas de esta emoción vendrán
determinadas por distintos factores entre los que se puede citar el nivel de expectativa
que existe en que el acontecimiento desencadenante de la alegría se pueda dar, o la
cualidad de inesperado, puesto que en general los sucesos agradables inesperados o
novedosos se evalúan más positivamente que los esperados.
La alegría lleva asociada los siguientes cambios en la expresión vocal [Alcázar 08]:
Incremento del valor del tono medio y del rango de F0.
Aumento en la intensidad de la voz.
Incremento de la velocidad de locución y disminución de pausas.
En capítulos posteriores se tratarán las modificaciones realizadas en el sistema
para dotar al sintetizador de esta emoción.
3.5.3 LA EMOCIÓN SORPRESA
La sorpresa es la emoción más singular de todas las que se tratan. Es una reacción
causada por un estímulo imprevisto, novedoso o extraño. Se realiza una evaluación
rápida, automática y afectiva. Es la emoción más breve y tiende a transformarse en un
corto periodo de tiempo en otro estado emocional. Es por ello que su nivel de valencia
puede derivar en positivo o negativo según la emoción en la que se convierta (miedo,
alegría, tristeza, enfado,…).
La sorpresa prepara al individuo para afrontar de forma efectiva los acontecimientos
(induce a la exploración). Para ello, provoca el bloqueo de otras actividades que
pudieran interferir con la reacción apropiada ante las nuevas exigencias de la situación
y origina un incremento en la sensibilidad de los órganos sensoriales para mejorar así
la receptibilidad del organismo.
Se ha optado, en este proyecto, por la implementación de la emoción sorpresa con
valencia positiva, es decir, que deriva en una emoción positiva. Los cambios
producidos en el habla con la expresión de la sorpresa en el caso de valencia positiva
son [Alcázar 08]:
23
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Aumento del tono medio y de la variabilidad tonal (rango de F0).
Finalización de la entonación en modo ascendente.
Alargamiento de silabas tónicas y de la última palabra de una sentencia.
Vocalizaciones espontáneas.
Las modificaciones realizadas para la implementación de la sorpresa en el
sintetizador se tratan posteriormente.
3.5.4 LA EMOCIÓN ENFADO
El enfado se produce cuando el individuo se ve sometido a situaciones que le
producen frustración o que le resultan desagradables. Permite generar de forma rápida
conductas de defensa o ataque ante situaciones desagradables o generadoras de
frustración (induce a la destrucción del suceso), de modo que, se interrumpen el resto
de actividades en curso y se centra la atención en la situación negativa. Para que se
produzca la acción, el individuo debe percibir que existe alguna solución al estímulo
desencadenante, por lo que actuará de forma urgente y eficaz para afrontarlo. El nivel
de enfado dependerá de la urgencia con la que la situación deba ser resuelta.
El enfado genera una serie de cambios en la expresión del habla que se
manifiestan en [Alcázar 08]:
Incremento de la intensidad de la voz.
Aumento del valor del tono medio y del rango de F0.
Incremento en la velocidad de locución.
Irregularidad de la fuente glotal y de la curva de tono.
Las modificaciones realizadas en el sintetizador para la implementación del enfado
se detallan en los siguientes capítulos.
24
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
4. SEGMENTACIÓN Y MARCADO DE LA BASE DE DATOS
4.1 Introducción
Un paso previo e indispensable en la generación de voz emocional mediante el
sintetizador basado en concatenación de unidades Boris, es generar la base de datos
con las unidades a concatenar. Como se avanzó en el capítulo 2 de esta memoria, el
difonema es la unidad que se presenta como la mejor alternativa para la
concatenación ya que es con la que se obtiene la mejor relación entre el tamaño
necesario para el almacenamiento de la base de datos y la distorsión producida en la
concatenación. Es por ello, que Boris trabaja con difonemas.
Los difonemas utilizados en este proyecto se han extraído de un contexto previo, ya
que no son unidades que puedan ser grabadas aisladamente. La extracción se ha
realizado a través de logatomos3 puesto que simplifican mucho la selección de las
unidades requeridas.
Se parte, por tanto, de una base de datos formada por diferentes logatomos
grabados, que hay que marcar y segmentar para la posterior extracción de los
difonemas deseados.
4.2 Base de datos o Corpus de logatomos
El corpus de partida contiene grabaciones de logatomos pronunciadas por una
actriz con voz neutra y simulando alegría, enfado, sorpresa y tristeza (las emociones
con las que se ha trabajado). Para la grabación del audio se han utilizado varios
micrófonos disponibles en la sala: uno enganchado a la cabeza de la actriz, otro de
solapa, uno situado sobre la mesa, etc. [BCMMG+07].
La base de datos se compone, para cada una de las emociones, de 570
logatomos/emoción. En total, se dispone de 2850 logatomos que cubren la principal
distribución de difonemas españoles. Los logatomos se agrupan en 114 unidades de
habla para la interpretación de los mismos por parte de la actriz, a la que se pidió que
durante la grabación hiciera pausas entre los logatomos con el fin de que se grabasen
como si estuvieran aislados.
El corpus formado por los ficheros de voz pregrabada con cada una de las
emociones, será procesado y manipulado para la obtención de los difonemas
necesarios para la síntesis por concatenación.
3 Llisterri (1991:71) define un logatomo como una palabra sin sentido pero cuyas características fonológicas responden a lo que podría ser una palabra en la lengua que se estudia.
25
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
4.3 Segmentación fonética y marcación de F0 automáticas
Hoy en día la segmentación más precisa se realiza de forma manual, sin embargo,
este no es un trabajo sencillo, ya que resulta muy extenuante, costoso y demanda
mucho tiempo para ser completado. Es por ello necesaria la utilización de técnicas que
permitan la segmentación automática.
En los últimos años se han empezado a aplicar técnicas de reconocimiento de voz
para la segmentación y el marcado automático de frases, palabras o logatomos
grabados. Se explican, a continuación, las técnicas automáticas de segmentación
fonética y marcación de frecuencia fundamental existentes, entrando en el detalle de
aquellas técnicas que han sido utilizadas en este trabajo.
4.3.1 TÉCNICAS DE SEGMENTACIÓN FONÉTICA
Existen diversos métodos para la segmentación fonética a partir de la transcripción
fonética u ortográfica de las locuciones. Estos métodos dividen la señal de entrada en
segmentos definidos explícitamente por la trascripción fonética u ortográfica
valiéndose de unos patrones de referencia o de algún tipo de modelo [DFGM 00].
Los sistemas más utilizados se basan en el uso de un reconocedor que utiliza
modelos ocultos de Markov (Hidden Markov Models, HMMs) o el alineamiento
temporal (Dynamic Time Wrapping, DTW) para modelar cada una de las unidades
acústicas [ABGC 05].
Alineamiento temporal: El algoritmo DTW se utiliza para conseguir un
alineamiento temporal entre la señal de voz que se va a segmentar y una ya
segmentada. La señal de voz segmentada es una señal sintetizada con los
mismos fonemas que la que queremos segmentar. Como la base de datos
utilizada para la síntesis está etiquetada, conocemos las fronteras de los
fonemas sintetizados. La segmentación se obtiene mapeando las fronteras en
la señal de voz a segmentar.
Modelos ocultos de Markov: En los sistemas que utilizan HMMs, conociendo
la transcripción fonética de la base de datos, la segmentación automática se
genera mediante un alineamiento forzado entre la señal de voz a segmentar y
la secuencia obtenida de los modelos correspondientes. Esta técnica se ha
usado en la segmentación automática de los ficheros que conforman el corpus
utilizado en este proyecto.
Como mejora adicional de los métodos de segmentación fonética que existen, se
puede efectuar un refinamiento local utilizando el método de corrección específica de
las fronteras fonéticas obtenidas (Boundary Specific Correction, BSC).
26
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
4.3.1.1 Segmentación fonética automática basada en Modelos Ocultos de Markov
La técnica de segmentación que se ha utilizado en este proyecto es la basada en
HMMs. La segmentación se ha desarrollado usando el conjunto de herramientas HTK
(Hidden Markov Model Toolkit ). HTK permite construir modelos ocultos de Markov
(HMM) que modelan determinadas series de tiempo. El proceso de segmentación
llevado a cabo está dividido en dos etapas. La primera es la etapa de entrenamiento
en la que diferentes herramientas del conjunto estiman los parámetros del set de
entrenamiento, empleando una serie de locuciones y las transcripciones asociadas. En
la segunda etapa, de reconocimiento, se transcriben locuciones desconocidas
mediante una serie de herramientas de reconocimiento [HTK].
La segmentación automática se genera forzando el alineamiento entre los datos de
habla y los HMMs disponibles en base a la transcripción dada, a través del
alineamiento básico de Viterbi. Las fronteras entre los distintos fonemas se sitúan en
los instantes de tiempo en los que tienen lugar las transiciones entre los
correspondientes modelos HMM [GABCM 07].
En el sistema utilizado se ha considerado un repertorio de 50 fonemas españoles,
cada uno de los cuales se representa mediante un modelo de densidad independiente
del contexto, continuo y que puede tener tres estados diferentes. Los modelos se
entrenan utilizando el algoritmo convencional de Baum-Welch (no exige marcas de
tiempo) en la transcripción fonética de frases en el set de entrenamiento.
Como vectores de entrada, el sistema utiliza 12 coeficientes Mel-Frequency
Cepstral Coefficients (MFCCs) calculados a partir de un banco de filtros, el logaritmo
de la energía y sus correspondientes derivadas temporales de primer y segundo
orden. La ventana de extracción de parámetros es de 25ms con 5ms de separación
entre tramas [LMS 08].
4.3.2 TÉCNICAS DE MARCACIÓN DE PITCH
Para la obtención de las marcas de pitch o frecuencia fundamental (F0), nos hemos
basado, en el estudio de la señal proporcionada por el EGG (electroglotógrafo).
El electroglotógrafo, utiliza dos electrodos situados sobre la superficie del cartílago
tiroides, los cuales aplican un débil voltaje de alta frecuencia. [LMS 08] Dado que el
tejido humano conduce muy bien la corriente eléctrica y el aire no, el grado de
impedancia varía constantemente según el grado de contacto existente entre las dos
cuerdas vocales durante la fonación. La apertura y cierre de la glotis4 hace variar la
4 La glotis es el espacio que existe entre las cuerdas vocales en la parte superior de la tráquea.
27
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
resistencia, de manera que midiendo la corriente entre ambos electrodos podemos
medir el movimiento de la misma.
En la figura se muestra la relación entre la señal del EGG y la apertura y cierre de
las cuerdas vocales. Puede apreciarse que el cierre total de las cuerdas se da cuando
la señal del EGG alcanza el 90% del valor máximo.
FIGURA 6: RELACIÓN ENTRE SEÑAL EGG Y EL CIERRE Y APERTURA DE LA GLOTIS [HCMT 04]
La duración entre dos momentos consecutivos de cierre glotal corresponde a un
período fundamental, y su inversa a la frecuencia fundamental de la voz. Teniendo
esto en cuenta, el algoritmo para el cálculo de la frecuencia fundamental se realiza de
la siguiente forma:
1. Obtención de la señal del EGG: Mediante el electroglotógrafo se capta la
señal producida por la apertura y el cierre de la glotis.
2. Filtrado de la señal del EGG: Se realiza mediante un filtro paso banda con el
fin de eliminar el ruido y las señales parásitas. Sabiendo que la frecuencia
fundamental media de la voz humana está entre 50 y 150 Hz en el caso de voz
masculina y entre 100 y 300 Hz para la femenina (nuestro caso), la banda de
paso con la que se ha trabajado queda definida entre 50Hz y 800Hz. Cabe
destacar que el tono medio puede superar los rangos mencionados en el caso
de habla con emociones.
3. Derivación del EGG: Se calcula la derivada del EGG (DEGG), señal central en
la figura anterior. Como se observa en la misma, los máximos de dicha señal
coinciden con el momento de cierre de las cuerdas vocales y los mínimos con
los momentos de apertura. En la señal inferior de la figura, se puede observar
esto más claramente ya que se tiene la señal DEGG suavizada.
28
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
4. Obtención de las marcas de F0: Como se ha comentado anteriormente, el
cierre total de las cuerdas se da cuando la señal del EGG alcanza el 90% del
valor máximo. Por ende, se ha elegido tomar el punto entre el 70% y el 90% del
valor máximo de la señal para colocar cada marca.
En la siguiente figura se visualiza en el programa Praat un ejemplo de la señal de
EGG filtrada y las marcas de pitch generadas por el procedimiento.
FIGURA 7: SEÑAL DE EGG FILTRADA Y MARCAS DE PITCH GENERADAS
4.4 Segmentación fonética y marcación de F0 manual
Tras la segmentación y el marcado de F0 automáticos, se realiza la revisión manual
de los resultados obtenidos para, en el caso de la marcación, eliminar las marcas
espurias y remarcar las zonas en las que el algoritmo pierde la sincronización, y en el
caso de la segmentación, para minimizar los errores de precisión que se puedan
producir.
Algunos de los problemas que hay que solucionar con la revisión manual de las
marcas son:
El algoritmo pone un gran número de marcas muy próximas entre sí en los
fonemas fricativos: /f/, /x/, /j/, /z/, que en realidad son sordos. Estas marcas
deben de ser eliminadas y dejar sólo algunas, muy espaciadas entre sí, para
que no existan discontinuidades en la curva de tono y sirvan de referencia.
Si el tono es bajo, como en el caso de la tristeza, el algoritmo tiende a poner
una marca espuria entre dos reales, duplicando el tono.
29
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Cuando existen fonemas sonoros largos o aparecen varios fonemas sonoros
seguidos, el algoritmo suele perder la sincronización y no marca hasta que
recupera la sincronización. Es por ello que se encuentran zonas sonoras en las
que no existen marcas de pitch. Este fenómeno es más frecuente cuando el
tono es elevado, como en la sorpresa o la alegría.
Cuando el programa cambia el criterio de elección del punto donde colocar la
marca dentro de un periodo, se produce una discontinuidad en la curva de
tono. El problema es diferente al caso anterior ya que aquí no se pierde la
curva de tono, sino que ésta se mostrará con irregularidades.
En las transiciones de un fonema oclusivo a una vocal, suele aparecer un pico
espurio en la curva de tono debido a que la primera marca del sonoro suele
estar muy cerca de la segunda.
Los fonemas vibrantes, debido a su naturaleza, son muy irregulares lo que
dificultará la marcación automática produciéndose errores similares a los que
se dan en la marcación de los fonemas sordos.
En el caso de la segmentación, aunque no se produce un nivel alto de errores de
bulto, la segmentación obtenida puede resultar, en algunos casos, poco precisa
(errores en las fronteras fonéticas). La precisión en la segmentación de la señal de voz
resulta un factor esencial para una síntesis de voz de calidad, ya que un pequeño
error en la segmentación puede dar lugar a un error audible en la voz sintética
[Toledano 01].
Para la revisión del marcado y la segmentación de los logatomos pregrabados se
ha utilizado el programa de análisis y síntesis de habla Praat cuyo manual se
encuentra anexo. Los pasos que se han realizado para la revisión manual de cada uno
de los ficheros segmentados y marcados automáticamente son:
1. Apertura del programa Praat.
2. Se carga, para cada uno de los archivos del corpus, el fichero WAV que
contiene la señal de EGG comentada anteriormente y el fichero WAV con la
señal de voz segmentada.
3. Ejecución del script realizado en praat para la obtención de las marcas de pitch.
Se ha modificado el script para unificar de forma automática el fichero de
marcas generado por el procedimiento (con extensión *.PointProcess) con el
fichero que contiene la información de la segmentación fonética automática
(con extensión *.TextGrid).
30
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
4. Visualización de forma simultánea en el programa Praat del fichero de audio
con la señal de voz y el fichero unificado con las marcas de pitch y las de
segmentación fonética.
5. Se modifican las marcas de pitch y las fronteras fonéticas que, según los
conocimientos adquiridos tras la lectura de bibliografía, no están colocadas de
forma adecuada. Anexado a esta memoria el lector puede encontrar un
documento resumen de las pautas a seguir durante el proceso de revisión.
6. Se guarda el fichero de salida unificado y modificado, que contiene tanto las
marcas de pitch como las de segmentación fonética. Este fichero será
necesario para la obtención de los difonemas que formarán la base de datos
final de difonemas.
En total se ha revisado tanto la segmentación fonética como la marcación del pitch
de los 570 ficheros que conforman el corpus de logatomos (114 ficheros/emoción).
4.4.1 PROBLEMAS DETECTADOS DURANTE LA REVISIÓN MANUAL
Durante la revisión manual de los primeros ficheros de voz, se detectaron una serie
de inconvenientes surgidos de la segmentación automática. Se optó por realizar un
procesamiento previo de los ficheros generados en la segmentación automática, para
poderlos detectar y resolver de forma automática. Es por esto, que además de la
utilización del programa Praat, fundamental para el desarrollo del proceso, se han
utilizado diversos programas y scripts de apoyo con el fin de facilitar la costosa labor
de revisión manual.
4.4.1.1 Fonemas de duración 0 segundos ( ModificaTextgrid.exe )
Esta casuística provocaba que no se pudiera modificar la duración del intervalo en
cuestión (modificación de las fronteras fonéticas) ni del siguiente, mediante el
programa utilizado Praat.
En la siguiente figura se puede apreciar como a partir del instante 1.39 y hasta la
posición inicial de la etiqueta ‘i no es posible la manipulación de la frontera, puesto que
no aparecen tanto las marcas de la posición inicial como de la final.
31
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
FIGURA 8: VISUALIZACIÓN DEL ERROR PRODUCIDO EN EL PROCEDIMIENTO DE SEGMENTACIÓN AUTOMÁTICO EN EL FICHERO L_A_18600
Solución manual:
Para solucionar este error es necesario modificar directamente el fichero de
etiquetas generado en la segmentación automática (con extensión *.TextGrid) ya que
el problema surge cuando las fronteras de un intervalo (xmin y xmax en el fichero)
coinciden. Se modifica la frontera final del intervalo problemático y la frontera inicial del
siguiente (el final de un fonema coincide con el inicio de la siguiente). A continuación
se muestra la parte del fichero de etiquetas de voz en la que aparece el problema
mostrado en la figura anterior y el fichero modificado.
32
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
intervals [5]: xmin = 1.140000 xmax = 1.390000 text = "a" intervals [6]: xmin = 1.390000 xmax = 1.390000 text = "sp" intervals [7]: xmin = 1.390000 xmax = 1.970000 text = "f" intervals [8]: xmin = 1.970000 xmax = 2.130000 text = "'i"
ANTES DE MODIFICAR
intervals [5]: xmin = 1.140000 xmax = 1.390000 text = "a" intervals [6]: xmin = 1.390000 xmax = 1.400000 text = "sp" intervals [7]: xmin = 1.400000 xmax = 1.970000 text = "f" intervals [8]: xmin = 1.970000 xmax = 2.130000 text = "'i"
DESPUES DE MODIFICAR
En la figura 9
se
muestra la visualización en Praat de la señal de voz y el fichero de marcas modificado.
FIGURA 9: SOLUCIÓN DEL ERROR PRODUCIDO EN EL PROCEDIMIENTO DE SEGMENTACIÓN AUTOMÁTICO EN EL FICHERO L_A_18600
Una vez resuelto el problema ya se puede seguir con la revisión manual.
Solución automática:
Para agilizar la detección y minimizar el impacto de este error en el proceso de
revisión manual, se crea el programa ModificaTextgrid.exe. Este programa recorre
línea a línea un fichero de etiquetas generado en la segmentación automática,
33
CUADRO 1: SOLUCIÓN MANUAL DEL PROBLEMA DE FONEMAS DE DURACIÓN 0
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
buscando segmentos con posición inicial = posición final (xmin = xmax en el fichero).
Cuando encuentra alguna etiqueta de duración 0s aumenta 0,01s la posición final de la
marca y la posición inicial de la siguiente etiqueta de forma que no se solapen ambas
etiquetas.
Para cada fichero a revisar el programa realiza las siguientes acciones:
1. Abre el fichero pasado como argumento y que debe encontrarse en el mismo
directorio donde se encuentra el programa.
2. Lee línea a línea el fichero buscando las cadenas xmin y xmax. Estas cadenas
marcan la posición de las fronteras fonéticas de cada unidad segmentada
dentro del fichero de etiquetas generado.
3. Por cada línea leída se llama a la función CompruebaFichero. Dentro de la
función es donde se realiza la lógica del programa.
3.1. Si en la línea no existen las cadenas de interés (xmin, xmax), se
imprime la línea leída en el fichero de salida. El fichero de salida tiene el
mismo nombre que el fichero procesado.
3.2. Si la línea leída contiene la cadena xmin, se comprueba que en el
intervalo anterior no se produjo una situación problemática
(xmin=xmax). Si se produjo error, se aumenta en 0.01s el valor
asociado a la cadena para que así, coincida con el final del segmento
anterior. Si la unidad anterior no es problemática, únicamente se
imprimirá la línea leída en el fichero de salida.
3.3. Si la línea contiene la cadena xmax, se comprueba que el valor
asociado sea distinto al valor asociado a xmin del segmento. Si los
valores de los límites del segmento coinciden, se produce error y se
suma 0.01s a xmax. Si no se produce error, se imprime la línea leída.
La función devuelve el número de errores producidos en la línea.
4. Una vez leído el fichero generado en la segmentación, se mostrará mediante
un aviso por línea de comandos, si hubiera errores en él.
Para automatizar el programa se han creado los scripts procesa.bat y modifica.bat
(el primero llamará al segundo). Los ficheros de etiquetas generados en la
segmentación se encontrarán separados en carpetas de acuerdo a la emoción
representada.
Para comenzar con el proceso de revisión de fonemas de duración cero, hay que
llamar, desde línea de comandos, al script procesa.bat y pasarle como argumento la
carpeta que contenga los ficheros a analizar.
34
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
> procesa.bat carpeta_analisis
El script busca todos los ficheros de extensión *.TextGrid para analizar y crea una
nueva carpeta donde depositará los ficheros procesados (procesados_carpeta). Hace
una llamada, para cada uno de los ficheros a procesar, al script modifica.bat que será
el encargado de ejecutar el programa ModificaTextgrid ya definido.
4.4.1.2 Fonema ‘sp’ no contemplado en sintetizador de difonemas (CambiaSp.exe)
Las unidades fonéticas etiquetadas como ‘sp’ (silencio de corta duración, pausa) no
son contempladas por el sintetizador de difonemas. Éste, trata los diferentes tipos de
silencios (de corta y larga duración) como iguales y utiliza, únicamente, la etiqueta ‘sil’
para ambos. Cuando el sintetizador de difonemas se encuentra con una etiqueta que
no tiene en su base de datos, se produce un error. Para que esto no ocurra y para no
tener que modificar el nombre de estas etiquetas manualmente durante la revisión, se
ha creado el programa CambiaSp.exe .
El programa recorre línea a línea el fichero generado en la segmentación
automática buscando la cadena de texto ‘sp’. Si existiera un fonema con la etiqueta
buscada, el programa la sustituye por la cadena ‘sil’. El nuevo fichero quedará
modificado en la ruta modificadoSp/carpeta que se encuentra dentro del directorio
donde se ejecuta el programa.
Para cada uno de los ficheros a procesar, el comportamiento del programa es el
que sigue:
1. Abre el fichero a procesar (nombre pasado como argumento al programa)
2. Crea el fichero de salida en la ruta modificadoSp/carpeta, con el mismo nombre
que el fichero a procesar.
3. Lee línea a línea el fichero a procesar y busca la cadena “sp”.
3.1. Si encuentra la cadena “sp”, se sustituye por la cadena ‘sil’ y se escribe
en el fichero de salida la línea modificada.
3.2. Si la línea leída no contiene la cadena buscada, se escribe en el fichero
de salida la línea sin sufrir modificaciones. (Si el fichero a procesar no
contiene la etiqueta “sp”, el fichero de salida será una copia del
primero.)
4. Se muestra el número de etiquetas que han sido modificadas dentro del fichero
de interés.
Para poder procesar de forma automática todos los ficheros contenidos en un
determinado directorio se ha creado el script CambiaSp.bat.
35
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Para comenzar con el proceso de revisión de etiquetas “sp”, hay que llamar, desde
línea de comandos, al script y pasarle como argumento la carpeta que contenga los
ficheros a analizar:
> cambiasp.bat carpeta_ficherosAprocesar
4.4.2 CONCLUSIONES DE LA REVISIÓN MANUAL DE SEGMENTACIÓN
Como se preveía, la mayor parte de los errores producidos en la segmentación
automática, están relacionados con la precisión en la localización de las fronteras
fonéticas. En este aspecto, y de forma regular, la herramienta de segmentación
automática tiende a hacer muy largos los fonemas del final de los logatomos. Debido a
esto, se han tenido que corregir la mayoría de las fronteras finales. También se han
corregido muchas fronteras de inicio del primer fonema del logatomo, ya que muchos
logatomos presentan una especie de ruido ó sonoridad inicial que se hace más o
menos evidente dependiendo de la emoción expresada.
Según el grupo fonético al que pertenece cada unidad y el contexto en el que
aparecen se han detectado los siguientes errores:
Oclusivas: Podemos encontrar dos características en la segmentación
automática de fonemas oclusivos.
Cuando van precedidos de fonemas sonoros, se puede producir una
sonoridad residual en el silencio que precede a la explosión. Este residuo,
que en realidad es parte del silencio que precede a la explosión, queda
marcado en el fonema precedente a la oclusiva.
La duración del fonema oclusivo es más larga de lo que sería correcto ya
que dentro de sus fronteras se puede apreciar sonido correspondiente al
fonema que les sigue. Esto se debe a las irregularidades producidas en la
onda después de la explosión.
Fricativas: Los fonemas como /s/, /T/ o /X/ pueden afectar a las unidades
adyacentes. El fonema que precede a un fonema fricativo puede mostrarse
ensordecido dificultando la correcta localización de la frontera entre ambas. La
unidad posterior a un fonema fricativo contiene una especie de ruido en los
periodos iniciales que también dificulta la segmentación automática ya que,
aunque presenten gran cantidad de ruido, los periodos no pertenecen al
fonema fricativo.
Vocales: En el caso de las vocales, los problemas se dan más por el contexto
en el que se encuentran que por la propia unidad. Los problemas surgen si se
encadenan de forma consecutiva varios fonemas sonoros.
36
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Diptongos : La transición entre las vocales que forman el diptongo es
suave y resulta muy difícil segmentar el difonema de forma correcta. Se
tiene que escuchar repetidas veces diferentes secciones del diptongo,
pudiendo empezar por el final y escuchar hasta que se aprecie el fonema
anterior para poder así determinar el punto de separación entre ambos.
Fonema /Ñ/ o /L/ + vocal : Hay veces en las que la vocal queda muy
nasalizada por la /ñ/ impidiendo que se localice de forma exacta la
separación entre ambas. Igual que en el caso de los diptongos se ha
intentado encontrar el punto que parecía más adecuado, intentando
minimizar el error.
Sonoros: En la revisión del resto de fonemas sonoros no surgen demasiadas
complicaciones puesto que, si la intensidad de la señal es buena y no existen
demasiadas irregularidades en la forma de onda (señal poco ruidosa), la
distinción entre unos y otros es apreciable. Quizá el contexto que más
dificultades presenta es cuando se encuentran dos fonemas nasales, es decir,
los casos de /n/+/m/, /m/+/n/, /n/+/ñ/,…. Debajo de estas líneas se muestra un
ejemplo de unión de los fonemas /n/ y /m/.
FIGURA 10: FRONTERA FONÉTICA DE SEPARACIÓN ENTRE LOS FONEMAS /N/ Y /M/.
Dependiendo de la emoción analizada, se han detectado las siguientes
características de la segmentación automática:
37
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Neutra-Alegría: Se ha detectado que se produce una distorsión, en forma de
aspiración, originada cuando la locutora toma aire previo a la pronunciación de
un logatomo. La aspiración se puede apreciar al escuchar la grabación aunque
no afecta en la segmentación automática del silencio ya que produce una
pequeña variación en la forma de onda de la voz. A la hora de sintetizar se
deberá tener en cuenta el posible error que puede aparecer si se selecciona
una unidad “sil” que contenga la aspiración.
Tristeza: Se ha observado que una de las características de la actriz en esta
emoción es que suelta el aire antes de pronunciar algunos logatomos. Esto se
debe a una “sobreactuación” de la actriz para simular la emoción tristeza, no
es la aspiración comentada anteriormente. Este ruido previo al inicio del
logatomo se ha añadido al fonema silencio previo. Aunque en la síntesis, este
tipo de fonemas producirán errores (no es un silencio como tal), se asumen
puesto que la introducción de un nuevo símbolo fonético produce error en el
sintetizador de difonemas. En la figura 11 se puede apreciar el ruido que
aparece antes de la pronunciación de un logatomo.
FIGURA 11: RUIDO PREVIO AL LOGATOMO “BUZO” EN EL FICHERO L_T_09100
Otra característica importante, es que debido a la poca intensidad de la señal,
la voz se convierte, en muchos casos, en una especie de susurro en los
fonemas finales del logatomo, perdiendo su regularidad y dificultando así el
establecimiento de las fronteras fonéticas de forma correcta. En estos casos es
casi imposible distinguir las diferencias entre las formas de onda y energía de
38
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
los fonemas. Lo más conveniente es escuchar, las veces que se requiera, los
fonemas para los que se desea establecer la marca de separación, hasta que
se determine el punto exacto en el que establecer la frontera. En la figura 12 se
aprecia el ensordecimiento de los fonemas finales del logatomo “ovillo”.
FIGURA 12: ENSORDECIMIENTO DE FONEMAS FINALES EN LA EMOCIÓN TRISTEZA
En ocasiones, este hecho no sólo se da al final de palabra sino que la
intensidad de la señal y el ensordecimiento propio de la emoción puede llegar a
afectar a todo el logatomo, dificultando enormemente la segmentación fonética
y el marcado de F0.
Enfado: Al igual que ocurre con la emoción tristeza, se ha notado como
algunos logatomos en el enfado presentan una especie de ruido inicial debido a
la toma de aire previa a la grabación del logatomo. En este caso, el habla de
las grabaciones se abronca para expresar la emoción de enfado, lo que hace
que la señal grabada tenga una especie de ruido superpuesto que dificulte la
segmentación de los últimos fonemas de los logatomos. Aunque la intensidad
de la voz sea más alta que en el estado neutro, debido a las irregularidades de
la fuente se hace difícil en ocasiones la corrección de fronteras, teniendo que
escuchar la señal en ocasiones.
Sorpresa: Subjetivamente, es la emoción para la que se obtuvieron mejores
resultados en la segmentación automática. La cualidad de la voz es mejor que
en el resto de emociones, no presentando apenas ruidos de aspiración ni otros
de los problemas mencionados como irregularidades, baja energía, etc. La
curva de tono en estos logatomos es ascendente por lo que los fonemas finales
de los logatomos no están ensordecidos. En la segmentación de la sorpresa
39
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
solo han existido los errores asociados a las características de los fonemas
detalladas anteriormente.
4.4.3 CONCLUSIONES DE LA REVISIÓN MANUAL DE LA MARCACIÓN
De forma conjunta a la revisión de la segmentación, se han corregido las marcas de
pitch de forma manual. Como ya se adelanto al inicio del apartado 4.4, el algoritmo
desarrollado en el script para la marcación automática de F0 tiene problemas en
algunas ocasiones generando una serie de fallos que ha habido que corregir en la
revisión:
Normalmente, las marcas del comienzo de un logatomo no se colocan
correctamente, aparecen más de las que deberían, debido posiblemente a que
el nivel de señal se encuentra por encima del límite que se ha fijado en el
script. Una solución a dicho problema consiste en modificar ese nivel en el
script para conseguir los mejores resultados para el mayor número de ficheros
posible. Un caso opuesto ocurre al final de los logatomos, en donde aparecen
menos marcas de las que deberían. A veces, aunque exista sonoridad, la
intensidad de la señal es tan baja que el script no la detecta. Para solucionarlo
deberemos hacer zoom sobre la forma de onda e insertar las marcas de forma
manual.
Es habitual que existan derivas en el marcado automático, es decir, existe una
pequeña desviación que se va acumulando en las marcas. El error es sencillo
de solventar (aunque costoso en tiempo por la cantidad de marcas) porque
sólo hay que recolocar las marcas en la posición correcta, de acuerdo con el
criterio de marcación seguido por el script.
En ocasiones, el criterio utilizado para marcar dos fonemas sonoros
consecutivos difiere por lo que alrededor de su frontera fonética suele haber
picos o caídas de la curva de F0. La solución por la que se ha optado en estos
casos es la de colocar algunas marcas intermedias de transición, para que la
curva de tono sea lo más continua posible. Así se evita tener que corregir todas
las marcas de uno de los fonemas para unificar los criterios y eliminar
discontinuidades en el tono.
Dependiendo del grupo fonético al que pertenecen los fonemas se han detectado
los siguientes problemas:
Oclusivos: En la marcación de los fonemas oclusivos se ha detectado que si
existe sonoridad residual en el silencio previo a la explosión, el script la marca.
Como se puede leer en el manual de revisión anexado, ha habido que
40
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
recolocar estas marcas e insertar nuevas equiespaciadas. La explosión
normalmente es irregular, lo que lleva a tener que recolocar las marcas
automáticas para que no se produzcan discontinuidades. Los fonemas
posteriores a estos pueden presentar cierto ensordecimiento al inicio que
provoca la duplicidad de las marcas.
Vibrantes: Son fonemas muy irregulares, propensos a sufrir derivas y
duplicidad de las marcas, lo que provoca que se tengan que recolocar algunas
marcas automáticas. En el caso del fonema /R/, los problemas surgen sobre
todo en el silencio que separa los lóbulos periódicos.
Fricativos: Los fonemas fricativos tienen que ser totalmente remarcados
debido a la no periodicidad de la forma de onda que presentan.
Sonoros: Cuando el fonema sonoro es muy largo o se enlazan diversos
fonemas sonoros consecutivos, a veces, en mitad de alguno de ellos, el
algoritmo pierde la sincronización momentáneamente y pueden faltar algunos
periodos por marcar.
Si nos fijamos en el marcado de las distintas emociones, aquellas en las que se han
encontrado menos errores de marcado automático de F0 son la alegría, la neutra y la
sorpresa. Esto se debe a que, en estas emociones, la locutora habla de una forma
más clara, sin apenas hacer modificaciones en el habla. Por otro lado, con la tristeza,
la locutora habla en un tono mucho más bajo y susurrando, por lo que las marcas en
pocas ocasiones aparecen colocadas correctamente y son muchas las ocasiones en
las que hay que corregirlas debido a que el ensordecimiento del habla es alto. El
enfado presenta muchas irregularidades en la forma de la onda por lo que también ha
sido necesario hacer una amplia recolocación de marcas. De una forma más
específica, los comentarios obtenidos de la revisión dependiendo de la emoción son:
Alegría: Debido a que en la alegría el tono empleado es muy alto,
normalmente el algoritmo, de forma aleatoria, se salta algunos de los periodos
a marcar. En ocasiones, la aspiración previa al logatomo que se presenta en
algunos archivos es marcada por el algoritmo sin un criterio aparente. En estos
casos, se eliminarán algunas de las marcas y se recolocarán otras de forma
equidistante para que no existan irregularidades en la curva de frecuencia.
Enfado: Debido a las irregularidades en la forma de onda características en el
enfado, se han tenido que recolocar las marcas de aquellos fonemas con
mayor cantidad de ruido. En estos casos, el algoritmo coloca gran cantidad de
marcas juntas sin atender a ningún criterio. En los casos en los que el fonema
se ha encontrado totalmente ensordecido, las marcas se han recolocado de
41
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
forma que la curva de frecuencia media se encuentra alrededor de 100 y
150Hz.
Sorpresa y Neutra: Son los casos en los que menos marcas se han tenido que
recolocar, insertar o borrar. La forma de onda es más o menos regular y no
existen, salvo la aspiración inicial en la emoción neutra, problemas
característicos en el marcado automático.
Tristeza: Es la emoción que mayores problemas ha presentado para la revisión
manual debido a que, por el ensordecimiento propio de la mayor parte de los
fonemas del logatomo, se disponen de muy pocas marcas automáticas.
Aunque el nivel de señal también es bajo, el problema básico del marcado
automático es el ensordecimiento. Para mitigar el problema se han insertado
marcas de forma que la curva de la frecuencia fuera lo más suave posible.
42
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
5. GENERACIÓN DE LA BASE DE DATOS DE DIFONEMAS
5.1 Introducción
Una vez realizadas y revisadas la marcación y la segmentación automáticas de los
logatomos, se procede a la generación del corpus de difonemas necesario para el
sintetizador de voz Boris. Hay que mencionar que para cada emoción a sintetizar
habrá un corpus de difonemas distinto, aunque el proceso de obtención es idéntico en
todas las emociones utilizadas.
5.2 Proceso de generación del corpus
Para poder obtener la base de datos de difonemas a partir del corpus de logatomos
marcados y segmentados, es necesario realizar un tratamiento del mismo a través de
un proceso compuesto por varios programas. Al inicio del proceso de generación del
corpus de difonemas tan solo se dispone de los ficheros de audio (*.wav) con series de
logatomos, ficheros de marcas y etiquetas (*.TextGrid) correspondientes y un listado
(*.data) con una relación de los nombres de los distintos ficheros de audio y las series
de logatomos pronunciados en ellos.
A continuación se muestra un resumen del proceso en el que se explica
brevemente cada uno de los programas que componen el proceso de generación,
enumerando los archivos necesarios y los generados para cada uno de ellos.
Posteriormente, se realiza una descripción más detallada de los mismos.
FIGURA 13: DIAGRAMA DE FLUJO DEL PROCESO DE GENERACIÓN DEL CORPUS DE DIFONEMAS
43
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Así pues, el proceso de generación de la base de datos de difonemas está
compuesto de los siguientes subprocesos o fases:
1. Síntesis de difonemas: La síntesis de difonemas a partir de la información, de
marcas y etiquetas, obtenida durante la revisión y el fichero de audio con los
logatomos, se realiza mediante el programa SacadifVC.exe. Este programa
recibe como argumentos un fichero de datos en bruto con una serie de
logatomos (*.pcm), uno de parámetros con información del pitch y etiquetas
(*.par) y uno con los textos de la serie de logatomos (*.txt). Es por ello que,
para obtener estos ficheros, es necesario un procesamiento previo de los
ficheros iniciales ya mencionados. Así pues, antes de pasar a la síntesis de los
difonemas se tiene que realizar un paso previo consistente en la generación de
los archivos de entrada a SacadifVC.
a. Generación de archivos de muestras y parámetros: El programa
GeneraParPcm.exe obtiene los ficheros de muestras y de parámetros a
partir de los ficheros de audio y, de marcas y etiquetas, que dispone. En
la siguiente figura se muestra un diagrama de flujo del proceso.
FIGURA 14: DIAGRAMA GENERACIÓN FICHEROS DE MUESTRAS Y PARÁMETROS
En cada fichero de parámetros (*.par) se pueden distinguir dos partes
diferenciadas. En primer lugar, aparece la información referente a las
marcas de F0 y se detecta porque aparecen etiquetas PIT. Por cada
etiqueta PIT que aparece, se indica dónde se ha producido una marca de
F0 y la frecuencia en función de la posición relativa con la marca anterior.
Para finalizar, bajo etiquetas LBR aparece la información referente a los
fonemas. Se presentan seis campos, de los cuales solo se usan: el
primer campo que indica la posición de comienzo del fonema en
segundos, el segundo campo que indica la posición final y el sexto campo
en el que se identifica el fonema, es decir, aparece el grafema. El resto
de campos se informan con ceros.
Los ficheros de muestras (*.pcm) contienen únicamente las muestras de
los ficheros de audio en los que se pronuncian las series de logatomos.
44
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Para hacer más sencillo todo el proceso se emplea un archivo por lotes
de MSDOS, sacaParPcm.bat. Este script lista todos los ficheros de
logatomos a procesar y, por cada uno de ellos, realiza una llamada al
programa GeneraParPcm.exe indicándole el nombre del fichero a
procesar. Los ficheros generados son almacenados en el directorio
Genera_nombreCarpetaInicial que se crea en el mismo directorio donde
se encuentra la carpeta contenedora de los ficheros a procesar. Al
realizar la llamada para la ejecución del archivo, es necesario indicar la
carpeta contenedora de los archivos de logatomos a procesar.
> generaparpcm.bat carpeta_ficherosAprocesar
b. Generación de ficheros de texto: A partir del fichero *.data con la relación
de los nombres de los distintos ficheros de audio y las series de
logatomos que aparecen en cada uno, se generan tantos ficheros de
texto (*.txt) como haya en la lista. Cada uno de los nuevos ficheros
contiene la serie de logatomos que le corresponde. Para la obtención de
los ficheros de forma automática se realiza un script en perl que realiza el
proceso. La lista con la relación de logatomos de cada emoción tiene la
siguiente estructura:
“NombreFichero 0 0 log1 , log2 , log3 , log4 , log5 .”
El script ObtenTxt.pl crea, por cada línea de la lista, un fichero cuyo
nombre es la primera estructura que se encuentra al leer la línea. Cada
fichero estará compuesto por una única línea con la serie de logatomos
que aparecen en cada fichero de voz. El formato de cada línea es
compatible con el formato que espera el sintetizador de difonemas:
“log1, log2, log3, log4, log5;”
Obtenidos los ficheros de entrada, la extracción de difonemas en
SacadifVC.exe se realiza de forma automática, a partir de la información
contenida en el fichero de parámetros asociado a la serie de logatomos,
basándose para ello en una serie de reglas dependientes del tipo de fonema,
con el fin de determinar el punto de corte óptimo del mismo (aquel que ofrece
mayor estabilidad). El programa genera una carpeta homónima al fichero
procesado y dentro del directorio, por cada difonema sintetizado, se genera una
serie de ficheros de información con el nombre del difonema sintetizado y
diferentes extensiones.
45
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
FIGURA 15: DIAGRAMA DE FICHEROS NECESARIOS Y GENERADOS EN LA SÍNTESIS DE DIFONEMAS
Existe la posibilidad, de que se generen dos o más difonemas iguales en la
serie de logatomos contenida en un fichero. Para evitar la pérdida de
información y que se machaquen los ficheros asociados, se produce una
ordenación de los difonemas de forma que se diferencian unos con otros por un
símbolo @ seguido de la posición que ocupan. Es decir, si en una serie de
logatomos se tienen por ejemplo “ramo” y “rito”, el programa generará dos
difonemas “_R1” que no tienen por qué ser iguales, por lo que nombrará a uno
“_R1” y al otro “_R1@1”.
A continuación se presenta el caso real de los difonemas generados para la
serie de logatomos L_N_07600 formada por: “bab, baso, beso, biso, blaso”.
Para esta serie, el programa SacadifVC genera, entre otros, cinco difonemas
_B1 que contienen la mitad del fonema silencio que precede a los logatomos y
la mitad inicial del fonema /b/ inicial de cada uno. En el directorio que contiene
los archivos generados asociados a la serie:
46
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
FIGURA 16: EJEMPLO REAL DE ORDENACIÓN DE DIFONEMAS CON MISMO NOMBRE DE LA SERIE L_N_07600
Para automatizar el proceso de generación de difonemas se crean los
archivos de lotes sacadif.bat, sacatodos.bat y limpia.bat.
2. Selección de difonemas: Una vez generados todos los difonemas con el
sintetizador de difonemas, se realiza una selección de aquellos que aparecen
en la lista Listapal.txt. Esta lista detalla aquellos difonemas necesarios para
crear la base de datos. A la hora de escoger entre los distintos ficheros
generados para un mismo difonema (por ejemplo AB1) se toma aquel que se
obtuvo de un logatomo en particular (en este caso sabe). Por ello la lista tiene
el formato: “logatomo (difonemaImportante)”.
El programa encargado de realizar este proceso es ObtenListaDif.exe que
busca cada logatomo de Listapal.txt en la lista que contiene la relación de los
ficheros y las series de logatomos (*.data). Una vez se tiene ubicado el
logatomo contenedor dentro de un determinado fichero, se busca el difonema a
seleccionar en el directorio correspondiente, donde se encuentran los
difonemas generados por el sintetizador asociados al fichero. El programa
genera una lista Mini_listadif.txt con los difonemas en un formato válido para
ser procesado por el generador de base de datos. También genera un fichero
de depuración Lista_total.txt en el que aparece cada uno de los difonemas
seleccionados, el logatomo del que se ha obtenido, la posición del logatomo en
la serie y el fichero que contiene la serie. En la figura adjunta se detallan, de
forma esquemática, los ficheros que intervienen en el proceso de selección.
47
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
FIGURA 17: DETALLE DE FICHEROS QUE INTERVIENEN EN LA SELECCIÓN AUTOMÁTICA
Los archivos de muestras y marcas seleccionados por el programa pueden
contener elementos de ordenación en el nombre (@+nº). El generador final del
corpus de difonemas necesita que los ficheros estén nombrados únicamente
por el difonema seleccionado por lo que habrá que realizar modificaciones en
los nombres para adaptarlos a los requerimientos del generador. Los archivos
de marcas deben tener extensión *.mar, aunque estén normalizados, por lo que
también se hace necesario el cambio de extensión de estos ficheros.
Para automatizar el proceso de selección y realizar un copiado conjunto de
los ficheros, en el formato correcto, al directorio de entrada database_16 del
generador de base de datos, se crea el archivo por lotes obtenListaDif.bat que
realiza una llamada al ejecutable y a renombraFich.bat, que a su vez llama al
script en perl modificaFich.per.
obtenListaDif.bat: Limpia el directorio de los archivos de muestras y
marcas, y de la lista de difonemas que puedan haberse generado
previamente. Ejecuta el programa y al finalizar llama a renombraFich.bat y
crea una carpeta con el nombre de la emoción procesada donde mueve
todos los ficheros seleccionados.
renombraFich.bat: Lista todos los ficheros de marcas y muestras que
existen en el directorio de trabajo. Copia el fichero MINI_LISTADIF.txt,
generado por el ejecutable, a la ruta del generador de base de datos y
ejecuta modificaFich.per, que renombra los ficheros y realiza el copiado de
los ficheros listados en el formato necesario.
modificaFich.per: El script modifica el nombre de los ficheros de muestras y
marcas que contengan la cadena “@+nº” de forma que queden únicamente
nombrados con el nombre del difonema. Después copia los archivos a la
ruta de entrada del generador del corpus final.
3. Generación del corpus de difonemas: Es la última fase de la generación de
la base de datos de difonemas. En este punto, el programa Gendb.exe genera
48
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
un archivo minidb.dfm con el formato necesario para ser utilizado por el
sintetizador por concatenación Boris, a partir de los archivos de marcas y
muestras de los difonemas seleccionados. También se genera un archivo
minidb.mfd que contiene, en formato texto, la información del fichero de base
de datos. La base de datos tendrá, para cada difonema seleccionado, la
información referente a las marcas de F0 (refleja el tono del difonema), la
duración y las muestras de audio del mismo.
FIGURA 18: ESQUEMA DE FICHEROS QUE INTERVIENEN EN LA GENERACIÓN DEL ARCHIVO DE BASE DATOS FINAL.
5.3 Detalle de programas
5.3.1 GENERAPARPCM .EXE
Este programa, a partir de un fichero con la señal de voz (*.wav) y otro con las
marcas de pitch y de segmentación (*.TextGrid), crea un archivo de audio con los
datos en bruto (*.pcm) y un archivo de texto (*.par) que contiene cada una de las
marcas de pitch, con su instante temporal y la frecuencia de aparición (distancia a la
marca anterior), y cada uno de los fonemas, con sus límites temporales y el nombre,
en los que se divide la serie de logatomos que forman el fichero.
La función main() del programa toma el argumento de entrada (nombre del fichero)
y realiza una llamada a cada una de las funciones que se encargan de generar el
archivo de muestras y el de parámetros.
void GeneraPcm(char NameFich[]): Genera el archivo de muestras *.pcm.
Recibe como argumento de entrada el nombre del fichero. La función abre el
fichero de audio *.wav que contiene la serie de logatomos, lee la cabecera wav
y obtiene la información sobre el número de muestras que conforman el fichero
y el tamaño de las mismas. Cuando tiene los datos, copia una a una las
muestras del fichero *.wav en un fichero de muestras. El fichero de muestras
tiene el mismo nombre que el fichero de audio pero distinta extensión.
49
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
void GeneraPar(char NameFich[]): Genera el archivo de parámetros *.par.
Recibe como argumento de entrada el nombre del fichero. La función abre el
fichero de marcas y etiquetas de fonemas *.TextGrid y busca las etiquetas
TextTier (donde se encuentra la información de marcas) ó IntervalTier (donde
se encuentra la información de los fonemas).
Si encuentra la etiqueta TextTier, llama a la función void EscribePitch(FILE *pF, FILE *pFw, int *conmuta). La función recibe
como argumentos el puntero al fichero de marcas y etiquetas, el puntero
al fichero de parámetros y un flag indicador de la zona a procesar. Lee
línea a línea las marcas del fichero *.TextGrid y escribe en el fichero de
parámetros la información referente a las mismas, que irá diferenciada
con etiquetas PIT. Este punto se realiza hasta detectar el final del fichero
o la zona IntervalTier. Las líneas del fichero de parámetros con etiquetas
PIT tienen la siguiente estructura:
PIT: instante(sg) de marca , f0 estimada(1/inst ant-inst)5
Si encuentra la etiqueta IntervalTier, realiza una llamada a la función void EscribeIntervals(FILE *pF,FILE *pFw,char NameFich[]). La función
recibe como argumentos el puntero al fichero de marcas y etiquetas, el
puntero al fichero de parámetros y el nombre del fichero de entrada. Lee
línea a línea la información de los bloques de etiquetas de fonemas del
fichero *.TextGrid; cuando detecta el final de un bloque, toma los datos
obtenidos (inicio y final de cada fonema, y nombre del fonema) y escribe
en el fichero de parámetros la información referente a los mismos, que
está diferenciada con etiquetas LBR. La lectura termina cuando se
detecte que se llega al final del archivo *.TextGrid o el final de zona. Las
líneas del fichero de parámetros con etiquetas LBR tendrán la siguiente
estructura:
LBR: inst inicial(sg),inst final(sg), 0,0,0,fonema
Se realiza una traducción de la etiqueta asociada al silencio “sil” al
símbolo “&”. El silencio inicial que aparece en las series de logatomos es
descartado a la hora de generar el fichero de parámetros. Este proceso
es necesario para adaptar la información al programa de síntesis de
difonemas.
5 A la hora de calcular la F0 estimada de una marca con respecto a la anterior, hay que señalar que en el caso de la primera marca del fichero, esta tendrá una F0 estimada de 100Hz.
50
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
5.3.2 SACADIFVC.EXE
De forma breve, el programa genera las unidades difonemas dividiendo cada
unidad fonema por la mitad y uniendo la mitad final de un fonema con la mitad inicial
de la siguiente. Este complicado proceso se realiza teniendo en cuenta el contexto de
cada fonema y difonema implicado. Cada una de las series de cinco logatomos es
procesada de forma que los fonemas que la componen se unirán entre sí formando
diferentes combinaciones de difonemas.
El programa puede dividirse en dos bloques, uno encargado del procesamiento de
los datos de entrada y la inicialización del hilo de síntesis, y otro encargado de realizar
la síntesis de difonemas a partir de los fonemas en los que está dividida la serie de
logatomos.
Bloque 1. Inicialización del hilo de síntesis y procesado de datos de entrada
La función TProcesaVoz::TProcesaVoz (char *ficheroConfiguracion): TCoefsMFC() ,TEtiquetasFich() inicializa la estructura procesaVoz que se
utilizará en todo el proceso de síntesis. Como parámetro de entrada se le pasa por
defecto siempre el fichero de configuración sacadif.ini del cual obtendrá
información para inicializar una serie de variables y parámetros que
posteriormente se utilizan, como por ejemplo, la velocidad, el tono medio y el
nombre del fichero que contendrá una lista de las palabras no acentuadas.
Una vez inicializados los parámetros y variables necesarias, se procede a
cargar en memoria, en el vector procesaVoz.muestras el fichero de muestras
*.pcm. La carga se realiza mediante la función TIVector *LeeMuestrasRaw (TNombre directorio, TNombre name). Como argumentos recibe el nombre del
fichero de muestras y el path en el que se encuentra. La función LeeMuestrasRaw
devuelve un puntero a una estructura de tipo vector en la que se informa del
número de muestras que conforman el fichero, la frecuencia de muestreo
(obtenida del fichero de configuración raw.ini) y un array con las muestras leídas
del fichero *.pcm. Las muestras se copian en bloques de 256 muestras.
Después de guardar las muestras, se analiza el fichero de parámetros
correspondiente al fichero de muestras. Mediante la función void TProcesaVoz :: LeeParametros(char *directorio,char *fichero,boolean modoProcesa) se
obtiene la información de los fonemas y las marcas de F0, y se guarda en
memoria. Recibe como argumentos el path y el nombre del fichero de parámetros
*.par. De una forma más detallada esta función realiza los siguientes pasos:
- Localiza en el fichero de parámetros las etiquetas LBR y guarda la
información obtenida en un array etiquetas de estructuras TEtiqueta. Para
51
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
cada etiqueta encontrada con información de un fonema, obtiene el nombre
del fonema y su principio y final.
- Crea un array de estructuras TFonemaSintesis (procesaVoz.fonemas) con
igual información que tiene en etiquetas pero con distinto formato mediante
la función TFonemaSintesis *TProcesaVoz::CreaFonemas(char *directorio,
char *fichero). Cada fonema del array tiene los siguientes campos:
o int codigo: El código de cada fonema se halla a través de la función
int traduceFonema(char *etq). Esta función busca cada etiqueta
pasada como argumento en un array traductor de estructuras
TtradFon con formato {letras, F_fonema} y devuelve el código del
fonema asociado. El código del fonema se modifica, si procede,
dependiendo del tipo de fonema que resulte y del contexto en el que
se encuentre (dependiendo del fonema anterior y del posterior).
o int dur: Contiene la duración del fonema que se calcula como el
intervalo entre el principio y el final de la etiqueta.
o int f0: Aunque es el campo dedicado a la frecuencia del fonema,
contiene la posición de inicio del fonema.
- Crea un array de bloques de fonema partiendo de la serie de cinco
logatomos que encuentra en el fichero *.txt. La conversión es realizada por
la función void TProcesaVoz::Graf2Fon (FILE *fp, unsigned char
fonemas[1000], int &numEspaciosEnBlanco,char *fichero,TFonemaSintesis
*fonemasSecuencia, int32 numEtiquetas). De forma previa a la obtención de
los bloques de fonema, se genera una serie de bloques de palabra de
partida. Este proceso se realiza tomando carácter a carácter la serie de
logatomos contenida en el fichero de texto y creando bloques de palabras
TBlkPalabra cuando se detecta el final de una palabra. Cuando se consigue
la cadena de bloques de palabra, se realiza un preprocesado de la misma
de forma que se traducirán, números, abreviaturas, palabras sin vocales o
cualquier signo que aparezca, con el fin de que al realizar la conversión a
bloques de fonemas no haya ningún problema. También se revisa si en la
cadena existe alguna palabra que no se acentúa (fichero atonas.lis), de lo
contrario se acentúa dependiendo de las sílabas que tenga la palabra. La
función TBlkFonemaIndex CadenaPal2CadenaFon (TBlkPalabraIndex
indPal,TBlkFonemaIndex indFon,char modo) convierte la cadena de
palabras a una cadena de bloques de fonemas TBlkFonema.
52
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
La estructura de los bloques de fonema TBlkFonema consta de los
siguientes campos:
o TFonema fonema: Es una instancia del tipo TFonema (unsigned char)
en la que se almacena la representación fonética del carácter.
o TBlkFonemaIndex ant: Se trata de una variable del tipo
TBlkFonemaIndex (int) que sirve para encontrar el elemento anterior
dentro de la cadena de fonemas. Esta variable se corresponde por
tanto con un índice respecto al comienzo de la zona de memoria
destinada a almacenar el bloque de fonema anterior.
o TBlkFonemaIndex sig: Lo mismo que el campo anterior, pero en este
caso permite acceder a la estructura TBlkFonema correspondiente al
fonema siguiente.
o TF0 F0: Es un campo de tipo TF0 (int) destinado a almacenar la
frecuencia (en Hertzios) de la fuente glotal asociada a cada fonema.
o TDuracion Duracion: Es una variable de tipo TDuracion (long) que
contiene la velocidad de locución del bloque.
Se realiza una comprobación para ver si el nombre de los fonemas de los
bloques de fonemas es igual al de los fonemas obtenidos a partir del fichero
de parámetros. Si existen diferencias entre ambos, se informa del problema
y se modifica el fonema del array TFonemaSintesis con el nombre del
bloque fonema que corresponda.
- Constituidos los fonemas de los que consta la cadena de logatomos, se
localiza en el fichero de parámetros las etiquetas PIT con las marcas F0.
Cuando encuentra información sobre una marca llama a la función void
TProcesaVoz::anyadeMarca(float fTiempo, bool *rellenos, int ultimo, boolean
modoProcesa) a la que se le pasa, como primer argumento, el instante en
segundos en el que se da la marca. Se guarda en procesaVoz.marcas
(estructura de tipo Tejes) la información general referente a las marcas F0
como el número total de marcas, la frecuencia de muestreo, etc. y un array
con las mismas (con los instantes en los que se dan). Para cada marca que
se encuentra, busca el índice de la etiqueta a la que pertenece. Si el fonema
anterior es oclusivo o fricativo, lo remarca, es decir, recalcula el instante en
el que se da la marca. En caso contrario, guarda el instante temporal de la
marca.
En resumen, la función void TProcesaVoz :: LeeParametros (char *directorio,char *fichero,boolean modoProcesa) rellena procesaVoz.fonemas y
53
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
procesaVoz.marcas, dos arrays de estructuras de tipo TFonemaSintesis y TEjes
respectivamente, que contienen la información de los fonemas y de las marcas de
F0.
El último paso previo a la generación automática de los difonemas es corregir
las marcas de los fonemas dependiendo del tipo de fonema y del contexto en el
que se encuentre. Para ello se llama a la función void TEtiquetasFich:: corrigeMarcas (TFonemaSintesis *fonemas, TEjes *marcas). La función toma
para cada fonema, la posición de la primera marca desde el comienzo del fonema
y la posición de la última marca. En primer lugar se hace un remarcado
dependiendo del tipo de fonema:
Fonemas oclusivos: Los remarca de forma que el tono del fonema sea
igual al tono del siguiente. En caso de ser el último fonema, remarca con
tono 100Hz.
Fonemas fricativos, africados y pausas: Los remarca de forma que el tono
del fonema son 100Hz.
Después se realiza un remarcado dependiendo del contexto (fonema anterior y
posterior):
Fonema vibrante entre dos vocales: Si existe una diferencia superior al
20% entre el tono del fonema vibrante y el tono de la vocal anterior o la
posterior, o el fonema vibrante está marcado de forma que hay pocas
marcas, entonces se remarca el fonema de forma que el tono final del
fonema sea una media entre el tono de las vocales.
Vocal + (fonema oclusivo, fricativo, africado o pausa): En estos casos se
revisa si el fonema vocal está ensordecido por el contexto, es decir, tiene
pocas marcas. Si la vocal está ensordecida entonces se remarca de
forma que el tono final del fonema sea 100Hz.
Para corregir las marcas de un fonema, una vez se tiene identificado el caso,
se realiza siempre el mismo proceso: primero se borran todas las marcas,
incluyendo la primera y la última, y después se insertan marcas, entre los límites
del fonema, espaciadas de forma que el tono medio del fonema sea el deseado en
cada caso. Como último paso, se actualizan los valores de la posición de la
primera y última marca del fonema.
54
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Bloque 2. Generación de difonemasLa función que realiza el proceso de generación es void TProcesaVoz::
RecorreFonemas(char*dir,char *fichero) que va tomando uno a uno los
fonemas de la cadena y creando el array de estructuras TDifonema difonemas
correspondiente. Esta función a su vez, llama a otra función que realiza el proceso
de generación:
- La rutina fundamental de generación de difonemas es int Ifz_DameUnidad
(TUnidadSintesis * unidad). Esta función devuelve la unidad sintetizada que
en este caso corresponde a un difonema. Esta rutina llama a su vez a la
función static int BuscaUnidad( TUnidadSintesis * unidad). La función realiza
el proceso de cortado de los fonemas y el pegado de las distintas partes
para la generación de difonemas. Realiza la conversión de fonema a unidad
sintetizada (difonema), creándola teniendo en cuenta la unidad anterior y la
siguiente. Para realizar el proceso de forma más sencilla, trabaja con un
buffer de hasta 3 fonemas. La estructura del buffer es: { (c1[ ],d1,f1) ;
(c2[ ],d2,f2) ; (c3[ ],d3,f3) }. De esta forma, para cada uno de los fonemas
tiene la duración, la frecuencia y el nombre del fonema. Para cada fonema
nuevo que toma, decide qué combinación le corresponde. Después de
generar una unidad difonema, almacena en unidadQueda el nombre, la
duración, el tono de la parte del fonema restante. Por tanto, para cada
fonema nuevo, calcula la unidad difonema, la unidad que queda, y la
duración y el comienzo del difonema.
Despues de sintetizar una unidad difonema, se introduce la información
concerniente en el array de estructuras TDifonema difonema y se copia el
difonema en el array de difonemas ordenados. Este array mantiene una pila de
difonemas ordenados con todos los generados en un fichero. De esta forma si se
generan dos o más difonemas con el mismo nombre pero distintos valores, se
puede realizar una diferenciación entre ellos (se añade una @número despues del
difonema).
Una vez obtenidos los nombres de las unidades difonema a sintetizar, el inicio
y las duraciones de las mismas, se procede a la obtención de las muestras y
marcas contenidas en cada unidad. Para esta última parte del proceso, se utilizan
las siguientes funciones:
- void LeeMuestras(TIVector *muestras,TDifonema *difonemas, int32 i,
TIVector *trozo, TEjes marcas). A partir del vector de muestras, del array de
difonemas y el de marcas, asigna las muestras al difonema creado TIVector
trozo. Durante la asignación se realiza una extensión del difonema, puesto
55
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
que el copiado de muestras se realiza desde la marca anterior al comienzo
del difonema y la marca posterior al inicio del siguiente. Para cada trozo se
informa la frecuencia de síntesis, el número de muestras que lo conforman
y se copian las muestras correspondientes. También se actualizan los
campos de la estructura difonemas correspondientes a la duración, al
comienzo y a la frecuencia del difonema.
- Para la obtención del bloque de marcas asociado a cada difonema se utiliza
la función int32 CalculaNumMarcas(TDifonema *difonemas, TEjes marcas,
TEjes *marcasTrozo,int32 i) . La función devuelve el número de marcas
contenidas en una unidad difonema e inserta en marcasTrozo los instantes
en los que se cuenta con una marca, la posición de la primera marca del
trozo, el número de muestras del trozo, etc.
- La función void corrigeMarcasDifon(TDifonema *difonemas, TEjes/*32*/
*marcasTrozo,int32 i) remarca el difonema cuando el número de marcas sea
menor que cuatro (el mínimo número de marcas permitido). Si en el trozo ya
existen marcas, se ponen marcas equiespaciadas desde la posición de la
última marca hasta el final del trozo. Si el trozo no está marcado, se insertan
cuatro marcas equiespaciadas entre el inicio y el final del trozo.
- int32 EscMuestras(TNombre fichero, TIVector *v) genera un fichero de
muestras *.mst a partir del vector de muestras. El proceso se realiza para
cada difonema sintetizado, siendo el nombre del fichero el del difonema.
- void EscMarcas(char *directorio,char *name, TEjes *eje) genera, para cada
difonema, un fichero de marcas *.mar a partir de la estructura TEjes marcas.
En el fichero se escribe en primer lugar el número de muestras y el número
de marcas y despues se listan todas las marcas que contiene el difonema,
detallando también la posición de las mismas.
- void EscMarcas16(char *directorio,char *name, TEjes *eje) genera un fichero
de marcas *.16mar similar al anterior pero en el que cada una de las marcas
ocupa 16bits (en la función anterior cada marca ocupa 32bits). Cada fichero
generado es nombrado con el difonema.
- void EscMarcasPAR(char *name, TEjes eje) genera un fichero de
parámetros *.par con información de las marcas y la frecuencia relativa
(etiquetas PIT) y con información de la duración, y el inicio y final del
difonema (etiquetas LBR). El nombre de cada fichero es el del difonema
relativo.
56
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
- void TProcesaVoz::CalculaDifonema(TEjes *marcasTrozo,int32 posicDifon,
int ultimoDifon) recalcula la duración del difonema redondeandola a
milisegundos y calcula el pitch medio del mismo.
Para finalizar el programa, la función void VuelcaParametrosDifonemas(char *fichero, TDifonema *difonemas, int32 numDifonemas) genera un fichero de
depuración *.dpf con la información de los difonemas (marcas de F0 asignadas a cada
difonema, duración, pitch medio y relativo para cada marca,etc.) y void EscDifonemas (char *nombre, TDifonema *difonemas, TDifonema *difonemasOrdenados, int32 numDifonemas) genera los ficheros de duraciones *.di
y *.di1 (igual al anterior pero distinto formato) asociados a cada difonema y también
genera uno con la información de todos los difonemas del fichero.
5.3.2.1 Problemas detectados y modificaciones realizadas
Durante el proceso de síntesis de los difonemas a partir de las bases de datos de
logatomos de las distintas emociones, han aparecido diferentes situaciones
problemáticas que se han solventado con modificaciones en diversos puntos del
programa o cambiando algunos datos en los ficheros de entrada.
El primer inconveniente encontrado fue que el programa y el algoritmo de
segmentación automática utilizaban nombres diferentes para llamar a un mismo
fonema. Debido a esto, se producían errores en la función que obtiene el código de
cada fonema (int traduceFonema(char *etq)), ya que en el array TtradFon que se
utiliza para obtener la relación entre los fonemas del fichero de parámetros de entrada
y los fonemas utilizados por el sintetizador de difonemas función no contenía todas las
relaciones posibles. Así pues, se ha modificado esta estructura de forma que se han
añadido, eliminado y actualizado algunas parejas.
Los cambios realizados se pueden ver en la siguiente tabla:
57
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
AHORATtradFon traductorFonemas[] = { {"a", F_a}, {"e", F_e}, {"i", F_i}, {"o", F_o}, {"u", F_u}, {"'a", F_a | ACENTO}, {"'e", F_e | ACENTO}, {"'i", F_i | ACENTO}, {"'o", F_o | ACENTO}, {"'u", F_u | ACENTO}, {"a~", F_a | NASAL}, {"e~", F_e | NASAL}, {"i~", F_i | NASAL}, {"o~", F_o | NASAL}, {"u~", F_u | NASAL}, {"'a~", F_a | ACENTO| NASAL}, {"'e~", F_e | ACENTO| NASAL}, {"'i~", F_i | ACENTO| NASAL}, {"'o~", F_o | ACENTO| NASAL}, {"'u~", F_u | ACENTO| NASAL}, {"b", F_b}, AÑADIDO {"B", F_B}, {"D", F_D}, {"d", F_d}, AÑADIDO {"G", F_G}, {"g", F_g}, AÑADIDO {"f", F_f}, {"I", F_i}, {"J", F_J}, {"J/", F_Jb}, AÑADIDO {"k", F_k}, {"l", F_l}, {"L", F_L}, {"m", F_m}, {"n", F_n}, {"N", F_N}, AÑADIDO {"N~", F_ny}, AÑADIDO {"p", F_p}, {"r", F_r}, {"R", F_R}, AÑADIDO {"RR", F_R}, {"R/", F_R}, AÑADIDO {"R~", F_R_fin}, {"s", F_s}, {"T", F_T}, {"T/", F_Tb}, AÑADIDO {"t", F_t}, {"U", F_u}, {"w", F_u}, {"X", F_X}, {"sp",F_Coma}, AÑADIDO {"&",F_Coma} AÑADIDO };
ANTESTtradFon traductorFonemas[] = { {"A", F_a}, {"E", F_e}, {"I", F_i}, {"O", F_o}, {"U", F_u}, {"'A", F_a | ACENTO}, {"'E", F_e | ACENTO}, {"'I", F_i | ACENTO}, {"'O", F_o | ACENTO}, {"'U", F_u | ACENTO}, {"A~", F_a | NASAL}, {"E~", F_e | NASAL}, {"I~", F_i | NASAL}, {"O~", F_o | NASAL}, {"U~", F_u | NASAL}, {"'A~", F_a | ACENTO| NASAL}, {"'E~", F_e | ACENTO| NASAL}, {"'I~", F_i | ACENTO| NASAL}, {"'O~", F_o | ACENTO| NASAL}, {"'U~", F_u | ACENTO| NASAL}, {"B", F_B}, {"B/", F_b}, ELIMINADO {"B*", F_b}, ELIMINADO {"V", F_B}, ELIMINADO {"V*", F_B}, ELIMINADO {"V/", F_B}, ELIMINADO {"D", F_D}, {"D/", F_d}, ELIMINADO {"D*", F_d}, ELIMINADO {"G", F_G}, {"G/", F_g}, ELIMINADO {"G*", F_g}, ELIMINADO
{"p", F_p},{"t", F_t},{"k", F_k},{"f", F_f}, ELIMINADO{"f*", F_f}, ELIMINADO{"X", F_X},{"X*", F_X}, ELIMINADO{"T", F_T},{"__", F_s}, ELIMINADO{"s", F_s},{"s*", F_s}, ELIMINADO{"z", F_T}, ELIMINADO{"z*", F_T}, ELIMINADO{"J", F_J},{"J*", F_J}, ELIMINADO{"n", F_n},{"ñ", F_ny}, ELIMINADO{"ny", F_ny}, ELIMINADO{"m", F_m},{"r", F_r},{"RR", F_R},{"RR*", F_R}, ELIMINADO{"R~", F_R_fin},{"l", F_l},{"LL", F_L}, ELIMINADO{"Ch", F_Tb}, ELIMINADO
{"gs", F_s}, ELIMINADO{"ks", F_s}, ELIMINADO{"y", F_J}, ELIMINADO
};
TABLA 1: MODIFICACIONES REALIZADAS EN EL ARRAY TTRADFON DEL PROGRAMA SACADIFVC.EXE
58
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Un problema muy usual que se da en la síntesis de difonemas es que, con
frecuencia, existen diferencias entre los fonemas generados por el reconocedor de la
segmentación automática y el texto de la serie de logatomos asociada. Por ejemplo,
en el texto aparece el logatomo “badis” y en el fichero de etiquetas se reconoció como
“bacis”. La diferencia se hace visible en la generación de los bloques de fonemas
TBlkFonema, cuando se realiza una comprobación de si el nombre de cada uno de los
bloques coincide con el código de los fonemas de procesaVoz.fonemas. La
incongruencia se origina en casos en los que la locutora pronuncia un logatomo
diferente al que le marca el texto, es decir, en el ejemplo anterior la locutora dirá
“bacis” en lugar del texto marcado “badis”.
Para resolver este problema hay que analizar de forma manual el fichero de voz
que contiene el logatomo afectado. Si en el fichero de voz realmente aparece lo que
hay escrito en el fichero de etiquetas, se modifica el fichero de texto asociado con el
logatomo pronunciado.
Por último, se han realizado una serie de modificaciones en la función que realiza el
remarcado automático de los fonemas (corrigeMarcas (TFonemaSintesis *fonemas,
TEjes *marcas)), introduciendo nuevos contextos en los que se hace necesario un
remarcado, detectados a lo largo de la revisión manual de marcas, y modificando
otros. Las modificaciones que se han realizado atañen a los siguientes casos:
Vocal + (fonema oclusivo, fricativo, africado, pausa): Este caso ya se tenía
en cuenta. Se realizaba la remarcación en el caso de tener vocales
ensordecidas (pocas marcas). En este punto, se ha añadido el caso en el que
la vocal disponga de un número mínimo de marcas pero exista un gran espacio
entre la última marca y el final del fonema (final de fonema ensordecido). Así
pues, no es necesario realizar una marcación automática sino que se añadirán
tres, dos o una marca más dependiendo de la longitud del segmento del
fonema ensordecido.
Vocal + (fonema vibrante): Puede darse el caso de que la vocal previa a un
fonema vibrante (sobre todo en emoción tristeza y enfado) tenga pocas
marcas. Las causas de esto son o bien que la vocal está ensordecida debido a
la expresión de la emoción o bien que se pierde la periodicidad de la señal y es
difícil el marcado total del fonema. Se añadirán una, dos o tres marcas
dependiendo del espacio que quede entre la última marca de la vocal y el final
de la misma.
Vocal + fonema vibrante + pausa: El problema es el mismo que en el caso
anterior, puede que el fonema vibrante no esté totalmente marcado porque esté
59
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
ensordecido o porque la señal se vuelva irregular a consecuencia de la
emoción expresada. Cuando tenemos fonemas vibrantes al final de una
palabra y tiene pocas marcas o no las tiene de forma homogénea en el fonema,
se realiza el mismo proceso anterior. Se añadirán marcas dependiendo de la
zona del fonema que esté sin marcar.
5.4 ObtenListaDif.exe
El programa ObtenListaDif.exe selecciona entre todos los difonemas generados por
sacadifVC.exe aquellos que aparecen en una lista de palabras “Listapal.txt”. En la lista
se enumeran los difonemas que van a formar parte de la base de datos y se
relacionan con los logatomos de donde se obtienen (el logatomo es el contexto elegido
para la obtención de la unidad difonema). Una vez se tiene ubicado el logatomo
contenedor dentro de un determinado fichero, se localiza el difonema en el directorio
donde se encuentran los difonemas generados por el sintetizador asociados al fichero.
El programa genera una lista Minilistadif.txt que es utilizada por gendb.exe y en la que
se detallan los difonemas de los que estará compuesta la base de datos. Se genera un
archivo de depuración intermedio con los difonemas seleccionados, los logatomos de
los que se han obtenido, la posición de cada logatomo en la serie y el fichero que
contiene la serie.
El programa realiza las siguientes acciones:
Paso 1 - Carga en memoria de listapal.txtLa función void ObtenDifImport(T_ImpDifs *Difonemas) guarda en la
estructura T_ImpDifs Difonemas, los difonemas de los que estará compuesta la
base de datos de difonemas (elementos de tipo T_ImpDif). La estructura
Difonemas contiene los siguientes campos:
o int numplbrs Indica el número total de difonemas a seleccionar (o de
estructuras T_ImpDif) que formarán el corpus final de difonemas.
o T_ImpDif * Difonemas Cada una de las estructuras contiene un
campo char Word [ ] que indica el logatomo que contiene el difonema, y
otro campo char Difone [ ] con el difonema a seleccionar para el corpus.
Paso 2 - Carga en memoria de lista con relación ficheros/series logatomosLa función void CargaGrabaciones(T_Grabacions *Grabaciones)
almacena en la estructura T_Grabacions Grabaciones, la relación existente entre
los ficheros y la serie de logatomos que contiene cada uno de ellos. El proceso
que realiza es similar a la función anterior a la hora de cargar en memoria la lista
de difonemas. El esquema en memoria de la estructura es:
60
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
o int numgrabs Indica el número de ficheros que forman la base de
datos de logatomos.
o T_Grabacion * Grabaciones Define las relaciones entre ficheros y
series. Cada una de las estructuras contiene un campo char NameFich[]
con el nombre del fichero correspondiente y un campo char Plbrs[] que
contiene la serie de cinco logatomos asociada.
Paso 3 - Localización del logatomo que contiene el difonema a seleccionar Se realiza una búsqueda entre todos los ficheros hasta encontrar el logatomo
contenedor en la serie correspondiente. Cuando se encuentra un logatomo se
guarda en la estructura T_Lista ListaDifon el difonema (campo char DifonImport [
]), el logatomo contenedor (campo char Palabra [ ]), la posición que ocupa el
logatomo dentro de la serie de cinco logatomos (campo int Posición) y el fichero
que contiene la serie (campo char Fichero [ ]). Esta lista es utilizada en el último
paso para buscar en el directorio los archivos que necesita el programa
gendb.exe para generar el corpus de difonemas. Se crea el archivo intermedio
Lista_total.txt en el que guarda en disco los datos que contiene ListaDifon (se
crea como método de depuración ante posibles errores en la localización de los
archivos).
Paso 4 - Generación fichero Mini_listadif.txt y selección de ficheros
La función void BuscaDif(T_ListaDif listaDifon) encuentra el fichero de
duraciones *.di de todos los difonemas generados por sacadifVC.exe (dentro del
directorio homónimo al fichero que contiene la serie con el logatomo de interés),
crea el archivo MINI_LISTADIF.txt y llama a la función void EncuentraDif(T_Lista
difBlk,FILE *pFbus,FILE *pListaDif) que es la que se encarga de realizar la
busqueda del difonema dentro del fichero de duraciones. En primer lugar se
sitúa sobre la zona del archivo *.di que contiene la información de las duraciones
de los difonemas del logatomo contenedor y despues ubica el difonema en ella.
Es decir, si el logatomo se encontraba en la posición tres de la serie, la función
se situará sobre el tercer bloque de información de duraciones y una vez en el
buscará el nombre del difonema. Si el difonema es ubicado, se inserta una
nueva línea en el archivo MINI_LISTADIF.txt con el difonema y se seleccionan
los archivos de marcas normalizados a 16Khz (*.16mar) y de muestras (*.mst),
de igual nombre que el difonema, que generó sacadifVC.exe. Si no encuentra el
difonema en la posición establecida dentro del archivo de duraciones, se
informará del error, y ese difonema no formará parte de la lista de difonemas que
componen la base de datos.
61
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Obtenida la lista de difonemas en el formato necesario y los ficheros de marcas y
de muestras de éstos, se procede a la generación de la base de datos final.
5.5 Gendb.exe
Teniendo los archivos de muestras y marcas de los difonemas que formarán parte
del corpus en el directorio de entrada y de los ficheros de inicialización gendb.ini y
raw.ini, se procede a la generación de la base de datos propia que entiende el
sintetizador de voz. Se genera un archivo minidb.dfm con el formato necesario para la
síntesis TD-PSOLA y un archivo homónimo en formato texto minidb.mfd para la
depuración y fácil detección de errores.
En el programa de implementación del generador del corpus, se pueden distinguir
distintos pasos o acciones:
Paso 1 - Inicialización del sistemaEn primer lugar se toman los parámetros necesarios de los ficheros de
inicialización gendb.ini y raw.ini. Este proceso se realiza mediante las funciones
DameProfileString(const char *NombreFichero, const char *Seccion, const char *Parametro, const char *Defecto, char *Destino, int16 Cuantos) y
DameProfileDouble (const char *NombreFichero, const char *Seccion, const char *Parametro, double Defecto, double *Destino) que inicializan los
distintos parámetros y variables que se utilizan en el programa. Estas funciones
buscan un parámetro (pueden ser de tipo string o double) dentro de una
determinada sección del fichero de inicialización y lo copian en una variable
destino. El nombre del fichero, la sección donde buscar, el parámetro y la
variable destino son pasados como argumentos.
Paso 2 - Cargar en memoria lista de difonemasAbre el archivo MINI_LISTADIF.txt y realiza la carga en memoria de la lista
con los difonemas que compondrán el corpus. Los datos son almacenados en un
array lista de estructuras de tipo TListaUnidadesA que contienen los siguientes
campos:
TListaUnidades unid : Contiene el nombre de la unidad difonema (campo
char difon [10]) y el offset de una unidad respecto a la siguiente (campo
uint32 offset). El offset de la unidad se informa cuando se leen las
marcas, ya que se calcula como el offset de la unidad anterior más el
espacio que ocupan las muestras del difonema anterior.
TNombre nombreReal : Indica el nombre de la unidad en el directorio de
origen. Misma información que campo anterior.
62
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
char dir [] : Indican el nombre del difonema.
char frase[] : Indican el nombre del difonema.
TListaUnidades unidadAnt : Contiene el nombre de la unidad anterior y el
offset de la misma.
Paso 3 - Lectura de los ficheros de marcasPara cada difonema de los que se han cargado en lista, se localizan los
ficheros de marcas en el directorio database_16 (directorio de entrada) y se
almacenan en memoria las marcas contenidas. El sintetizador utilizará marcas
con formato de 16 bits (por eso los ficheros de marcas seleccionados fueron
*.16mar). La función TEjes *LeeMarcas16 (char* directorio,char *name) se
encarga de leer las marcas de los ficheros de marcas y almacenarlos en
memoria. El proceso que realiza la función es opuesto al de la función utilizada
en sacadifVC.exe para la escritura de las marcas. En este caso, se almacenan
en una estructura de tipo TEjes los datos correspondientes a la frecuencia de
muestreo, el número de marcas del difonema, el número de muestras que
conforman el difonema y se guardan los instantes en los que se dan las marcas
(hasta un máximo de doscientas marcas).
Paso 4 - Generación del archivo de base de datosParalelamente a la generación del archivo de base de datos en modo binario,
se genera un archivo en modo texto con los mismos datos y estructura que el
primero, y que sirve para detectar los posibles errores que se den durante el
proceso. Los archivos están estructurados de la siguiente forma:
En primer lugar se inserta una cabecera con la cadena informativa
“Unidades PCM 16 bits 16 Khz”.
A continuación se escribe el número total de difonemas y el offset final de
todos los difonemas, es decir, el tamaño total de todos.
El bloque siguiente contiene uno a uno, todos los difonemas (aparecen
codificados en el archivo de base de datos) y el offset asignado a cada
uno de ellos.
El cuarto y último bloque de información, contiene para cada difonema
una serie de apartados. En primer lugar se indican los datos del número
de muestras, la frecuencia de muestreo y el número total de marcas del
difonema. En el siguiente apartado se indican los instantes en los que se
producen las marcas y por último se escriben las muestras que
conforman el difonema. Es al escribir la información de este bloque,
donde se toman las muestras de los ficheros *.mst de cada uno de los
63
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
difonemas mediante la función TIVector *LeeMuestras(TNombre directorio,TNombre name). La función realiza el proceso inverso que se
realizó en sacadifVC.exe para la escritura de las muestras. En este caso,
se leen las muestras en bloques de 256 muestras o 512 bytes
almacenando las mismas en un vector. Si el número de muestras
contenido en el fichero de muestras difiere del dato obtenido del fichero
de marcas se informa del error y se mantiene como válido el dato
obtenido del fichero de muestras.
A la hora de escribir las marcas en los ficheros se limita el número de
las mismas a un máximo de 50 marcas. Si el fichero contiene más
marcas se limitan y si el número de marcas no llega al máximo, se rellena
con ceros la posición de las marcas hasta cubrirlo. En último lugar se
escriben, sólo en el fichero de base de datos las muestras asociadas con
el difonema correspondiente.
5.5.1.1 Problemas detectados y modificaciones realizadas
Para que el sintetizador de voz Boris trabaje con la información correcta y sin
problemas, se han tenido que hacer ciertas modificaciones para adaptar el archivo de
base de datos creado por el generador. Es preciso que el sintetizador lea los datos del
archivo generado en el mismo orden en el que son escritos por el generador.
El sintetizador utiliza una versión más antigua que el generador de base de datos
por lo que los tamaños de las variables que utiliza el sintetizador son más pequeños
que en el generador de base de datos. En la siguiente tabla se pueden ver las
diferencias detectadas:
64
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Generador de base de datos Sintetizador de voz
Número de Difonemas static int32 nDif static int16 nDif
Nombre de la unidad char difon[10]6 char difon[6]
Estructura de marcas Tejes *marcas
typedef struct{
int32 nsample;
int32 fs;
int32 nmar_a;
int32 *xmar_a;
int32 *numMarcaOrigen;
int32 *valorMarcaOrigen;
int32 *etiq;
float *factor;
int32 MAXMARCAS;
}TEjes;
typedef struct{
int16 nsample;
int16 fs;
int16 nmar_a;
int16 xmar_a[MINEJES];
}TEjes2;
Las adaptaciones se han realizado a la hora de escribir en el archivo creado por el
generador. En el generador y en el sintetizador se mantienen los tamaños de variables
utilizados, y es a la hora de escribir en el archivo cuando se realiza el cambio de
formato de aquellas variables que difieran.
En el caso del número de difonemas se realiza el siguiente proceso: int16 num_dif=nDif;
fwrite(&num_dif,1,sizeof(int16),fp);
A la hora de escribir el nombre de cada difonema en el archivo de base de
datos, se realiza un truncado del mismo, es decir, sólo se escriben los primeros
6 caracteres en el archivo. Se realiza de la siguiente forma:fwrite(&(lista[count].unid.difon),1,6,fp)
Los campos de la estructura asociada a contener la información de las marcas
en el generador se adaptan siguiendo el mismo procedimiento. Se copia en una
variable auxiliar de igual tamaño que en el sintetizador de voz, aquellos campos
cuya información sea volcada al archivo de base de datos. int16 auxEje;auxEje=marcas[count].nsample;fwrite(&auxEje,1,sizeof(int16),fp);auxEje=marcas[count].fs;fwrite(&auxEje,1,sizeof(int16),fp);auxEje=marcas[count].nmar_a;fwrite(&auxEje,1,sizeof(int16),fp);int16 auxMarca=marcas[count].xmar_a[i];
6 El generador de base de datos soporta difonemas cuyo nombre tenga como máximo diez caracteres mientras que el sintetizador soporta como máximo nombres de seis caracteres.
65
TABLA 2: DIFERENCIAS DETECTADAS EN EL TAMAÑO DE VARIABLES EN GENDB.EXE
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
fwrite(&(auxMarca),1,sizeof(int16),fp);
Se ha realizado una reducción del número de marcas máximo a escribir en el
archivo de base de datos por cada difonema. El generador es capaz de leer y guardar
en memoria hasta 200 marcas (MAXEJES) de un mismo fichero de marcas. El
sintetizador tiene como límite máximo de marcas existentes asociadas a un difonema
50 (MINEJES). Por esta razón, se ha limitado el número de marcas a escribir en el
archivo de base de datos a 50 de la siguiente forma:
if((eje->nmar_a)>MINEJES){
(eje->nmar_a)=MINEJES;}
for (i=marcas[count].nmar_a; i<MINEJES; i++){
int16 cero=0;
fwrite(&cero,1,sizeof(int16),fp);
fprintf(fpDep,"%d ",(int)cero);}
66
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
6. SINTETIZADOR DE VOZ BORIS
6.1 Introducción
Se describe de forma detallada, en este capítulo, la implementación del sintetizador
de habla por concatenación de difonemas Boris que se ha utilizado en el proyecto.
Partiendo de una versión estable y válida del sintetizador de voz por concatenación
disponible en el departamento GTH, se han realizado una serie de modificaciones con
el objetivo de conseguir una versión del sintetizador que sea capaz de sintetizar voz
con emociones. La versión original de partida es la implementación de un sintetizador
por concatenación, con capacidad multihilo. La síntesis de voz con emociones se ha
implementado de forma similar a como se realizó en el sintetizador de Klatt del
proyecto Robint disponible en el departamento. Se han reutilizado ciertas partes del
módulo de procesamiento de lenguaje natural que se incluye en el sintetizador de
formantes para implementar la síntesis de emociones en el sintetizador por
concatenación de partida. Se han heredado y adaptado al nuevo sintetizador la
detección de etiquetas dentro del texto de entrada, y los módulos de prosodia
correspondientes a la entonación y a la duración. La integración de estos módulos
consiste básicamente en adaptar las partes del código que realizan las acciones de
interés y unificarlas con el sintetizador Boris. También se han realizado modificaciones
en la carga y utilización de las distintas bases de datos de difonemas pregrabados con
emociones.
En primer lugar se realiza una descripción global de cómo está estructurado y del
funcionamiento del sintetizador, para continuar con un análisis en profundidad de los
diferentes módulos que lo forman. Para finalizar, se realiza una descripción de los
distintos aspectos que han sido modificados respecto de la versión inicial del
sintetizador.
6.2 Descripción general
Como ya se comentó en el capítulo 2 de la presente memoria, se pueden
diferenciar dos bloques, de forma clara, en los sintetizadores de habla. Un bloque es el
encargado del procesamiento del texto de entrada y el otro es el encargado de la
síntesis de voz. En el caso del sintetizador utilizado, Boris, el primero de esos bloques
genera, a partir del texto de entrada, unas listas de parámetros que representan la
variación con el tiempo de las características del habla a sintetizar. El segundo de los
módulos se encarga de recoger esas listas de parámetros y generar el habla a partir
67
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
de ellas. Por último, se puede hablar de un tercer bloque adicional cuya misión
consiste en el procesamiento de la señal de voz una vez sintetizada. La arquitectura
general del sintetizador por concatenación utilizado en el proyecto, Boris, es la
siguiente:
FIGURA 19: ESQUEMA DEL SINTETIZADOR DE HABLA POR CONCATENACIÓN BORIS
El entorno de desarrollo para la implementación de los distintos bloques es Visual
C++, y todos ellos se encuentran integrados en un único hilo de ejecución.
La función que tiene el módulo de Procesamiento de Lenguaje o de procesado de
texto es la de analizar el texto de entrada y realizar las operaciones oportunas para
generar un conjunto de parámetros que modelen las características del habla durante
un determinado periodo de tiempo. En primer lugar, se realiza un análisis del texto de
entrada y se tratan las palabras, números, siglas,… que aparezcan en el mismo así
como las etiquetas o secuencias de control que puedan aparecer en el texto de
entrada y que, como ya se ha comentado, permiten modificar diferentes parámetros y
características del habla. Una vez realizado el procesamiento adecuado sobre el texto
de entrada, se genera una lista de bloques de fonemas en la que se encuentran
almacenados, además de cada uno de los fonemas que componen el texto de entrada,
los valores prosódicos que los caracterizan e información adicional sobre si el fonema
se ve afectado por alguna secuencia de control. A partir de esta serie de bloques de
fonemas se generan unas listas de parámetros que posteriormente se utilizan en la
síntesis de voz. Cada una de las listas de parámetros generadas en este primer
bloque modelará las características del habla durante 10 milisegundos.
El bloque encargado de la síntesis propiamente dicha, recoge los parámetros
obtenidos y a partir de ellos genera el habla. En el sintetizador Boris, el método de
síntesis que se utiliza es el de concatenación de difonemas. Como ya se ha indicado,
este tipo de sintetizadores generan voz de calidad minimizando el ruido de codificación
y ajustando la prosodia original de las unidades digitalizadas pregrabadas a la nueva
prosodia de forma sencilla, facilitando la implementación de emociones en la señal de
voz. Es importante señalar que la síntesis de habla se realiza en el momento en el que
se tienen disponibles todos los parámetros correspondientes a una frase. Esto resulta
68
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
de gran utilidad puesto que evita que en situaciones en las que, por ejemplo, se desea
sintetizar un texto largo, pase demasiado tiempo entre el instante en que se empiezan
a generar las listas de parámetros y el momento en que empieza a sintetizarse la voz y
a reproducirse el audio correspondiente a la misma.
Por último, en la estructura del sintetizador se puede distinguir un tercer bloque
encargado de modificar la señal de salida del bloque de síntesis, lo que resulta muy
útil para aplicar técnicas convencionales de procesado de señal sobre la voz ya
sintetizada. Este tercer módulo también se utiliza para controlar la reproducción y la
correcta grabación de la señal de audio en el disco duro como archivo *.wav. Este
control es esencial para conservar la continuidad en la reproducción frase por frase,
puesto que, de otro modo, siempre se apreciaría una pausa entre el final de la
reproducción de una frase y el comienzo de la siguiente. Esta pausa se correspondería
con el tiempo que tarda el ordenador en procesar y sintetizar la siguiente frase.
6.3 Bloque de procesado de lenguaje del sintetizador
6.3.1 DESCRIPCIÓN GENERAL DEL BLOQUE
Como ya se ha indicado, esta etapa tiene como objetivo generar una cadena o lista
de parámetros que describen la señal de voz a sintetizar en los diferentes intervalos de
tiempo. El sintetizador recoge y evalúa el texto que se le pasa como entrada,
correspondiente a la frase o serie de frases que se desean sintetizar. Se analizan los
distintos componentes que pueden aparecer en el texto (palabras, números, siglas,…)
y se les da el tratamiento adecuado de forma que se generan estructuras de tipo
TBlkPalabra con la información prosódica de cada uno de los componentes y con la
cadena de caracteres que lo conforman. Si en el texto de entrada se detecta una
secuencia de control, se modificarán los parámetros o variables necesarias para la
implementación del cambio que requiere la etiqueta y se almacenará la información en
los TBlkPalabra a los que afecte.
Cuando se detecta el final de una frase, el sistema pasa a convertir los bloques de
palabras en bloques de fonemas correspondientes a estructuras TBlkFonema. Estas
estructuras tienen, al igual que las correspondientes a las palabras, una serie de
campos donde se almacena la trascripción fonética correspondiente, la información
prosódica asociada a cada uno de los fonemas e información adicional sobre las
secuencias de control que los afectan. La información prosódica de cada fonema se
calcula a partir de los datos obtenidos de la base de datos disponible y de los
parámetros leídos de los ficheros de inicialización de los que se dispone. Dependiendo
de la emoción de la que se quiera dotar a la voz se accederá a unos ficheros de
69
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
inicialización u otros o a una base de datos u otra por lo que la información prosódica
asignada a cada fonema depende de la emoción a sintetizar en cada momento.
En la siguiente figura se puede ver un esquema de la primera etapa de la síntesis:
FIGURA 20: ESQUEMA DEL BLOQUE DE PROCESADO DE TEXTO
6.3.2 IMPLEMENTACIÓN DEL BLOQUE DE PROCESADO
Antes de comenzar con el análisis y procesado del texto de entrada, el sintetizador
implementado necesita de una etapa previa de inicialización en la cual se cargan en
memoria, la base de datos de difonemas que corresponda y los diferentes valores de
variables y parámetros que se utilizan a lo largo del proceso de síntesis. Una vez se ha
inicializado el sistema, se prosigue con el proceso de síntesis de habla detallado
anteriormente y que se ha englobado en la implementación de una única función,
oir_cadena. Todo el sintetizador queda implementado dentro de la función
InicSinteMultiThread(parametros_hilo *p) que es la encargada de crear el hilo para
sintetizar el texto de entrada según los datos recibidos en la estructura
parametros_hilo.
En este apartado se realiza una descripción en detalle de las funciones utilizadas
en el proceso de inicialización y de las operaciones llevadas a cabo en la función
oir_cadena hasta el momento en el que se generan las listas de parámetros. Para
facilitar la comprensión se divide el análisis en cuatro partes:
Inicialización del sistema.
Generación de bloques de palabra.
Generación de bloques de fonemas.
Asignación de tono y duraciones a los fonemas.
70
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
6.3.2.1 Inicialización del sistema
Para inicializar el sistema se utilizan una serie de funciones que obtienen, de los
diferentes archivos de inicialización, los valores de parámetros y variables que se
utilizan durante el proceso de síntesis. Antes del proceso general de inicialización, se
carga en memoria el texto de entrada y se dan valores por defecto a los diferentes
campos de la estructura parametros_hilo utilizada en la inicialización del sistema. La
estructura parametros_hilo está definida por los campos:
HWND ventana: Indica la ventana a la que se manda un mensaje cuando el
proceso de síntesis finaliza.
int linea: Indica la línea por la que se sintetiza cada frase. Su valor está
comprendido entre 0 y la constante MaxNumHilos, que en este caso es uno.
char *frase: Puntero al array que contiene la frase a reproducir
int velocidad: Indica la velocidad de reproducción en sílabas por minuto,
pudiendo variar entre 50 y 250.
int formato_salida: Hace referencia al tipo de archivo que se crea en disco y
que almacena la voz generada. Puede tomar los valores 0, 1 o 2 si el archivo
es *.mst, *.raw o *.wav respectivamente.
HANDLE evento_fin_copia: Recupera el valor devuelto por el proceso de
síntesis.
int textoDos: Indica si el texto de entrada está en formato MS-DOS, si toma el
valor 1, o en formato Windows, si toma valor 0.
float atenuación: Informa de la atenuación que se le aplica al texto de entrada
en dB.
int dispositivo: Muestra el número que identifica la tarjeta de audio que por
defecto es 0.
int tipo_dispositivo: Indica si la señal de habla sintetizada se almacena en un
archivo, tomando valor 0 o si por ejemplo se almacena en memoria, con valor
3.
float factorMultiplicativo: Junto con el factor aditivo indican las variaciones del
tono o frecuencia media que se realizan a la cadena a sintetizar. Puede tomar
valores entre 0,55 y 2. El valor por defecto del factor multiplicativo será 1, en
cuyo caso, se mantendrán los valores entonativos de los fonemas.
float factorAditivo: Es el valor que se le añade o se le resta a la curva de tono o
frecuencia fundamental. Puede tomar valores entre -50 y 50. Por defecto el
factor aditivo será 0, manteniendo la componente continua de la señal de voz al
valor original.
71
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
char fichero_salida [MAX_PATH]: Nombre del archivo de salida en el que se
almacena el habla sintetizada.
Posteriormente, se realiza una llamada a la función HANDLE InicSinteMultiThread (parametros_hilo *p) que es la encargada de iniciar el hilo del sintetizador para cada
una de las posibles copias. Cada hilo del sintetizador generado ejecutará el mismo
código pero con una matriz de datos distinta. Para ello, la función DWORD WINAPI hilo_sintesis (LPVOID parametros) inicializa de forma local los parámetros y
variables correspondientes a cada uno de los hilos que se puedan generar. Cada hilo
está parametrizado por una estructura de tipo matriz llamada mi_matriz e inicializada a
traves de las siguientes funciones:
int inicializa_matriz (matriz *mi_matriz):
Esta función se encarga de inicializar cada uno de los campos de la estructura
mi_matriz que parametriza al hilo de síntesis. Para cada campo de la estructura existe
una función de inicialización propia. Así, esta función acoge las funciones:
int inicializa_Psd (matriz *mi_matriz): Inicializa el puntero a la estructura que
contiene la información asociada a la prosodia, Psd_globales *puntero_Psd.
int inicializa_Tdp ( matriz *mi_matriz ): Reserva memoria e inicializa la estructura
Tdp_globales *puntero_Tdp, la cual será muy útil en el proceso de síntesis.
int inicializa_Sintola ( matriz *mi_matriz ) y int inicializa_Getsint ( matriz
*mi_matriz ): Reserva memoria e inicializa las estructuras Sintola_globales
puntero_sintola y Getsint_globales puntero_Getsint respectivamente, utilizados
en la etapa de síntesis.
int inicializa_Interfaz (matriz *mi_matriz): Inicializa la estructura
Interfaz_globales puntero_Interfaz que contiene las variables del bucle que se
utiliza en la concatenación de los difonemas. Las unidades están vacías al
inicio y cuentan con una F0 de 100Hz. También se inicializa la unidad de
síntesis unidadQueda con un espacio o silencio de frecuencia media de 100Hz
y 40ms de duración.
int inicializa_Ctv (matriz *mi_matriz): Inicializa la estructura Ctv_globales
puntero_Ctv que contiene campos con datos del vector de análisis del proceso
de síntesis.
int inicializa_Out (matriz *mi_matriz): Reserva memoria e inicializa la estructura
Out_globales puntero_Out que contiene las variables asociadas al módulo de
salida, como la cabecera RIFF del archivo de audio, el número total de
muestras, el tipo de dispositivo de salida, etc.
72
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
La función inicializa_matriz devuelve un código que es la suma de todos los
códigos de las subfunciones de inicialización de la matriz. Si se produce algún error en
alguna de las subfunciones, el sistema advierte del error, se libera el espacio de la
matriz de datos y se elimina el hilo creado devolviendo el control a la función padre
hilo_sintesis. Si la inicialización de las distintas subestructuras de la matriz de datos
es correcta, se introducen los valores por defecto de los parámetros del hilo en los
correspondientes campos de la matriz de datos.
int Ctv_Load_Global (WORD wParam, DWORD FConfig):
Mediante esta función se cargan en memoria todos los datos comunes a los hilos
como son las ventanas de Hanning, el fichero de base de datos con los difonemas
para la síntesis, la tecla de interrupción, etc. Para realizar la carga son necesarias las
funciones:
int16 Tdp_Load (WORD wParam, DWORD lParam): Recibe como parámetro
(DWORD lParam) el nombre del fichero que contiene el corpus de difonemas.
Realiza la inicialización necesaria para que se desarrolle la síntesis. Crea la
tabla de ventanas de Hanning, carga en memoria las unidades para la síntesis.
En primer lugar busca, dentro del fichero de inicialización ‘sintet.ini’, en la
sección DIFONEMAS, el parámetro FichCarga (nombre del fichero que
contiene la base de datos de difonemas a utilizar), BitsPorMuestra (contiene los
bits por muestra que tendrá la señal sintetizada) y el parámetro Codificado (si el
fichero de base de datos no está codificado, tiene valor 0, en caso contrario
tiene valor 1). Una vez obtenido el nombre del fichero de difonemas se cargan
en memoria las unidades y las muestras contenidas en el mismo mediante la
función int TdpCargaUnidades (char *nombreFichero). Cada uno de los
difonemas que componen el archivo de base de datos se almacena en una
estructura de tipo TListaUnidades formada por los campos:
char difon [6]: Contiene el nombre de la unidad difonema.
uint32 offset: Contiene la posición que ocupa el difonema en la lista
respecto del principio. El offset es necesario para poder encontrar las
muestras que forman el difonema dentro del archivo de base de datos.
Se leen a continuación las marcas asociadas a cada difonema y se almacenan
en la estructura TEjes2 Ejes [i]. Al igual que ocurría en el programa que creaba
el fichero de base de datos, los campos de la estructura son:
int16 nsample: Número de muestras pertenecientes al difonema.
int16 fs: Frecuencia de muestreo del sistema.
73
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
int16 nmar_a: Número total de marcas que hay en el difonema.
int16 xmar_a: Posición de las marcas dentro del difonema.
Las muestras se almacenan en una estructura de tipo TIVector
mstDifs[MAX_DIFS] cuyos campos son:
int16 fr: Frecuencia de muestreo del sistema.
uint32 nmst: Número total de muestras que conforman el difonema.
TMuestra *x: Vector que contiene las muestras de cada difonema.
Una vez leídas todas las muestras y marcas del fichero de difonemas, se
procede a la creación de las ventanas de Hanning mediante la función int16
TdpInicVentanas (void).
int Cargar_Interrup(WORD wParam, DWORD lParam): Se carga la función que
comprueba si se presiona la tecla Esc, la cual provocará la interrupción del
proceso de síntesis.
int Ctv_Load (matriz *puntero,WORD wParam, DWORD FConfig):
Se encarga de realizar la carga de los datos propios y exclusivos de cada uno de
los hilos de síntesis, como puede ser, por ejemplo, el tipo de dispositivo de salida, etc.
Como argumentos de entrada recibe la matriz de datos propia del hilo, mi_matriz, y el
nombre y directorio del fichero de configuración que contiene los nombres de los
ficheros que hay que cargar y posiblemente algunos datos. Cada hilo puede tener su
propio fichero de inicialización de configuración. La función int Out_Load (matriz
*mi_matriz, WORD wParam, DWORD lParam) realiza la carga en memoria del interfaz
de salida.
int Ctv_FijarParametros (matriz *puntero, unsigned short velElocucion, float atenuacion, float factorMultiplicativo, float factorAditivo, unsigned short textoDos, WORD wParam, DWORD lParam)
Se encarga de fijar los valores de velocidad, factor aditivo y multiplicativo, y de
configuración del texto a sintetizar en los campos específicos de la estructura
Psd_globales *puntero_Psd inicializada en la función inicializa_Psd. Esta función
recibe como parámetros de entrada la matriz de datos propia de cada hilo, puntero, la
velocidad de locución expresada en silabas por minuto, la atenuación medida en dB
relativos, los factores aditivo y multiplicativo e información de codificación del texto de
entrada.
74
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Las funciones que realizan las acciones de fijar los parámetros son:
void Psd_FijarVelElocucion (matriz *puntero, int velElocu): El valor de la
velocidad de locución introducida debe ser mayor que 50 sílabas/min y menor
que 250 sílabas/min. En caso de que el valor introducido no se encuentre entre
estos límites, se forzará al límite más cercano.
void Psd_FijarFactorMultiplicativo (matriz *puntero, float factMult): El valor del
factor multiplicativo queda limitado entre los valores (0.55,2).
void Psd_FijarFactorAditivo (matriz *puntero, float factAdit): El factor aditivo
introducido en la configuración de entrada no debe ser inferior a -50 ni superior
a 50.
void Psd_FijarTextoDos (matriz *puntero, int textoDos): La variable textoDos
contiene un código que indica el formato del texto a sintetizar. En el caso que
nos ocupa este valor será 0 indicando que el formato es el de Windows. Esta
función introducirá este valor en el campo correspondiente de la estructura
Psd_globales *puntero_Psd.
void inicializaEstadoPros (short atenuacion, float factorAditivo, float factorMultiplicativo, short velocidad)
Esta función se encarga de inicializar algunos campos de la estructura de tipo
emolista llamada estadopros. Esta variable se utiliza cuando se emplean etiquetas o
secuencias de control anidables para modificar determinados parámetros prosódicos
del sintetizador. La estructura emolista contiene un campo de tipo índice de la lista y
un array lista de estructuras tipo pros con los campos:
FIGURA 21: ESTRUCTURA EMOLISTA
El campo lista de la variable estadopros es una pila donde se almacenan una serie
de estados prosódicos. La variable indice por su parte va a indicar en cada momento
cuál es la última posición en la que se ha escrito dentro del array lista7.
7 Como máximo sólo se permite una lista de diez etiquetas por texto de entrada.
75
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Para introducir valores en los campos de estadopros se llama a la función void
NuevoEstadoPros (short ate, float factAd, float factMult, short Vel, char let). A esta
función se le pasan como argumentos los valores a almacenar en las variables
atenuacion, factorAditivo, factorMultiplicativo, velElocu y el carácter de un determinado
elemento del array. El valor de indice se actualiza dentro de la función.
int oir_cadena (matriz *mi_matriz, char *cad)
Como se ha comentado anteriormente, es dentro de esta función donde realmente
se lleva a cabo el procesamiento del texto de entrada y la síntesis de habla. Para
realizar el proceso, la función recibe como argumentos de entrada: un array con el
texto de entrada a sintetizar y la matriz de datos propia del hilo de síntesis. En primer
lugar la función oir_cadena se encarga de inicializar diferentes variables. Para ello
utiliza las siguientes funciones:
int Ctv_Reset (matriz *mi_matriz, WORD wParam, DWORD lParam): Esta
función se encarga de resetear e inicializar una serie de variables que después
se utilizarán en el procesamiento del texto de entrada. La acción se realiza
mediante las funciones:
void Psd_Reset (matriz *puntero): A su vez, esta función realiza una
llamada a void ReseteaBlk (matriz *mi_matriz) para la inicialización de los
arrays de estructuras TBlkFonema y TBlkPalabra que almacenarán los
distintos bloques que se generen a partir del texto de entrada.
int16 Tdp_Reset (WORD wParam, matriz *mi_matriz): Limpia los buffers
de muestras para que cuando se inicie la síntesis, no se generen
periodos que anteriormente pudieran haber quedado encolados.
int Out_Reset (matriz *mi_matriz,WORD wParam, DWORD lParam):
Realiza el reseteo del hardware de salida para no tener elementos
inconsistentes en la salida del sintetizador y que no existan problemas a
la hora de generar los archivos de salida.
int Ctv_AcusticoOpen (matriz *mi_matriz,WORD wParam, DWORD lParam):
Inicializa los drivers y elementos necesario para la escritura de los archivos de
audio de salida.
int Ctv_Hablar (matriz *mi_matriz, const char *cadena, WORD wParam,
DWORD lParam): Recibe como argumentos de entrada la cadena de texto de
entrada para su síntesis y la matriz de datos asociada al hilo con la información
necesaria. La función realiza las acciones necesarias para sintetizar la cadena
de texto recibida. Esta función no devuelve el control a la función oir_cadena
hasta que la cadena no haya sido completamente sintetizada, no permitiendo
76
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
tampoco la interrupción del proceso. La función Ctv_Hablar realiza la síntesis
prosódica de la frase, devolviendo el control antes de realizar la síntesis
acústica. En primer lugar entra en un bucle que se encarga de leer y procesar
uno a uno todos los caracteres que forman el texto de entrada y que se
encuentran en la variable cadena. Cada uno de los caracteres leídos junto a la
matriz de datos del hilo, se pasan como argumentos de la función:
int Ctv_Preprocesar (matriz *mi_matriz, char caracter, WORD wParam,
DWORD lParam): Esta función delega en int Psd_Main (matriz *puntero,
char c), siendo finalmente la función encargada de dar a cada carácter
leído el tratamiento necesario.
6.3.2.2 Generación de los bloques de palabra
La función int Psd_Main (matriz *puntero, char c) se encarga en primer lugar de
analizar y procesar correctamente cada uno de los caracteres que le llegan como
entrada, para posteriormente pasar a construir, a partir de esos caracteres, una
cadena que contenga una serie de bloques de palabra generados (estructuras
TBlkPalabra). Para realizar correctamente su labor, la función tiene disponibles en
todo momento los últimos tres caracteres que se han tomado del texto de entrada.
Estos caracteres están almacenados en los campos de la subestructura Psd_globales
*puntero_Psd contenida en la matriz de datos recibida en la entrada:
char ant: Contiene el valor del carácter anterior al carácter que se está
procesando en un momento dado.
char act: Contiene el valor del carácter que está siendo procesado en un
determinado momento.
char sig: Contiene el valor del siguiente carácter que se procesará.
Cada carácter nuevo queda almacenado en el campo sig, de forma que el carácter
anterior pasa al campo act y el antepenúltimo carácter se almacena en ant. A la hora
de tomar decisiones, se trabaja siempre con el carácter almacenado en act, de modo
que las otras dos variables se utilizan únicamente como información contextual para la
toma de determinadas decisiones puntuales.
Lo primero que se hace dentro de la función Psd_Main es añadir el carácter
almacenado en act al campo fraseActual de la estructura puntero_Psd que contiene el
texto que va leyendo mediante la función void anyadeCaracterFraseActual (matriz
*puntero,char act). Después comprueba si el carácter almacenado en act forma parte
de una palabra (caso en el que a la variable interna limitaPalabra se le asignará valor
‘0’) o por el contrario si es el carácter siguiente al final de una palabra (en cuyo caso la
77
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
variable tomará valor ‘1’). Para determinar esto el programa se sirve del campo índice
del puntero_Psd, que contiene el número de caracteres pertenecientes a una misma
palabra y se resetea a 0 cuando se procesan los caracteres de la misma, y de la
función:
BOOL EnPalabra (matriz *puntero) : Esta función determina si el carácter actual
(campo act de estructura puntero_Psd) se encuentra dentro de un bloque
(devuelve TRUE) o no (devuelve FALSE). La función también determina el tipo de
bloque al que pertenece el carácter y lo indica en el campo tipo del
puntero_Psd. Así, se determinará si el bloque que se está tratando es una
palabra, una secuencia de control, un número, una sigla o una sigla con otro
formato, en cuyo caso contendrá los valores PALABRA, SECCTRL, NUMERO, SIGLA
o CASISIGLA respectivamente. Para saber si un bloque es de un determinado
tipo se tienen en cuenta las siguientes situaciones:
SECCTRL : Cuando el bloque comienza con el símbolo “[” y el siguiente
carácter se corresponde con alguno de los comandos de control. Para
saber si un carácter es una secuencia de control, se utiliza la función
BOOL EsCtrl (char c).
NUMERO: Cuando el primer carácter del bloque se corresponde con un
dígito.
SIGLA: Cuando el primer carácter del bloque es una letra, el segundo un
punto y el tercero sea de nuevo una letra o el símbolo “/”.
CASISIGLA: Cuando el primer carácter del bloque es una letra, el segundo
un punto, el tercero una letra y así sucesivamente hasta que en algún
momento la secuencia de caracteres no se corresponda con la asociada
comúnmente a una sigla (carácter-punto-carácter-punto-…).
PALABRA: Cuando el primer carácter del bloque es una letra, y no coincida
con ninguno de los dos casos anteriores, el bloque será una palabra.
Teniendo lo anterior en cuenta, se considera que el carácter almacenado en act
supone el límite de una palabra (limitaPalabra = “1”) cuando la variable indice toma un
valor distinto de “0”, es decir, cuando no estemos ante el primer carácter de una
palabra, y la función EnPalabra devuelva un valor FALSE indicando que el carácter no
forma parte de un bloque.
Si tras la evaluación anterior se determina que el carácter almacenado en act se
encuentra dentro de una palabra (limitaPalabra= “0”), lo único que hace la función
Psd_Main es incorporar el carácter actual en la posición que marque el campo indice
dentro del buffer almacenado en el campo buf de la estructura puntero_Psd. En este
78
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
campo se almacenan sucesivamente los caracteres que van a constituir cada uno de
los bloques. Asimismo, cada vez que se incorpore un nuevo carácter a buf, la variable
indice se incrementará en una unidad. Este proceso continúa hasta que se detecta el
fin de un bloque (limitaPalabra=“1”), momento en el cual se llama a la función:
int MeteBuffer (matriz *puntero): Básicamente esta función se encarga de crear
las estructuras TBlkPalabra anteriormente mencionadas, pero dependiendo del
tipo de bloque del que se disponga, se realizarán unas acciones u otras para el
tratamiento. Para cada uno de los tipos se tiene:
SECCTRL : En el caso de que lo almacenado en buf se corresponda con
una secuencia de control, el sistema llama a la función void
ProcesaSecCtrl (matriz *puntero) que se encargará de crear un nuevo
estado de prosodia mediante la función ya mencionada
NuevoEstadoPros, con los valores prosódicos que determine la
secuencia de control para que en el momento de la síntesis estén
presentes y poder efectuar los cambios oportunos sobre la secuencia a
sintetizar. También se introducirán los cambios necesarios en el campo
prospal pro del bloque de palabra TBlkPalabra que se vea afectado por la
secuencia. Posteriormente se describirá con mayor detalle el
funcionamiento de la función void ProcesaSecCtrl (matriz *puntero).
NUMERO : Se tienen en cuenta dos posibles situaciones:
a) Si lo que se encuentra almacenado en el campo buf es un dígito, se
procederá a la creación de una estructura de tipo TBlkPalabra, cuyo
contenido en el campo palabra, como se verá a continuación, será
el propio dígito.
b) Si el carácter actual que limita el final del bloque es “º” ó “ª”, se
buscará entre las posibles abreviaturas que puede identificar el
sistema mediante la función int ConsultaAbrev(char *s). Esta
función busca en la tabla de abreviaturas almacenada en memoria,
Tabrev abrev[ ], si el contenido del campo buf se corresponde con
alguna de las entradas de la tabla. Si encuentra la abreviatura en la
tabla, devuelve la posición que ocupa la misma en la tabla.
MeteBuffer se limita a crear un nuevo bloque TBlkPalabra en el que
el campo palabra contiene el valor “ ”, y el campo auxiliar contiene
la posición de la abreviatura en la tabla para su traducción
posterior.
79
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
CASISIGLA : En este caso se produce una llamada a la función int
SegmentaBuffer(matriz *puntero). Un bloque es considerado como tipo
CASISIGLA cuando lo almacenado en el campo buf es incorrectamente
identificado como tipo SIGLA. Por este motivo, cuando el sistema se
encuentra un bloque de este tipo, la única labor que se lleva a cabo
dentro de MeteBuffer es la de llamar a SegmentaBuffer. Esta función se
encarga de separar el contenido del campo buf a partir del último signo “.”
encontrado, de modo que el último punto almacenado en buf es
considerado como un posible final de frase.
SIGLA ó PALABRA : En los dos casos, si el carácter actual, que limita el
final de bloque, es “.”, “/”, “º” o “ª”, el sistema comprobará si lo que
contiene el bloque se trata de alguna de las abreviaturas conocidas. Si el
contenido del buffer se corresponde con alguna de las abreviaturas de la
tabla del sistema, se genera un bloque TBlkPalabra en el que el campo
palabra contiene el valor “ ”, y el campo auxiliar contiene la posición de la
abreviatura en la tabla para su traducción posterior. Si por el contrario, la
cadena no corresponde a ninguna de las entradas de la tabla de
abreviaturas, se realizan las mismas acciones que si el carácter de fin de
bloque no fuera ninguno de los descritos, es decir, para cada caso, se
sigue el proceso general.
SIGLA : En este caso se llama a la función TBlkPalabraIndex Deletrea
(TBlkPalabraIndex blq) para que deletree la sigla contenida en el campo
palabra del bloque. El proceso se realiza mediante un bucle en el que se
obtiene el nombre de cada uno de los elementos contenidos en palabra
mediante la función char *NombreLetra (unsigned char c) y se crea un
bloque nuevo por letra. Si por ejemplo se tuviera en el texto de entrada
las siglas “S.L.”, el sistema generaría cuatro bloques de palabra en los
que el campo palabra contendría las cadenas “ese”, “punto”, “ele” y
“punto” respectivamente. Hay que destacar que si durante el tratamiento
del bloque sigla se detecta que el carácter actual que limita la sigla no es
un punto, se realizará un cambio del tipo de bloque de SIGLA a CASISIGLA
y se llamará de nuevo a la función MeteBuffer para volver a tratar el
bloque.
PALABRA : Cea un nuevo TBlkPalabra en cuyo campo palabra se
almacena el contenido de buf.
80
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Una vez realizada la operación que corresponda para el bloque a procesar,
la función MeteBuffer resetea el índice que se utiliza para contabilizar los
caracteres de una palabra (campo indice de puntero_Psd) y devuelve el control
a la función Psd_Main.
La función Psd_Main continuará leyendo, carácter a carácter, la cadena de texto de
entrada y realizando el proceso de generación de bloques de palabra hasta que se
alcance el final de frase, pasando entonces a convertir los bloques de palabras
generados en bloques de fonemas.
Estructura TBlkPalabra
Los campos que definen esta estructura son:
TPalabra palabra : Se trata de una variable del tipo TPalabra formada por un
array de caracteres, char [MAX_LONG_PAL+1], que por lo general se utiliza
para almacenar la palabra o el contenido del bloque que se quiere sintetizar.
struct TBlkPalabra *ant : Es un puntero que permite acceder a la estructura
TBlkPalabra correspondiente a la palabra o bloque anterior. Este campo indica
el comienzo de la zona de memoria destinada a albergar el bloque de palabra
anterior.
struct TBlkPalabra *sig : Puntero que permite acceder a la estructura
TBlkPalabra que contiene la información sobre el bloque posterior al actual.
TCategoría Categoria: Se trata de un campo de tipo TCategoría formado por un
array de caracteres, char cat[11], que hasta el momento no tiene utilidad y
siempre está vacío.
TCategorias categorías: Se trata de un array de estructuras de tipo TCategoria.
int16 auxiliar: Campo en el que se almacena información adicional sobre el
bloque. Normalmente, indica si el bloque de palabra se corresponde con una
abreviatura. Ya que este campo contendrá el valor de la posición dentro de la
tabla de abreviaturas en la que se encuentra el registro a traducir para la
síntesis.
prospal pro : Este campo se corresponde con una estructura de tipo prospal.
Esta estructura está formada a su vez por las variables factMult, factAd,
velelocu, atenuacion, Hayinfo y pausa. Este campo pro es necesario dentro de
los bloques de palabras puesto que, contienen información sobre los cambios
que definen las secuencias de control sobre los valores iniciales de prosodia. Si
un bloque de palabra se ve afectado por una etiqueta, y en consecuencia se
producen cambios en algunas de las características de la prosodia, el campo
81
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Hayinfo de la estructura pro contendrá el valor “1” y los campos factMult,
factAd, velelocu y atenuacion contendrán los valores a modificar. Así, se evita
el tener que leer la estructura para cada bloque de palabra. Por último, el
campo pausa se encarga de recoger información referente a la introducción de
pausas en el texto, lo que también se consigue con secuencias de control,
como se explicará.
La figura 22 muestra la estructura de bloques de palabra descrita.
FIGURA 22: ESQUEMA DE LA ESTRUCTURA TBLKPALABRA
Proceso de creación y escritura de los bloques de palabra (TBlkPalabra)
Como ya se ha comentado, dependiendo del tipo de bloque de entrada en la
función MeteBuffer se realiza un determinado procesamiento de la cadena de texto,
previo a la creación de los bloques de palabra. Una vez realizado este preprocesado
de texto, el proceso de generación de los bloques de palabra se mantiene.
En primer lugar, se crea un nuevo bloque de palabra mediante la función
TBlkPalabraIndex NuevoBloque (matriz *puntero). Esta función recibe como
argumento de entrada la matriz de datos asociada al hilo de sintesis y lo primero que
hace es incrementar el número de bloques de palabra que lleva generados (campo
num_palabras_frase de la estructura puntero_Psd) mediante la función void
incrementaPalabrasFrase(matriz *puntero). A continuación, la función invoca a
TBlkPalabraIndex BlkPalabraCrea (void) que reserva la memoria suficiente para
almacenar el nuevo bloque, resetea los campos y devuelve el puntero a la posición de
inicio de la estructura TBlkPalabra.
Una vez creado el nuevo bloque TBlkPalabra, se escribe en el campo palabra del
mismo la cadena de texto a la que hace referencia mediante la función void
BlkPalabraEscribe(TBlkPalabraIndex blk, TPalabra cadena). La función recibe como
82
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
argumentos de entrada el bloque generado previamente y la cadena de texto con la
palabra, sigla, número, etc. asociado.
6.3.2.3 Generación de los bloques de fonema
Hasta ahora, hemos visto como la función int Psd_Main (matriz *puntero, char c) se encarga de recoger cada uno de los caracteres que recibe como argumento y que
componen el texto de entrada, y generar a partir de ellos una serie de estructuras de
tipo TBlkPalabra que se corresponden con cada uno de los bloques de texto que
aparecen a la entrada. En la siguiente figura se puede ver un diagrama en el que se
muestra un resumen del funcionamiento hasta el momento de la función Psd_Main.
FIGURA 23: DIAGRAMA PSD_MAIN HASTA GENERACIÓN DE BLOQUES DE PALABRA
Este proceso se realiza hasta que se llega al final de la frase, siendo en ese
momento cuando la función Psd_Main se dispondrá a generar la cadena de bloques
de fonema a partir de la cadena de bloques de palabra ya descrita.
Las comprobaciones para la detección del final de una frase se realizan después de
que se detecte el final de una palabra o bloque de texto y de la consiguiente llamada a
MeteBuffer. La función PsdMain comprueba si el carácter almacenado en el campo act
del puntero_Psd supone el final de la frase. Existen tres situaciones en las que
podemos determinar que se ha llegado al final de una frase:
1. Cuando el carácter almacenado en act no es un carácter blanco y es un
carácter típico de final de frase, como puede ser: un punto, un cierre de
interrogación o un cierre de exclamación. Para saber si un carácter es
blanco, y en consecuencia no representa el final de frase, se utiliza la
función BOOL EsBlanco (char c) que comprueba si el carácter recibido
(almacenado en campo act) coincide con alguno de los siguientes
83
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
caracteres: ‘\x1a’, ‘xFF’ (fin de archivo), ‘ ’, ‘\t’ (tabulación), ‘\n’ (retorno de
carro), ‘\0’ (carácter nulo). Si se diera alguno de estos casos, se consideraría
que no se está ante el final de frase por lo que se seguiría con el proceso de
lectura de caracteres y generación de bloques de palabra ya descrito. En
caso de que el carácter contenido en act no se corresponda con ninguno de
los citados, se comprueba si es un carácter de final de frase.
2. Cuando el carácter actual es un retorno de carro (‘\n’) y el siguiente carácter
también lo sea (campo sig de puntero_Psd).
3. Cuando se alcanza el final de la cadena de texto de forma inesperada.
Una vez detectado el final de frase, se realiza una llamada a la función void
ConvierteFrase (matriz *puntero, TBlkPalabraIndex cabeceraFrase), que es la
encargada de realizar la transformación de la cadena de bloques de palabra a una de
bloques de fonemas. La función recibe como argumentos, la matriz de datos propios
del hilo y un puntero al primer bloque de la cadena.
La transformación no se realiza de forma directa sino que se realizan llamadas a un
conjunto de funciones para lograr el objetivo:
void reseteaContadorFraseActual (matriz *puntero):
Esta función realiza el reseteo del campo fraseActual de la estructura
puntero_Psd que almacena la frase a sintetizar y actúa como contador de los
caracteres contenidos en la frase.
void PreProc (matriz *mi_matriz,TBlkPalabraIndex blq):
La función recibe como argumentos el puntero al primer bloque de la cadena
de bloques de palabra y la matriz de datos del hilo. PreProc se encarga de
analizar el contenido del campo palabra de cada uno de los bloques
TBlkPalabra creados anteriormente y realizar los cambios necesarios sobre los
mismos para que, al finalizar, en estos campos haya una cadena de letras
inteligible. Dependiendo del tipo de bloque, se realizarán unas acciones u otras:
NUMERO : Cuando el campo palabra de un bloque contenga un número, se
llama a la función TBlkPalabraIndex Preproc_Numeros (TBlkPalabraIndex
blq) que a su vez delega en TBlkPalabraIndex Numeros
(TBlkPalabraIndex blq, int *flags). Esta función comprueba si el número
debe ser leído como una fecha, como una hora o como un numero y para
cualquiera de los casos se traduce a texto el contenido del campo palabra
del bloque. Normalmente será necesario crear otros bloques TBlkPalabra
ya que la traducción del número, fecha u hora a texto dará lugar a varias
84
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
palabras. Así, por ejempo, si el contenido del campo palabra de uno de
los bloques TBlkPalabra es “14:30”, la traducción dará lugar a cinco
bloques TBlkPalabra con valores en el campo palabra: “catorce”, “horas”,
“y”, “treinta” y “minutos” respectivamente.
ABREVIATURA: Si el bloque contiene una abreviatura (el campo palabra
contiene el símbolo “ ”), se llama a la función TBlkPalabraIndex
ExpandeAbrev (TBlkPalabraIndex blq, Tnumero n) que lee el número
contenido en el campo auxiliar del bloque TBlkPalabra y lee de la tabla de
abreviaturas el registro de la posición marcada. El contenido del registro
se almacena en el campo palabra del bloque.
PALABRA: Si el campo palabra contiene una cadena de letras, se
comprueba en primer lugar si la cadena contiene alguna vocal. En caso
de que no la contenga, se llama a la función TBlkPalabraIndex
Deletrea(TBlkPalabraIndex blq) que deletreará el texto creando tantos
bloques de palabra como caracteres formen la cadena de texto
contenida. Por ejemplo, si en el texto contenido en el campo palabra de
uno de los bloques es “gth”, Deletrea generará tres bloques TBlkPalabra
cuyos campos palabra contengan los valores “ge”, “te” y “hache”
respectivamente.
SIGNOS ORTOGRÁFICOS: Cuando el contenido del campo palabra del
bloque TBlkPalabra sea un signo de ortografía (signos de exclamación e
interrogación, dos puntos, punto, punto y coma, paréntesis y guión) se
llama a la función TBlkPalabraIndex Preproc_signo_ortografico (matriz
*puntero, TBlkPalabraIndex blq, char signo) que se encargará de
procesarlo según sea el caso.
void Graf2Fon (TBlkPalabraIndex blq1):
Básicamente, esta función realiza la conversión de grafema a fonema, es
decir, se encarga de procesar el campo palabra de cada uno de los bloques
TBlkPalabra, convirtiendo el texto en cadenas de fonemas. Se recibe como
argumento el puntero al primer bloque de palabra, TBlkPalabra, de la cadena
de palabras. La función procesa, bloque a bloque, las cadenas de texto
contenidas en el campo palabra. Se determinan las sílabas tónicas del texto
según las reglas de acentuación y se analiza el contexto vocálico en el que se
encuentra cada uno de los caracteres. Por último, la función void Conversion
(char *cad) se encarga de realizar la conversión propiamente dicha de la
cadena de texto pasada como argumento.
85
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
TBlkFonemaIndex CadenaPal2CadenaFon (TBlkPalabraIndex indPal, TBlkFonemaIndex indFon, char modo):
Se encarga de generar los bloques de fonemas, de tipo TBlkFonema, a
partir de los bloques de palabras, TBlkPalabra, recibidos. Recibe como
argumentos el puntero al primer bloque de fonema, el puntero al primer bloque
de palabra y un flag en el que se indica el modo en el que realizar la
conversión. En primer lugar lee los campos palabra y pro del bloque
TBlkPalabra mediante la función void BlkPalabraLee (TBlkPalabraIndex blk,
TPalabra cadena) y la función prospal BlkPalabraLeePro (TBlkPalabraIndex
blk) y también se lee la información del siguiente bloque para obtener
información contextual. Se procede después a generar tantas estructuras
TBlkFonema como fonemas aparezcan en el contenido de la variable palabra
con la función TBlkFonemaIndex Palabra2Fonemas (TPalabra palabra,
TBlkFonemaIndex *indFon, char modo, char homolog[ ], prospal pro). La
función rellenará los campos fonema y pro de la estructura TBlkFonema
generada con los valores contenidos en TBlkPalabra. Por último, se libera el
espacio de memoria asociado al bloque de palabra utilizado.
Llegados a este punto se dispone de una lista de estructuras TBlkFonema en las
que los campos TDuracion Duracion y TF0 F0 continúan vacíos. Estos parámetros
juegan un papel muy importante, puesto que son los que van a definir la prosodia de la
frase. Como ya se ha comentado, es en el proceso de generación de la información
prosódica de los fonemas, donde se han introducido los nuevos módulos de
entonación y duración heredados del sintetizador de Klatt disponible en el laboratorio y
que forma parte del proyecto ROBINT. Debido a las características del sintetizador por
concatenación de partida, se han adaptado estos módulos a los ya disponibles para
dotar a la voz sintetizada con diferentes emociones.
Para determinar el valor de estas variables en cada bloque de fonema, el sistema
llama, desde ConvierteFrase, a la función BOOL Entonacion (matriz* mi_matriz,
TBlkFonemaIndex ind_fon) y las funciones heredadas del sintetizador por formantes
void DuracionesMST (matriz* puntero, TBlkFonemaIndex fonema_inicio) y void
EntonacionMST (matriz* puntero, TBlkFonemaIndex ind_fon) que se describen en los
siguientes apartados.
86
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Estructura TBlkFonema
La estructura de los bloques de fonemas, de tipo TBlkFonema, consta de los
siguientes campos:
TFonema fonema : Se trata de una variable del tipo TFonema (unsigned char),
en la que se almacena la representación fonética del carácter.
struct TBlkFonema *ant : Es el homólogo del campo ant de las estructuras
TBlkPalabra. Es un puntero que permite acceder a la estructura TBlkFonema
correspondiente al bloque anterior. Este campo indica el comienzo de la zona
de memoria destinada a albergar el bloque del fonema anterior.
struct TBlkFonema *sig : Puntero que permite acceder a la estructura
TBlkFonema que contiene la información sobre el bloque posterior al actual.
TF0 F0: Es un campo de tipo TF0 (int) destinado a almacenar la frecuencia (en
Hertzios) de la fuente glotal asociada a cada fonema.
TDuracion Duracion : Es una variable de tipo TDuracion (long) encargada de
almacenar una cifra relacionada con la velocidad de locución en cada
momento.
TFlags Flags: Contiene información adicional sobre el bloque de fonema. Se
utiliza para indicar por ejemplo si el bloque TBlkFonema es el bloque final de
una palabra, si forma parte de un diptongo, etc.
prosfon pro : Este campo se corresponde con una estructura de tipo prosfon.
Esta estructura está formada por las variables factAd, factMult, velelocu,
atenuación y Hayinfo. Estas variables llevan a cabo la misma función que sus
homónimas en los bloques de palabra TBlkPalabra. Al realizar la conversión de
estructuras TBlkPalabra a TBlkFonema se observa si la variable Hayinfo del
campo prospal pro esta activa (valor “1”). Si existe información prosódica en el
bloque, se copian los valores contenidos en el resto de las variables en el
campo prosfon pro de la estructura TBlkFonema creada. Posteriormente,
cuando se proceda a la generación de los parámetros de síntesis, la función
encargada de ello, leerá uno a uno y de forma consecutiva los fonemas de la
lista de bloques y generará a partir de ellos los parámetros que regirán su
pronunciación. Es aquí cuando se descubre si existen fonemas que incluyen
órdenes de cambio (Hayinfo= “1”), y en el caso de que así sea se modificarán
las variables necesarias antes de proceder a la generación de los parámetros
de síntesis.
87
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
La estructura TBlkFonema presenta el esquema de la figura 24:
FIGURA 24: ESQUEMA DE LA ESTRUCTURA TBLKFONEMA
6.3.2.4 Asignación de tono y duraciones a los fonemas
La duración y el tono inicial de los fonemas que forman la cadena de texto de
entrada al sintetizador, son asignados por la red neuronal implementada en el sistema,
a partir de una serie de parámetros y trazas necesarios para su correcto
funcionamiento. El sistema, sobre esos valores iniciales de duración y tono, aplica
posteriormente una serie de modificaciones que dependen de la información
contextual extraída, resultando finalmente que la duración y el tono asignados a todos
los fonemas es el producto del valor obtenido inicialmente y varios factores
multiplicativos dependientes del contexto. Esta última parte es la heredada del
sintetizador de formantes Klatt disponible en el laboratorio y se detallará
posteriormente.
La función encargada de realizar la asignación inicial de los valores de tono y
duración a los fonemas se describe a continuación.
BOOL Entonacion (matriz *mi_matriz, TBlkFonemaIndex ind_fon):
Esta función se encarga del modelado inicial de la duración y el tono de cada uno
de los fonemas que forman la cadena de texto a sintetizar. Asigna valores iniciales,
calculados mediante una red neuronal, a los campos Duracion y F0 de cada bloque
TBlkFonema. La función recibe como parámetros de entrada la matriz de datos del
hilo, y un puntero al primer bloque fonema de la cadena de estructuras TBlkFonema.
El sistema analiza la cadena de entrada buscando un signo de puntuación. Cuando
lo encuentra, inicia el procesado del grupo fónico mediante la función
TBlkFonemaIndex Busca_Signo_Punt (matriz *mi_matriz,TBlkFonemaIndex fon_ini,
unsigned char *signo) que es donde se produce el cálculo y asignación de los valores
88
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
de entonación y duración a los fonemas que lo conforman. El proceso de la función se
puede dividir en dos etapas, la primera de ellas está destinada al cálculo de la
frecuencia media asociada a cada fonema, mientras que la segunda se basa en el
cálculo de las duraciones de los fonemas que conforman la cadena de entrada al
sintetizador.
a) Cálculo y asignación del campo F0: La entonación8 del grupo fónico
depende, en gran medida, del número de palabras tónicas que existan, de la
posición de las mismas dentro del texto, de los signos ortográficos que
aparezcan en el mismo, etc. El sistema, en primer lugar, calcula el número total
de fonemas y de palabras que componen el grupo fónico, el número de
fonemas correspondientes a cada palabra y la posición de los fonemas
acentuados. Una vez obtenidos estos datos, se obtienen el número y la
posición de las sílabas que forman cada una de las palabras, mediante la
función int16 Silabica (char *palabra, int16 Silabas []) que divide la cadena. A
partir de este punto del proceso, se realizan una serie de llamadas a diferentes
funciones con el fin de obtener el tono asociado a cada uno de los fonemas que
conforman el grupo:
void AsignaMatricesTono (TPIVector *AcentuadaF0, TPIVector
*Zona_inicial, TPIVector *Zona_final, TPDDVector *Trama, int16 Num_sil)
Realiza la reserva de memoria, para las matrices que se utilizan
durante el proceso de obtención, como son: Acentuada_F0 (contiene,
para cada sílaba obtenida anteriormente, los valores “1” ó “0”
dependiendo si la sílaba es tónica o no lo es), Zona_inicial (indica,
mediante el valor “1”, las sílabas pertenecientes a la zona inicial de la
curva de entonación), Zona_final (indica mediante un flag activo, las
sílabas que pertenecen a la zona final de la curva de tono) y la matriz
Trama (contiene las tramas de entrada a la red neuronal del cálculo del
tono). La longitud de las matrices está asociada al número de sílabas que
recibe como argumento de entrada.
void Codifica_silabas (int16 Num_sil, int16 Silabas[], char* FraseTon,
int16 AcentuadaF0[], int16 Zona_inicial[], int16 Zona_final[])
Esta función realiza la asignación de valores a los distintos registros
de las matrices anteriormente mencionadas. Así, Codifica_silabas,
detectará en primer lugar todas las sílabas tónicas del grupo fónico,
introduciendo el valor “1” en la posición de la matriz AcentuadaF0
8 Entendiendo entonación como la variación de la frecuencia de vibración de las cuerdas vocales.
89
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
correspondiente a cada una de las sílabas, para después poder definir la
zona inicial (sílabas existentes hasta la primera tónica) y final (sílabas
desde la anterior a la última tónica hasta el final) de la curva de
entonación.
void Analiza_Tipo_Frase(unsigned char signo, int16 *Tipo_frase, int16
*Tipo_terminacion, int16 *Tipo_frase_dur)
La función asigna unos valores a las variables Tipo_frase,
Tipo_terminacion y Tipo_frase_dur que dependen de los signos
ortográficos que aparezcan en el grupo.
void Genera_tramas_tono (int16 Num_sil, double Trama[]
[LONG_TRAMA], int16 AcentuadaF0[], int16 Zona_inicial[], int16
Zona_final[], int16 Tipo_frase, int16 Tipo_terminacion)
A partir de toda la información aportada por las matrices de generación
de tono y de las variables asociadas, se generan las tramas de entrada a
la red neuronal de cálculo de la frecuencia media de los fonemas,
mediante un algoritmo de cálculo dependiente del número de silabas y de
si la curva de entonación es ascendente o descendente.
void Interpolar (matriz *mi_matriz,TBlkFonemaIndex inic, int16 num_fon,
int16 Num_sil,int16 Silabas[], double Tramas[][LONG_TRAMA])
En esta función se obtiene el tono de cada uno de los fonemas que
componen el grupo fónico mediante la red neuronal. En primer lugar, se
reserva espacio para las matrices de entrada y salida a través de la
función preparamat_red, la cual necesita como argumentos de entrada,
las dimensiones de la red neuronal a utilizar para el cálculo de la
frecuencia media de cada fonema. Posteriormente, y para cada una de
las sílabas, se realiza una llamada a la función que implementa la red
neuronal para el cálculo del tono. Es necesario pasarle como argumentos
las dimensiones de la red y la trama de tono asociada a la silaba
correspondiente. A los valores obtenidos por la red neuronal se les aplica
una recta de normalización de forma que el tono de cada sílaba queda
establecido como:
Tono=((Tonorrnn+B)/A)
Dónde B=13.5 /145 y A=0.8/145 .
Una vez realizado el proceso para todas las sílabas, se liberan las
matrices utilizadas y se produce la interpolación del tono para poder
90
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
obtener la frecuencia media asociada a cada fonema a partir de los datos
obtenidos mediante la red neuronal.
Por último, se introduce en el campo F0 de los bloques de fonemas,
TBlkFonema, el valor de tono obtenido para cada uno de ellos. El
procedimiento es realizado por la función void BlkFonemaEscribeF0
(TBlkFonemaIndex blk, TF0 F0) que recibe el puntero al bloque de
fonema correspondiente y la frecuencia media obtenida.
b) Cálculo y asignación del campo Duración: Una vez obtenida la frecuencia
media de cada uno de los fonemas, se procede al cálculo de la duración de los
mismos. En primer lugar, se reserva espacio para las matrices de entrada y
salida de la red neuronal de duraciones, y para las matrices de duraciones
utilizadas para la obtención de la trama de duraciones de entrada a la misma.
El procedimiento se realiza a través de las funciones preparamat_red (necesita
las dimensiones de la red neuronal como argumentos) y AsignaMatricesDur
(Num_sil+1, Num_fon+1, Num_pal+1, &sil_acent, &sil_abierta, &Silaba_de_fon,
&trama_dur, &resultNet, &Sil_inic_pal, &Num_sil_pal) respectivamente.
AsignaMatricesDur, reserva memoria para las matrices que se utilizan durante
el proceso de obtención de las tramas de duración, como son: sil_acent
(contiene valores “1” y “0” dependiendo de si las sílabas son acentuadas o no),
sil_abierta (indican mediante los valores “1” ó “0” si la sílaba es abierta9 o
cerrada10), Silaba_de_fon (indica mediante un índice la sílaba a la que
pertenece cada fonema representado en un registro de la matriz), trama_dur
(contiene las tramas de entrada a la red neuronal del cálculo de duraciones),
resultNet (almacena las duraciones obtenidas, mediante red neuronal, para
cada uno de los fonemas), Sil_inic_pal (indica la posición de la primera sílaba
de cada una de las palabras del grupo fónico) y Num_sil_pal (indica el numero
de sílabas que forman cada palabra).
Una vez reservada la memoria, es necesario obtener los valores
correspondientes a cada una de las matrices. Así, el sistema detectará las
sílabas acentuadas y las abiertas, identificará la sílaba a la que corresponde
cada fonema y calculará el número de sílabas que forman cada palabra, las
posiciones de las silabas iniciales de cada palabra y la posición de la última
sílaba tónica.
9 Sílaba abierta es aquella que termina en vocal. Por ejemplo, las sílabas de “cama”.10 Sílaba cerrada es aquella que termina en consonante, como las de “silbar”.
91
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Por último, para cada uno de los fonemas, se realiza el siguiente proceso:
Obtención de las tramas de entrada a la red neuronal de cálculo de
duraciones, teniendo en cuenta una serie de parámetros que caracterizan
a cada fonema. Se tendrá en cuenta el tipo de la frase, la posición de la
palabra contenedora dentro del grupo fónico, la posición de la sílaba
correspondiente en la palabra y la posición del fonema dentro de la
sílaba. Los valores de la trama dependen también del tipo de fonema
para el que se quiere calcular la duración, del contexto del mismo (del
fonema anterior y posterior), así como de las características de la sílaba
contenedora (si es una sílaba abierta, tónica, diptongo, etc.).
Obtención de las duraciones mediante estimación de la red neuronal. Es
necesario introducir como argumentos de entrada las dimensiones de la
red de duraciones y la matriz de tramas de entrada para el proceso. El
resultado obtenido es almacenado en la matriz resultNet.
Una vez obtenidas las duraciones estimadas de los fonemas, se procede a
la normalización de los mismos de forma que:
Duracion=resultNet . x [ i ]/11.3∗1000.0
El valor de duración normalizado se escribe en el campo Duracion
correspondiente a cada bloque fonema mediante la función void
BlkFonemaEscribeDur (TBlkFonemaIndex blk,TDuracion dur), y se liberan las
matrices utilizadas durante todo el proceso.
Una vez obtenidas las duraciones y las frecuencias medias de los fonemas
asociados al grupo fónico se devuelve el control a la función Entonacion la cual
repetirá el proceso hasta que se llegue al final de la cadena de texto a sintetizar.
6.4 Bloque de síntesis de habla
En este apartado se va a describir el proceso mediante el cual se generan las
tramas de audio a partir de todos los parámetros generados en la etapa anterior. Se
realiza, de la misma forma que en el bloque de Procesado de Texto, una descripción
global de la etapa en primer lugar, para pasar a describir de forma concreta el proceso
y su implementación en el sistema.
6.4.1 DESCRIPCIÓN GENERAL DEL BLOQUE
Una vez modelada la cadena de bloques de fonema correspondiente al texto de
entrada, con las características de la voz para cada uno de los bloques, se procede a
la síntesis de habla propiamente dicha. Esta etapa es la encargada de leer los valores
92
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
de cada uno de los bloques y generar las tramas de audio correspondientes, a partir
de las unidades pregrabadas almacenadas en memoria en la etapa de inicialización
del sistema.
Para realizar el proceso de generación de voz, el bloque de síntesis está basado en
la implementación en lenguaje C de un sintetizador por concatenación de difonemas
TD-PSOLA.
En la siguiente figura se puede ver un esquema de la segunda etapa de la síntesis
de habla:
FIGURA 25: ESQUEMA DEL BLOQUE DE SÍNTESIS DE HABLA
6.4.2 LA SÍNTESIS TD-PSOLALa síntesis TD-PSOLA (Time Domain Pitch-Synchronous Overlap-Add) es la técnica
de síntesis por concatenación de forma de onda implementada en el sistema Boris. Al
igual que el resto de técnicas, ésta pretende conseguir una buena calidad de la señal
de voz generada a partir de las unidades pregrabadas.
Como es de imaginar, la concatenación directa de unidades en este resulta
imposible ya que normalmente las unidades pregrabadas tendrán una prosodia distinta
a la exigida. El principal problema que surge se produce en la adaptación de la
prosodia de las unidades pregrabadas a la prosodia del texto donde se utilizan, de
forma eficaz para perder calidad de la señal.
El algoritmo TD-PSOLA, trata de hacer dicha adaptación a través de modificaciones
en el dominio del tiempo, afectando dichas modificaciones de forma conjunta a la
frecuencia fundamental y a la duración de las unidades. Además, al hacerse todas las
modificaciones en el dominio temporal, se elimina la carga de cálculo debida a la FFT.
Teóricamente, nos ofrece la posibilidad de modificar la frecuencia en un rango de,
aproximadamente, unas dos octavas (de la mitad de la frecuencia original al doble de
ésta), aunque en la práctica el intervalo permitido se acorta bastante si queremos
mantener un determinado grado de calidad.
93
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
[MGCM 00]
6.4.2.1 El proceso de síntesis
Como ya se ha comentado, la síntesis parte de una serie de difonemas,
pregrabados anteriormente, que hay que concatenar y modificar para adaptar sus
características prosódicas a las de la secuencia “objetivo” generada en la etapa de
Procesado de Texto.
Todas las unidades están formadas por una serie de periodos básicos de forma de
onda delimitados por las marcas de pitch, que como vimos, reflejan los momentos de
cierre de la glotis. Estas marcas reciben el nombre de marcas de análisis, y están
contenidas en cada una de las unidades que componen la base de datos. En la
siguiente figura se puede ver un ejemplo de señal de voz con las marcas de pitch
asociadas.
FIGURA 26: SEÑAL DE VOZ CON SUS MARCAS DE PITCH.
El algoritmo TD-PSOLA modifica las características prosódicas de las unidades
almacenadas en la base de datos mediante la repetición en el tiempo de los periodos
básicos que forman las mismas, con una determinada cadencia. Así se consigue
modificar la estructura de armónicos de las unidades originales sin llegar a alterar el
espectro de la señal. Estos periodos básicos se enventanan síncronamente con las
marcas de pitch, de forma que la longitud de las ventanas siempre es mayor que un
periodo fundamental, existiendo un solape entre periodos consecutivos. En este caso,
el enventanado que se usa en el sintetizador es el de Tukey en el que la longitud de la
ventana es el doble del periodo fundamental y en el que el enventanado se centra en
las marcas de pitch, lo que contribuye a minimizar el efecto de la reverberación
94
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
producido por la copia de señales a corto plazo y a suavizar las transiciones
espectrales.
[MGCM 00]
El proceso de síntesis calcula, a partir de los parámetros obtenidos en el bloque de
procesado, el número de marcas de pitch que tendrá la unidad sintetizada y la posición
de las mismas dentro de la unidad. El número de marcas de la unidad de síntesis se
obtiene mediante la ecuación:
nmars=0,5+2∗( duracionf 0i+f 0 f )
A la hora de calcular la posición de las marcas, hay que tener en cuenta que el tono
no es constante a lo largo de la unidad a generar, de forma que las marcas de pitch no
se encuentran equiespaciadas. Se parte de un valor de F 0 inicial y se termina la unidad
con un valor de F0 final . Se supone que la curva de tono se comporta de forma lineal a
lo largo de la unidad por lo que se puede determinar la posición de las marcas de
síntesis obteniendo el escalón de la curva de síntesis. Éste se calcula mediante:
escalon=(f 0¿¿ f− f 0i)
(nmars−2)¿
De forma que la posición de las marcas se obtienen con la ecuación:
mars [i ]=mars[ i−1]+ f 0i+(i−1)∗escalon
FIGURA 27: POSICIÓN DE LAS MARCAS EN EL EJE DE SÍNTESIS
Cabe aclarar que si la frecuencia al inicio y al final de la unidad es la misma, el
escalón será nulo y las marcas del eje de síntesis quedan equiespaciadas.
Después de resolver la posición de las marcas, se establece una correlación entre
los periodos de la señal del eje de análisis y los del de síntesis, de cara a realizar la
copia o la supresión de los periodos de la señal original del eje de análisis al de
síntesis. Dado que cada uno de los nuevos periodos a generar, normalmente, tendrá
95
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
una duración diferente a la del periodo original del que provienen, habrá que realizar
una serie de transformaciones sobre los mismos que básicamente consistirán en lo
siguiente:
Si el periodo a generar tiene una duración inferior a la del periodo original
eliminaremos muestras del mismo.
Si la duración del periodo a generar es mayor que la del periodo original,
completaremos con ceros las muestras del periodo original.
FIGURA 28: CORRELACIÓN ENTRE LOS EJES DE ANÁLISIS Y SÍNTESIS [MGCM00]
El último paso para la obtención de la señal sintetizada consiste en un filtrado
Overlapp-Add entre los periodos consecutivos y enventanados de la señal de síntesis.
Al igual que el enventanado de análisis, el enventanado en la síntesis también es de
Tukey, tiene un tamaño de dos periodos básicos de señal, y está centrado en las
marcas de pitch de síntesis.
6.4.3 IMPLEMENTACIÓN DEL BLOQUE DE SÍNTESIS
El bloque de síntesis se encarga de la síntesis acústica del texto de entrada a partir
de la información prosódica obtenida en la etapa anterior. Así pues, una vez obtenida
la cadena de estructruras TBlkFonema con toda la información de cada uno de los
fonemas del texto de entrada del sintetizador, la función ConvierteFrase devuelve el
control a la función Psd_Main que finaliza devolviendo el control a la función
Ctv_Preprocesar, la cual finalmente devuelve el control a Ctv_Hablar que continúa con
la síntesis acústica del texto de entrada y no devolverá el control a la función
oir_cadena hasta que la cadena no haya sido completamente sintetizada.
96
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Una vez obtenida la prosodia del texto de entrada al sintetizador, se llamará en
repetidas ocasiones a la función que realiza la síntesis acústica y que es
Ctv_Acustico (matriz *mi_matriz, WORD wParam, DWORD lparam). De forma
breve, esta función sintetiza un periodo de señal y lo envia al interfaz de salida activo.
La función recibe como parámetro la matriz datos asociada al hilo de síntesis con la
información necesaria. La función devolverá un valor igual al de la constante CTV_OK
mientras queden periodos de señal por sintetizar y un valor igual a la constante
CTV_END cuando no queden mas periodos por sintetizar, marcando así el fin del
bucle de síntesis.
Ctv_Acustico realiza una llamada, en primer lugar, a la función Tdp_Concatena
(matriz *puntero, WORD lParam, DWORD buffer) que es la encargada de realizar la
síntesis de un segmento. Esta función recibe como argumentos la matriz de
parámetros correspondiente al hilo de síntesis, y un buffer donde se almacenará el
periodo sintetizado. El proceso que sigue la función para realizar la síntesis es:
En primer lugar la función obtiene la unidad a sintetizar a partir de la cadena de
bloques de fonema mediante la función Ifz_DameUnidad (matriz *mi_matriz,
TUnidadSintesis *unidad). Esta función es igual a la que se utiliza en
SacadifCV.exe durante el proceso de generación de base de datos. La función
obtiene a partir de la cadena de fonemas, los distintos difonemas asociados de
forma que cada vez que se llama a Tdp_Concatena se sintetizará un difonema
diferente obtenido mediante esta función.
Una vez obtenido el difonema que hay que sintetizar, se llama a la función
TdpCopiaUnidad (char *s,TEjes *eje, TIVector **x, int16 *numUnidad) pasando
como argumentos el nombre de la unidad a sintetizar, el puntero a la estructura
TEjes donde se almacenará la información de las marcas, el puntero a la
estructura TIVector donde se almacenarán las muestras y una variable
numUnidad en la que se almacenará la posición de la unidad dentro de la base
de datos. La función se encarga de leer la información de las muestras y las
marcas correspondiente a la unidad recibida. Las unidades de la base de datos
se almacenaron en memoria, en la inicialización del sistema, por la función
TdpCargaUnidades, la cual almacenó en un array de estructuras tipo
TListaUnidades el nombre de las unidades y la posición en la base de datos, en
el array TEjes2 Ejes las marcas de cada una de ellas y en el vector de tipo
TIVector mstDifs las muestras que conforman cada uno de los difonemas. Asi
pues, la función TdpCopiaUnidad copia a las estructuras pasadas como
97
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
argumentos, las marcas y las muestras originales de las que está compuesta la
unidad recibida.
La función TdpPreprocFast (TEjes *eje, TUnidadSintesis *unidad, int16 f0Inicial,
unsigned long nmst, int16 *numUnidad) la cual crea el eje de síntesis de la
unidad a partir del eje de análisis recibido. La función además recibe el nombre
y la posición de la unidad dentro de la base de datos, la frecuencia asociada al
primer periodo de la unidad y el número de muestras que componen la unidad
original. Esta función es la que realiza la síntesis propiamente dicha y la que
modifica la unidad original para obtener la unidad de síntesis necesaria de
acuerdo a la información prosódica obtenida de la primera etapa de síntesis. La
función calcula el número de marcas de la unidad en el eje de síntesis (marcas
para la unidad a sintetizar) y la posición de las mismas siguiendo el proceso
explicado en el apartado anterior. Se calcula también la correspondencia entre
el eje de análisis y el eje de síntesis. Al final, la función devuelve el número de
periodos a sintetizar que será nmars−1, pero como en este caso, y como ya se
ha explicado, de los periodos que se solapan solo se considera uno, el número
de periodos final a sintetizar será nmars−2 .
Se llama después a la función int16 TdpSintOla (matriz *mi_matriz, TEjes *eje1,
TEjes *eje2, TIVector *x1, TIVector *x2, char *unidad, TIVector *sal) que recibe
como argumentos el puntero a la matriz de datos del hilo de síntesis, los
punteros a las estructuras con las información de las marcas de dos unidades
consecutivas, los punteros a las estructuras que contienen las muestras
originales asociadas a las mismas y el vector donde se almacenarán las
muestras del periodo sintetizado. Esta función, cada vez que es llamada,
sintetiza un periodo de la señal de voz, de forma que en sucesivas llamadas
genera todos los periodos de síntesis calculados previamente. Para realizar el
proceso de síntesis la función se apoya en otras dos funciones importantes:
La función int16 TdpGetSenialSint (matriz *mi_matriz, TEjes *eje, int16 *x,
int16 ind, int16 invierte, int16 *mst, float *vent) que selecciona la zona de
una unidad determinada y crea la señal a corto plazo asociada, las
ventanas de síntesis de tipo Tukey, etc…La función recibe como
argumentos la matriz de datos asociada al hilo de síntesis, el puntero al
eje de marcas de sintesis y el puntero a las muestras originales de la
unidad, el indice de la marca de síntesis que determina la señal a corto
plazo deseada, ind, un flag que indica si la unidad es sorda para procesar
los periodos que se repiten de forma diferente, invierte, y dos vectores
98
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
donde se devuelve la señal a corto plazo sintetizada y la ventana de
sintesis.
La función void TdpOverlapAdd (int16 *a1, int16 *a2, float *v1, float *v2,
int16 m1, int16 m2, int16 N, int16 *vs) que sintetiza un periodo de señal a
partir de dos señales a corto plazo, enventanadas, y de sus respectivas
ventanas de sintesis. Recibe los punteros a las señales a corto plazo, las
ventanas de sintesis, la longitud de las señales y las ventanas de sintesis,
y el vector de salida donde se almacena toda la informacion sobre la
unidad sintetizada.
Una vez sintetizado un periodo de señal de voz, se envía éste al dispositivo de
salida mediante la función Int Out_SendBlk (matriz *mi_matriz, WORD control,
DWORD vector). Esta función queda enmarcada dentro del bloque de salida del
sintetizador y se estudia a continuación.
6.5 Bloque de Salida
Este bloque se encarga de recoger la trama de audio procedente del Bloque de
Síntesis y realizar sobre ella las operaciones necesarias para almacenarla o
reproducirla de una forma u otra dependiendo del tipo de dispositivo codificado en la
inicialización del sistema. En este bloque también se realiza la liberación de los
recursos asignados al hilo de síntesis, de cara a la finalización del proceso de síntesis.
6.5.1 DESCRIPCIÓN GENERAL DEL BLOQUE DE SALIDA
El bloque de salida es la última etapa del sintetizador. Este bloque recoge las
tramas generadas por el sintetizador de concatenación y las deposita en un archivo de
audio de tipo WAV. En este bloque, se realizan las modificaciones que sean
necesarias de la señal sintetizada, para adaptarla al formato de salida. También se
realizarán los procesos de liberación de matrices, limpieza de los buffers, etc…para
dejar el sistema preparado para un nuevo proceso de síntesis.
99
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
FIGURA 29: ESQUEMA DEL BLOQUE DE SALIDA
6.5.2 IMPLEMENTACIÓN DEL BLOQUE
Una vez sintetizado un periodo de señal de voz, se envía éste al dispositivo de
salida mediante la función Int Out_SendBlk (matriz *mi_matriz, WORD control,
DWORD vector). La función recibe como argumentos el puntero a la matriz de datos
del hilo de síntesis, una variable control que permite saber si el bloque que se está
procesando es el último de la frase o no, y un vector donde están las muestras
sintetizadas que hay que enviar al dispositivo de salida. La función realiza la
transferencia de un bloque de muestras al dispositivo de salida, encolándolas, o en su
defecto, esperando a que se abra hueco en el dispositivo de salida. Dependiendo del
tipo de dispositivo parametrizado en la inicialización del sistema, esta función llamará
a:
La función int Out_SendBlk_Tarjeta (matriz *mi_matriz, WORD control,
DWORD vector) si el dispositivo de salida es una tarjeta de audio.
La función int Out_SendBlk_Fichero (matriz *puntero,WORD control, DWORD
buffer) si se genera un fichero con el habla sintetizada.
La función int Out_SendBlk_Memoria (matriz *puntero,WORD control, DWORD
buffer) si la señal sintetizada se almacena en memoria del sistema.
En nuestro caso, se ha parametrizado el sistema para que el habla generada se
guarde en un fichero de audio de tipo WAV, por lo que se accederá a la función
Out_SendBlk_Fichero para la escritura de la trama sintetizada en el archivo de audio
final de nombre salida.wav abierto por la función Ctv_AcusticoOpen durante la
inicialización del sistema.
100
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
6.5.2.1 Liberación de recursos del sistema
Una vez terminada la síntesis de todos los difonemas y enviados al dispositivo de
audio de salida, se rompe el bucle de la función Ctv_Acustico y se devuelve el control
a la función Ctv_Hablar que continua procesandose. A partir de este punto, todas las
acciones que realiza el sistema son para la liberación de recursos, limpieza de buffers
de síntesis y de todos las variables y parámetros utilizados en el hilo de síntesis. En
primer lugar la función Ctv_Hablar termina de procesarse llamando a la función int
Ctv_Reset (matriz *mi_matriz, WORD wParam, DWORD lParam) la cual se encarga
de limpiar los buffers de muestras para que cuando se inicie un nuevo proceso de
síntesis, no se sinteticen periodos que hayan quedado encolados previamente.
Tambien se realiza, en esta función, un reseteo del hardware utilizado durante la
síntesis.
Una vez que termina el procesado de Ctv_Hablar y se devuelve el control a
oir_cadena esta llama a la función Ctv_AcusticoClose (matriz *mi_matriz, WORD
wParam, DWORD lParam) que se encarga de cerrar los canales de Hardware que se
hayan abierto durante la síntesis. Con esta función se termina el procesamiento de la
función oir_cadena y se devuelve el control a la función hilo_sintesis que finaliza
llamando a las funciones int Ctv_Unload (matriz *puntero,WORD wParam, DWORD
lParam), que realizará la descarga o el borrado de toda la información cargada
previamente en memoria por la funcion Ctv_Load en la etapa de inicialización. Por
último, la función void libera_matriz (matriz *mi_matriz) libera la memoria dinámica que
se reservó para los datos propios de cada hilo de síntesis.
6.6 Modificaciones realizadas en el sintetizador
6.6.1 MÓDULOS DE ENTONACIÓN Y DURACIONES HEREDADOS
Como ya se ha comentado anteriormente, se han adaptado una serie de módulos
del sintetizador de formantes utilizado en el proyecto de Rosario Alcázar con el fin de
dotar al sintetizador por concatenación de una mayor naturalidad y expresión a la voz
sintetizada. En el bloque de procesado de lenguaje es donde se han introducido los
módulos de entonación y duraciones utilizados en el sintetizador de formantes con el
fin de modificar, dependiendo de la información contextual, los valores de duración y
frecuencia media estimados por la red neuronal del sistema Boris.
101
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
6.6.1.1 Asignación de duraciones a los fonemas
Una vez obtenida la duración inicial de los fonemas de la cadena de texto a
sintetizar, se procederá a la modificación de los mismos. El sistema llamará dentro de
la función ConvierteFrase a la función:
void DuracionesMST (matriz *puntero, TBlkFonemaIndex fonema_inicio):
Esta función se encarga de modificar, si procede, el valor de duración contenido en
el campo Duracion de cada bloque fonema. Para ello se basa en la información
contextual dada por los fonemas contiguos al fonema procesado. El sistema aplicará
por tanto, una serie de modificaciones sobre las duraciones de forma que finalmente,
la duración asignada a los fonemas es el producto del valor obtenido inicialmente y
varios factores multiplicativos dependientes del contexto [Córdoba 02].
La función DuracionesMST va leyendo los fonemas iniciales de cada una de las
palabras de la cadena de texto, y los guarda en el array palabra[ ] que almacenará
todos los fonemas pertenecientes a una misma palabra.
Si el fonema leído es un signo de puntuación, realiza una llamada a la función void
Asigna_Duracion_PausasMST (matriz *puntero, char i, TBlkFonemaIndex fon_index),
que se encarga de asignar el valor adecuado al campo Duracion del bloque fonema en
cuestión.
Si el fonema no es un signo de puntuación, lee el resto de fonemas de la palabra
hasta alcanzar el final de la misma. Cuando ya se han leído todos ellos y se tienen
almacenados en el array citado, se procede a extraer la información relacionada con la
diptongación en la palabra y se definen una serie de variables que permiten tratar
situaciones de homologación que se puedan dar en la articulación de fragmentos
como “ofendedme en”. Después de obtener la información contextual necesaria, se
procede a analizar cada uno de los fonemas que conforman la palabra y se realiza una
llamada a la función void Asigna_Duracion_Consonante (char i, TBlkFonemaIndex
fon_index, int *coef_prep) en caso de que el fonema sea una consonante, o a la
función void Asigna_Duracion_Vocal (char i, TBlkFonemaIndex fon_index, int
*coef_prep) en caso de que sea una vocal.
Por último, después de que las duraciones asociadas a los bloques fonema hayan
sido modificadas por estas funciones y por Asigna_Duracion_PausasMST, se produce
un ajuste de las mismas con respecto a la velocidad de elocución del sistema
contenida en el campo psdVelocidadElocucion.val de la estructura puntero_Psd de la
matriz de parámetros del hilo de síntesis. El proceso es realizado por la función void
Ajusta_Velocidad_ElocucionMST (matriz *puntero,char Tipo, TBlkFonemaIndex inicio,
TBlkFonemaIndex fin).
102
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Según lo expuesto, el valor de duración final que contendrá el campo Duracion de
cada bloque TBlkFonema depende tanto del valor estimado por la red neuronal y los
coeficientes modificadores del fichero de inicialización como del valor de la velocidad
del habla, de forma que:
DurF=Durrrnn∗Coef contextual∗FactorAjusteVel
A continuación se describen de forma detallada las funciones mencionadas.
void Asigna_Duracion_PausasMST (matriz *puntero, char i, TBlkFonemaIndex
fon_index
La función no tiene en cuenta el valor estimado por la red neuronal, de
forma que el valor final asignado al signo de puntuación que se está
tratando, se obtiene del archivo de inicialización de la emoción a sintetizar.
El valor se lee del archivo mediante la función float Lee_Duracion_Pausas
(int i), la cual accede a la sección [PAUSAS] del fichero de inicialización
cuyo nombre se encuentra almacenado en el array fich_inicializ_2, y dentro
de la misma, al coeficiente que corresponda según el signo de puntuación
que se esté tratando. Se han determinado los coeficientes:
paus_pto: Cuando el fonema tratado sea “.”.
paus_ptocoma: Cuando el fonema sea “;”.
paus_coma : Cuando el fonema sea “,” o cualquier otro signo de
puntuación no contemplado.
Los valores de los coeficientes están expresados en ms y pueden variar
de una emoción a otra. Una vez normalizado el valor del coeficiente
obtenido, se procede a escribir el valor de duración estimado por la red
neuronal mediante la función void BlkFonemaEscribeDur
(TBlkFonemaIndex blk, TDuracion dur), la cual escribe en el campo
Duracion del bloque asociado al signo de puntuación recibido como
argumento, el valor de duración del fichero de inicialización.
void Asigna_Duracion_Consonante (char i, TBlkFonemaIndex fon_index, int
*coef_prep)
La función se encarga de leer el valor de duración inicial de los fonemas
de tipo consonante, previamente estimado por la red neuronal. Después
multiplicará ese valor inicial por una serie de factores moduladores que
dependerán del contexto en el que se encuentre el fonema en cuestión y
cuyos valores varían dependiendo de la emoción a sintetizar.
103
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
En primer lugar se realiza una llamada a la función TFlags
BlkFonemaLeeDur (TBlkFonemaIndex blk) que devuelve el valor de la
duración inicial del fonema que se está tratando. Este valor sufre una serie
de modificaciones, si procede, al ser multiplicado por un conjunto de
factores que dependerán del contexto consonántico y vocálico en el que se
encuentre el fonema tratado.
En el sintetizador por concatenación Boris, sólo se modifican los valores
de duración de aquellas consonantes que se vean afectadas por el efecto
de alargamiento prepausa. Los coeficientes que modulan la variación de la
duración de los fonemas consonánticos, se encuentran dentro de la
sección [DURACION] del fichero de inicialización contenido en la variable
fich_inicializ_2. A continuación se enumeran los utilizados y se detalla la
situación contextual en la que se aplican:
coef49: Se aplica a las consonantes no continuas (oclusivas y
vibrantes) que se encuentran situadas después de la última vocal
del grupo fónico, como en la palabra “comprar”.
coef50: Se aplica a las consonantes continuas que se encuentran
situadas después de la última vocal del grupo fónico, como en la
palabra “pudiereis”.
Una vez obtenido el coeficiente de modificación se multiplica éste por la
duración inicial del fonema consonántico y se almacena el valor obtenido
en el campo Duracion del bloque fonema correspondiente mediante la
función void BlkFonemaEscribeDur (TBlkFonemaIndex blk, TDuracion dur).
void Asigna_Duracion_Vocal (char i, TBlkFonemaIndex fon_index, int *coef_prep)
La función se encarga, de la misma forma que la anterior, de leer el
valor de duración inicial de los fonemas de tipo consonante. Después
multiplica ese valor inicial por una serie de factores moduladores que
dependerán del contexto en el que se encuentre el fonema y cuyos valores
varían dependiendo de la emoción a sintetizar.
Para determinar la duración inicial estimada por la red neuronal, se
accede de nuevo a la función TFlags BlkFonemaLeeDur
(TBlkFonemaIndex blk). Una vez leída esa duración inicial el sistema pasa
a obtener los factores multiplicativos que modificarán su valor. Estos
factores van a depender fundamentalmente de:
Contexto post_vocálico del fonema.
104
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Homologación11.
Posición de la palabra dentro del grupo fónico y acentuación de la
vocal.
Al igual que ocurría en la modificación de las duraciones de los fonemas
consonánticos, los coeficientes que modulan la variación de la duración de
las vocales se encuentran dentro de la sección [DURACION] del fichero de
inicialización contenido en la variable fich_inicializ_2. Los coeficientes que
modifican la duración de las vocales son:
coef48 : Se aplica a la última vocal del grupo fónico.
ult_palabra : Se aplica a las vocales de la última palabra del grupo
fónico.
acent_oxitona : Se aplica a la vocal tónica de la última palabra del
grupo fónico en caso de que la última palabra sea oxítona.
acent_no_oxi : Se aplica a la vocal tónica de la última palabra del
grupo fónico en caso de que la última palabra no sea oxítona.
sil_final_no_oxi : Se aplica a la última vocal del grupo fónico en el
caso de que la última palabra no sea oxítona.
sil_acentuada : Se aplica a las vocales acentuadas del grupo
fónico.
Una vez obtenidos los coeficientes que modifican la duración de la vocal
correspondiente, se almacena el valor obtenido en el campo Duracion del
bloque fonema correspondiente mediante la función void
BlkFonemaEscribeDur (TBlkFonemaIndex blk, TDuracion dur).
void Ajusta_Velocidad_ElocucionMST (matriz *puntero, char Tipo,
TBlkFonemaIndex inicio, TBlkFonemaIndex fin)
Esta función modifica los valores de duración obtenidos por las tres
funciones anteriores mediante un factor que depende de la velocidad de
elocución parametrizada. Se recorren uno a uno las distintas estructuras
TBlkFonema y dependiendo de si el fonema contenido en el bloque es un
silencio o un fonema el sistema accederá a la matriz
Velocidad_Elocucion_FonemasMST o a la matriz
Velocidad_Elocucion_SilenciosMST. Se accederá a un coeficiente u otro
dentro de la correspondiente matriz, dependiendo del valor almacenado en
11 La homologación es el fenómeno que se produce, en ciertos casos, cuando el fonema final de una palabra se funde con el fonema inicial de la siguiente, formando un único fonema de mayor duración.
105
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
el campo psdVelocidadElocucion.val de la estructura puntero_Psd de la
matriz de parámetros. Una vez obtenido el factor de modificación
necesario, se multiplica éste por el valor de la duración del fonema (leído
previamente mediante la función BlkFonemaLeeDur, ya comentada) y se
almacenará de nuevo en el campo Duracion del bloque fonema asociado
(mediante la función BlkFonemaEscribeDur).
6.6.1.2 Asignación de frecuencia media a los fonemas
Una vez determinado el valor de duración correspondiente a cada uno de los
fonemas, se pasa a realizar la asignación de un valor de F0 a cada uno de los bloques
TBlkFonema. Como ya se ha comentado anteriormente, los distintos valores de
frecuencia fundamental asignados van a determinar la entonación de la frase. Los
picos de la curva de entonación son aquellas sílabas que están acentuadas (presentan
mayor frecuencia que el resto), mientras que los valles de la curva son las sílabas que
preceden a los picos y que tienen una menor frecuencia.
El modelo de entonación que se utiliza en el sistema divide la curva de tono en 3
tramos bien definidos [Martínez 98], [ D’ Haro 03 ], [Gutierrez-Arriola 01] :
Zona inicial: Es la zona comprendida desde el principio del grupo fónico hasta
la primera sílaba tónica.
Zona central: Modela la entonación de los fonemas situados entre la primera y
la penúltima tónica.
Zona final: Esta zona abarca a todos los fonemas situados entre la última átona
antes de la última tónica y el final del grupo fónico.
Con estas tres zonas queda totalmente definida la curva de entonación para un
grupo fónico cualquiera.
El sistema calcula el valor de tono de cada uno de los fonemas mediante la función
EntonacionMST que se describe a continuación.
void EntonacionMST (matriz *puntero,TBlkFonemaIndex ind_fon):
De forma resumida, esta función obtiene la frecuencia media de todos los fonemas
y los almacena en el campo F0 de los bloques de fonema correspondientes. El
proceso se realiza mediante la asignación inicial de un determinado valor de tono a
unos fonemas “clave” concretos y una posterior interpolación entre los mismos para
obtener el resto de valores. Los valores iniciales son obtenidos a partir de un fichero
de inicialización que variará dependiendo de la emoción que se esté sintetizando en
cada momento.
106
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
En el proceso seguido para la obtención del tono de los fonemas se utilizan las
funciones principales detalladas a continuación:
void Leer_inicializacion() :
En primer lugar el sistema obtiene del fichero de inicialización correspondiente,
cuyo nombre se encuentra almacenado en la variable fich_inicializ, una serie de
coeficientes de entonación que almacena en unas variables globales de tipo int
homónimas. Estos coeficientes de entonación se encuentran en la sección
[ENTONACION] del fichero de inicialización y son los siguientes:
TON1V: Contiene el valor de tono del valle del grupo fónico. Se aplica cuando
el grupo fónico consta de una sola tónica y no acaba en punto.
TON1T: Contiene el valor de tono del pico del grupo fónico. Se aplica en los
casos en los que el grupo fónico conste de una sola tónica y no acabe en
punto.
TON1F: Representa el valor de tono asignado al último fonema del grupo
fónico cuando éste consta de una sola tónica y no acaba en punto.
TON1_pV: Contiene el valor de tono asignado al valle del grupo fónico. Se
aplica cuando el grupo fónico consta de una sola tónica y acaba en punto.
TON1_pT: Contiene el valor de tono asignado al pico del grupo fónico. Se
aplica cuando éste consta de una sola tónica, acaba en punto y la última
palabra no es oxítona12.
TON1_oT: Contiene el valor de tono asignado al pico del grupo fónico. Se
aplica cuando éste consta de una sola tónica, acaba en punto y la última
palabra es oxítona.
TON1_pF: Representa el valor de tono asignado al último fonema del grupo
fónico cuando éste consta de una sola tónica y acaba en punto.
PICO1: Contiene el valor de tono asignado al primer pico del grupo fónico, y se
tendrá en cuenta cuando el grupo fónico conste de más de una tónica.
VALLE1: Representa el valor de tono asignado al primer valle del grupo fónico.
Se aplica en los casos en los que el grupo fónico conste de más de una tónica.
PENPIC: Representa la pendiente (con signo contrario) con la que aumenta o
disminuye el valor de tono entre los picos del grupo fónico.
PENVAL: Representa la pendiente (con signo contrario) con la que aumenta o
disminuye el valor de tono entre los valles del grupo fónico.
12 Las palabras oxítonas o agudas son aquellas cuya sílaba tónica se encuentra al final de palabra (última posición). Las palabras no oxítonas son el resto de palabras, esdrújulas y llanas.
107
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Una vez se han leído y almacenado en variables estos coeficientes, se procede a la
detección de tónicas y valles que existen dentro del grupo fónico mediante la función
BuscaSignoPunt que se detalla a continuación.
TBlkFonemaIndex BuscaSignoPunt (TBlkFonemaIndex fon_ini, unsigned char
*num_ton, unsigned char *signo) :
Esta función recorre cada uno de los fonemas del grupo fónico, hasta el final del
mismo o hasta detectar un signo de puntuación. Se analiza cada uno de los fonemas
para detectar las tónicas y los valles del grupo. Cuando se detecta alguno de ellos, se
almacena el puntero a la estructura TBlkFonema asociada en el array Tonicas
[MAX_NUM_TON] o en el array Valles [MAX_NUM_TON] según corresponda. Durante
el proceso, también se asigna un valor a las variables num_ton (contiene el número de
tónicas que hay en grupo fónico) y signo (contiene el valor del signo ortográfico que
marca el final del grupo fónico).
Así pues, al finalizar el proceso de la función, el array Tonicas contendrá, de forma
ordenada, los punteros de los bloques de fonema correspondientes a las tónicas (p. ej.
Tonicas[0] puntero a la primera tónica del grupo fónico) y de igual forma que el array
Valles contendrá los punteros a los bloques correspondientes a los valles del grupo
fónico.
Una vez obtenidas la posición de las tónicas y de los valles del grupo fónico, se
procede a la generación de los valores de F0 asociados a los fonemas.
void GeneraF0 (TBlkFonemaIndex fon_ini_GF, TBlkFonemaIndex fon_fin_GF,
unsigned char num_ton, unsigned char signo, int Oxitona) :
Esta función es la que realiza el cálculo del tono de los fonemas. La función recibe
como argumentos los punteros del primer y último bloque fonema del grupo fónico
(fon_ini_GF y fon_fin_GF respectivamente), el número de tónicas existentes en el
grupo (num_ton), el signo de puntuación (signo) y un flag que indica si la última
palabra del grupo es oxítona o no.
Como ya se ha comentado, la función en primer lugar asignará los valores de tono
obtenidos del fichero de inicialización, a unos determinados fonemas según sea el tipo
de grupo fónico de entrada. En segundo lugar, se producirá la interpolación entre los
valores iniciales asignados para la obtención de los valores de frecuencia de todos los
fonemas. Dependiendo del número de tónicas que se hayan detectado previamente,
se realizan unas acciones u otras. De esta forma:
Si el número de tónicas es 0, se realiza una llamada a la función int Principio
(unsigned char signo) para cada uno de los fonemas pertenecientes al grupo.
108
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Si el número de tónicas es 1, se realiza una llamada a void AsignaUnaTonica
(TBlkFonemaIndex fon_ini_GF, TBlkFonemaIndex fon_fin_GF, unsigned char
signo, int oxitona).
Si el número de tónicas es 2, se llamará a las funciones void AsignaPrincipio
(TBlkFonemaIndex fon_ini_GF, unsigned char signo) y void AsignaFinal
(TBlkFonemaIndex fon_fin_GF, unsigned char num_ton, unsigned char signo,
int Oxitona).
Si el número de tónicas es mayor que 2, se realiza una llamada a la función
void AsignaPrincipio (TBlkFonemaIndex fon_ini_GF, unsigned char signo),
después otra a la función void AsignaMedio (unsigned char num_ton) y por
último se llama a void AsignaFinal (TBlkFonemaIndex fon_fin_GF, unsigned
char num_ton, unsigned char signo, int Oxitona).
Dentro de todas estas funciones se invoca a la función static void Interpola
(TBlkFonemaIndex Pos_Ini, TF0 F0_Ini, TBlkFonemaIndex Pos_Fin, TF0 F0_Fin) que
realiza la interpolación mediante una recta de los valores asignados inicialmente para
obtener todos los valores de tono de la curva de entonación.
A continuación se describen de forma de forma detallada todas las funciones
mencionadas.
I N T P R I N C I P I O ( U N S I G N E D C H A R S I G N O ) :
Devuelve el tono indicado en el coeficiente de la sección [ENTON_PRINCIPIO] del
fichero de inicialización cuyo nombre está contenido en la variable fich_inicializ. El
coeficiente obtenido del fichero de inicialización depende del signo de puntuación que
marca el final del grupo fónico. Los coeficientes contenidos en esta sección del fichero
de inicialización son:
Coma : Contiene el valor de frecuencia a asignar cuando el grupo acaba con el
signo “,”.
Pto_Coma : Contiene el valor de frecuencia a asignar cuando el grupo acaba
con el signo “;”.
Abre_Int: Contiene el valor de frecuencia a asignar cuando el grupo acaba con
el signo “¿”.
Cierra_Int : Contiene el valor de frecuencia a asignar cuando el grupo acaba
con el signo “?”.
Abre_Adm : Contiene el valor de frecuencia a asignar cuando el grupo acaba
con el signo “¡”.
Cierra_Adm : Contiene el valor de frecuencia a asignar cuando el grupo acaba
con el signo “!”.
109
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
2_Ptos : Contiene el valor de frecuencia a asignar cuando el grupo acaba con el
signo “:”.
Comillas : Contiene el valor de frecuencia a asignar cuando el grupo acaba con
el signo “ “” ”.
Guion : Contiene el valor de frecuencia a asignar cuando el grupo acaba con el
signo “-”.
Abre_Parent : Contiene el valor de frecuencia a asignar cuando el grupo acaba
con el signo “(”.
Cierra_Parent : Contiene el valor de frecuencia a asignar cuando el grupo acaba
con el signo “)”.
Pto : Contiene el valor de frecuencia a asignar cuando el grupo acaba con el
signo “.”.
El tono obtenido se almacena en el campo F0 de la estructura TBlkFonema
asociada a cada uno de los fonemas que forman el grupo fónico. La asignación de un
determinado valor de tono al campo F0 del bloque fonema asociado se realiza
mediante la función void BlkFonemaEscribeF0 (TBlkFonemaIndex blk, TF0 F0) que
recibe como argumentos el puntero al bloque fonema correspondiente y el valor de
frecuencia a asignar.
V O I D AS I G N A U N AT O N I C A (TB L KF O N E M A IN D E X F O N_ I N I _GF, TB L KF O N E M A IN D E X F O N_ F I N_GF, U N S I G N E D C H A R S I G N O , I N T O X I T O N A ) :
Esta función se aplica cuando el grupo fónico a sintetizar sólo consta de una sílaba
tónica. La función recibe como argumentos los punteros a las estructuras TBlkFonema
correspondientes al primer y último fonema del grupo fónico (fon_ini_GF y
fon_fin_GF), el signo que indica el final del grupo fónico (signo) y un flag que indica si
la última palabra que aparece en el grupo fónico es oxítona o no (oxitona).
Para la asignación del valor de frecuencia a los distintos fonemas que forman el
grupo, la función distingue los siguientes casos:
El grupo fónico no acaba con el signo de puntuación “.” Se contemplan las
siguientes situaciones:
El primer fonema del grupo coincide con la tónica: En este caso se asigna
al campo F0 del bloque correspondiente al primer fonema del grupo
fónico, el valor de la variable TON1T (inicializada previamente por la
función Leer_inicializacion). Después se asigna el valor de la variable
TON1F al campo F0 del bloque fonema asociado al último fonema del
grupo fónico, fon_fin_GF. El valor de la frecuencia que se asigna al resto
110
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
de los fonemas comprendidos entre el primero y el último se calcula a
través de una recta de interpolación mediante la función Interpola.
No hay ningún valle inicial (no existen vocales entre el inicio de la frase y
la vocal tónica): Se asigna el valor de la variable TON1V al campo F0 de
la estructura TBlkFonema asociada a fon_ini_GF, primer fonema del
grupo fónico. Se asigna el valor de la variable TON1T al campo F0 del
fonema tónico apuntado por el registro Tonicas [0] y, finalmente, se
almacena el valor de TON1F en el campo de frecuencia del último
fonema del grupo fónico. Para calcular la curva de entonación asociada a
los fonemas comprendidos entre el fonema inicial y el final del grupo
fónico se utiliza la función Interpola, que aplicará una recta de
interpolación sobre estos valores.
En caso distinto a los citados anteriormente : En este caso, se asigna al
primer fonema del grupo fónico y al fonema situado en el primer valle el
valor de frecuencia almacenado en la variable TON1V. Se asigna el valor
de TON1T al campo de frecuencia del fonema tónico, y por último, se
asigna el valor de frecuencia almacenado en TON1F al último fonema del
grupo fónico. Se utiliza la función Interpola para obtener el valor del tono
del resto de los fonemas del grupo.
El grupo fónico acaba con el signo de puntuación “.” En este caso se
contemplan las siguientes situaciones:
El primer fonema del grupo coincide con la tónica: La función realiza
diferentes acciones dependiendo de si el grupo fónico acaba en una
palabra oxítona o no.
- El grupo fónico acaba en oxítona: En este caso, el primer fonema
toma el valor de frecuencia contenido en la variable TON1_oT y el
último fonema del grupo fónico toma el valor asignado en TON1_pF.
Al igual que en el resto de casos, el valor de tono de los fonemas del
grupo se calcula mediante una recta de interpolación.
- El grupo fónico no acaba en oxítona: El campo F0 del bloque fonema
asociado al primer fonema del grupo toma el valor almacenado en
TON1_pT. El último fonema toma el valor asignado en TON1_pF. La
frecuencia del resto de fonemas del grupo fónico se calcula mediante
interpolación a través de la función Interpola.
111
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
No hay ningún valle inicial (no existen vocales entre el inicio de la frase y
la vocal tónica): Las acciones que realiza la función difieren dependiendo
de si la última palabra del grupo fónico es oxítona o no.
- El grupo fónico acaba en una palabra oxítona: El primer fonema del
grupo, fon_ini_GF, toma el valor de frecuencia almacenado en la
variable TON1_pV. En el fonema tónico apuntado por el registro
Tonicas[0] se almacena el valor de frecuencia de la variable
TON1_oT y por último, el valor de la variable TON1_pF es asignado
al campo F0 del último bloque fonema del grupo fónico. La frecuencia
del resto de fonemas del grupo fónico se calcula mediante
interpolación a través de la función Interpola.
- El grupo fónico no acaba en oxítona: En esta ocasión, al primer
fonema del grupo se le asigna el valor de TON1_pV, al fonema tónico
se le asigna el valor de frecuencia contenido en la variable TON1_pT
y el valor de la variable TON1_pF es asignado al campo F0 del último
bloque fonema del grupo fónico. Al igual que en los casos anteriores
la frecuencia del resto de fonemas del grupo se calcula mediante la
función Interpola que se describirá posteriormente.
En caso distinto a los citados anteriormente : Se realiza una distinción
dependiendo del tipo de la última palabra del grupo fónico.
- El grupo fónico acaba en oxítona: Se asigna al primer fonema del
grupo fónico y al fonema situado en el primer valle el valor de
frecuencia almacenado en la variable TON1_pV. Se asigna el valor
de TON1_oT al campo de frecuencia del fonema tónico, y por último,
se asigna el valor de frecuencia almacenado en TON1_pF al último
fonema del grupo fónico. Se utiliza la función Interpola para obtener
el valor del tono del resto de los fonemas del grupo.
- El grupo fónico no acaba en oxítona: Se asigna al primer fonema del
grupo fónico y al fonema situado en el primer valle el valor de
frecuencia almacenado en la variable TON1_pV. Se asigna el valor
de TON1_pT al campo de frecuencia del fonema tónico, y por último,
se asigna el valor de frecuencia almacenado en TON1_pF al último
fonema del grupo fónico. Se utiliza la función Interpola para obtener
el valor del tono del resto de los fonemas del grupo.
112
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
La siguiente tabla muestra de forma esquemática las asignaciones del campo F0 de
los fonemas “clave” al final de la función, dependiendo de las distintas situaciones
contempladas:
1er Fonema Valle Tónica Fonema
Final
Grupo fónico
no acaba
en PUNTO
1er fonema coincide con tónica TON1T TON1F
1er fonema no coincide con tónica y no hay valle TON1V TON1T TON1F
1er fonema no coincide con tónica y hay valle TON1V TON1V TON1T TON1F
Grupo fónico acaba
en PUNTO
1er fonema coincide
con tónica
Oxítona TON1_oT TON1_pF
No oxítona TON1_pT TON1_pF
1er fonema no
coincide con tónica y no hay
valle
Oxítona TON1_pV TON1_oT TON1_pF
No oxítona TON1_pV TON1_pT TON1_pF
1er fonema no
coincide con tónica y hay valle
Oxítona TON1_pV TON1_pV TON1_oT TON1_pF
No oxítona TON1_pV TON1_pV TON1_pT TON1_pF
TABLA 3: ASIGNACIÓN DE F0 PARA GRUPOS FÓNICOS CON UNA TÓNICA
La asignación de un determinado valor de tono al campo F0 del bloque fonema
asociado se realiza mediante la función BlkFonemaEscribeF0.
V O I D A S I G N AP R I N C I P I O (TB L KF O N E M A IN D E X F O N_ I N I _GF, U N S I G N E D C H A R S I G N O ) :
La función calcula y asigna valores de frecuencia a los fonemas situados entre el
fonema inicial y la primera tónica del grupo fónico. La función recibe como argumentos
el puntero a la estructura TBlkFonema correspondientes al primer fonema del grupo
fónico (fon_ini_GF) y el signo que indica el final del grupo fónico (signo).
Para la obtención y asignación de los valores de tono de cada uno de los fonemas
de la zona inicial, la función realiza diferentes acciones dependiendo de las
características del grupo:
a) El primer fonema del grupo coincide con la tónica: En este caso, sólo se asigna
el valor de la variable PICO1, inicializada previamente por la función
Leer_inicializacion, al campo F0 del bloque correspondiente al primer fonema
del grupo fónico.
113
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
b) El primer fonema del grupo no coincide con la primera tónica y existe valle: Se
asigna al primer fonema del grupo fónico, fon_ini_GF, el valor de frecuencia
obtenido a la salida de la función Principio, la cual, como ya se ha comentado,
obtiene el valor asociado al signo de puntuación del grupo fónico a través del
fichero de inicialización. Después se asigna el valor de la variable VALLE1 al
campo F0 del bloque fonema asociado al primer valle y el valor de la variable
PICO1 al del fonema tónico. El valor de la frecuencia que se asigna al resto de
los fonemas comprendidos entre el primer fonema y la primera tónica se
obtiene mediante la función Interpola.
c) El primer fonema del grupo no coincide con la primera tónica y no existe valle:
Se asigna al primer fonema del grupo fónico, el valor de frecuencia obtenido a
la salida de la función Principio y el valor de la variable PICO1 al campo F0 del
bloque fonema asociado a la tónica. Para obtener los valores de frecuencia del
resto de fonemas comprendidos en la zona inicial se interpola entre el valor
asignado al primer fonema y el valor asignado al fonema tónico utilizando para
ello la función Interpola.
La asignación de un determinado valor de tono al campo F0 del bloque fonema
asociado se realiza mediante la función BlkFonemaEscribeF0.
La siguiente tabla muestra de forma esquemática las asignaciones del campo F0 de
los fonemas “clave” al final de la función, dependiendo de las distintas situaciones
contempladas:
1er fonema 1er valle 1er pico1er fonema coincide con la
1ª tónica PICO11er fonema no coincide con
la 1ª tónica y no hay valle Principio(signo) PICO11er fonema no coincide con
la 1ª tónica y hay valle Principio(signo) VALLE1 PICO1
TABLA 4: ASIGNACIÓN DE F0 EN LA ZONA INICIAL
V O I D A S I G N AM E D I O ( U N S I G N E D C H A R N U M _ T O N ) :
Se encarga de modelar la entonación de los fonemas situados entre la primera y la
penúltima tónica del grupo fónico. Para ello en primer lugar asigna el valor de
frecuencia a los picos (sílabas tónicas) y a los valles (sílabas que preceden a las
tónicas) que comprendidos en la zona media. El proceso seguido para el cálculo y la
asignación de la frecuencia es el mismo tanto para los valles como para las tónicas:
a) Cálculo y asignación de F0 a picos : Para el cálculo de la frecuencia de los
fonemas tónicos que aparecen en el grupo fónico se dispone de las variables
114
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
PICO1 y PENPIC, inicializadas previamente por la función Leer_inicializacion.
El modelo seguido para el cálculo de la frecuencia se basa en situar todos los
picos sobre una recta cuyo punto inicial es PICO1 (frecuencia asignada al
primer pico del grupo por la función AsignaPrincipio) y cuya pendiente queda
determinada por la ecuación:
PdtePICO=−PENPIC
(nº tonicas−1)
Así pues, el valor de frecuencia asociado a la tónica i-ésima queda establecido
por la ecuación:
F0Tonicai−esima=PICO1−( (i−1 )∗PENPIC
nº tonicas−1 )Donde i varía desde i=1 hasta i=nº tonicas−1 .
b) Cálculo y asignación de F0 a valles : Para el cálculo de la frecuencia asociada a
los valles del grupo, se usa el mismo algoritmo que para los picos pero, en este
caso, partiendo de las utilizando las variables VALLE1 (frecuencia asociada al
primer valle del grupo fónico) y PENVAL. En el caso de los valles, el valor de
frecuencia asociado al valle i-ésimo se obtendrá mediante la ecuación:
F 0Vallei−esimo=VALLE1−( ( i−1 )∗PENVAL
nº tonicas−1 )Donde i varía desde i=1 hasta i=nº tonicas−1 .
Una vez se ha calculado un valor de entonación para todos los picos y los valles
que se encuentran entre la primera y la penúltima tónica del grupo fónico, se realizan
las interpolaciones necesarias para la obtención de los valores de frecuencia
intermedios que sean necesarios. Una vez obtenida la frecuencia de los fonemas, la
asignación se realiza mediante la función BlkFonemaEscribeF0.
V O I D A S I G N AF I N A L (TBL K F O N E M A I N D E X F O N_ F I N_GF, U N S I G N E D C H A R N U M _T O N , U N S I G N E D C H A R S I G N O , I N T OX I T O N A ) :
Esta función se encarga de asignar valores de tono a los fonemas situados entre la
penúltima tónica y el final de la frase. Esta zona es la más importante en la curva de
tono, ya que es la que realmente marca la entonación y da sentido y significado al
resto de la frase.
La función recibe como argumentos el puntero al último fonema del grupo fónico, el
numero de tónicas del grupo, el signo de puntuación que determina el final del grupo y
un flag que indica si la última palabra del grupo es oxítona (valor “1”) o no lo es (valor
115
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
“0”). Igual que ocurre en el resto de zonas de la curva de entonación, en primer lugar
se asignarán unos valores de frecuencia a unos fonemas determinados, para después
obtener el resto de valores mediante la interpolación de los primeros.
Así pues, la función obtiene el valor de frecuencia asociado al último valle, a la
última tónica y al fonema final del grupo fónico. Para ello, se analiza el tipo de signo de
puntuación final del grupo fónico y dependiendo si la palabra final es oxítona o no
oxítona, se llama a la función void AsignaVTF (int *Valle, int *Tonica, int *Final,
unsigned char Pos) con un valor u otro asignado a la variable Pos. Esta función
accede, para cada uno de los fonemas de interés, a una determinada sección del
fichero de inicialización asociado a la emoción a implementar. De esta forma, se
accede a la sección [ENTON_VTF_VALLE] para obtener el valor de F0 del último valle
del grupo, a [ENTON_VTF_TONICA] para la última tónica y a [ENTON_VTF_FINAL]
para obtener el valor de F0 correspondiente al último fonema del grupo.
Dependiendo del valor que tome el último argumento Pos, la función AsignaVTF
accederá a un coeficiente u otro dentro de la sección de interés. En la siguiente tabla
se muestra la relación entre los coeficientes de cada una de las secciones y el signo
de puntuación asociado dependiendo del tipo de palabra final:
Nombre del coeficiente
Última palabra del grupo fónico
Signo de puntuación que limita el grupo fónico
Coma_oxi_asc Oxítona “,”Coma_noxi_asc No oxítona “,”Pto_Coma_oxi Oxítona “;”
Pto_Coma_noxi No oxítona “;”Cierra_Int -- “?”
Cierra_Adm -- “!”2Ptos_Oxi Oxítona “:”2Ptos_noxi No oxítona “:”
Abre_Parent_asc -- “(”Abre_Parent_des -- “(”
Cierra_Parent -- “)”Pto_oxi Oxítona “.”Pto_noxi No oxítona “.”
TABLA 5: COEFICIENTES PARA LA ASIGNACIÓN DE F0 EN LA PARTE FINAL
Después de obtener los valores de frecuencia necesarios se procede al cálculo del
resto de valores de frecuencia de los fonemas comprendidos en la zona final mediante
la función Interpola.
116
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
V O I D IN T E R P O L A (TB L KF O N E M A IN D E X PO S _I N I , TF0 F0_ I N I , TBL K F O N E M A I N D E X P O S_F I N , TF0 F0_F I N ) :
La función recibe como argumentos los punteros a las estructuras TBlkFonema
asociados al fonema inicial y final entre los que se realiza la interpolación, y los valores
de frecuencia de ambos bloques fonema.
En primer lugar, se obtiene el valor de la variable Num_inter que expresa el valor de
número de fonemas+1 . Después calcula la frecuencia de los fonemas intermedios
basándose en que los valores de todos ellos se encuentran en una recta cuyo punto
inicial y final son los valores de frecuencia F0_Ini y F0_Fin recibidos como
argumentos. La pendiente de esta recta de interpolación queda definida por:
(F0¿¿ fin−F 0ini)Numinter
¿
Teniendo esto en cuenta, el valor de frecuencia asignado al fonema i-ésimo
comprendido entre los dos que se quieren interpolar será el obtenido de:
F 0 i=F0ini+ i∗( (F0 fin−F0 ini)Numinter )
Dondei indica el índice o la posición del fonema dentro de la zona comprendida por
los dos fonemas de entrada.
Nuevamente se utiliza la función BlkFonemaEscribeF0 para asignar el valor de
frecuencia calculado al campo F0 de la estructura TBlkFonema asociada al fonema
correspondiente.
Una vez que se ha determinado un valor de F0 para cada uno de los fonemas
mediante la función GeneraF0, se realiza una llamada a AleatorizaF0 descrita a
continuación.
void AleatorizaF0 (matriz *puntero, TBlkFonemaIndex fon_ini,
TBlkFonemaIndex fon_fin)
La función recibe los punteros a las estructuras TBlkFonema correspondientes al
primer y último fonema del grupo fónico y el puntero a la matriz de datos del hilo de
síntesis. AleatorizaF0 se encarga de modificar de forma aleatoria el valor de la
frecuencia asignada previamente a los fonemas con el fin de conseguir una mayor
naturalidad en el habla. La ecuación de cálculo del valor final de frecuencia para cada
uno de los fonemas del grupo fónico es:
F0=(F 0ini+AleatVar (±5Hz ) )∗factMult+ factAd
117
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
De esta forma, el valor final de la frecuencia de un fonema depende de un valor
aleatorio entre ±5Hz y de los factores aditivo y multiplicativo que modulan el tono
medio del hilo de síntesis.
6.6.2 ADAPTACIÓN AL NUEVO FORMATO DEL ARCHIVO DE BASE DE DATOS
Como ya se comentó en el capítulo anterior, el archivo creado por el generador de
base de datos, Gendb.exe, tiene una cabecera de 32 bytes con información del
archivo. Para que no haya problemas a la hora de almacenar las unidades de la base
de datos de entrada al sintetizador, es necesario que, durante el proceso de carga, no
se tenga en cuenta esta cabecera de 32 bytes insertada por el programa Gendb.exe.
Para ello, se ha modificado la función TdpCargaUnidades (char *nombreFichero), ya descrita anteriormente, de forma que el sintetizador se salte la cabecera inicial del
fichero minidb.dfm, situada delante de la información de marcas de pitch y muestras.
Después de la apertura del archivo que contiene la base de datos, se realiza un
desplazamiento del cursor de la siguiente forma:
lseek(fileHandle,32,SEEK_SET);
6.6.3 CONTROL DE UNIDADES ENSORDECIDAS EN EL SINTETIZADOR
Durante la caracterización prosódica de la emoción tristeza se detectó que la mayor
parte de los difonemas procedentes de la base de datos, estaban ensordecidos de
forma que la distancia entre las marcas de F0 contenidas, daban lugar a una
frecuencia media en los difonemas, demasiado baja como para poder utilizarlos
durante el proceso de síntesis de habla.
Por tanto, se ha añadido al sintetizador un control que verifica la calidad de los
difonemas contenidos en la base de datos, verificando si la frecuencia media de la
unidad a cargar es menor que TONO_MINSORDAS, que por defecto tiene un valor de
100 Hz. El control se realiza después de almacenar en memoria la información de las
marcas de los difonemas mediante la condición:
( f s∗Nummarcas)(Posicionmarca fin
−Posicionmarcaini)
En el caso de que el valor obtenido sea menor que el tono mínimo establecido para
los difonemas, se comprueba si la unidad es fricativa, oclusiva o un silencio, en cuyo
caso no se realizará ninguna advertencia. Si el tipo de la unidad no es ninguno de los
anteriores, se escribe el nombre de la misma en el archivo de texto listaSordos.txt.
118
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Si el valor obtenido es mayor que el tono mínimo, el proceso continúa con la carga
de la información de muestras de los difonemas de forma normal.
6.6.4 LAS SECUENCIAS DE CONTROL
6.6.4.1 Descripción e implementación en el programa
Las secuencias de control son cadenas de caracteres que se insertan en medio del
texto a reproducir permitiendo introducir variaciones en el habla sintetizada. Las
secuencias de control o etiquetas, quedan delimitadas por corchetes en cuyo interior
se encuentran una letra y un número separados por dos puntos, de la forma [letra:
número]. Dependiendo de la letra de la etiqueta, el sintetizador realizará una acción u
otra que afectará a la prosodia de la frase en mayor o menor medida dependiendo del
número adjunto a la misma.
La identificación y aplicación de las secuencias de control se realiza en la etapa de
procesado del texto de entrada. Como se vio anteriormente, es en la función BOOL
EnPalabra (matriz *puntero) donde se determina si una secuencia de caracteres
corresponde o no a un comando de control. Para que una cadena de letras sea
considerada como secuencia de control se debe verificar que el primer carácter de la
secuencia sea “[”, y que el segundo carácter se corresponda con una letra asociada a
alguno de los comandos de control. Para hacer esta comprobación, como ya se ha
visto, se utiliza la función BOOL EsCtrl (char c), a la que se le pasa como parámetro el
carácter en cuestión.
Una vez que una secuencia de caracteres ha sido identificada como una etiqueta
de control, cuando se alcanza el fin de palabra y se están generando los bloques de
palabras asociados a la cadena de entrada, se les da el tratamiento necesario a las
secuencias detectadas anteriormente con la función void ProcesaSecCtrl (matriz
*puntero). Esta función realiza una acción u otra dependiendo de la secuencia de
control almacenada en el campo buf de la estructura puntero_Psd de la matriz de
datos del hilo de síntesis.
En primer lugar, ProcesaSecCtrl analiza si el contenido del campo buf tiene la forma
[letra:número], es decir, si el contenido es una secuencia de control:
Si el contenido del campo no coincide con ninguna de las secuencias
implementadas, se deletrea la cadena de caracteres de forma que se crean
tantos bloques de palabra como sean necesarios.
Si la cadena almacenada en el campo buf tiene la estructura de una secuencia
de control, se procede al procesado de la etiqueta mediante una estructura de
programación de tipo switch en la que se implementan, para cada uno de los
119
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
casos a tener en cuenta, las acciones a realizar para llevar a cabo la función
indicada por cada etiqueta.
Se detalla a continuación, cada una de las etiquetas de control implementadas en
el sintetizador y el efecto producido por cada una de ellas en la prosodia del texto a
sintetizar.
6.6.4.2 Análisis de las secuencias de control disponibles
A la hora de introducir una etiqueta de control dentro de la cadena de texto a
sintetizar se puede realizar de dos formas, en función del ámbito de aplicación de los
efectos que producen. La primera de ellas consiste en introducir una etiqueta en un
punto cualquiera de una frase, siendo el ámbito de aplicación de la misma desde el
principio de la frase en la que se ha insertado hasta el final del texto, o bien hasta que
se inserte otra etiqueta que sobrescriba las mismas variables. La otra forma de
introducir las etiquetas posee un ámbito de aplicación más flexible, ya que la unidad de
división en este caso es la palabra en vez de la frase, siendo además las etiquetas
anidables entre sí. Esta segunda forma de etiquetar hace necesario ampliar la sintaxis
añadiendo una etiqueta de cierre de la forma [letra:0], que delimita el fin de la zona de
aplicación de la etiqueta con la letra contenida.
Dependiendo del efecto de la secuencia de control en la prosodia del texto a
sintetizar, se pueden clasificar las etiquetas implementadas de forma:
Modificación del tono medio de la voz (Factor Aditivo)
El sintetizador dispone de dos etiquetas que permiten modificar la frecuencia media
de la fuente glotal. Se ha supuesto, para la implementación, que el valor medio del
tono de las unidades de voz pregrabadas es de 150 Hz, ya que se trata de habla
femenina.
120
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Etiqueta de ámbito global
Etiqueta [t]Sintaxis [t:x] x=[100-200]
Parámetro
El término x representa la frecuencia media en Hertzios de la fuente glotal. Puede tomar un valor entre 100 Hz y 200 Hz. Si se escribe un número fuera de este rango se tomará por defecto 100 ó 200 según corresponda, es decir, sólo se aumenta o disminuye el tono en ±50Hz.
Ámbito de aplicación
La etiqueta actúa desde el inicio de la frase en que se encuentra hasta el final del texto o hasta el inicio de la frase en la que aparezca una nueva etiqueta [t]. Si aparecen distintas etiquetas [t] en una misma frase, el sistema sólo se considera la que aparece en último lugar.
TABLA 6: SECUENCIA DE CONTROL [T:X] (TONO GLOBAL DEL HABLA, FACTOR ADITIVO)
Ejemplo.- "Puedo aumentar el tono [t:260] medio de mi voz. Y también puedo
bajarlo [t:120]."
El sintetizador, en este caso, genera la primera frase aumentando la frecuencia
media del habla en 50Hz, es decir, aumenta el tono de cada uno de los fonemas en
50Hz respecto al valor calculado en el módulo de entonación. La segunda frase se
sintetiza de forma que se disminuye la frecuencia media de los mismos en 30Hz.
Etiqueta de ámbito local
Etiqueta [p]Sintaxis [p:x] x=[100-200], x=0
Parámetro
El término x representa la frecuencia media en Hertzios de la señal a sintetizar. Puede tomar un valor entre 100 Hz y 200 Hz. Si se escribe un número fuera de este rango se tomará por defecto 100 ó 200 según corresponda. La etiqueta que limita el fin de aplicación de la secuencia es [p:0].
Ámbito de aplicación
La etiqueta actúa desde la palabra posterior a la etiqueta de apertura hasta la palabra anterior a la etiqueta de cierre. Las etiquetas de apertura y cierre deben estar situadas en la misma frase. Es posible realizar el anidamiento de etiquetas [p] en la misma frase.
TABLA 7: SECUENCIA DE CONTROL [P:X] (TONO LOCAL DEL HABLA, FACTOR ADITIVO)
Ejemplo.- "Puedo decir palabras [p:195] con mayor frecuencia [p:0] que otras."
La frase sintetizada tendrá una frecuencia media 45Hz superior al resto en la zona
“con mayor frecuencia”. El resto de la frase tendrá la frecuencia media estimada por el
modulo de entonación del sintetizador.
121
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Ejemplo.- "Puedo [p:350] anidar etiquetas de control [p:100] de este tipo [p:0] en
una [p:0] misma frase."
En este caso se aumenta el tono de las zonas “anidar etiquetas de control” y “en
una” 50Hz por encima del valor de frecuencia calculado por el sintetizador, y se
disminuye el tono en la zona “de este tipo” en 50Hz. El resto de la frase (zonas
“Puedo” y “misma frase”) se sintetiza de forma normal, con los valores previamente
calculados.
Modificación del tono medio de la voz (Factor Multiplicativo)
El sintetizador dispone de dos etiquetas que permiten modificar la frecuencia media
de la fuente glotal mediante la multiplicación de un determinado factor a la frecuencia
media de los fonemas que conforman el texto de entrada al sistema.
Etiqueta de ámbito global
Etiqueta [m]Sintaxis [m:x] x=[55-200]
Parámetro
El término x representa el tanto por ciento de variación de la frecuencia media de la fuente glotal respecto a la original. Puede tomar un valor entre 55% y 200 %. Si se escribe un número fuera de este rango se tomará por defecto 0,55 ó 2 según corresponda.
Ámbito de aplicación
La etiqueta actúa desde el inicio de la frase en que se encuentra hasta el final del texto o hasta el inicio de la frase en la que aparezca una nueva etiqueta [m]. Si aparecen distintas etiquetas [m] en una misma frase, el sistema sólo se considera la que aparece en último lugar.
TABLA 8: SECUENCIA DE CONTROL [M:X] (TONO GLOBAL DEL HABLA, FACTOR MULTIPLICATIVO)
Ejemplo.- "Puedo hablar normal. Duplicar el tono de mi voz [m:200]. E [m:50]
incluso reducirlo a casi la mitad."
La primera frase se genera de forma normal, es decir, el tono es el que le
corresponde según los ficheros de configuración de la emoción a implementar. La
segunda frase se genera con doble frecuencia media de la que le corresponde,
mientras que en la última frase se reduce el tono prácticamente a la mitad (factor
mínimo 0,55).
122
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Etiqueta de ámbito local
Etiqueta [w]Sintaxis [w:x] x=[55-200], x=0
Parámetro
El término x representa el tanto por ciento de variación de la frecuencia media de la fuente glotal respecto a la original. Puede tomar un valor entre 55% y 200 %. Si se escribe un número fuera de este rango se tomará por defecto 0,55 ó 2 según corresponda. La etiqueta que limita el fin de aplicación de la secuencia es [w:0].
Ámbito de aplicación
La etiqueta actúa desde la palabra posterior a la etiqueta de apertura hasta la palabra anterior a la etiqueta de cierre. Las etiquetas de apertura y cierre deben estar situadas en la misma frase. Es posible realizar el anidamiento de etiquetas [w] en la misma frase.
TABLA 9: SECUENCIA DE CONTROL [W:X] (TONO LOCAL DEL HABLA, FACTOR MULTIPLICATIVO)
Ejemplo.- "Ahora voy a [w :150] aumentar el tono de mi voz [w :0] y ahora voy
[w :20] a reducirlo [w :0]."
El sintetizador modifica la frecuencia de los fonemas contenidos en “aumentar el
tono de mi voz” multiplicando la frecuencia inicial por un factor de 1,5 y en “a reducirlo”
donde multiplica por el factor 0,55. El resto de la frase no sufrirá las modificaciones
asociadas al efecto de la etiqueta.
Modificación de la velocidad de elocución
Existen dos etiquetas que modifican la velocidad de elocución mediante la
modificación de la duración de los fonemas de la cadena de texto. Antes de la
aplicación de la etiqueta, los fonemas tendrán la duración establecida en el módulo de
procesado de texto de entrada, donde se obtiene la prosodia de los fonemas, de
acuerdo a la velocidad parametrizada en el hilo de síntesis.
123
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Etiqueta de ámbito global
Etiqueta [v]Sintaxis [v:x] x=[50-250]
Parámetro
El término x representa la velocidad media de habla en sílabas por minuto. Puede tomar un valor entre 50 y 250. Si se escribe un número fuera de este rango se aproximará por defecto a 50 ó 250 según corresponda.
Ámbito de aplicación
La etiqueta actúa desde el inicio de la frase en que se encuentra hasta el final del texto o hasta el inicio de la frase en la que aparezca una nueva etiqueta [v]. Si aparecen distintas etiquetas [v] en una misma frase, sólo se considerará la que aparece en último lugar.En caso de que en una misma frase aparezca una etiqueta de velocidad [v] y una etiqueta [e] asociada a la implementación de emociones, la velocidad de habla que presente el habla vendrá determinada por el efecto de la etiqueta que aparezca en último lugar.
TABLA 10: SECUENCIA DE CONTROL [V:X] (VELOCIDAD GLOBAL DE HABLA)
Ejemplo.- "Si quieres puedo leer muy rápido [v :180]. También [v :75] puedo leer
muy despacio."
El habla generada para la primera frase es muy rápida, mientras que en la segunda
frase el habla es muy lenta.
Etiqueta de ámbito local
Etiqueta [u]Sintaxis [u:x] x=[50-250] , x=0
Parámetro
El término x representa la velocidad media de habla en sílabas por minuto. Puede tomar un valor entre 50 y 250. Si se escribe un número fuera de este rango, se aproximará por defecto a 50 ó 250 según corresponda. Se utiliza [u:0] como etiqueta de cierre.
Ámbito de aplicación
La etiqueta actúa desde la palabra posterior a la etiqueta de apertura hasta la palabra anterior a la etiqueta de cierre. Las etiquetas de apertura y cierre deben estar situadas en la misma frase. Es posible realizar el anidamiento de etiquetas [u] en la misma frase.
TABLA 11: SECUENCIA DE CONTROL [U:X] (VELOCIDAD LOCAL DE HABLA)
Ejemplo.- "Lo voy a decir [u: 80] muy despacio [u: 0] para que me entiendas.”
En este caso, el habla generada en el tramo “muy despacio” tiene una velocidad de
80 sílabas por minuto, mientras que en el resto de la frase, la velocidad de elocución
es la parametrizada en el hilo de síntesis.
124
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Introducción de emociones en el habla
Existe una etiqueta de control mediante la cual se puede implementar cierta
emoción en el texto de entrada. Así pues, dependiendo de la emoción inicial de las
unidades pregrabadas que se utilicen en la síntesis, se tendrán unos resultados u
otros. La secuencia de control tiene efecto tanto en la velocidad de elocución del texto,
como en la curva de entonación de la misma, ya que esta varía de acuerdo a la
emoción a implementar. Se han implementado las emociones: tristeza, alegría,
sorpresa, enfado o un estado neutral.
Se pueden obtener diferentes resultados dependiendo de la emoción de las
unidades de habla pregrabadas.
Etiqueta [e] Sintaxis [e:x] x=[1-5]
Parámetro
El término x se utiliza para seleccionar la emoción deseada. Las combinaciones posibles son:[e:1] TRISTEZA [e:2] NEUTRA [e:3] ALEGRÍA[e:4] SORPRESA [e:5] ENFADOLa relación existente entre el valor del parámetro y la emoción asociada queda determinada en la sección [EMOCIONES] del fichero de inicialización “pros.ini”.Si se escribe un valor fuera de los definidos en el rango se considerará como si no se hubiera escrito nada.
Ámbito de aplicación
La etiqueta actúa desde el inicio de la frase en que se encuentra, hasta el final del texto o hasta el inicio de la frase en la que aparece una nueva etiqueta [e].Si hay varias etiquetas [e] en una misma frase, sólo se considerará la que aparece en último lugar.
TABLA 12: SECUENCIA DE CONTROL [E:X] (EMOCIONES)
Ejemplo.- "Cuando [e :1]estoy triste. No hablo en [e :2]tono neutro.”
En este caso en la primera frase el robot hablaría con tristeza, mientras que en la
segunda expresaría alegría.
Introducción de grados en las emociones
Durante el desarrollo de este proyecto se ha incorporado una nueva etiqueta que
permite introducir un estado gradual en las emociones, de modo que éstas puedan
manifestarse con distintos niveles.
Etiqueta [n]
125
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Sintaxis [n:x] x=[0-100]
Parámetro
El término x representa el porcentaje en el que se desea que aparezca la emoción indicada por la etiqueta [e], respecto de un estado de emoción neutra.
Ámbito de aplicación
La etiqueta actúa desde el inicio de la frase en que se encuentra, hasta el final del texto o hasta el inicio de la frase en la que aparece una nueva etiqueta [n]. Si hay varias etiquetas [n] en una misma frase, sólo se considerará la que aparece en último lugar.
TABLA 13: SECUENCIA DE CONTROL [N:X] (GRADOS EN EMOCIONES)
Ejemplo.- “Cuando [e :1] estoy[n: 30] muy triste. Hablo [e :1] de [n: 100] forma
muy triste.”
En este caso la primera frase se recitaría con una emoción tristeza en una
proporción del 30% y en la segunda se recita con un factor del 100%.
Introducción de pausas
Se dispone de una etiqueta que permite introducir pausas a lo largo del texto, lo que
puede servir para enfatizar las palabras que siguen a la pausa o para simular un
momento de reflexión del locutor.
Etiqueta [b] Sintaxis [b:x]
Parámetro
El término x representa la duración de la pausa en décimas de segundo.
Ámbito de aplicación
El efecto de la etiqueta de pausa tiene lugar en el momento en que aparece la etiqueta.
TABLA 14: SECUENCIA DE CONTROL [B:X] (INTRODUCCIÓN DE PAUSAS)
Ejemplo.- " Si quieres puedo parar [b :6] y seguir cuando estés listo.”
El sistema genera una pausa de duración 0,6 s entre las palabras “parar” e “y” del
texto de entrada.
6.6.5 INTRODUCCIÓN DE EMOCIONES CON DISTINTO GRADO
Como se comentó en el apartado 3.3 de esta memoria, existen dos enfoques para
la clasificación de las emociones, el enfoque que las supone discretas y únicas frente
al resto y el que las supone continuas de forma que se pueden caracterizar en un
espacio bidimensional como el de la circunferencia de Russell.
126
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
En el proyecto se han implementado 5 emociones de forma discreta: estado neutro,
alegría, tristeza, enfado y sorpresa. Como valor añadido a la implementación y para
asemejar el modelo utilizado en el proyecto con el enfoque que se describe a las
emociones como estados continuos, se han introducido grados en las emociones, de
modo que al expresar una determinada emoción en el texto de entrada al sintetizador,
se le pueda indicar también en qué grado o intensidad se desea que aparezca la
citada emoción.
Como se ya se ha indicado anteriormente, los coeficientes que se encuentran en
los ficheros de inicialización y que hacen alusión a la duración de los fonemas, la
entonación y la velocidad de elocución, varían dependiendo de la emoción a
implementar en cada caso. Por tanto, para denotar los diferentes grados de cada una
de las emociones se realizará una mezcla de los valores necesarios en cada caso
para la emoción a implementar por medio de las etiquetas de control con el fichero de
control asociado a la emoción base que dependerá de la base de datos utilizada en
cada caso.
Por tanto, para implementar los grados en las emociones, se toma el valor asignado
al coeficiente de interés del fichero de inicialización del estado neutro y del fichero de
inicialización asociado a la emoción a implementar y se realiza un promedio de los dos
valores, de modo que el coeficiente de la emoción implementada se encuentre en la
proporción que indicada por la etiqueta de control de grado de emoción.
Ejemplo.- “Hablo así porque [e :1] no estoy[n: 30] muy triste.”
De acuerdo con las etiquetas indicadas y según lo expuesto en el apartado anterior,
el sistema sintetiza la frase “Hablo así porque no estoy muy triste” con emoción
tristeza (basada en un corpus neutro) en un grado de intensidad del 30%.
A la hora de determinar el valor de entonación asociado al primer pico del grupo
fónico, el sistema accede al coeficiente PICO1 en la sección [ENTONACION] del
fichero de inicialización de la emoción tristeza (triste.ini). En este caso, el valor
obtenido es 113 Hz. También se accede al mismo parámetro del fichero asociado a la
emoción neutra normal.ini que en este caso tiene un valor de 136 Hz. Una vez que se
han leido estos dos coeficientes el valor que finalmente se almacenará en la variable
correspondiente será 113∗0,3+136∗0,7=129,1Hz .
127
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
La etiqueta de grado de emoción afectará a aquellos coeficientes que resultan clave
para la caracterización de los estados emocionales, y que son los siguientes:
Coeficientes de duración
coef48 coef49 coef50
ult_palabra acent_oxiton acent_no_oxi
sil_final_no_oxi sil_acentuada
Coeficiente de velocidad de elocución
vel_elocu
Coeficientes relativos a la entonación
PICO1 VALLE1 PENPIC PENVAL
TON1V TON1T TON1F
TON1_pV TON1_pT TON1_pF TON1_oT
128
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
7. IMPLEMENTACIÓN DE EMOCIONES EN EL HABLA El sintetizador inicial de partida de este proyecto, contenía una base de datos de
difonemas de habla masculina y el modelado prosódico que se realizaba estaba
basado en los resultados obtenidos de las redes neuronales del mismo. Como ya se
ha detallado, el objetivo del proyecto ha consistido en dotar al sintetizador de
emociones y para ello se han utilizado diferentes bases de datos de difonemas con
habla femenina para las emociones a implementar, y se ha añadido un nuevo módulo
de prosodia, heredado del sintetizador por formantes, que modifica los valores de tono
y duraciones obtenidos por las redes neuronales ya existentes, mediante una serie de
ficheros de inicialización que contienen la información característica de la prosodia
asociada a cada una de ellas.
En esta parte de la memoria se detalla el proceso seguido para la obtención de los
nuevos valores prosódicos característicos del habla femenina en estado neutro y en
cada una de las emociones implementadas: alegría, tristeza, sorpresa y enfado.
7.1 Corpus S.E.S.
A la hora de analizar las características de cada una de las emociones de interés se
han estudiado, para cada emoción, una serie de frases pertenecientes a la base de
datos disponible S.E.S., de las que se han obtenido un conjunto de parámetros
característicos de cada emoción. La base de datos contiene, para cada una de las
emociones, un conjunto de tres niveles de emoción, en el que cada uno de ellos
consta de 15 frases grabadas por la misma actriz que grabó el corpus de logatomos de
los que se han obtenido las bases de datos de emociones. Así pues, se dispone en
total de 45 frases para cada emoción, excepto para la voz normal, para la que sólo se
cuenta con un nivel de 15 frases.
Aunque la base de datos S.E.S. también cuenta con párrafos grabados en tres
niveles de intensidad para cada una de las emociones, no se han utilizado para el
análisis. Las frases pertenecientes al corpus que se han utilizado en el proceso son las
siguientes:
No queda fruta los viernes.
El final del siglo veinte.
La puerta tiene cerrojo.
Tengo la llave en el bolsillo.
Gozan de perfecta salud.
Vivirás una feliz experiencia.
129
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Le gusta mucho el gregoriano.
Llegó la reina del puño cerrado.
Las herramientas que se han utilizado para realizar el análisis de las grabaciones
de la base de datos son, por un lado, el programa Praat que como ya se ha indicado,
permite la visualización y el análisis del habla y, por otro lado, el programa
GeneraParPcm.exe que obtiene el fichero de extensión *.par con información de la
duración y la entonación de cada frase, a partir del fichero de audio y el fichero de
marcas y etiquetas asociados.
Estos ficheros generados son los utilizados para el modelado prosódico del habla
generada en cada emoción.
7.2 Estructura de los ficheros de inicialización de emociones
Para la implementación de las emociones en el sintetizador, además de las distintas
bases de datos utilizadas para cada una de las emociones, es necesario la utilización
de ficheros de inicialización *.ini. Estos archivos son generados de forma manual y
contienen los valores obtenidos del estudio prosódico de las frases de muestra
pertenecientes al corpus S.E.S.
Los ficheros de inicialización están formados por una serie de secciones,
identificadas por el nombre de la sección entre corchetes. Dentro de cada sección
aparece una lista de asociaciones de tipo “NombreParametro = ValorAsociado”. Los
ficheros que se van a utilizar para la implementación de las emociones del sintetizador
son: pros.ini, alegre.ini, normal.ini, triste.ini, sorpresa.ini y enfado.ini. El nombre del fichero de inicialización de la emoción a implementar se almacena en
la variable global fich_inicializ. Esta variable por defecto, contiene el nombre del
fichero de inicialización asociado al estado neutro, neutra.ini, y varía dependiendo de
la emoción a sintetizar.
En cada uno de los ficheros de inicialización correspondientes a cada una de las
emociones se tienen las siguientes secciones:
- [ENTONACION]: Contiene el conjunto de parámetros que modelan la
entonación de una frase o grupo fónico cuando este sólo consta de una
tónica y cuando consta de más de una tónica.
- [ENTON_PRINCIPIO]: Los parámetros listados en esta sección contienen
los valores del tono asociado al primer fonema de un grupo fónico o frase
cuando estos tienen más de una tónica. Los valores de tono varían
dependiendo del signo de puntuación final que limita el grupo.
130
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
- [ENTON_VTF_TONICA]: Contiene información del tono asignado al último
pico del grupo fónico dependiendo del signo de puntuación final y de si la
última palabra es oxítona o no.
- [ENTON_VTF_VALLE]: Igual al anterior pero en este caso se modela el
último valle del grupo.
- [ENTON_VTF_FINAL]: La lista de coeficientes de esta sección modelan el
tono asociado al último fonema del grupo fónico, dependiendo del signo de
puntuación final y de si la última palabra del grupo es oxítona o no.
- [DURACION]: Esta sección contiene los valores de los coeficientes que
modifican las duraciones de algunos fonemas de la frase dependiendo del
contexto de los mismos.
- [PAUSAS]: Detalla las duraciones en milisegundos de las pausas
dependiendo de si el signo ortográfico es una coma, un punto ó un punto y
coma.
- [VELOCIDAD]: Contiene el valor de la velocidad de elocución para la
emoción a sintetizar.
- [TONO]: Contiene el valor del tono medio de la emoción modelada en el
fichero. Se utiliza a la hora de establecer los diferentes grados en las
emociones.
El archivo pros.ini se usa en el tratamiento de la secuencia de control asociada a la
implementación de emociones en la voz neutra y que, como se vio en el capítulo
anterior, es de la forma “[e:parámetro]”. El fichero de inicialización contiene la
asignación de cada parámetro a un fichero de inicialización de una determinada
emoción. Por tanto, dentro de pros.ini se accede a la sección [Emociones] que
contiene la lista de asociaciones entre los parámetros y los ficheros de inicialización
asociados. La lista contenida en el fichero es:
- Emocion1=normal.ini
- Emocion2=triste.ini
- Emocion3=alegre.ini
- Emocion4=sorpresa.ini
- Emocion5=enfado.ini
Todos los valores contenidos en los ficheros de inicialización son leídos y
almacenados en memoria mediante las funciones TPortError DameProfileDouble
(const char * NombreFichero, const char * Seccion, const char * Parametro, double
Defecto, double *Destino, BOOL verbose), TPortError DameProfileString (const char *
131
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
NombreFichero, const char * Seccion, const char * Parametro, const char * Defecto,
char * Destino, int16 Cuantos, BOOL verbose) o TPortError DameProfileShort (const
char * NombreFichero, const char * Seccion,const char * Parametro, short Defecto,
short *Destino, BOOL verbose). Estas funciones buscan un coeficiente de nombre
Parametro dentro de la sección Seccion del fichero de inicialización NombreFichero y
copian el valor de ese coeficiente, que dependiendo de la función utilizada será de tipo
double, string ó short, en la variable Destino. Si no encuentra el coeficiente buscado
dentro del fichero, copia el valor Defecto en la variable pasada como argumento
Destino. Mediante la variable verbose la función muestra mensajes de error en el caso
de que aparezca algún problema durante el proceso de lectura.
7.3 Modelado prosódico del estado neutro
A continuación se detalla el proceso seguido para la obtención de los valores de
entonación y duración que hay que aplicar a los obtenidos a partir de la red neuronal
para una mejora en la caracterización del habla.
7.3.1 CARACTERIZACIÓN DEL ESTADO NEUTRO
De las frases escogidas para el estudio de la prosodia que caracteriza las
emociones, se han utilizado para el análisis del estado neutro, las siguientes:
No queda fruta los viernes.
El final del siglo veinte.
Tengo la llave en el bolsillo.
Gozan de perfecta salud.
Vivirás una feliz experiencia.
Le gusta mucho el gregoriano.
Llegó la reina del puño cerrado.
Sobre cada una de estas frases se ha realizado un estudio con el objetivo de
obtener las características prosódicas que definen el estado neutro en cada caso. Así,
a partir de cada frase se han obtenido los valores de los parámetros contenidos en el
fichero de inicialización que caracterizaría el estado neutro. Una vez obtenidos los
valores que caracterizan cada una de las frases se ha realizado la media entre ellos
para obtener unos valores, que aunque no sean reales, si sean los que más se ajusten
a todas las frases y que así ofrezcan los mejores resultados globales.
132
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
“No queda fruta los viernes”
Los valores de prosodia obtenidos del estudio realizado, permitirán que el
resultado de la síntesis de la frase “No queda fruta los viernes” sea lo más similar
posible a la grabación de la actriz que se muestra en la siguiente figura.
FIGURA 30: GRABACIÓN FRASE “NO QUEDA FRUTA LOS VIERNES.” CON EMOCIÓN NEUTRA
Al escuchar la grabación se observa como la actriz resalta la palabra inicial
“no”, comenzando con un tono alto y disminuyendo el valor del mismo a lo largo
de la frase. Se puede ver que durante toda la frase, no se producen grandes
variaciones en el tono de los fonemas ni en la duración de los mismos. Esta
estabilidad en la curva de tono se puede considerar como la principal
característica del estado neutro.
Si se realiza un estudio del fichero *.par con información de la duración y la
entonación de la frase se observa que:
ENTONACIÓN
La frase o el grupo fónico “No queda fruta los viernes.” contiene 4 tónicas
contenidas en las palabras: no, queda, fruta, viernes. Al estudiar el fichero de
información prosódica y analizar el valor de la frecuencia fundamental en el primer
y último fonema del grupo fónico así como en los distintos picos y valles que
aparecen, se obtiene que, de manera aproximada, los parámetros que modelan la
entonación de esta frase son:
133
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Tono en el 1er fonema 190 HzTono en el 1er pico 205 HzTono en el 1er valle 95 HzPendiente de picos 75Pendiente de valles 0Tono en el último valle 95 HzTono en el último pico 130 HzTono en el último fonema 110 Hz
TABLA 15: PARÁMETROS ENTONACIÓN "NO QUEDA FRUTA LOS VIERNES" (ESTADO NEUTRO)
A su vez, el tono medio de la frase tiene un valor en torno a los 167 Hz y la
velocidad de elución se estima en 150 silabas /min.
“El final del siglo veinte”
Al analizar la grabación correspondiente al estado neutro para esta frase se
observa como la actriz enfatiza las dos primeras palabras del grupo, dotándolas
de una mayor intensidad y tono que el resto. El valor de la curva disminuye a lo
largo de la frase. En la siguiente figura se puede apreciar lo comentado:
FIGURA 31: GRABACIÓN FRASE “EL FINAL DEL SIGLO VEINTE” CON ESTADO NEUTRO
Al igual que en el caso anterior, no se producen grandes variaciones en la
duración de los fonemas ni en el tono de los mismos. El análisis del fichero de
valores con la curva de entonación y las duraciones de los fonemas ha arrojado
los siguientes resultados:
134
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
ENTONACIÓN
La frase “El final del siglo veinte” tiene 3 tónicas contenidas en final, siglo,
veinte y queda caracterizada por los valores:
Tono en el 1er fonema 170 HzTono en el 1er pico 185 HzTono en el 1er valle 130 HzPendiente de picos 50Pendiente de valles 20Tono en el último valle 100 HzTono en el último pico 135 HzTono en el último fonema 107 Hz
TABLA 16: PARÁMETROS ENTONACIÓN "EL FINAL DEL SIGLO VEINTE" (ESTADO NEUTRO)
El tono medio de la frase queda establecido en torno a 150 Hz , siendo mayor
en el caso de las palabras “el” y “final” y algo menor en el resto de palabras que
forman el grupo. La velocidad de elocución de la actriz para la pronunciación de
esta frase es de 145 silabas /min.
“Tengo la llave en el bolsillo”
A continuación se muestra la grabación analizada para la frase “Tengo la llave
en el bolsillo”:
FIGURA 32: GRABACIÓN FRASE “TENGO LA LLAVE EN EL BOLSILLO” EN ESTADO NEUTRO
Como se puede observar en la figura, la actriz comienza la grabación con un
tono de habla muy elevado (curva de tono en azul en la figura) y éste va
135
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
disminuyendo poco a poco a lo largo de la frase hasta alcanzar unos valores más
comunes. La curva de tono no presenta grandes variaciones ni inestabilidad y sólo
cabe destacar, al igual que el resto de casos, que la actriz hace énfasis en la
primera palabra del grupo fónico “Tengo”. Los resultados obtenidos del análisis del
fichero *.par son los siguientes:
ENTONACIÓN
La frase “Tengo la llave en el bolsillo” tiene 3 tónicas contenidas en tengo,
llave, bolsillo y tras la medida del valor de frecuencia fundamental en los distintos
valles y picos, se obtiene que los parámetros que mejor caracterizan la entonación
en la frase son:
Tono en el 1er fonema 175 HzTono en el 1er pico 205 HzTono en el 1er valle 180 HzPendiente de picos 55Pendiente de valles 20Tono en el último valle 140 HzTono en el último pico 150 HzTono en el último fonema 105 Hz
TABLA 17: PARÁMETROS ENTONACIÓN "TENGO LA LLAVE EN EL BOLSILLO" (ESTADO NEUTRO)
El tono medio de la frase es de 170 Hz y la velocidad de elocución media se
puede estimar en torno a 190 silabas /min.
“Gozan de perfecta salud”
Esta frase es muy similar a la anterior. En ella la actriz hace un especial
hincapié en la primera sílaba tónica del grupo fónico y continua con la
pronunciación de la frase de forma que el tono va disminuyendo a lo largo de la
misma. En la siguiente figura se puede observar la curva de tono generada por el
programa Praat (en azul) para la grabación del habla.
136
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
FIGURA 33: GRABACIÓN FRASE “GOZAN DE PERFECTA SALUD.” CON EMOCIÓN NEUTRA
Al realizar el estudio del fichero que contiene información de la duración y la
entonación de la frase se observa que:
ENTONACIÓN
La frase “Gozan de perfecta salud.” contiene 3 tónicas que se dan en las
palabras: Gozan, perfecta, salud. Los parámetros obtenidos que modelan la
entonación de esta frase son:
Tono en el 1er fonema 160 HzTono en el 1er pico 190 HzTono en el 1er valle 180 HzPendiente de picos 70Pendiente de valles 110Tono en el último valle 125 HzTono en el último pico 120 HzTono en el último fonema 110 Hz
TABLA 18: PARÁMETROS ENTONACIÓN "GOZAN DE PERFECTA SALUD" (ESTADO NEUTRO)
El tono medio de la frase tiene un valor en torno a los 163 Hz y la velocidad de
elución se estima en 190 silabas /min.
“Vivirás una feliz experiencia”
Al analizar la grabación de esta frase se puede observar como la actriz parece
dar énfasis a la primera palabra de la frase, puesto que aumenta la intensidad y el
137
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
tono de la misma. A partir de ahí se puede ver como la pendiente de la curva de
tono es negativa, teniendo menor tono al finalizar la frase. En la figura se puede
observar la señal de voz grabada para esta frase y la curva de entonación de la
misma (en color azul) generada por el programa Praat utilizado para la
visualización de la misma.
FIGURA 34: GRABACIÓN FRASE “VIVIRÁS UNA FELIZ EXPERIENCIA” EN ESTADO NEUTRO
Al analizar los rasgos característicos de la entonación mediante el análisis del
archivo *.par se obtienen los siguientes resultados:
ENTONACIÓN
La frase comprende 4 tónicas contenidas en las palabras vivirás, una, feliz,
experiencia y los valores que mejor caracterizan la entonación de la frase son:
Tono en el 1er fonema 175 HzTono en el 1er pico 190 HzTono en el 1er valle 160 HzPendiente de picos 70Pendiente de valles 45Tono en el último valle 115 HzTono en el último pico 120 HzTono en el último fonema 117 Hz
TABLA 19: PARÁMETROS ENTONACIÓN "VIVIRÁS UNA FELIZ EXPERIENCIA" (ESTADO NEUTRO)
El tono medio de la frase tiene un valor de 158 Hz y la velocidad de elocución
de la misma puede establecerse en 170 silabas /min.
138
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
“Le gusta mucho el gregoriano”
La entonación de la frase comienza subiendo hasta la primera tónica, y a partir
de ahí, va disminuyendo de forma similar al resto de casos estudiados. Este
comportamiento se puede observar en la siguiente figura, en la que se muestra la
frase grabada por la actriz junto con la curva de tono generada por el programa
Praat.
FIGURA 35: GRABACIÓN FRASE “LE GUSTA MUCHO EL GREGORIANO” EN ESTADO NEUTRO
Analizando el fichero *.par generado a partir de la grabación se obtienen los
siguientes resultados:
ENTONACIÓN
La frase de estudio contiene 4 sílabas tónicas que se presentan en las
palabras gusta, mucho, gregoriano y los valores que mejor se ajustan al modelo
de la curva de entonación de la misma son:
Tono en el 1er fonema 180 HzTono en el 1er pico 195 HzTono en el 1er valle 170 Hz
139
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Pendiente de picos 75Pendiente de valles 20Tono en el último valle 150 HzTono en el último pico 120 HzTono en el último fonema 100 Hz
TABLA 20: PARÁMETROS ENTONACIÓN "LE GUSTA MUCHO EL GREGORIANO" (ESTADO NEUTRO)
El tono medio de la frase se ha estimado en torno a los 156 Hzy la velocidad de
elocución de la misma por parte de la actriz es de 153 silabas /min.
“Llegó la reina del puño cerrado”
En esta última frase se puede observar como la actriz ha dado énfasis tanto a
la primera como a la última sílaba tónica del grupo fónico. En la figura posterior se
puede ver como la intensidad de la primera y última palabra del grupo aumenta
con respecto al resto.
FIGURA 36: GRABACIÓN FRASE “LLEGÓ LA REINA DEL PUÑO CERRADO” EN ESTADO NEUTRO
Se puede apreciar también la diferencia de tono entre los valles y los picos de
la frase y que la pendiente de los valles de la misma va a ser positiva. Al igual que
para las anteriores frases, el resultado de analizar el fichero de información de la
prosodia es:
ENTONACIÓN
La entonación viene modelada por los siguientes parámetros:
Tono en el 1er fonema 184 Hz
140
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Tono en el 1er pico 190 HzTono en el 1er valle 165 HzPendiente de picos 60Pendiente de valles -20Tono en el último valle 175 HzTono en el último pico 130 HzTono en el último fonema 100 Hz
TABLA 21: PARÁMETROS ENTONACIÓN "LLEGÓ LA REINA DEL PUÑO CERRADO" (ESTADO NEUTRO)
El tono medio de la frase es de 164 Hz y la velocidad de elocución se establece
en 157 silabas /min.
Analizadas estas 6 grabaciones es fácil observar como la emoción alegría no queda
caracterizada por un patrón único, sino que para cada una de las frases la actriz se
sirve de distintos matices para transmitir la emoción.
Una vez que se tienen los modelos generados para la implementación de la
emoción o estado neutro, se ha realizado una media de los valores de aquellos
modelos que sean similares para poder obtener valores que aunque no sean los reales
si sean lo más ajustados posible al modelo a caracterizar. En la siguiente tabla se
muestran todos los valores de entonación obtenidos, y en ella se puede apreciar como
la última frase, “Llegó la reina del puño cerrado”, difiere del modelo común en el que
se contempla una pendiente de valles negativa. Por tanto los valores obtenidos para
esta frase no se tendrán en cuenta a la hora de realizar los cálculos.
Parámetros Frase 1 Frase 2 Frase 3 Frase 4 Frase 5 Frase 6 Frase 7Tono en el 1er fonema 190 Hz 170 Hz 175 Hz 160 Hz 175 Hz 180 Hz 184 HzTono en el 1er pico 205 Hz 185 Hz 205 Hz 190 Hz 190 Hz 195 Hz 190 HzTono en el 1er valle 95 Hz 130 Hz 180 Hz 180 Hz 160 Hz 170 Hz 165 HzPendiente de picos 75 50 55 70 70 75 60Pendiente de valles 0 20 20 110 45 20 -20Tono en el último valle 95 Hz 100 Hz 140 Hz 125 Hz 115 Hz 150 Hz 175 HzTono en el último pico 130 Hz 135 Hz 150 Hz 120 Hz 120 Hz 120 Hz 130 HzTono en el último fonema 110 Hz 107 Hz 105 Hz 110 Hz 117 Hz 100 Hz 100 Hz
TABLA 22: RESUMEN PARÁMETROS ENTONACIÓN ESTADO NEUTRO
El modelo final obtenido al realizar la media de las 6 primeras frases analizadas es:
Parámetros Frase 1 Frase 2 Frase 3 Frase 4 Frase 5 Frase 6 Media
141
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Tono en el 1er fonema 190 Hz 170 Hz 175 Hz 160 Hz 175 Hz 180 Hz 175 HzTono en el 1er pico 205 Hz 185 Hz 205 Hz 190 Hz 190 Hz 195 Hz 195 HzTono en el 1er valle 95 Hz 130 Hz 180 Hz 180 Hz 160 Hz 170 Hz 153 HzPendiente de picos 75 50 55 70 70 75 66Pendiente de valles 0 20 20 110 45 20 2613
Tono en el último valle 95 Hz 100 Hz 140 Hz 125 Hz 115 Hz 150 Hz 121 HzTono en el último pico 130 Hz 135 Hz 150 Hz 120 Hz 120 Hz 120 Hz 129 HzTono en el último fonema 110 Hz 107 Hz 105 Hz 110 Hz 117 Hz 100 Hz 108 Hz
TABLA 23: CARACTERIZACIÓN DE LA ENTONACIÓN DEL ESTADO NEUTRO
Al realizar la media de las velocidades de elocución utilizadas en los modelos y del
tono medio de los mismos se obtiene que:
vel_elocu = 165 ; tono_medio = 160
Tras realizar un conjunto de pruebas con este modelo, se han realizado una serie
de modificaciones. Así, se observa que las duraciones de los archivos sintetizados son
menores que las de las grabaciones que se han utilizado para la obtención del modelo,
por lo que se ha aumentado el valor del parámetro correspondiente en el fichero de
inicialización del estado neutro.
vel_elocu = 185
7.4 Modelado prosódico de la emoción alegría
La alegría surge cuando un objeto o acontecimiento se evalúa como deseable o
favorable para la obtención de determinadas metas u objetivos. Al analizar las frases
de estudio de la base de datos S.E.S. se han obtenido las siguientes características
generales del habla alegre:
El tono utilizado por la actriz es más alto que el utilizado en el estado neutro,
dando lugar a un incremento general del valor del tono medio. También se
produce una mayor variación entre los valores de frecuencia, aumentando el
margen de oscilación.
La velocidad del habla aumenta de forma considerable respecto al estado
neutro. Se disminuyen el número y la duración de las pausas. También se
aumenta el volumen o la intensidad de la voz.
13 En el cálculo del valor medio de la pendiente de valles caracterizada en el modelo, no se han tenido en cuenta los valores obtenidos de la frase 1 ni de la frase 4 ya que difieren enormemente del resto.
142
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
7.4.1 CARACTERIZACIÓN DE LA EMOCIÓN ALEGRÍA
En el análisis de las grabaciones disponibles para la emoción alegría se observa
como la curva de tono no se ajusta a un único modelo, sino que varía dependiendo de
dónde la actriz decida poner el foco del grupo fónico o de la frase. Es decir, una misma
frase puede ser expresada de distinta forma dependiendo del modelo de entonación
utilizado. Las frases correspondientes a la base de datos S.E.S. que se han utilizado
en el estudio de la emoción alegría son:
No queda fruta los viernes.
El final del siglo veinte.
Tengo la llave en el bolsillo.
Vivirás una feliz experiencia.
Le gusta mucho el gregoriano.
Llegó la reina del puño cerrado.
Sobre cada una de estas frases se ha realizado un estudio similar al realizado en la
caracterización del estado neutro con el objetivo de obtener las características
prosódicas que definen la emoción alegría en cada caso. De igual modo que en el
caso anterior, se obtendrán los valores de los parámetros que forman un posible
fichero de inicialización y una vez obtenidos todos los parámetros para las seis frases
de ejemplo se calcula la media de aquellos modelos de entonación que sean similares
entre sí, para poder obtener un modelo de entonación que se ajuste lo más fielmente
posible a todas las frases, con el fin de obtener los mejores resultados globales.
“No queda fruta los viernes”
Con el análisis de la frase se pretende conseguir una serie de parámetros que
hagan que la frase generada por el sintetizador se ajuste lo máximo posible a la
grabación obtenida de la actriz y que se muestra en la figura siguiente.
143
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
FIGURA 37: GRABACIÓN FRASE “NO QUEDA FRUTA LOS VIERNES” EN EMOCIÓN ALEGRÍA
En este caso al escuchar la grabación se observa como la actriz resalta
principalmente tres palabras “no”, “fruta” y “viernes”. También se puede ver cómo
comienza con un tono bastante elevado y su valor medio va disminuyendo a lo
largo de la sentencia, y cómo se produce mayor variación de la frecuencia en los
distintos tramos de la señal.
A la hora de escoger algún rasgo importante de la grabación que aporte alegría
al habla, se ha tomado el aumento de la frecuencia media en la frase y el aumento
del tono en el final de misma. Este aspecto puede observarse en la curva de tono
obtenida por Praat (color azul) de la figura anterior. En ella se ve la tendencia
positiva de la curva en los fonemas finales de la frase pertenecientes a la palabra
“viernes”.
Si estudiamos el archivo de información de frecuencia y duración obtenido
mediante el programa GeneraParPcm.exe se pueden obtener los siguientes
parámetros que modelan la entonación de la grabación:
ENTONACIÓN
En el grupo fónico “No queda fruta los viernes.” aparecen 4 tónicas contenidas
en las palabras no, queda, fruta, viernes. Al analizar el archivo de información
*.par se han obtenido el valor de la frecuencia fundamental en el primer y último
fonema del grupo fónico así como en los distintos picos y valles que aparecen,
modelando la entonación de este grupo mediante los valores:
144
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Tono en el 1er fonema 300 HzTono en el 1er pico 245 HzTono en el 1er valle 160 HzPendiente de picos 80Pendiente de valles 0Tono en el último valle 160 HzTono en el último pico 165 HzTono en el último fonema 140 Hz
TABLA 24: PARÁMETROS ENTONACIÓN "NO QUEDA FRUTA LOS VIERNES" (EMOCIÓN ALEGRÍA)
El tono medio de la frase queda establecido en 205 Hz, demostrando ser
superior al tono medio en el estado neutro. La velocidad de elocución estimada es
de 190 silabas /min.
“El final del siglo veinte”
Al escuchar la grabación se aprecia como la actriz resalta las sílabas tónicas de
la sentencia aumentando el tono de las mismas de forma notable y alargando la
duración de las mismas. Este rasgo se puede apreciar de una forma clara en la
palabra “final”. En la figura se muestra la grabación analizada con el programa
Praat, y en la misma se puede apreciar el aumento del tono e intensidad de la voz
en las sílabas tónicas.
FIGURA 38: GRABACIÓN FRASE “EL FINAL DEL SIGLO VEINTE” CON LA EMOCIÓN ALEGRÍA
Los parámetros que modelan la entonación de la frase se muestran a
continuación.
145
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
ENTONACIÓN
En el grupo fónico “El final del siglo veinte.” aparecen 3 tónicas contenidas en
las palabras final, siglo, veinte. Al analizar el archivo de información *.par se han
obtenido el valor de la frecuencia fundamental en el primer y último fonema del
grupo fónico así como en los distintos picos y valles que aparecen, modelando la
entonación de este grupo mediante los valores:
Tono en el 1er fonema 272 HzTono en el 1er pico 232 HzTono en el 1er valle 220 HzPendiente de picos 70Pendiente de valles 60Tono en el último valle 160 HzTono en el último pico 162 HzTono en el último fonema 169 Hz
TABLA 25: PARÁMETROS ENTONACIÓN "EL FINAL DEL SIGLO VEINTE" (EMOCIÓN ALEGRÍA)
El valor del tono medio de la grabación con habla expresando alegría es de
195 Hz y la velocidad de elocución de la misma se establece en un valor de
179 silabas /min.
“Tengo la llave en el bolsillo”
Si observamos la curva de tono que se muestra en la figura 39, se puede ver
como existen dos zonas diferenciadas en la grabación: la primera de ellas tiene un
tono muy alto, alrededor a 250 Hz, mientras que la segunda de ellas tiene un tono
muy similar al del estado neutro, rondando los 165 Hz. En este caso, la actriz
mantiene un tono más o menos estable hasta la última palabra del grupo en la
cual disminuye el tono de forma continua.
146
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
FIGURA 39: GRABACIÓN FRASE “TENGO LA LLAVE EN EL BOLSILLO” CON EMOCIÓN ALEGRÍA
No hay ningún aspecto destacable a la hora de dotar de emoción a la
grabación salvo el aumento de tono, aunque hay que mencionar que parece
producirse un alargamiento en la primera y última sílaba tónica del grupo, es decir,
en las sílabas “ten” y “si”. Los parámetros que caracterizan la entonación de la frase se muestran a
continuación y son obtenidos mediante el análisis del fichero generado por el
programa GeneraParPcm.exe:
ENTONACIÓN
En la frase “Tengo la llave en el bolsillo.” aparecen 3 tónicas contenidas en las
palabras tengo, llave, bolsillo. Teniendo esto en cuenta y después de estudiar el
fichero asociado con la información de la frecuencia a lo largo de la frase, se han
determinado los siguientes valores para el modelo de la entonación:
Tono en el 1er fonema 290 HzTono en el 1er pico 282 HzTono en el 1er valle 250 HzPendiente de picos 102Pendiente de valles 156Tono en el último valle 172 HzTono en el último pico 180 HzTono en el último fonema 145 Hz
TABLA 26: PARÁMETROS ENTONACIÓN "TENGO LA LLAVE EN EL BOLSILLO" (EMOCIÓN ALEGRÍA)
147
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
En la tabla se puede ver la gran variación comentada anteriormente entre el
valor de frecuencia en el primer pico del grupo y en el último pico del mismo.
El tono medio de la frase queda establecido en 230 Hz y la velocidad de
elocución es de 205 silabas /min.
“Vivirás una feliz experiencia”
En esta frase, la actriz enfatiza de forma notable la palabra “feliz”, otorgando al
grupo de un toque alegre. Esto se puede apreciar en la siguiente figura, donde
también se puede ver cómo la primera tónica tiene una intensidad mayor al resto
de los fonemas.
FIGURA 40: GRABACIÓN FRASE “VIVIRÁS UNA FELIZ EXPERIENCIA” CON EMOCIÓN ALEGRÍA
Al igual que ocurría en el caso anterior, el tono utilizado por la actriz disminuye
en la última palabra de la frase. En este caso, también se aprecia un alargamiento
en el último fonema del grupo, así como en las tónicas del mismo.
Al analizar de forma concreta la frecuencia en cada instante de la frase, se han
obtenido los siguientes resultados:
ENTONACIÓN
En la frase “Vivirás una feliz experiencia.” aparecen 4 tónicas contenidas en las
palabras vivirás, una, feliz, experiencia. Teniendo esto en cuenta y después de
estudiar el fichero asociado con la información de la frecuencia a lo largo de la
frase, se han determinado los siguientes valores para el modelo de la entonación:
148
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Tono en el 1er fonema 267 HzTono en el 1er pico 200 HzTono en el 1er valle 240 HzPendiente de picos 66Pendiente de valles 142Tono en el último valle 145 HzTono en el último pico 156 HzTono en el último fonema 134 Hz
TABLA 27: PARÁMETROS ENTONACIÓN "VIVIRÁS UNA FELIZ EXPERIENCIA" (EMOCIÓN ALEGRÍA)
El tono medio del grupo fónico obtenido tiene un valor de 210 Hzy la velocidad
de elocución es de 175 silabas /min.
“Le gusta mucho el gregoriano”
En la grabación mostrada se puede ver como la actriz enfatiza las tónicas del
grupo fónico, dando lugar a una gran variabilidad en el tono del habla. También se
puede apreciar como el tono inicial de la frase es más elevado que en el resto de
casos anteriores, rozando casi los 400 Hz.
FIGURA 41: GRABACIÓN FRASE “LE GUSTA MUCHO EL GREGORIANO” EN EMOCIÓN ALEGRÍA
El aspecto fundamental que dota a la grabación de alegría parece ser el énfasis
de las sílabas tónicas y la variabilidad de la frecuencia. También se puede
apreciar como el último fonema es alargado hasta que la señal desaparece de una
forma continua.
149
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Después de analizar el fichero *.par, se ha obtenido el siguiente modelo de
entonación que caracteriza a la frase.
ENTONACIÓN
Teniendo en cuenta que en la frase “Le gusta mucho el gregoriano.” contiene 3
tónicas en las palabras gusta, mucho, gregoriano, se han determinado los
siguientes valores para el modelo de la entonación:
Tono en el 1er fonema 280 HzTono en el 1er pico 245 HzTono en el 1er valle 200 HzPendiente de picos 10Pendiente de valles 60Tono en el último valle 170 HzTono en el último pico 235 HzTono en el último fonema 230 Hz
TABLA 28: PARÁMETROS ENTONACIÓN "LE GUSTA MUCHO EL GREGORIANO" (EMOCIÓN ALEGRÍA)
El tono medio del grupo fónico se ha determinado en un valor de 230 Hz y la
velocidad de elocución del mismo es de 200 silabas /min.
“Llegó la reina del puño cerrado”
En esta frase la actriz enfatiza la última tónica frente al resto. En la figura se
puede observar cómo comienza la frase con un tono muy elevado, próximo a 400
Hz, y va bajándolo a medida que recita la frase.
150
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
FIGURA 42: GRABACIÓN “LLEGÓ LA REINA DEL PUÑO CERRADO.” CON EMOCIÓN ALEGRÍA
Después de analizar el fichero *.par, se ha obtenido el siguiente modelo de
entonación que caracteriza a la frase.
ENTONACIÓN
Teniendo en cuenta que en la frase “Llegó la reina del puño cerrado.” contiene
4 tónicas en las palabras llegó, reina, puño, cerrado, se han determinado los
siguientes valores para el modelo de la entonación:
Tono en el 1er fonema 290 HzTono en el 1er pico 265 HzTono en el 1er valle 245 HzPendiente de picos 95Pendiente de valles 127Tono en el último valle 160 HzTono en el último pico 170 HzTono en el último fonema 157 Hz
TABLA 29: PARÁMETROS ENTONACIÓN "LLEGÓ LA REINA DEL PUÑO CERRADO" (EMOCIÓN ALEGRÍA)
El tono medio de la frase es de 210 Hz y la velocidad de elocución es de
195 silabas /min.
151
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Una vez obtenidos los 6 modelos que caracterizan las 6 grabaciones estudiadas, se
obtiene la media aritmética de aquellos modelos que sean similares para obtener
valores que se ajusten estrechamente a todos los modelos de forma general.
Parámetros Frase 1 Frase 2 Frase 3 Frase 4 Frase 5 Frase 6Tono en el 1er fonema 300 Hz 272 Hz 290 Hz 267 Hz 280 Hz 290 HzTono en el 1er pico 245 Hz 232 Hz 282 Hz 200 Hz 245 Hz 265 HzTono en el 1er valle 160 Hz 220 Hz 250 Hz 240 Hz 200 Hz 245 HzPendiente de picos 80 70 102 66 10 95Pendiente de valles 0 60 156 142 60 127Tono en el último valle 160 Hz 160 Hz 172 Hz 145 Hz 170 Hz 160 HzTono en el último pico 165 Hz 162 Hz 180 Hz 156 Hz 235 Hz 170 HzTono en el último fonema 140 Hz 169 Hz 145 Hz 134 Hz 230 Hz 157 Hz
TABLA 30: RESUMEN PARÁMETROS ENTONACIÓN ALEGRÍA
Como se puede observar en la tabla resumen de los modelos conseguidos, el
modelo asociado a la frase “Tengo la llave en el bolsillo.” es el que tiene los valores
más elevados de tono y también la mayor diferencia entre la frecuencia al inicio y al
final de la frase. Eliminaremos este modelo a la hora de calcular los valores medios.
El modelo generado para la caracterización de la entonación en la emoción alegría
contiene los valores:
Parámetros Frase 1 Frase 2 Frase 4 Frase 5 Frase 6 MediaTono en el 1er fonema 300 Hz 272 Hz 267 Hz 280 Hz 290 Hz 282 HzTono en el 1er pico 245 Hz 232 Hz 200 Hz 245 Hz 265 Hz 237 HzTono en el 1er valle 160 Hz 220 Hz 240 Hz 200 Hz 245 Hz 213 HzPendiente de picos 80 70 66 10 95 78Pendiente de valles 0 60 142 60 127 60Tono en el último valle 160 Hz 160 Hz 145 Hz 170 Hz 160 Hz 159 HzTono en el último pico 165 Hz 162 Hz 156 Hz 235 Hz 170 Hz 178 HzTono en el último fonema
140 Hz 169 Hz 134 Hz 230 Hz 157 Hz 166 Hz
TABLA 31: CARACTERIZACIÓN DE LA ENTONACIÓN DE LA EMOCIÓN ALEGRÍA
Como se ha observado al estudiar las grabaciones, la velocidad de habla cuando se
expresa emoción alegría es, en general, más alta que cuando se tiene un estado
neutro. Por ese motivo el coeficiente relativo a velocidad “vel_elocu” toma el valor:
vel_elocu = 191
El tono medio aumenta en general y se ha establecido que:
tono_medio = 210
152
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Tras realizar un conjunto de pruebas con este modelo, se han realizado una serie
de modificaciones. Así, se observa que el tono de los fonemas es demasiado elevado,
de forma que se produce una distorsión que afecta a la inteligibilidad del habla
sintetizada. Se ha bajado el tono del 1er fonema a 250 Hz, y se ha bajado el tono del
1er pico y el 1er valle en 20 Hz, disminuyendo en consecuencia, la pendiente de picos y
de valles de la curva. Se han mantenido los valores en la parte final del modelo.
Finalmente, los valores de los parámetros han quedado fijados en:
Tono en el 1er fonema 250 HzTono en el 1er pico 217 HzTono en el 1er valle 203 HzPendiente de picos 60Pendiente de valles 40Tono en el último valle 160 HzTono en el último pico 170 HzTono en el último fonema 157 Hz
TABLA 32: VALORES FINALES DE PARÁMETROS DE ENTONACIÓN CON ALEGRÍA
En cuanto a las duraciones, se ha observado que la velocidad del habla de las
grabaciones es mayor a la de los archivos sintetizados por lo que se ha aumentado el
valor de la velocidad hasta:
vel_elocu = 195
Por otro lado, se ha observado en las grabaciones que en algunos casos la actriz al
expresar alegría hace un alargamiento de las sílabas tónicas y del fonema final. Tras
realizar una serie de pruebas se fijan los siguientes coeficientes:
sil_final_no_oxi = 1,1
sil_acentuada = 1,15
7.5 Modelado prosódico de la emoción tristeza
La tristeza es un sentimiento negativo en el que el individuo muestra baja actividad
y una desmotivación generalizada, que aparece como consecuencia de algún cambio
en el entorno valorado como negativo. Al analizar las frases de estudio de la base de
datos S.E.S. para la emoción tristeza se han obtenido las siguientes características
generales del habla:
Se emplea un tono menor que con el habla en estado neutro. Además, este
se mantiene casi constante a lo largo de las frases analizadas.
El volumen de habla empleado es inferior al que presenta en el estado
neutro, y éste va disminuyendo de forma continua a lo largo de la frase.
153
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
La velocidad del habla es lenta, existiendo una diferencia notable respecto a
la utilizada en el estado neutro. Se puede observar como hay un aumento en
el número de pausas y en la duración de las mismas.
Se ha observado como en ocasiones se han introducido una especie de
suspiros en la voz y en algunos casos, el habla se presenta de un modo
tembloroso.
7.5.1 CARACTERIZACIÓN DE LA EMOCIÓN TRISTEZA
En el análisis de las grabaciones disponibles para la emoción tristeza se observa
como la curva de tono no se ajusta a un único modelo, sino que varía dependiendo de
dónde la actriz decida poner el foco del grupo fónico o de la frase. También se ha
comprobado como en algunas de las frases, la actriz realiza una pausa a mitad de la
grabación para enfatizar más la tristeza. El sintetizador toma estas pausas como el
límite de un grupo fónico de forma que una única frase da lugar a dos grupos fónicos y
en consecuencia a dos modelos de entonación diferentes. Por esta razón sólo se han
analizado aquellas grabaciones con habla continua a lo largo de las sentencias. Las
frases correspondientes a la base de datos S.E.S. que se han utilizado en el estudio
de la emoción alegría son:
No queda fruta los viernes.
La puerta tiene cerrojo.
Gozan de perfecta salud.
Vivirás una feliz experiencia.
Le gusta mucho el gregoriano.
Sobre cada una de estas frases se ha realizado un estudio similar al realizado en la
caracterización del resto de emociones con el fin de obtener las características
prosódicas que definen la tristeza en cada caso. De igual modo que en el caso
anterior, se obtendrán los valores de los parámetros que forman un posible fichero de
inicialización y una vez obtenidos todos los parámetros para las cinco frases de
ejemplo se calcula la media de aquellos modelos de entonación que sean similares
entre sí, para poder obtener un modelo de entonación que se ajuste lo más fielmente
posible a todas las frases, y así obtener los mejores resultados globales.
“No queda fruta los viernes”
Los valores de prosodia obtenidos del estudio realizado, permitirán que el
resultado de la síntesis de la frase “No queda fruta los viernes” sea lo más similar
posible a la grabación de la actriz que se muestra en la siguiente figura.
154
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
FIGURA 43: GRABACIÓN FRASE “NO QUEDA FRUTA LOS VIERNES.” CON EMOCIÓN TRISTEZA
Al escuchar la grabación se observa como la actriz utiliza un tono de voz
sensiblemente inferior al utilizado en el estado neutro. Así, el tono utilizado a lo
largo de la frase no supera en ningún momento los 200 Hz y se mantiene en torno
a valores de 100 Hz. Los fonemas están muy ensordecidos dificultando la
medición de la frecuencia media en la frase. Se puede observar como la curva de
entonación generada por Praat, en azul en la figura, es discontinua en aquellos
puntos en los que el ensordecimiento de los fonemas hace que resulte imposible
hallar la periodicidad de la señal.
En este caso, se puede ver como la actriz resalta las tónicas de la frase, sobre
todo “que” y “vier”, así como la palabra inicial “no”, comenzando con un tono
medio y disminuyendo el valor del mismo a lo largo de cada palabra.
Si se realiza un estudio del fichero *.par con información de la duración y la
entonación de la frase se observa que:
ENTONACIÓN
La frase o el grupo fónico “No queda fruta los viernes.” contiene 4 tónicas
contenidas en las palabras: no, queda, fruta, viernes. Al estudiar el fichero de
información prosódica y analizar el valor de la frecuencia fundamental en el primer
y último fonema del grupo fónico así como en los distintos picos y valles que
aparecen, se obtiene que, de manera aproximada, los parámetros que modelan la
entonación de esta frase son:
155
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Tono en el 1er fonema 168 HzTono en el 1er pico 140 HzTono en el 1er valle 130 HzPendiente de picos 10Pendiente de valles 0Tono en el último valle 130 HzTono en el último pico 130 HzTono en el último fonema 115 Hz
TABLA 33: PARÁMETROS ENTONACIÓN "NO QUEDA FRUTA LOS VIERNES" (EMOCIÓN TRISTEZA)
A su vez, el tono medio de la frase tiene un valor en torno a los 136 Hz y la
velocidad de elución se estima en 140 silabas /min, valores inferiores a los
utilizados en el estado neutro.
“La puerta tiene cerrojo”
En este caso la actriz enfatiza la primera palabra de la frase, y ensordece el
resto de palabras de forma que la curva de entonación es casi inexistente, curva
en azul en la grabación de la figura. Se puede apreciar cómo después de la
primera palabra, la actriz baja el tono y la intensidad de la voz a la mitad.
FIGURA 44: GRABACIÓN FRASE “LA PUERTA TIENE CERROJO.” CON TRISTEZA
Al realizar el estudio del fichero que contiene información de la duración y la
entonación de la frase se observa que:
156
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
ENTONACIÓN
La frase “La puerta tiene cerrojo.” contiene 3 tónicas que se dan en las
palabras: puerta, tiene, cerrojo. Los parámetros obtenidos que modelan la
entonación de esta frase son:
Tono en el 1º fonema 170 HzTono en el 1º pico 120 HzTono en el 1º valle 115 HzPendiente de picos 15Pendiente de valles 15Tono en el último valle 105 HzTono en el último pico 110 HzTono en el último fonema 100 Hz
TABLA 34: PARÁMETROS ENTONACIÓN "LA PUERTA TIENE CERROJO" (EMOCIÓN TRISTEZA)
El tono medio de la frase tiene un valor en torno a los 140 Hz y la velocidad de
elocución se estima en 120 silabas /min.
“Gozan de perfecta salud”
En la figura 45 se observa como la última palabra de la frase está totalmente
ensordecida, sin posibilidad de encontrar la periodicidad del habla en ese tramo
de señal. Al escuchar la grabación, parece como si la actriz esté simulando un
susurro en la parte final de la misma.
FIGURA 45: GRABACIÓN FRASE “GOZAN DE PERFECTA SALUD.” CON EMOCIÓN TRISTEZA
157
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
El aspecto fundamental a destacar de la emoción tristeza en este caso es ese
ensordecimiento mencionado tanto en este caso como en los previamente
analizados. También se ha observado que la actriz alarga la duración de la última
palabra del grupo fónico hasta que, finalmente, la voz se pierde.
Al realizar el estudio del fichero que contiene información de la duración y la
entonación de la frase se observa que:
ENTONACIÓN
La frase “Gozan de perfecta salud.” contiene 3 tónicas que se dan en las
palabras: Gozan, perfecta, salud. Los parámetros obtenidos que modelan la
entonación de la tristeza en esta frase son:
Tono en el 1er fonema 110 HzTono en el 1er pico 130 HzTono en el 1er valle 114 HzPendiente de picos 5Pendiente de valles 4Tono en el último valle 110 HzTono en el último pico 125 HzTono en el último fonema 105 Hz
TABLA 35: PARÁMETROS ENTONACIÓN "GOZAN DE PERFECTA SALUD" (EMOCIÓN TRISTEZA)
Según los datos obtenidos se puede ver como el tono utilizado se mantiene
prácticamente constante a lo largo de la grabación, habiendo muy poca variación
en la frecuencia de los picos y los valles a lo largo de la misma y no existiendo
una diferencia de tono destacable entre ambos.
El tono medio de la frase tiene un valor en torno a los 143 Hz y la velocidad de
elución se estima en 140 silabas /min.
“Vivirás una feliz experiencia”
Al analizar la grabación de esta frase se puede observar como la actriz da
énfasis a la palabra “feliz” aumentando el tono y alargando la parte final de la
misma. También se puede ver como hay partes en las que el habla se ensordece
pero sin llegar a perder la inteligibilidad de la frase. En la figura se puede observar
la señal de voz grabada para esta frase y la curva de entonación de la misma
generada por el programa Praat utilizado para la visualización de la misma.
158
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
FIGURA 46: GRABACIÓN FRASE “VIVIRÁS UNA FELIZ EXPERIENCIA” CON TRISTEZA
Se puede ver como en la parte final del grupo se produce un aumento en el
tono de la voz, concretamente en la última tónica. También parece que se produce
un alargamiento del último fonema.
Al analizar los rasgos característicos de la entonación mediante el análisis del
archivo *.par se obtienen los siguientes resultados:
ENTONACIÓN
La frase comprende 4 tónicas contenidas en las palabras vivirás, una, feliz,
experiencia y los valores que mejor caracterizan la entonación de la frase son:
Tono en el 1er fonema 135 HzTono en el 1er pico 110 HzTono en el 1er valle 105 HzPendiente de picos -20Pendiente de valles 7Tono en el último valle 100 HzTono en el último pico 130 HzTono en el último fonema 110 Hz
TABLA 36: PARÁMETROS ENTONACIÓN "V IVIRÁS UNA FELIZ EXPERIENCIA" (EMOCIÓN TRISTEZA)
En la tabla se puede ver como el tono del último pico de la frase es mayor que
el primer pico de la misma, de forma que si se modela la pendiente de picos como
una recta entre ambos valores, la pendiente obtenida es positiva.
159
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
El tono medio de la frase tiene un valor de 115 Hz y la velocidad de elocución
de la misma puede establecerse en 120 silabas /min.
“Le gusta mucho el gregoriano”
Al escuchar la grabación se observa como en las tres primeras palabras, hasta
la palabra “el” la actriz produce un temblor en la voz que otorga al habla, de una
forma clara, la sensación de tristeza. También se produce un alargamiento en las
tónicas del principio, “gus” y “mu”. Este comportamiento se puede observar en la
siguiente figura, en la que se muestra la frase grabada por la actriz junto con la
curva de tono generada por el programa Praat.
FIGURA 47: GRABACIÓN FRASE “LE GUSTA MUCHO EL GREGORIANO” CON TRISTEZA
En la figura se puede observar como el tono utilizado por la actriz es mayor en
la primera palabra de la frase y la diferencia entre la frecuencia en los picos y en
los valles es mayor que en el resto de casos estudiados.
Analizando el fichero *.par generado a partir de la grabación se obtienen los
siguientes resultados:
ENTONACIÓN
La frase de estudio contiene 4 sílabas tónicas que se presentan en las
palabras gusta, mucho, gregoriano y los valores que mejor se ajustan al modelo
de la curva de entonación de la misma son:
160
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Tono en el 1er fonema 110 HzTono en el 1er pico 175 HzTono en el 1er valle 126 HzPendiente de picos 55Pendiente de valles 22Tono en el último valle 115 HzTono en el último pico 120 HzTono en el último fonema 110 Hz
TABLA 37: PARÁMETROS ENTONACIÓN "LE GUSTA MUCHO EL GREGORIANO" (EMOCIÓN TRISTEZA)
El tono medio de la frase se ha estimado en torno a los 135 Hzy la velocidad de
elocución de la misma por parte de la actriz es de 145 silabas /min.
Una vez obtenidos los 5 modelos que caracterizan las 5 grabaciones estudiadas, se
obtiene la media aritmética de aquellos modelos que sean similares para obtener
valores que se ajusten estrechamente a todos los modelos de forma general.
Parámetros Frase 1 Frase 2 Frase 3 Frase 4 Frase 5Tono en el 1er fonema 168 Hz 170 Hz 110 Hz 135 Hz 110 HzTono en el 1er pico 140 Hz 120 Hz 130 Hz 110 Hz 175 HzTono en el 1er valle 130 Hz 115 Hz 114 Hz 105 Hz 126 HzPendiente de picos 10 15 5 -20 55Pendiente de valles 0 15 4 7 22Tono en el último valle 130 Hz 105 Hz 110 Hz 100 Hz 115 HzTono en el último pico 130 Hz 110 Hz 125 Hz 130 Hz 120 HzTono en el último fonema 115 Hz 100 Hz 105 Hz 110 Hz 110 Hz
TABLA 38: RESUMEN PARÁMETROS ENTONACIÓN EMOCIÓN TRISTEZA
Como se puede observar en la tabla resumen de los modelos conseguidos, el
modelo asociado a la frase “Vivirás una feliz experiencia.” es el que tiene una
pendiente de picos positiva pareciendo mostrar cierto grado de sorpresa al finalizar la
grabación. Eliminaremos este modelo a la hora de calcular los valores medios.
161
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
El modelo generado para la caracterización de la entonación en la emoción tristeza
contiene los valores:
Parámetros Frase 1 Frase 2 Frase 3 Frase 5 MediaTono en el 1er fonema 168 Hz 170 Hz 110 Hz 110 Hz 140 HzTono en el 1er pico 140 Hz 120 Hz 130 Hz 175 Hz 141 HzTono en el 1er valle 130 Hz 115 Hz 114 Hz 126 Hz 121 HzPendiente de picos 10 15 5 55 20Pendiente de valles 0 15 4 22 10Tono en el último valle 130 Hz 105 Hz 110 Hz 115 Hz 115 HzTono en el último pico 130 Hz 110 Hz 125 Hz 120 Hz 121 HzTono en el último fonema 115 Hz 100 Hz 105 Hz 110 Hz 108 Hz
TABLA 39: CARACTERIZACIÓN DE LA ENTONACIÓN DE LA EMOCIÓN TRISTEZA
Como se ha observado al estudiar las grabaciones, la velocidad de habla cuando se
expresa emoción tristeza es, en general, mucho más baja que en el estado neutro. Por
ese motivo el coeficiente relativo a velocidad “vel_elocu” toma el valor:
vel_elocu = 135
El tono medio también disminuye de forma general y se ha establecido que su valor
sea:
tono_medio = 130
Tras realizar un conjunto de pruebas con este modelo, se han realizado una serie
de modificaciones. Se ha observado que la velocidad del habla de las grabaciones es
mucho mayor a la de los archivos sintetizados por lo que se ha aumentado el valor del
parámetro del fichero de inicialización hasta:
vel_elocu = 170
Por otro lado, se ha observado en las grabaciones que en algunos casos la actriz al
expresar tristeza hace un alargamiento del fonema final del grupo fónico. Tras realizar
una serie de pruebas se fijan los siguientes coeficientes:
sil_acentuada = 1,15
7.6 Modelado prosódico de la emoción sorpresa
La sorpresa es reacción causada por un estímulo imprevisto y novedoso. Es una
emoción muy breve y con valencia neutra que desemboca o da paso a otro estado
emocional. Puede derivar tanto en una emoción positiva como en una negativa. En el
caso de las grabaciones disponibles en la base de datos S.E.S., la actriz simula una
sorpresa asociada a un suceso imprevisto positivo, de forma que la emoción sorpresa
162
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
implementada en el sintetizador, como ya se ha comentado, será una sorpresa
positiva.
La sorpresa se caracteriza por ser una emoción prosódica, de forma que su
caracterización radica en el modelado de las duraciones de los fonemas y de la
entonación empleada. Al analizar las frases de estudio de la base de datos S.E.S. se
han obtenido las siguientes características generales del habla expresando sorpresa
positiva:
El tono utilizado por la actriz aumenta a lo largo del grupo fónico, es decir, es
más alto que el utilizado en el principio de la frase. El tono medio también
aumenta con respecto al estado neutro, siendo este incluso superior al utilizado
en la emoción alegría.
Las palabras finales son alargadas para dar énfasis a las mismas, así como las
tónicas del grupo. La velocidad del habla en general, es algo mayor que en el
estado neutro. Se aumenta el volumen o la intensidad de la voz en la parte
final.
7.6.1 CARACTERIZACIÓN DE LA EMOCIÓN SORPRESA
Además de los aspectos generales detectados, se hace necesario un estudio más
exhaustivo de las distintas grabaciones de las que se dispone para llegar a
conclusiones válidas a un nivel general. En el análisis de las grabaciones disponibles
para la emoción sorpresa se observa como la curva de tono no de algunas
grabaciones no se ajusta a la característica detectada de la pendiente positiva por lo
que sólo se han utilizado aquellas grabaciones que sigan el modelo de pendiente de
tono positiva. Las frases correspondientes a la base de datos S.E.S. que se han
utilizado en el estudio de la emoción sorpresa son:
No queda fruta los viernes.
El final del siglo veinte.
Vivirás una feliz experiencia.
Le gusta mucho el gregoriano.
Llegó la reina del puño cerrado.
Sobre cada una de estas frases se ha realizado un estudio similar al realizado en la
caracterización del resto de emociones con el objetivo de obtener las características
prosódicas que definen la sorpresa en cada caso. En primer lugar se obtendrán los
valores de los parámetros que forman un posible fichero de inicialización de cada una
de las grabaciones, y una vez obtenidos todos los parámetros para las seis frases de
ejemplo se calcula la media de aquellos modelos de entonación que sean similares
163
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
entre sí, para poder obtener un modelo de entonación que se ajuste lo más fielmente
posible a todas las grabaciones para así obtener los mejores resultados globales.
“No queda fruta los viernes”
Los valores de prosodia obtenidos del estudio realizado, permitirán que el
resultado de la síntesis de la frase “No queda fruta los viernes” sea lo más similar
posible a la grabación de la actriz que se muestra en la siguiente figura.
FIGURA 48: GRABACIÓN FRASE “NO QUEDA FRUTA LOS VIERNES.” CON EMOCIÓN SORPRESA
Como se puede observar en la figura el tono utilizado por la actriz en la
grabación es muy superior al utilizado en la emoción alegría, siendo los valores
mínimos de frecuencia superiores a 150 Hz. La curva de entonación generada por
el programa de visualización Praat, muestra como se da una pendiente positiva de
forma que en el inicio de la grabación se tiene un tono cercano a los 210 Hz y éste
va aumentando a lo largo de la frase hasta llegar a un tono en torno a 375 Hz en
la última tónica de la misma. También puede verse la gran diferencia de
frecuencia existente entre los valles y los picos que forman el grupo.
La emoción sorpresa viene dada fundamentalmente en la última palabra, en la
que se realiza un énfasis especial. Este énfasis viene dado en parte por un
aumento del pitch en el pico, “vier”, de forma que sea superior al resto, y por un
aumento en el nivel de intensidad del mismo. El tono y la intensidad disminuyen
de valor en la sílaba final del grupo, “nes”, a valores de emoción neutra.
164
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Si se realiza un estudio del fichero *.par con información de la duración y la
entonación de la frase se observa que:
ENTONACIÓN
La frase o el grupo fónico “No queda fruta los viernes.” contiene 4 tónicas
contenidas en las palabras: no, queda, fruta, viernes. Al estudiar el fichero de
información prosódica y analizar el valor de la frecuencia fundamental en el primer
y último fonema del grupo fónico así como en los distintos picos y valles que
aparecen, se obtiene que, de manera aproximada, los parámetros que modelan la
entonación de esta frase son:
Tono en el 1er fonema 219 HzTono en el 1er pico 264 HzTono en el 1er valle 285 HzPendiente de picos -76Pendiente de valles 0Tono en el último valle 285 HzTono en el último pico 340 HzTono en el último fonema 185 Hz
TABLA 40: PARÁMETROS ENTONACIÓN "NO QUEDA FRUTA LOS VIERNES" (EMOCIÓN SORPRESA)
El tono medio de la frase tiene un valor en torno a los 300 Hz y la velocidad de
elocución se estima en 170 silabas /min, valores superiores a los utilizados en el
estado neutro.
“El final del siglo veinte”
Al igual que en el caso anterior, esta grabación cumple el modelo de tono
ascendente a lo largo de la sentencia denotando la emoción sorpresa. También es
posible ver el amplio rango de diferencia entre los valores de frecuencia en los
picos y en los valles de la misma. En la siguiente figura se puede apreciar lo
comentado:
165
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
FIGURA 49: GRABACIÓN FRASE “EL FINAL DEL SIGLO VEINTE” CON EMOCIÓN SORPRESA
Al escuchar la grabación se aprecia que se produce una enfatización de las
sílabas tónicas de la sentencia, de modo que la actriz aumenta el tono y el
volumen del habla. Al final de la grabación también se observa cómo se produce
un alargamiento de la última palabra del grupo.
El análisis del fichero de valores con la curva de entonación y las duraciones de
los fonemas ha arrojado los siguientes resultados:
ENTONACIÓN
La frase “El final del siglo veinte” tiene 3 tónicas contenidas en final, siglo,
veinte y queda caracterizada por los valores:
Tono en el 1er fonema 195 HzTono en el 1er pico 205 HzTono en el 1er valle 198 HzPendiente de picos -52Pendiente de valles -25Tono en el último valle 215 HzTono en el último pico 240 HzTono en el último fonema 203 Hz
TABLA 41: PARÁMETROS ENTONACIÓN "EL FINAL DEL SIGLO VEINTE" (EMOCIÓN SORPRESA)
El tono medio de la frase queda establecido en torno a 280 Hz , siendo mayor
en el final del grupo que en el principio del mismo, como ya se ha comentado. La
166
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
velocidad de elocución de la actriz para la pronunciación de esta frase es de
175 silabas /min.
“Vivirás una feliz experiencia”
Si analizamos la grabación de la frase, se puede ver que la actriz enfatiza las
palabras “una” y “experiencia” aumentando el tono de las mismas. De forma
general, el tono medio de la grabación es mayor que en el estado neutro,
rondando valores de 450 Hz en algunos fonemas. Existe una gran diferencia entre
la frecuencia media asociada a los picos y la asociada a los valles, tal y como
ocurre en el resto de casos. En la figura se puede observar la señal de voz
grabada para esta frase y la curva de entonación de la misma generada por el
programa Praat utilizado para la visualización de la misma.
FIGURA 50: GRABACIÓN FRASE “VIVIRÁS UNA FELIZ EXPERIENCIA” CON SORPRESA
Al escuchar la grabación, se observa como en la parte final del grupo se
produce un aumento en el tono de la voz, concretamente en la última tónica y un
alargamiento de la última palabra.
Al analizar los rasgos característicos de la entonación mediante el análisis del
archivo *.par se obtienen los siguientes resultados:
167
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
ENTONACIÓN
La frase comprende 4 tónicas contenidas en las palabras vivirás, una, feliz,
experiencia y los valores que mejor caracterizan la entonación de la frase son:
Tono en el 1er fonema 255 HzTono en el 1er pico 290 HzTono en el 1er valle 243 HzPendiente de picos -60Pendiente de valles -54Tono en el último valle 325 HzTono en el último pico 350 HzTono en el último fonema 248 Hz
TABLA 42: PARÁMETROS ENTONACIÓN "VIVIRÁS UNA FELIZ EXPERIENCIA" (EMOCIÓN SORPRESA)
En la tabla se puede ver como el tono del último pico de la frase es mayor que
el primer pico de la misma, de forma que si se modela la pendiente de picos como
una recta entre ambos valores, la pendiente obtenida es positiva.
El tono medio de la frase tiene un valor de 305 Hz y la velocidad de elocución
de la misma puede establecerse en 180 silabas /min.
“Le gusta mucho el gregoriano”
En la siguiente figura se puede observar la frase grabada por la actriz junto con
la curva de tono generada por el programa Praat.
168
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
FIGURA 51: GRABACIÓN FRASE “LE GUSTA MUCHO EL GREGORIANO” CON SORPRESA
La caracterización de la emoción sorpresa queda determinada en la última
palabra de la grabación, “gregoriano”, con un aumento de la frecuencia media en
el último pico del grupo. En la figura se puede observar como el tono utilizado por
la actriz va aumentando a lo largo de la frase alcanzando el máximo en la última
palabra de la frase. Un rasgo destacable de este caso, es que aunque la
pendiente de los picos es positiva, aumentando el tono de forma continua en cada
uno de ellos a lo largo de la frase. La pendiente de los valles sufre un cambio en el
último de ellos, ya que la pendiente es positiva hasta la última palabra del grupo
en la que se produce una caída de la misma. Si la pendiente se calcula como una
recta entre el valor inicial y el final, esta tendría pendiente negativa. Así, para el
cálculo de la pendiente de valles, tomamos el antepenúltimo valle.
Analizando el fichero *.par generado a partir de la grabación se obtienen los
siguientes resultados:
ENTONACIÓN
La frase de estudio contiene 4 sílabas tónicas que se presentan en las
palabras gusta, mucho, gregoriano y los valores que mejor se ajustan al modelo
de la curva de entonación de la misma son:
169
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Tono en el 1er fonema 255 HzTono en el 1er pico 292 HzTono en el 1er valle 200 HzPendiente de picos -18Pendiente de valles -50Tono en el último valle 250 HzTono en el último pico 310 HzTono en el último fonema 316 Hz
TABLA 43: PARÁMETROS ENTONACIÓN "LE GUSTA MUCHO EL GREGORIANO" (EMOCIÓN SORPRESA)
El tono medio de la frase se ha estimado en torno a los 280Hzy la velocidad de
elocución de la misma por parte de la actriz es de 170 silabas /min.
“Llegó la reina del puño cerrado”
En esta última frase se puede observar que la frecuencia media se mantiene
más o menos estable en los picos del grupo fónico, es decir, los picos tienen una
frecuencia similar. Este aspecto también se da en el caso del tono de los valles. Al
igual que en los casos anteriores, cabe destacar la diferencia entre los picos y los
valles del grupo fónico. En la figura posterior se puede lo comentado.
FIGURA 52: GRABACIÓN FRASE “LLEGÓ LA REINA DEL PUÑO CERRADO” CON SORPRESA
170
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
La emoción sorpresa es notable a lo largo de toda la frase, mediante la
enfatización de los picos del grupo. El resultado de analizar el fichero de
información de la prosodia es:
ENTONACIÓN
Teniendo en cuenta que en la frase “Llegó la reina del puño cerrado.” contiene
4 tónicas en las palabras llegó, reina, puño, cerrado, se han determinado los
siguientes valores para el modelo de la entonación:
Tono en el 1er fonema 321 HzTono en el 1er pico 347 HzTono en el 1er valle 260 HzPendiente de picos -65Pendiente de valles -100Tono en el último valle 310 HzTono en el último pico 412 HzTono en el último fonema 350 Hz
TABLA 44: PARÁMETROS ENTONACIÓN "LLEGÓ LA REINA DEL PUÑO CERRADO" (EMOCIÓN SORPRESA)
El tono medio de la frase es de 385 Hz y la velocidad de elocución se establece
en 170 silabas /min.
Analizadas estas cinco grabaciones es fácil observar como la emoción sorpresa no
queda caracterizada por un patrón único, sino que para cada una de las frases la actriz
se sirve de distintos matices para transmitir la emoción. Una vez obtenidos los
modelos que caracterizan las grabaciones estudiadas, se obtiene la media aritmética
de aquellos modelos que sean similares para obtener valores que se ajusten
estrechamente a todos los modelos de forma general.
Parámetros Frase 1 Frase 2 Frase 3 Frase 4 Frase 5Tono en el 1er fonema 219 Hz 195 Hz 255 Hz 255 Hz 321 HzTono en el 1er pico 264 Hz 205 Hz 290 Hz 292 Hz 347 HzTono en el 1er valle 285 Hz 198 Hz 243 Hz 200 Hz 260 HzPendiente de picos -76 -52 -60 -18 -65Pendiente de valles 0 -25 -54 -50 -100Tono en el último valle 285 Hz 215 Hz 325 Hz 250 Hz 310 HzTono en el último pico 340 Hz 240 Hz 350 Hz 310 Hz 412 HzTono en el último fonema 185 Hz 203 Hz 248 Hz 316 Hz 350 Hz
TABLA 45: RESUMEN PARÁMETROS ENTONACIÓN EMOCIÓN SORPRESA
171
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Como se puede observar en la tabla resumen de los modelos conseguidos, el
último modelo, asociado a la grabación “Llegó la reina del puño cerrado.” tiene una
pendiente de valles muy superior al resto de modelos por lo que en la media de la
pendiente de valles no se tendrá en cuenta asociado al modelo de entonación de esta
frase. Del mismo modo, la grabación estudiada de la frase “Le gusta mucho el
gregoriano.” tiene una pendiente de picos muy suave y no se tendrá en cuenta a la
hora de calcular la pendiente media.
El modelo generado para la caracterización de la entonación en la emoción
sorpresa contiene los valores:
Parámetros Frase 1 Frase 2 Frase 3 Frase 4 Frase 5 MediaTono en el 1er fonema 219 Hz 195 Hz 255 Hz 255 Hz 321 Hz 249 HzTono en el 1er pico 264 Hz 205 Hz 290 Hz 292 Hz 347 Hz 279 HzTono en el 1er valle 285 Hz 198 Hz 243 Hz 200 Hz 260 Hz 237 HzPendiente de picos -76 -52 -60 -18 -65 -63Pendiente de valles 0 -25 -54 -50 -100 -43Tono en el último valle 285 Hz 215 Hz 325 Hz 250 Hz 310 Hz 277 HzTono en el último pico 340 Hz 240 Hz 350 Hz 310 Hz 412 Hz 330 HzTono en el último fonema 185 Hz 203 Hz 248 Hz 316 Hz 350 Hz 260 Hz
TABLA 46: CARACTERIZACIÓN DE LA ENTONACIÓN DE LA EMOCIÓN SORPRESA
Como se ha observado al estudiar las grabaciones, la velocidad de habla cuando se
expresa emoción sorpresa es, en general, mayor que la utilizada en el estado neutro.
Por ese motivo el coeficiente relativo a velocidad “vel_elocu” toma el valor:
vel_elocu = 175
El tono medio de las grabaciones aumenta de forma general y se ha establecido
que su valor sea:
tono_medio = 310
Tras realizar un conjunto de pruebas con este modelo, se han realizado una serie
de modificaciones. Así, se observa que el tono de los fonemas es demasiado elevado,
de forma que se produce una distorsión que afecta a la inteligibilidad del habla
sintetizada. El valor del parámetro disminuirá hasta los 250 Hz, de forma que:
tono_medio = 250
172
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Finalmente, los valores del resto de parámetros de entonación han quedado fijados
en:
Tono en el 1er fonema 200 HzTono en el 1er pico 210 HzTono en el 1er valle 203 HzPendiente de picos -60Pendiente de valles -40Tono en el último valle 240 HzTono en el último pico 257 HzTono en el último fonema 260 Hz
TABLA 47: VALORES FINALES DE PARÁMETROS DE ENTONACIÓN EN SORPRESA
En cuanto a las duraciones, se ha observado que la velocidad del habla de las
grabaciones es mayor a la de los archivos sintetizados por lo que se ha aumentado el
valor hasta:
vel_elocu = 200
Por otro lado, se ha observado en las grabaciones que en algunos casos la actriz al
expresar sorpresa hace un alargamiento de las sílabas tónicas del grupo, de la última
palabra, y en particular, del fonema final. Tras realizar una serie de pruebas se fijan los
siguientes coeficientes:
sil_final_no_oxi = 1,18
sil_acentuada = 1,35
ult_palabra = 1,3
7.7 Modelado prosódico de la emoción enfado
La emoción enfado se produce ante situaciones que generan frustración o que
resultan desagradables al individuo. El nivel de enfado dependerá de la urgencia con
la que la situación deba ser resuelta. Como ya se ha comentado, existen dos tipos de
enfado: un enfado amenazante o enfado en frío y otro enfado en caliente.
En las grabaciones estudiadas pertenecientes a la base de datos S.E.S. se tiene un
enfado en fío o amenazante, y después del análisis se han obtenido las siguientes
características generales del habla en esta emoción:
El nivel de intensidad del habla es superior al utilizado en el estado neutro y
parece que se enfatiza la última palabra del grupo respecto al resto.
Las grabaciones analizadas presentan unos valores de frecuencia superiores a
los valores asociados al estado neutro. La velocidad de elocución, en este
caso, es algo menor que la velocidad para la síntesis del estado neutro.
173
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
En algunas grabaciones se puede observar de forma clara, que existe cierta
irregularidad en la señal de voz y en consecuencia en la curva de entonación.
7.7.1 CARACTERIZACIÓN DE LA EMOCIÓN ENFADO
Además de los aspectos generales detectados, se hace necesario un estudio más
exhaustivo de las distintas grabaciones de las que se dispone para llegar a
conclusiones válidas a un nivel general. Las frases correspondientes a la base de
datos S.E.S. que se han utilizado en el estudio de la emoción sorpresa son:
No queda fruta los viernes.
El final del siglo veinte.
Tengo la llave en el bolsillo.
Vivirás una feliz experiencia.
Le gusta mucho el gregoriano.
Llegó la reina del puño cerrado.
Sobre cada una de estas frases se ha realizado un estudio similar al realizado en la
caracterización del resto de emociones con el objetivo de obtener las características
prosódicas que definen el enfado. En primer lugar se obtendrán los valores de los
parámetros que forman un posible fichero de inicialización de cada una de las
grabaciones, y una vez obtenidos todos los parámetros para las seis frases de ejemplo
se calcula la media de aquellos modelos de entonación que sean similares entre sí,
para poder obtener un modelo de entonación que se ajuste lo más fielmente posible a
todas las grabaciones para así obtener los mejores resultados globales.
“No queda fruta los viernes”
Los valores de prosodia obtenidos del estudio realizado, permitirán que el
resultado de la síntesis de la frase “No queda fruta los viernes” sea lo más similar
posible a la grabación de la actriz que se muestra en la siguiente figura.
174
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
FIGURA 53: GRABACIÓN FRASE “NO QUEDA FRUTA LOS VIERNES.” CON EMOCIÓN ENFADO
Como se puede observar en la figura el tono utilizado por la actriz en la
grabación es un tono medio-bajo, sin llegar a los valores alcanzados en la
emoción tristeza. La curva de entonación generada por el programa de
visualización Praat, muestra como se da una pendiente negativa de forma que en
el inicio de la grabación se tiene un tono cercano a los 210 Hz y éste va
disminuyendo a lo largo de la frase hasta llegar a un tono en torno a 90 Hz en el
último fonema de la misma. En el enfado, la diferencia de frecuencia que existe
entre los picos y los valles no es tan abultada como en las emociones sorpresa y
alegría ya mencionadas.
El rasgo fundamental que parece aportar enfado a la grabación es el
alargamiento y ensordecimiento de los picos del grupo fónico. A pesar de ello, el
enfado transmitido en las grabaciones parece ser muy poco prosódico, y el
aspecto fundamental que lo caracteriza es la irregularidad en el habla.
Si se realiza un estudio del fichero *.par con información de la duración y la
entonación de la frase se observa que:
ENTONACIÓN
La frase o el grupo fónico “No queda fruta los viernes.” contiene 4 tónicas
contenidas en las palabras: no, queda, fruta, viernes. Al estudiar el fichero de
información prosódica y analizar el valor de la frecuencia fundamental en el primer
175
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
y último fonema del grupo fónico así como en los distintos picos y valles que
aparecen, se obtiene que, de manera aproximada, los parámetros que modelan la
entonación de esta frase son:
Tono en el 1er fonema 188 HzTono en el 1er pico 172 HzTono en el 1er valle 167 HzPendiente de picos 21Pendiente de valles 0Tono en el último valle 167 HzTono en el último pico 151 HzTono en el último fonema 118 Hz
TABLA 48: PARÁMETROS ENTONACIÓN "NO QUEDA FRUTA LOS VIERNES" (EMOCIÓN ENFADO)
El tono medio de la frase tiene un valor en torno a los 160Hz y la velocidad de
elocución se estima en 110 silabas/min, valores superiores a los utilizados en el
estado neutro.
“El final del siglo veinte”
Esta grabación tiene un modelo de entonación ascendente, al igual que ocurría
en la sorpresa. Esto se debe a que la actriz enfatiza la parte final del grupo fónico,
aumentando el tono y la intensidad del habla en esa zona, y alargando la duración
de las palabras. En la siguiente figura se puede ver como también existen zonas
de la grabación irregulares, en las que el programa de análisis Praat, no encuentra
la periodicidad de la señal para el cálculo de la curva de tono.
176
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
FIGURA 54: GRABACIÓN FRASE “EL FINAL DEL SIGLO VEINTE” CON EMOCIÓN ENFADO
Al escuchar la grabación se aprecia que el volumen de la voz comienza muy
alto y la actriz lo va disminuyendo a medida que recita la frase. Según esto y lo
comentado anteriormente, en la zona inicial del grupo, la actriz utiliza un volumen
alto para expresar enfado, mientras que en la zona final, la actriz alarga la
duración de los fonemas, eleva el tono y aporta irregularidad a la voz.
El análisis del fichero de valores con la curva de entonación y las duraciones de
los fonemas ha arrojado los siguientes resultados:
ENTONACIÓN
La frase “El final del siglo veinte” tiene 3 tónicas contenidas en final, siglo,
veinte y queda caracterizada por los valores:
Tono en el 1er fonema 193Tono en el 1er pico 171Tono en el 1er valle 174Pendiente de picos -34Pendiente de valles -39Tono en el último valle 200Tono en el último pico 194Tono en el último fonema 151
TABLA 49: PARÁMETROS ENTONACIÓN "EL FINAL DEL SIGLO VEINTE" (EMOCIÓN ENFADO)
177
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
El tono medio de la frase queda establecido en torno a 180 Hz , siendo mayor
en el final del grupo que en el principio del mismo, como ya se ha comentado. La
velocidad de elocución de la actriz para la pronunciación de esta frase es de
105 silabas /min.
“Tengo la llave en el bolsillo”
Si observamos la curva de tono que se muestra en la figura 55, se puede ver
que el tono utilizado por la actriz presenta un rango de valores menor al utilizado
en estado neutro (100 Hz−180 Hz). La curva de tono es descendente y no hay
una gran diferencia de frecuencia entre los picos y los valles del grupo.
FIGURA 55: GRABACIÓN FRASE “TENGO LA LLAVE EN EL BOLSILLO” CON EMOCIÓN ENFADO
Al escuchar la grabación se observa que la actriz alarga mucho las tónicas de
la frase, sobre todo la última (“bolsillo”), les da un tono de voz más grave que al
resto y también aumenta la intensidad, para lograr la expresión del enfado.
Los parámetros que caracterizan la entonación de la frase se muestran a
continuación y son obtenidos mediante el análisis del fichero generado por el
programa GeneraParPcm.exe:
ENTONACIÓN
En la frase “Tengo la llave en el bolsillo.” aparecen 3 tónicas contenidas en las
palabras tengo, llave, bolsillo. Teniendo esto en cuenta y después de estudiar el
178
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
fichero asociado con la información de la frecuencia a lo largo de la frase, se han
determinado los siguientes valores para el modelo de la entonación:
Tono en el 1er fonema 170 HzTono en el 1er pico 164 HzTono en el 1er valle 160 HzPendiente de picos 3Pendiente de valles 3Tono en el último valle 158 HzTono en el último pico 161 HzTono en el último fonema 132 Hz
TABLA 50: PARÁMETROS ENTONACIÓN "TENGO LA LLAVE EN EL BOLSILLO" (EMOCIÓN ENFADO)
En la tabla se puede ver que el rango de variación de la frecuencia media de la
grabación es mínimo, obteniendo valores prácticamente constantes a lo largo de
todo el grupo.
El tono medio de la frase queda establecido en 158 Hz y la velocidad de
elocución es de 145 silabas /min.
“Vivirás una feliz experiencia”
En la figura se puede observar la señal de voz grabada para esta frase y la
curva de entonación de la misma generada por el programa Praat utilizado para la
visualización de la misma.
FIGURA 56: GRABACIÓN FRASE “VIVIRÁS UNA FELIZ EXPERIENCIA” CON ENFADO
179
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Al escuchar la grabación, se observa como la actriz enfatiza las tónicas del
grupo alargando la duración de las mismas. En este caso, la zona media del grupo
compuesta por “una feliz” sufre mayor enfatización que las zonas inicial y final.
Al analizar los rasgos característicos de la entonación mediante el análisis del
archivo *.par se obtienen los siguientes resultados:
ENTONACIÓN
La frase comprende 4 tónicas contenidas en las palabras vivirás, una, feliz,
experiencia y los valores que mejor caracterizan la entonación de la frase son:
Tono en el 1er fonema 170 HzTono en el 1er pico 165 HzTono en el 1er valle 156 HzPendiente de picos 5Pendiente de valles 4Tono en el último valle 150 HzTono en el último pico 160 HzTono en el último fonema 115 Hz
TABLA 51: PARÁMETROS ENTONACIÓN "V IVIRÁS UNA FELIZ EXPERIENCIA" (EMOCIÓN ENFADO)
El tono medio de la frase tiene un valor de 165 Hz y la velocidad de elocución
de la misma puede establecerse en 170 silabas /min.
“Le gusta mucho el gregoriano”
En la siguiente figura se puede observar la frase grabada por la actriz junto con
la curva de tono generada por el programa Praat.
180
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
FIGURA 57: GRABACIÓN FRASE “LE GUSTA MUCHO EL GREGORIANO” CON ENFADO
La emoción enfado queda caracterizada mediante la enfatización de las tónicas
del grupo, y sobre todo de la contenida en “mucho”. En la figura se puede
observar como el tono utilizado por la actriz va disminuyendo a lo largo de la frase
alcanzando el mínimo en la última palabra de la misma.
Analizando el fichero *.par generado a partir de la grabación se obtienen los
siguientes resultados:
ENTONACIÓN
La frase de estudio contiene 4 sílabas tónicas que se presentan en las
palabras gusta, mucho, gregoriano y los valores que mejor se ajustan al modelo
de la curva de entonación de la misma son:
Tono en el 1er fonema 175 HzTono en el 1er pico 214 HzTono en el 1er valle 179 HzPendiente de picos 69Pendiente de valles 58Tono en el último valle 150 HzTono en el último pico 145 HzTono en el último fonema 121 Hz
TABLA 52: PARÁMETROS ENTONACIÓN "LE GUSTA MUCHO EL GREGORIANO" (EMOCIÓN ENFADO)
181
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
El tono medio de la frase se ha estimado en torno a los 170Hzy la velocidad de
elocución de la misma por parte de la actriz es de 110 silabas/min.
“Llegó la reina del puño cerrado”
En este caso, y como se puede ver en la siguiente figura, se produce un
aumento de la intensidad del habla en la zona media de la grabación junto con un
aumento del tono. Este efecto es producido por la enfatización de la sílaba tónica
contenida en la palabra “reina”. La curva de tono presenta irregularidades propias
de la expresión de la emoción enfado, de forma similar a los casos estudiados
anteriormente.
FIGURA 58: GRABACIÓN FRASE “LLEGÓ LA REINA DEL PUÑO CERRADO” CON ENFADO
Al escuchar la grabación se aprecia un alargamiento del fonema /r/ contenido
en la palabra “reina” y un alargamiento al fonema /ñ/ contenido en “puño”. Además
de esto, y de igual forma al resto de grabaciones, se produce una enfatización de
las tónicas del grupo. El resultado de analizar el fichero de información de la
prosodia es:
ENTONACIÓN
Teniendo en cuenta que en la frase “Llegó la reina del puño cerrado.” contiene
4 tónicas en las palabras llegó, reina, puño, cerrado, se han determinado los
siguientes valores para el modelo de la entonación:
182
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Tono en el 1er fonema 162 HzTono en el 1er pico 148 HzTono en el 1er valle 150 HzPendiente de picos 23Pendiente de valles 20Tono en el último valle 140 HzTono en el último pico 125 HzTono en el último fonema 112 Hz
TABLA 53: PARÁMETROS ENTONACIÓN "LLEGÓ LA REINA DEL PUÑO CERRADO" (EMOCIÓN ENFADO)
El tono medio de la frase es de 165 Hz y la velocidad de elocución se establece
en 100 silabas /min.
Analizadas estas seis grabaciones se puede observar que el enfado no queda
caracterizado por un patrón único, sino que para cada una de las frases la actriz se
sirve de distintos matices para transmitir la emoción. Una vez obtenidos los modelos
que caracterizan las grabaciones estudiadas, se obtiene la media aritmética de
aquellos modelos que sean similares para obtener valores que se ajusten
estrechamente a todos los modelos de forma general.
Parámetros Frase 1 Frase 2 Frase 3 Frase 4 Frase 5 Frase 6Tono en el 1er fonema 188 Hz 193 Hz 170 Hz 170 Hz 175 Hz 162 HzTono en el 1er pico 172 Hz 171 Hz 164 Hz 165 Hz 214 Hz 148 HzTono en el 1er valle 167 Hz 174 Hz 160 Hz 156 Hz 179 Hz 150 HzPendiente de picos 21 -34 3 5 69 23Pendiente de valles 0 -39 3 4 58 20Tono en el último valle 167 Hz 200 Hz 158 Hz 150 Hz 150 Hz 140 HzTono en el último pico 151 Hz 194 Hz 161 Hz 160 Hz 145 Hz 125 HzTono en el último fonema 118 Hz 151 Hz 132 Hz 115 Hz 121 Hz 112 Hz
TABLA 54: RESUMEN PARÁMETROS ENTONACIÓN EMOCIÓN ENFADO
Como se puede observar en la tabla resumen de los modelos conseguidos, el
segundo modelo, asociado a la grabación “El final del siglo veinte.” tiene una
pendiente de picos y valles positiva, en contraste con el resto de modelos en los que
las pendientes son negativas. Esta grabación no se tendrá en cuenta a la hora del
cálculo de la curva de entonación general.
El modelo generado para la caracterización de la entonación en la emoción
sorpresa contiene los valores:
183
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
Parámetros Frase 1 Frase 3 Frase 4 Frase 5 Frase 6 MediaTono en el 1er fonema 188 Hz 170 Hz 170 Hz 175 Hz 162 Hz 173 HzTono en el 1er pico 172 Hz 164 Hz 165 Hz 214 Hz 148 Hz 172 HzTono en el 1er valle 167 Hz 160 Hz 156 Hz 179 Hz 150 Hz 162 HzPendiente de picos 21 3 5 69 23 24Pendiente de valles 0 3 4 58 20 20Tono en el último valle 167 Hz 158 Hz 150 Hz 150 Hz 140 Hz 153 HzTono en el último pico 151 Hz 161 Hz 160 Hz 145 Hz 125 Hz 148 HzTono en el último fonema 118 Hz 132 Hz 115 Hz 121 Hz 112 Hz 119 Hz
TABLA 55: CARACTERIZACIÓN DE LA ENTONACIÓN DE LA EMOCIÓN SORPRESA
Como se ha observado al estudiar las grabaciones, la velocidad de habla cuando se
expresa emoción sorpresa es, en general, mayor que la utilizada en el estado neutro.
Por ese motivo el coeficiente relativo a velocidad “vel_elocu” toma el valor:
vel_elocu = 165
El tono medio de las grabaciones aumenta de forma general y se ha establecido
que su valor sea:
tono_medio = 120
Tras realizar un conjunto de pruebas con este modelo, se han realizado una serie
de modificaciones. Se ha observado que la velocidad del habla de las grabaciones es
mucho mayor a la de los archivos sintetizados por lo que se ha aumentado el valor del
parámetro del fichero de inicialización hasta:
vel_elocu = 195
Por otro lado, se ha observado en las grabaciones que en algunos casos la actriz al
expresar enfado hace un acortamiento del fonema final del grupo fónico, así como
también alarga ligeramente las sílabas tónicas del grupo. Tras realizar una serie de
pruebas se fijan los siguientes coeficientes:
sil_acentuada = 1,15
ult_palabra = 0,85
184
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
8. CONCLUSIONES OBTENIDAS DURANTE EL PROCESO Y LÍNEAS FUTURAS DE INVESTIGACIÓN
8.1 Conclusiones
El sintetizador original de partida, disponía inicialmente de una base de datos de
difonemas de habla neutra masculina. Ha sido labor de este proyecto la generación e
introducción de nuevas bases de datos de difonemas de habla femenina con
emociones, así como la modificación del sintetizador para soportar el nuevo escenario,
síntesis de habla con emociones.
Analizando las actividades desarrolladas durante la realización del proyecto, se ha
llegado a las siguientes conclusiones:
Generación de bases de datos de difonemas con emociones
Se han generado cinco bases de datos de difonemas diferentes (estado neutro y
emociones alegría, sorpresa, tristeza y enfado), a partir de habla femenina pregrabada
por una actriz en estado neutro y simulando alegría, tristeza, sorpresa y enfado.
De forma previa a la generación de las nuevas bases de datos, se ha realizado una
revisión manual de la segmentación y marcación de F0 de los archivos de habla
pregrabada utilizados en el proceso. En total, a la finalización de este proyecto se
cuenta con 570 ficheros de habla, compuestos por series de 5 logatomos, revisados y
corregidos de forma manual.
Durante el proceso de revisión, ha sido necesaria la familiarización y posterior uso
de la herramienta Praat. Este programa ha sido muy utilizado posteriormente como
apoyo para las diversas actividades que se han llevado a cabo durante el desarrollo
del proyecto. Es por ello que se ha creado un manual de usuario para facilitar su
manejo a las futuras personas que la utilicen.
Para la obtención de las bases de datos de difonemas a partir de las grabaciones y
de los ficheros con la información resultante de la revisión manual de etiquetas y
marcas de F0, ha sido necesario adaptar la información a los programas de
generación existentes, SacadifVC.exe y Gendb.exe. Para llevar a cabo la adaptación
de la información inicial se han creado programas y scripts como:
GeneraParPcm.exe: Genera los archivos de muestras y de información de
frecuencia y duraciones de etiquetas, a partir de los ficheros de audio
pregrabados y los ficheros resultantes de la revisión manual.
185
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
ObtenTxt.pl: Genera, en el formato adecuado, los ficheros de texto con las
series de logatomos asociadas a cada archivo de audio.
ObtenListaDif.exe: Selecciona las unidades de difonemas necesarias para la
generación de cada base de datos.
Además de los nuevos programas, ha sido necesario adaptar los programas
existentes a los nuevos formatos de información utilizados.
Por último, se han creado diferentes scripts para la automatización del proceso de
generación de base de datos en futuros desarrollos, entre los que destacan:
sacadif.bat, sacatodos.bat, obtenListaDif.bat, modificaFich.per, renombraFich.bat.
Primera versión del sintetizador por concatenación en habla con emociones
Se ha generado una primera versión de un sintetizador de habla con emociones,
por concatenación de difonemas, utilizando las bases de datos generadas y
combinando el módulo de generación prosódica existente en el sintetizador, que utiliza
redes neuronales, con el módulo de generación prosódica utilizado en el sintetizador
por formantes, que utiliza ficheros de inicialización con la información prosódica
asociada a cada emoción y modelos paramétricos para la generación o modificación
de la curva de F0 y de las duraciones.
Para lograr la combinación de ambos módulos se han realizado una serie de
modificaciones en la estructura del sintetizador original. Se ha heredado el módulo de
prosodia del sintetizador por formantes y se ha adaptado al sintetizador original de
forma que la prosodia obtenida de las redes neuronales sea modificada, mediante una
serie de reglas, por la información contenida en los ficheros de inicialización.
Además de la adaptación de código, ha sido necesario realizar un ajuste en la
información de los ficheros de inicialización utilizados, ya que el sintetizador por
formantes utiliza habla masculina con emociones y en nuestro proyecto se ha utilizado
habla femenina con emociones caracterizada por tanto, por un modelo prosódico
diferente.
Para determinar las características que definen cada una de las emociones
implementadas, se disponía de una base de datos, S.E.S, en la que se encuentran
almacenadas una serie de grabaciones correspondientes a un conjunto de frases
grabadas, simulando las emociones, por la misma actriz que grabó los archivos de
audio de logatomos, de los que se han obtenido las bases de datos. A partir de estas
grabaciones, y mediante el uso de la herramienta Praat y el programa
GeneraParPcm.exe, se ha obtenido un conjunto de datos relativos a la duración de los
fonemas y a la entonación empleada por la actriz para caracterizar el habla en las
distintas situaciones. La prosodia de las diferentes emociones ha quedado
186
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
caracterizada de forma que los ficheros de inicialización contienen los valores medios
de los modelos prosódicos similares entre sí.
De forma general, lo valores de entonación contenidos en los ficheros de
inicialización se aplican directamente a la prosodia de las frases a sintetizar, mientras
que las duraciones contenidas en los mismos modifican las duraciones obtenidas por
la red neuronal mediante una serie de reglas.
Los resultados obtenidos mediante el nuevo modelo prosódico combinados son:
Estado neutro: Para el modelado del estado neutro, se han utilizado los
datos relativos a la entonación obtenidos a partir de las grabaciones de la
actriz. Las duraciones se han ajustado mediante la velocidad del habla.
Alegría: La entonación se caracteriza por el empleo de un valor medio de
frecuencia superior al del estado neutro con un mayor rango de valores de
F0. En cuanto a las duraciones, se ha optado por utilizar un modelo que
diferencie la emoción del estado neutro. Para ello se han utilizado una serie
de parámetros tales como la velocidad de media del habla, que en este caso
aumentará, y los coeficientes que modifican las duraciones de las sílabas
acentuadas y la última vocal del grupo fónico, que también aumenta
respecto al estado neutro.
Tristeza: Es la emoción que más problemas ha generado por el
ensordecimiento de la mayor parte de los difonemas de la base de datos. Es
por ello que se ha añadido al sintetizador un control que verifica la calidad
de los difonemas contenidos en la base de datos y ayuda en la detección de
difonemas problemáticos.
En cuanto a la caracterización prosódica, cabe destacar que el modelo de
entonación generado se caracteriza por un valor de frecuencia muy bajo, en
torno a 120 Hz, y existen pocas variaciones a lo largo de la curva de
entonación. El modelo de duraciones obtenido de la red neuronal se ha
ajustado modificando el parámetro de la velocidad media del habla, que en
este caso, es inferior a la del estado neutro.
Sorpresa: En el proyecto se ha implementado una emoción sorpresa con
tendencia hacia una emoción positiva como la alegría. Esta emoción se
caracteriza por emplear unos valores de frecuencia mayores que los de la
emoción alegría y con una curva de entonación con pendiente positiva,
determinada por una marcada subida de frecuencia en la última tónica del
grupo fónico. En cuanto a las duraciones, se ha utilizado el parámetro
asociado a la velocidad del habla para el ajuste de las duraciones obtenidas
187
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
de la red neuronal y se han utilizado los coeficientes que modifican la
duración, aumentando la misma, de las sílabas tónicas, de la última vocal y
en general de la última palabra del grupo fónico.
Enfado: El enfado implementado en el proyecto es un enfado en frío o
amenazante. El modelo de entonación presenta grandes diferencias entre
los picos y los valles y presenta una subida en el tono en la parte final del
grupo fónico. Las duraciones se ajustan mediante la velocidad del habla,
similar al estado neutro, y mediante los coeficientes que modifican las
duraciones de las sílabas tónicas, alargándolas para lograr énfasis, y la
duración de los fonemas finales, reduciéndolos.
La caracterización del enfado está determinada fundamentalmente por las
irregularidades que presenta el habla y por el aumento del volumen del
habla.
Por último, se ha introducido un lenguaje de etiquetas para dotar al sintetizador por
concatenación de una mayor flexibilidad a la hora de la síntesis. Así pues, se han
introducido las siguientes etiquetas:
Introducción de pausas: Permite introducir pausas de distinta duración en
cualquier punto de la frase a sintetizar.
Modificación de la velocidad de elocución: Permiten modificar la
velocidad del habla de forma global o en un solo tramo de la frase a
sintetizar.
Modificación del tono medio: Permiten modificar, de forma global o local,
la frecuencia media de los fonemas que forman las frase a sintetizar.
Introducción de emociones con distintos grados emocionales: Cuando
se introduce la etiqueta de una emoción determinada, se puede modificar el
porcentaje o el grado de la misma mediante la etiqueta de nivel.
Cabe destacar, como conclusión final, que la introducción de diferentes bases de
datos para las distintas emociones implementadas, no siempre supera en cuanto a
calidad e inteligibilidad del habla, a simplemente utilizar una base de datos para el
estado neutro y a partir de ahí realizar las modificaciones prosódicas necesarias para
algunas emociones.
188
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
8.2 Líneas futuras de investigación
Entre los campos o áreas en los que se puede seguir trabajando para la mejora del
sistema se tiene:
Generación de nuevas bases de datos con mayor número de difonemas,
basadas en las grabaciones revisadas manualmente.
Mejora en la implementación de la emoción enfado, con la introducción de
nuevo código que permita modificar la intensidad del habla de los difonemas
utilizados para la síntesis.
Mejora en la caracterización de la emoción tristeza, con la incorporación del
jitter en el interpolado de la entonación, extraído del sintetizador por formantes
ROBINT, disponible en el Grupo de Tecnología del Habla.
Introducción en el sistema de las emociones asco y miedo.
189
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
9. BIBLIOGRAFÍA 1. [ABGC 05] Jordi Adell, Antonio Bonafonte, Jon Ander Gómez and María José
Castro. “Comparative study of Automatic Phone Segmentation methods for
TTS”. Proceedings of IEEE International Conference on Acoustics Speech and
Signal Processing ICASSP 2005, March, 2005.
2. [Alcázar 08] Rosario Alcázar Prior: “Desarrollo de un conversor texto-voz con
emociones y aplicación a la interacción hablada en entornos inteligentes”.
Proyecto fin de carrera. ETSI Telecomunicación. Madrid. UPM. 2008
3. [ARCL+ 08] R. Alcázar, R.Barra-Chicote, L.F.Dharo, R.Córdoba, F.Fernández-
Martínez, J.Ferreiros, J.M.Lucas, S.L. Lufti, J.Macias-Guarasa, J.M.Montero,
M.Pardo, and R.San-Segundo. Desarrollo de un robot-guía con integración de
un sistema de diálogo y expresión de emociones: Proyecto robint. In
Procesamiento del Lenguaje Natural, volume 40, pages 51–58, 2008.
4. [Audacity] Página web oficial programa Audacity:
http://audacity.sourceforge.net/about/
5. [Barajas 96] Barajas, Saulo: Curso de MS-DOS. Editorial Osiris, 1996
http://www.saulo.net/pub/msdos/cap10.htm
6. [BCMMG+ 07] R. Barra-Chicote, J.M. Montero, J. Macías-Guarasa, S. Lufti, J.
M. Lucas, F. Fernández, L. F. D’haro, R. San-Segundo, J. Ferreiros, R.
Córdoba, and J. M. Pardo. Spanish expressive voices: corpus for emotion
research in Spanish. In Proceedings of the 6th edition of the Language
Resources and Evaluation Conference (LREC), mayo 2007.
7. [BCYM+ 08] R. Barra-Chicote, J. Yamagishi, J. M. Montero, S. King, S. Lufti , J.
Macias-Guarasa: “Generación de una voz sintética en castellano basada en
HSMM para la Evaluación Albayzín 2008: Conversión Texto a Voz”. V
Jornadas en Tecnología del Habla, Bilbao. 2008.
8. [Bisquerra 2000] Rafael Bisquerra: “Educación emocional y bienestar”. Editorial
Praxis, 2000.
9. [Cefire 2005] Departamento de Sociología II, Psicología, Comunicación y
Didáctica. “Seminario Cefire: Las emociones”. Universidad de Alicante. 2005.
http://www.ua.es/dpto/dspee/estudios/otros/LAS%20EMOCIONES.pdf
10. [Chóliz 05] Mariano Chóliz Montañés: “Psicología de la emoción. El proceso
emocional”. Dpto. de Psicología Básica. Universidad de Valencia. 2005.
http://www.uv.es/=choliz/Proceso%20emocional.pdf
190
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
11. [Córdoba 02] R. De Córdoba, J.M. Montero, J. Gutiérrez-Arriola, J.A. Vallejo, E.
Enríquez, J.M. Pardo: “Selection of the Most Significant Parameters for
Duration Modeling in a Spanish Text-To-Speech System Using Neural
Networks”. Computer Speech & Language, Vol. 16, nº 2, pp. 183-203, 2002.
12. [Cosi 07] Piero Cosi. 2007. “Emotional Speech Synthesis”.
http://www2.pd.istc.cnr.it/FESTIVAL/home/emotions.htm
13. [Darwin 1872] Darwin, Charles. 1872. “The Expression of the Emotions in Man
and Animals”.
14. [DFGM 00] Laura D. F. and Carmen G. M.: “Segmentación automática de
voz basada en modelos ocultos de Markov y características acústicas”.
Procesamiento del lenguaje natural, ISSN 1135-5948, Nº. 26, 2000, págs. 191-
196.
15. [D’Haro 03] J.M. Montero, L.F. D´Haro, R. de Córdoba, J.A. Vallejo, J.
Gutiérrez-Arriola, J.M. Pardo: “ANN F0 Modelling for Female-Voice Synthesis
in Spanish: restricted and non-restricted domains”. Proceedings of the XVth
International Congress of Phonetic Sciences, pp. 563-566, 2003.
16. [FJM 03] Enrique G. Fernández Abascal, María Pilar Jiménez Sánchez, María
Dolores Martín Díaz: “Emoción y Motivación. La adaptación humana”. Centro de
Estudios Ramón Areces, 2003.
17. [GABCM 07] A. Gallardo-Antolín, R. Barra-Chicote, S. Krstulovic, J.M.
Montero, and M. Schröder. “Automatic phonetic segmentation of Spanish
emotional speech”. Septiembre 2007.
18. [Gutierrez-Arriola 01] J. Gutiérrez-Arriola, J.M. Montero, D. Saiz, J.M. Pardo:
"New Rule-Based and Data-Driven Strategy to Incorporate Fujisaki’s F0 Model
to a Text-To-Speech System in Castillian Spanish". Proceedings of the
International Conference on Acoustics and Signal Processing, pp. 821-824,
2001.
19. [HCMT04] N. Henrich, C.Gendrot, A. Michaud, and V.Ñgoc Tuan. Tools for
electroglottographic analysis: Software, documentation and databases, 2004.
http://voiceresearch.free.fr/egg.
20. [Hofer 04] Gregor O. Hofer: “Emotional Speech Synthesis”. Master of Science.
School of Informatics. University of Edinburgh. 2004.
21. [HTK] Steve Young, Gunnar Evermann, Mark Gales, Thomas Hain, Dan
Kershaw, Xunjing Liu, Gareth Moore, Julian Odell, Dave Ollason, Dan Povey,
Valrcho Valtchev y Phil Woodland: “The HTK Book”. Cambridge University
Engineering Department. 2006.
191
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
22. [HTS] Home HMM-based Speech Synthesis System (HTS)
http://hts.sp.nitech.ac.jp/
23. [Izard 89] Carold Ellis Izard: “Handbook of infant development”. Perspectives
on emotional development.
24. [Klatt 1987] Joaquim Llisterri, Universitat Autònoma de Barcelona
http://liceu.uab.es/~joaquim/speech_technology/tecnol_parla/synthesis/klatt/
Klsyn88.html
25. [KTHZ 09] Keiichi Tokuda, Heiga Zen: “Fundamentals and recent advances in
HMM-based speech synthesis”. 10th Annual Conference of the International
Speech Communication Association. 2009.
www.interspeech2009.org/tutorials/
26. [LMGC 01] Jeff T. Larsen, A. Peter McGraw, John T. Cacioppo: “Can People Feel
Happy and Sad at the Same Time?” Journal of Personality and Social Psychology,
nº 4, pp. 684-696, 2001.
27. [LMS 08] Lorena Martínez Simón: “Diseño, implementación y evaluación de
técnicas de conversión de prosodia”. Proyecto fin de carrera. ETSI
Telecomunicación. Madrid. UPM. 2008
28. [Martínez 98] Gerardo Martínez Salas: “Adaptación de un modelo de
duraciones y entonación para sintetizar habla con emociones”. Proyecto fin de
carrera. ETSI Telecomunicación. Madrid. UPM. 1998.
29. [MGCM 00] Mario González del Campo Muñoz: “Síntesis de voz por selección
de unidades. Aplicación a síntesis de dominio restringido y síntesis de voz con
emociones”. Proyecto fin de carrera. ETSI Telecomunicación. Madrid. UPM.
2000.
30. [Perl 6] Manual lenguaje Perl: http://www.etsimo.uniovi.es/perl/tutor/.
31. [Praat] Página oficial programa Praat
http://www.praat.org
32. [Reeve 94] J.M. Reeve: “Emoción y Motivación”. McGraw-Hill, 1994.
33. [Russell 1980] Russell, J.A.: A circumplex model of affect. Journal of
Personality & Social Psychology 39, 1-sup-6 (Dic.), 1161-1178. 1980.
34. [RWM 89] Russell, J. A., Weiss, A., Mendelsohn, G. A. Affect grid: a single-item
scale of pleasure and arousal. Journal of Personality & Social Psychology 57, 3
(Sept.), 493-502. 1989.
35. [Toledano 01] D.T. Toledano, “Segmentación y etiquetado fonéticos
automáticos”. Tesis Doctoral, Febrero 2001, Universidad Politécnica de Madrid.
192
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
10. PLIEGO DE CONDICIONES
10.1 Condiciones generales
La obra será realizada bajo la dirección técnica de un Ingeniero de
Telecomunicación y el número de programadores necesarios.
La ejecución material de la obra se llevará a cabo por el procedimiento de
contratación directa. El contratista tiene derecho a obtener, a su costa, copias del
pliego de condiciones y del presupuesto. El ingeniero, si el contratista lo solicita,
autorizará estas copias con su firma, después de confrontarlas.
Se abonará al contratista la obra que realmente se ejecute, de acuerdo con el
proyecto que sirve de base para la contrata.
Todas las modificaciones ordenadas por el ingeniero-director de las obras, con
arreglo a sus facultades, o autorizadas por la superioridad, serán realizadas siempre
que se ajusten a los conceptos de los pliegos de condiciones y su importe no exceda
la cifra total de los presupuestos aprobados.
El contratista, o el organismo correspondiente, quedan obligados a abonar al
ingeniero autor del proyecto y director de obra, así como a sus ayudantes, el importe
de sus respectivos honorarios facultativos por dirección técnica y administración, con
arreglo a las tarifas y honorarios vigentes.
Tanto en las certificaciones de obra como en la liquidación final, se abonarán las
obras realizadas por el contratista a los precios de ejecución material que figuran en el
presupuesto, por cada unidad de obra.
En el caso excepcional en el que se ejecute algún trabajo no consignado en la
contrata, siendo admisible a juicio del ingeniero-director de las obras, se pondrá en
conocimiento del organismo correspondiente, proponiendo a la vez la variación de
precios estimada por el ingeniero. Cuando se juzgue necesario ejecutar obras que no
figuren en el presupuesto de la contrata, se evaluará su importe a los precios
asignados a ésta u otras obras análogas.
Si el contratista introduce en el proyecto, con autorización del ingeniero-director de
la obra, alguna mejora en su elaboración, no tendrá derecho sino a lo que le
correspondería si hubiese efectuado la obra estrictamente contratada.
El ingeniero redactor del proyecto se reserva el derecho de percibir todo ingreso
que en concepto de derechos de autor pudiera derivarse de una posterior
comercialización, reservándose además el derecho de introducir cuantas
modificaciones crea convenientes.
193
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
10.2 Condiciones generales a todos los programas
Estarán realizados en lenguajes estándar.
Se entregarán tres copias de los listados para cada programa o subrutina.
Los programas y subrutinas deberán ir documentados, indicando brevemente
su función, entradas y salidas, y cualquier otra información de interés.
Se entregará, junto con los programas, un manual de uso e instalación.
10.3 Condiciones generales de prueba
Los programas y subrutinas que se entreguen deberán funcionar sobre un
ordenador PC o compatible con microprocesador Pentium Core 2 Duo o superior y
con, al menos, 512 MBytes de RAM. Se ejecutarán bajo sistema operativo Windows
2000 XP Professional o superior, en entorno local.
Solamente se aceptarán los programas si funcionan correctamente en todas sus
partes, rechazándose en caso contrario. Si, por causas debidas al contratista, los
programas no funcionaran bajo las condiciones expuestas anteriormente, la empresa
contratante se reservará el derecho de rescindir el contrato.
10.4 Recursos materiales
Ordenador PC compatible, Pentium Core 2 Duo, 512 MB de memoria RAM y 2
GB de disco duro.
Altavoces.
Tarjeta de red Ethernet.
10.5 Recursos lógicos
Sistema operativo Windows XP Professional.
Compilador Microsoft Visual C++ 6.0
Praat.
Office 2007.
194
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
11. P RESUPUESTO El presupuesto consta de cuatro apartados: el cálculo del presupuesto de ejecución
material, el presupuesto de ejecución por contrata que incluirá el cálculo de los gastos
generales y del beneficio industrial, el coste de la dirección de obra y, por último, el
presupuesto total, suma de todos los conceptos anteriores.
Todas las cantidades que aparecen están contempladas en Euros.
11.1 Presupuesto de ejecución material
Se incluye en este presupuesto los gastos en herramientas empleadas, tanto
hardware como software, así como la mano de obra.
En la ejecución de este proyecto han participado las siguientes personas:
Un Ingeniero Superior de Telecomunicación, encargado del desarrollo y
redacción del proyecto, así como de la obtención e interpretación de los
resultados.
Un mecanógrafo, encargado de la escritura del proyecto en un procesador de
textos, elaboración de gráficos, etc.
11.1.1 RELACIÓN DE SALARIOS
Partimos del sueldo base mensual de cada una de las personas que han
intervenido en el proyecto para calcular el sueldo base diario respectivo. A éste habrá
que añadir las obligaciones sociales.
Sueldo base mensual
Sueldo base diario Gratificación Sueldo
total diarioIngeniero Superior de Telecomunicación 1.334,59 44,49 6,07 50,56
Mecanógrafo 632,49 21,08 5,67 26,76
TABLA 56: SUELDOS DE LAS PERSONAS QUE HAN INTERVENIDO EN EL PROYECTO
195
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
11.1.2 RELACIÓN DE OBLIGACIONES SOCIALES
CONCEPTOVacaciones anuales retribuidas 8,33%Indemnización por despido 1,60%Seguro de accidentes 7,00%Subsidio familiar 2,90%Subsidio de vejez 1,80%Abono días festivos 12,00%Días de enfermedad 0,75%Plus de cargas sociales 4,25%Otros conceptos 15,00%
TOTAL 53,63%
TABLA 57: OBLIGACIONES SOCIALES
11.1.3 RELACIÓN DE SALARIOS EFECTIVOS TOTALES
Sueldo diario Obligaciones sociales Total/día
Ingeniero Superior de Telecomunicación 50,56 27,11 77,67
Mecanógrafo 26,76 14,35 41,1
TABLA 58: SALARIOS EFECTIVOS TOTALES
11.1.4 COSTE DE LA MANO DE OBRA
Para calcular el coste de la mano de obra basta con aplicar el número de días
trabajado por cada persona por el salario respectivo.
Días Salario(€)/día Total (€)
Ingeniero Superior de Telecomunicación 330 77,67 25.630,70
Mecanógrafo 40 41,1 1.644,13
TOTAL COSTE DE MANO DE OBRA 27.274,83
TABLA 59: COSTE DE LA MANO DE OBRA
11.1.5 COSTE TOTAL DE MATERIALES
Para la ejecución de este proyecto se han empleado un ordenador personal tipo PC
basado en el microprocesador Pentium Core 2 Duo y una impresora Láser HP
196
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
LaserJet 2100 Series PCL 6-1, para la elaboración de toda la documentación
necesaria. También se incluyen los gastos de material fungible y de oficina.
Los costes referentes a los materiales utilizados se reflejan en la siguiente tabla:
Precio (€) Uso (meses)
Amortización (años) Total (€)
1 ordenador personal para diseño 1.502,53 12 5 300,51
Compilador Microsoft Visual C++ 420,71 12 5 84.14
Impresora Láser HP LaserJet 2100 780,71 1 5 13,01
Placa de red Ethernet 120,2 - - 120,2
Material fungible y de oficina 120,2 - - 120,2
TOTAL GASTO DE MATERIAL 638,06
TABLA 60: COSTE DE MATERIALES
11.1.6 IMPORTE TOTAL DEL PRESUPUESTO DE EJECUCIÓN MATERIAL
El presupuesto de ejecución material se calcula basándose en los costes de mano
de obra y los costes materiales.
CONCEPTO IMPORTE (€)
COSTE TOTAL DE MATERIALES 638,06
COSTE TOTAL DE MANO DE OBRA 27.274,83
TOTAL PRESUPUESTO DE EJECUCIÓN MATERIAL 27.912,89
TABLA 61: PRESUPUESTO DE EJECUCIÓN MATERIAL
11.2 Importe de ejecución por contrata
Al importe de ejecución material hay que añadirle los siguientes conceptos:
CONCEPTO IMPORTE (€)
GASTOS GENERALES Y FINANCIEROS (22%) 6.140,83
BENEFICIO INDUSTRIAL (6%) 1.674,77
TOTAL G.G. Y B.I. 7.815,6
Resultando:
197
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
IMPORTE DE EJECUCIÓN POR CONTRATA 35.728,49
TABLA 62: IMPORTE DE EJECUCIÓN POR CONTRATA
11.3 Honorarios Facultativos
Este proyecto se encuadra dentro del grupo XII: Aplicaciones de la Electrónica y
Aparatos de Telecomunicación. Si se aplican las tarifas correspondientes sobre el
importe del presupuesto de ejecución material se tiene:
Hasta 30.050,61 (Coef. 1,0 sobre 7%) 2.103,54
Hasta 60.101,21 (Coef. 0,9 sobre 7%) 359,16
TOTAL HONORARIOS FACULTATIVOS (€) 2.462,7
TABLA 63: HONORARIOS FACULTATIVOS
Los honorarios que hay que aplicar son los correspondientes tanto por redacción
del proyecto como por dirección, por lo que el total de honorarios es:
Honorarios de Ingeniero por redacción 2.462,7
Honorarios de Ingeniero por dirección 2.462,7
TOTAL HONORARIOS (€) 4.925,4
TABLA 64: HONORARIOS TOTALES
11.4 Importe Total del Proyecto
El Importe Total del Proyecto es la suma del Importe de Ejecución por Contrata, los
Honorarios de Redacción y los Honorarios de Dirección, al cual habrá que aplicar el
16% de IVA.
EJECUCIÓN POR CONTRATA 35.728,49
HONORARIOS 4.925,4
IMPORTE 40.653,89
IVA (16%) 6.504,62
IMPORTE TOTAL 47.158,51
TABLA 65: IMPORTE TOTAL DEL PROYECTO
198
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas Mª Dolores Segovia Torres
El importe total del presente proyecto asciende a la cantidad de CUARENTA Y
SIETE MIL CIENTO CINCUENTA Y OCHO euros CON CINCUENTA Y UN céntimos.
EL INGENIERO AUTOR DEL PROYECTO
Fdo.: Mª Dolores Segovia Torres
MADRID, JUNIO DE 2010.
199
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas ANEXO I
I. ANEXO I
1. Manual programa Praat
MENÚS Y MANEJO DEL PROGRAMA
Praat es un programa de análisis, síntesis y manipulación de habla que se ha
utilizado para realizar la revisión manual de la marcación de F0 y la segmentación
automática realizadas al corpus de logatomos inicial. Se explican a continuación las
diferentes ventanas y objetos con los que se ha tratado en la revisión manual.
Lo primero que se muestra al inicializar el programa Praat, son dos ventanas
principales, la ventana de objetos (Object window) y la ventana de gráficos (Picture window). La única ventana que normalmente se ha utilizado es la de objetos. La
ventana muestra una lista de objetos y un menú dinámico que varía según el objeto
seleccionado. En la parte superior se muestran los menús Praat (opciones de
configuración y creación de scripts), New (para crear objetos), Read (para cargar en
memoria objetos a partir de ficheros), Write (para escribir en un fichero un determinado
objeto, varía según el objeto seleccionado) y Help.
Praat contiene una serie de objetos y editores para cada uno de los objetos. Entre
todos los objetos, sólo se han utilizado para la revisión y la marcación los siguientes:
Objetos generales: Sound y PointProcess. Los objetos Sound contienen los
ficheros de audio (procesos de muestreo continuo). Los objetos PointProcess
contienen una secuencia de puntos en el tiempo (dan lugar a los ficheros de
marcas). Cada objeto tiene un editor asociado para cualquier modificación.
Objetos de etiquetado y segmentación: Se utiliza el objeto TextGrid, el
IntervalTier y el TextTier. El objeto TextGrid puede estar formado por dos
distintos tipos de niveles. El nivel IntervalTier contiene una cadena secuencial
de los límites de los intervalos etiquetados. El nivel TextTier contiene una
cadena de puntos etiquetados. En nuestro caso el IntervalTier de un TextGrid
contiene las etiquetas de los distintos fonemas en los que se dividen los
logatomos y el TextTier contiene las marcas de F0. Los objetos se pueden
modificar en el editor de TextGrid
Aunque no se han utilizado también existen objetos de pitch, de intensidad, de
formantes, de espectro, etc. con sus correspondientes editores. En la siguiente figura
se muestra la ventana de objetos con un objeto TextGrid y otro objeto Sound
cargados. En la parte derecha de la figura se puede ver el menú dinámico asociado al
objeto seleccionado.
203
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas ANEXO I
FIGURA 59: OBJECT WINDOW DEL PROGRAMA PRAAT CON OBJETOS CARGADOS
Análisis de etiquetas
Para comenzar con el análisis de etiquetas de un fichero de audio, se carga el
archivo de etiquetas *.TextGrid, objeto TextGrid, y el archivo de audio, objeto Sound,
con el menú Read de la ventana principal. Para la edición del objeto TextGrid nos
podemos apoyar en la señal de voz seleccionando ambos objetos y haciendo clic en la
opción del menú dinámico Edit. De esta forma, en el editor se puede escuchar la señal
de voz asociada al objeto de etiquetas y modificarlo si algún límite es incorrecto.
Se pueden destacar los menús File, Edit, Interval, Spectrum, Pitch, Intensity y
Formant en el editor de TextGrid. Cada uno de los menús ofrece al usuario distintas
opciones para mostrar o no al usuario el espectrograma, el pitch, la intensidad,…y
opciones para determinar la forma en que se realiza. En la figura 60 se muestra la
ventana del editor TextGrid con el objeto L_T_00100, resultante de la segmentación
automática, para su modificación e información adicional como la señal de audio
asociada, el espectrograma, los formantes (en rojo), el pitch (en azul) y la intensidad
del mismo (en amarillo).
204
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas ANEXO I
FIGURA 60: EDITOR DE TEXTGRID EN EL QUE APARECE EL OBJETO RESULTANTE DE LA SEGMENTACIÓN AUTOMÁTICA PARA SU MODIFICACIÓN E INFORMACIÓN ADICIONAL
Para la revisión manual de las marcas serán útiles las siguientes acciones:
Crear etiqueta: Para crear una nueva etiqueta no hay más que seleccionar el
punto donde se desea que se posicione la frontera y pulsar Enter. Para
terminar es necesario teclear el nombre de la nueva etiqueta. En nuestro
caso, el nombre de la etiqueta se corresponde con el nombre del fonema
asociado. Si por ejemplo, se tratara de segmentar una sentencia en las
distintas palabras que la componen, cada etiqueta se correspondería con
cada una de las palabras.
Desplazar frontera: Para modificar los intervalos sólo hay que seleccionar
con el ratón el límite de posición incorrecta (al seleccionarse cambia a color
rojo) y desplazarlos hasta la posición deseada.
Eliminar frontera: Para borrar un límite es necesario seleccionar el mismo y
teclear Alt+Backspace.
Eliminar etiqueta: Eliminar una etiqueta consiste en eliminar las fronteras
que la limitan y eliminar el nombre de la etiqueta.
Para poder seleccionar una etiqueta u otra de forma rápida se utiliza Alt+cursor,
que permite desplazarse a lo largo del objeto TextGrid hasta ubicarse en la etiqueta
deseada. Normalmente es necesario escuchar el sonido asociado a la etiqueta para
lograr la correcta ubicación de las fronteras fonéticas. Para ello será necesario
colocarse en la etiqueta de interés y pulsar la tecla TAB del teclado. En la figura 61 se
205
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas ANEXO I
muestra el logatomo perteneciente al objeto TextGrid L_T_00100 después de la
revisión de etiquetas.
FIGURA 61: EDITOR DE TEXTGRID EN EL QUE APARECE EL OBJETO MODIFICADO
Análisis de marcas de F0
Es importante tener en cuenta que las tareas de revisión de las marcas de
frecuencia y las fronteras fonéticas no son independientes entre sí, sino que la
información que produce una puede ser muy útil para la otra. Así, a partir de la curva
de frecuencia fundamental, se pueden identificar mejor los fonemas, si se conocen las
peculiaridades de cada uno. Es por ello que se ha realizado una revisión conjunta de
los resultados obtenidos de forma automática.
La revisión de las marcas F0 se realiza también en el editor de TextGrid puesto que
se encuadran dentro de un objeto TextTier. En los archivos conjuntos de los que se
dispone a la hora de la revisión automática se tiene un objeto de tipo TextGrid con los
dos tipos de niveles posibles IntervalTier y TextTier. Así pues, se trabaja con dos
niveles en el editor para realizar el proceso de revisión de una forma más rápida y
completa. El procedimiento para crear, modificar y eliminar marcas del nivel TextTier
es el mismo que para el nivel IntervalTier y que ya se ha comentado en el apartado
anterior. En la figura siguiente se pueden ver los niveles del objeto TextGrid
correspondiente al archivo L_N_00100.
206
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas ANEXO I
FIGURA 62: EDITOR DE OBJETO TEXTGRID CON NIVEL TEXTTIER (1) E INTERVALTIER (2)
Para que la revisión se realice de forma precisa existe una serie de botones en la
parte inferior izquierda de la ventana de editor de TextGrid, que ayudan a la edición del
objeto. Estos botones se pueden apreciar en la figura 62 y son:
all: Al pulsar el botón se realiza un alejamiento automático de forma que
todo el objeto se muestra en pantalla.
in: Es el botón de zoom, y sirve para mostrar el objeto forma precisa.
sel: Realiza un zoom del intervalo que se haya seleccionado. Se utiliza
cuando se quiere enfocar un determinado segmento.
out: Aleja el foco de forma que se obtiene una vista más general del objeto.
Las marcas de F0 del fichero se generan de forma automática mediante un script
realizado en praat. Los scripts de praat son archivos en formato texto que contienen
comandos y órdenes que se ejecutan de forma secuencial cuando se ejecuta el script.
Para abrir un script realizado en praat (*.praat) se debe seleccionar la opción Open
Praat script… del menú Praat de la ventana principal. Normalmente tienen un objeto
como argumento de entrada por lo que para ejecutarlos se debe seleccionar el objeto
sobre el que se quiere realizar el proceso automático y después seleccionar en el
editor de scripts la opción Run del menú Run. Este proceso se visualiza en la figura
siguiente.
207
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas ANEXO I
FIGURA 63: EDITOR DE SCRIPT DEL PROGRAMA PRAAT
2. Manual revisión manual de marcas y segmentación
REVISIÓN DE MARCAS F0Los fonemas, se pueden agrupar en función de su comportamiento, de modo que
cada grupo tiene unas peculiaridades muy útiles a la hora de marcar y segmentar. Se
presentan a continuación los diferentes grupos fonéticos.
Oclusivas sordas
Constituyen un grupo muy sencillo de marcar y segmentar pues tienen unas
propiedades que los distinguen claramente del resto. Pertenecen a este grupo los
fonemas: /p/, /t/ y /k/, fonemas muy comunes en todos los ficheros.
Las oclusivas sordas muestran un silencio, más o menos largo, seguido de una
explosión. A veces presentan un resto de sonoridad de la vocal anterior en el silencio,
pero este efecto se debe despreciar al marcar. Además la explosión suele afectar en
sus primeros periodos a la vocal posterior, que pueden presentar fuertes oscilaciones.
Al marcar este tipo de fonemas, en el silencio se suelen poner algunas marcas
equiespaciadas y distanciadas entre sí de forma que se consiga un tono medio
alrededor a 100Hz. En la explosión se intenta que la curva de tono fundamental no
presente un gran pico intentando mantener la continuidad con la frecuencia de la vocal
posterior.
En la figura 64 se muestra un fonema oclusivo correctamente marcado. En concreto
se trata de una /p/ entre dos vocales. Se puede observar como aparece un resto de
sonoridad de la vocal precedente y como en la explosión, en lugar de buscar
208
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas ANEXO I
periodicidad, se intenta que la transición al tono de la vocal siguiente se realice de
forma continua y sin saltos bruscos.
FIGURA 64: FONEMA OCLUSIVO
Fricativas
Este grupo de sonidos también presenta unas características muy definidas que los
hace fácilmente distinguibles del resto. En concreto, los sonidos fricativos presentan el
aspecto de un ruido aleatorio, sin ningún tipo de periodicidad o regularidad.
Pertenecen a este grupo fonético los fonemas /s/, /f/, /z/ y /x/.
Las fricativas suelen afectar un poco a los primeros periodos del fonema
consecutivo, de modo que aparecen algo ruidosos.
La forma de marcar este tipo de sonidos es análoga a la del silencio de los fonemas
oclusivos es decir, colocando marcas equiespaciadas y separadas entre sí. Este
proceso se realiza de forma automática en el programa SacadifVC.exe descrito en el
capitulo 5.3.2 de esta memoria. En general, en las transiciones entre un fonema
fricativo y una vocal, se suelen ignorar los primeros periodos de la vocal si son
excesivamente ruidosos y resulta imposible distinguir la periodicidad.
En la figura 65 se puede observar un ejemplo de un fonema fricativo entre dos
vocales. Se percibe cómo los últimos periodos de la /e/ se ven afectados por el ruido
que incluye la fricación, pero aun así es posible marcar el periodo.
209
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas ANEXO I
FIGURA 65: FONEMA FRICATIVO
VocalesSon fonemas sonoros, por lo que presentan periodicidad. Esa periodicidad es la
que pretende caracterizar mediante las marcas. Las vocales presentan diferentes
contextos, en función del entorno en que están incluidas. Así se habla de vocales
nasalizadas, vocales aproximantes, etc.
Al marcar una vocal, se suele buscar una referencia como puede ser un pico
determinado o un mínimo. En general se elige aquella en que parezca haberse basado
el marcado automático. Después se colocan las marcas siguiendo ese mismo criterio.
Normalmente no presentan grandes complicaciones excepto cuando la energía es
muy baja que resulta complicado encontrar la periodicidad. En estos casos suele ser
muy útil amplificar la señal (botón in) aunque a veces lo mejor es colocar las marcas
buscando que la curva de tono no presente irregularidades.
Si los logatomos acaban en vocal se suele mostrar una periodicidad residual en la
parte final que se va atenuando muy poco a poco. El criterio para marcar este tipo de
vocales es colocar las marcas hasta que la energía no sea demasiado baja y a partir
de ahí colocar marcas equiespaciadas de forma que la curva de frecuencia descienda
suavemente. En la figura 66 se muestra una /o/ correctamente marcada y al final de un
logatomo.
210
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas ANEXO I
FIGURA 66: FONEMA FINAL DE LOGATOMO
Hiatos o Diptongos
Los diptongos o hiatos no presentan grandes dificultades durante la tarea de
marcado, pues se comportan periódicamente como si fueran una sola vocal. La
principal dificultad de estas dos agrupaciones de fonemas se encuentra en la fase de
segmentación como se verá posteriormente. Para marcar estos grupos, basta con
poner las marcas buscando la periodicidad como si de una única vocal se tratara. La
figura 67 presenta el hiato /oa/ correctamente marcado. Se puede comprobar que su
aspecto es muy similar al de una vocal única.
211
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas ANEXO I
FIGURA 67: EJEMPLO DE MARCADO DEL HIATO /OA/
Aproximantes
Existen fonemas que en función del contexto en el que se encuentran se comportan
de un modo u otro. Este es el caso de los fonemas /g/, /d/ y / b/. Cuando estos
fonemas se encuentran entre vocales actúan como fonemas de transición entre una
vocal y otra. Es por esto por lo que se denominan fonemas aproximantes. El marcado
de estos fonemas se realiza buscando la periodicidad de la señal. Se pueden detectar
por la energía, ya que suelen tener menor nivel que las vocales.
Hay que tener en cuenta que en función de la emoción y del locutor, la transición
puede resultar poco periódica y existir mucha distorsión de forma que el marcado sea
difícil. En la figura 68 se muestra el fonema /g/ entre dos vocales. Se puede comprobar
que la energía es mucho menor en el fonema aproximante que en las dos vocales.
212
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas ANEXO I
FIGURA 68: FONEMA APROXIMANTE /G/ ENTRE DOS VOCALES EN ESTADO NEUTRO
En la figura 69 se muestra el fonema en un logatomo con emoción sorpresa. Se
puede ver como en este caso la señal se muestra más irregular que en la figura
anterior.
FIGURA 69: FONEMA APROXIMANTE /G/ ENTRE DOS VOCALES EN EMOCIÓN SORPRESA
213
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas ANEXO I
Oclusivas sonoras
En este caso la /b/, /d/ y /g/ presentan un comportamiento muy similar al de las
oclusivas. Así cuando uno de estos fonemas se encuentra en posición inicial, tras
nasal o tras /l/ están constituidos por un silencio inicial seguido de una explosión. La
principal diferencia con las oclusivas sordas, es que en este caso el silencio presenta
una cierta sonoridad, difícil de marcar en ocasiones, pero que es evidente que existe.
Estos fonemas se suelen marcar en función de la sonoridad que presenten en su
silencio inicial. Si es posible, se marcan los periodos. Cuando la periodicidad sea difícil
de detectar se pondrán marcas equiespaciadas manteniendo cierta regularidad. En la
figura 70 se presenta una /b/ inicial seguida de una /u/. En este caso, se puede ver
como la sonoridad es tal que permite el marcado de sus periodos.
FIGURA 70: EJEMPLO FONEMA OCLUSIVO INICIO DE LOGATOMO
Nasales
Entre los sonidos nasales se incluyen los fonemas /m/, /n/ y /ñ/. Se trata de sonidos
sonoros que muestran periodicidad por lo que la marcación no presenta gran dificultad.
En general no se pueden detectar por energía y tampoco varían la frecuencia
fundamental de su entorno. En función del contexto será más fácil o más difícil
segmentar este tipo de fonemas como se verá posteriormente. En la figura 71 se
presenta una /m/ entre dos vocales. En este caso el marcado no presenta mayores
problemas, y además la /m/ es bastante diferenciable de las vocales a simple vista.
214
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas ANEXO I
FIGURA 71: EJEMPLO FONEMA NASAL /M/ ENTRE DOS VOCALES
Laterales
Los fonemas laterales son: /l/ e /y/14. Son sonidos sonoros por lo que se marcan de
forma similar al resto de casos. Estos fonemas tienen una frecuencia media similar a
los fonemas que les rodean por lo que se tendrán tramos de valor constante en la
curva de tono. En la siguiente figura se muestra un ejemplo de un fonema lateral entre
dos vocales.
14 Conviene recordar que aunque los fonemas /ll/ e /y/ son distintos, hoy en día es raro que el locutor los pronuncie de forma distinta por lo que en general se han fundido en uno solo.
215
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas ANEXO I
FIGURA 72: FONEMA LATERAL /L/ ENTRE DOS VOCALES
Vibrantes
Los fonemas vibrantes son la /r/ y la /rr/. Ambos presentan una especie de vibración
periódica que permite marcarlos aunque no siempre resulta una tarea fácil de realizar
puesto que en ocasiones la vibración es muy irregular. El fonema /r/ es un fonema de
transición entre vocales y el fonema /rr/ muestra lóbulos de vibración entre breves
silencios. El último lóbulo está influenciado por el fonema siguiente mostrando la
misma frecuencia e incluso una forma de onda similar.
En la figura siguiente se muestra un ejemplo de un fonema /r/ entre dos vocales. En
el marcado se pretende buscar la periodicidad de la vibración.
216
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas ANEXO I
FIGURA 73: MARCADO FONEMA VIBRANTE /R/ ENTRE VOCALES
La figura presenta una /rr/ entre dos vocales. Se puede ver como aparecen tres
silencios separando los dos lóbulos de vibración de las vocales adyacentes.
FIGURA 74: MARCADO FONEMA VIBRANTE MÚLTIPLE /RR/ ENTRE VOCALES
217
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas ANEXO I
REVISIÓN DE LA SEGMENTACIÓN
El procedimiento habitual para segmentar un logatomo consiste en aplicar en primer
lugar un zoom sobre el logatomo de interés hasta situarnos en la zona fronteriza y
tener una precisión los más exacta posible. Existen determinados sonidos como los
oclusivos o fricativos que son muy fáciles de segmentar, puesto que se diferencian
mucho del resto. Si se quiere comprobar que se han escogido los puntos correctos, se
puede escuchar la sección seleccionada mediante la tecla TAB del teclado. Para
aquellos fonemas difíciles de distinguir, se suelen aplicar sucesivos Zoom y escuchar.
No obstante hay casos como los diptongos, la /ñ/ o la /y/ en los que resulta imposible
determinar el punto exacto de separación entre fonemas, por lo que se trata más bien
de encontrar una solución aceptable que no cometa un error apreciable.
Las características básicas de cada grupo fonético al segmentar son las siguientes:
OCLUSIVAS SORDAS Y OCLUSIVAS SONORAS
Se agrupan ambos tipos porque al ser segmentadas presentan un comportamiento
muy similar. En general son fonemas sencillos de segmentar y fácilmente
identificables.
Sólo remarcar que cuando van precedidos de fonemas sonoros, el silencio de las
oclusivas puede presentar una sonoridad residual que al segmentar complica la
determinación del comienzo del fonema. Se suele optar por incluir en la oclusiva
aquella sonoridad que esté tan atenuada que apenas se pueda apreciar al escuchar.
El segundo problema se encuentra en la explosión que normalmente precede a una
vocal. Suele ocurrir que los primeros periodos posteriores a la explosión, presenten
irregularidades. A pesar de ello, estas irregularidades no se incluyen en el fonema
oclusivo al marcarlo, limitándolo a la explosión. En la siguiente figura se presenta
una /k/ segmentada.
218
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas ANEXO I
FIGURA 75: EJEMPLO SEGMENTACIÓN FONEMA OCLUSIVO /K/
FRICATIVAS
Los sonidos fricativos también resultan muy fáciles de identificar, pues sus
características los hacen a simple vista muy diferentes del resto. Los fonemas
fricativos, afectan ligeramente a los sonidos adyacentes provocando una especie de
ruido en sus periodos adyacentes. En general, haciendo uso de la opción oír se trata
de delimitar la separación más correcta entre fonemas.
Se presenta en la siguiente figura una /z/ segmentada. Se comprueba que al
principio del fonema, existe cierta periodicidad residual que procede de la vocal
anterior. El punto de delimitación del final de la /z/ resulta más sencillo de identificar,
pues la transición desde la /s/ hasta la siguiente vocal es bastante brusca, pasándose
de un silencio ruidoso a un periodo sonoro de forma clara.
219
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas ANEXO I
FIGURA 76: EJEMPLO SEGMENTACIÓN FONEMA FRICATIVO /T/
SONIDOS SONOROS
La dificultad a la hora de segmentar un fonema sonoro se encuentra no tanto en el
propio fonema como en el contexto en que se encuentre dicho sonido. Así, separar
una vocal entre dos fricativas es muy sencillo. Por el contrario, cuando la vocal forma
parte de un diptongo, o aparece junto a los fonemas /y/ y /ñ/, resulta casi imposible
determinar los puntos exactos que delimitan el fonema vocálico.
Cuando se encadenan de forma consecutiva varios fonemas sonoros, en general será
muy importante utilizar repetidas veces la opción de oír, para determinar lo mejor
posible las zonas de separación entre unos sonidos y otros. Además podemos
ayudarnos fijándonos en la forma de onda que pueden presentar ciertos grupos de
sonidos.
De este modo conviene saber que los fonemas aproximantes y los laterales se
detectan muy bien por energía. En efecto, estos sonidos suelen presentar una energía
bastante menor que la del entorno que le rodea. Los sonidos vibrantes tienen una
forma muy característica, tanto la /r/ como la /rr/, que permite su segmentación de
forma sencilla.
El contexto más complejo es el de los diptongos o hiatos, y las nasales
(especialmente problemático es el caso de la /ñ/) seguidas o precedidas de vocales.
En estos últimos casos resulta imposible separar perfectamente unos fonemas de
220
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas ANEXO I
otros. Se intenta entonces proponer una solución que no cometa demasiado error. En
la figura 77 y en la figura 78 se muestran ejemplos de segmentación de un hiato y del
grupo /ñ/+vocal.
FIGURA 77: EJEMPLO SEGMENTACIÓN FONEMA /Ñ/
FIGURA 78: EJEMPLO SEGMENTACIÓN HIATO /AE/
221
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas ANEXO I
3. Lenguaje Perl
Perl se considera un lenguaje interpretado, es decir, no es necesaria una previa
compilación para poder ejecutarse, lo único que necesita el intérprete de perl es el
código a ejecutar. Es por ello que no se habla de programas en lenguaje perl sino de
scripts. A continuación se realiza una breve explicación de los elementos que
componen los scripts implementados y que se utilizan en este proyecto:
VARIABLES Y DATOS
En perl no hay que declarar los tipos de las variables y éstas siempre van
precedidas por unos caracteres especiales que indican el tipo de dato al que
hacen referencia. Existen 3 tipos posibles de variables [Perl 6]:
Variables escalares : Van precedidas del símbolo $ y contienen datos
de tipo escalar, es decir, valores alfanuméricos.
Variables listas: Van precedidas del símbolo @ y contienen una
colección ordenada de valores escalares. Al ser una lista de valores
para acceder a cada uno de ellos se utiliza un número que indica su
posición dentro de la lista (índice de la lista). La numeración empieza
en cero.
Variables matrices asociadas ó hashes: Comienzan con el símbolo %
y se trata de matrices que se referencian por el par clave/valor.
Hay que destacar que se distingue entre mayúsculas y minúsculas, y que se
puede usar el mismo nombre para variables de diferentes tipos, sin que tengan
conflictos. Los operadores aritméticos solo afectan a los valores numéricos. A
continuación se muestran ejemplos de asignaciones de variables y accesos a
los valores de estas.
CUADRO 2: ASIGNACIONES DE VARIABLES EN PERL
ENTRADA /SALIDA Los valores de las variables pueden ser mostrados en pantalla mediante la
instrucción print. Para asignar un valor desde el teclado a una variable se
asigna a la variable la representación del teclado <STDIN> [Perl 6].
222
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas ANEXO I
ESTRUCTURAS DE CONTROL
Las estructuras han sido heredadas del lenguaje C/C++, por lo que ha sido
fácil la adaptación a las mismas. A continuación se muestra un cuadro con
ellas. [Perl 6]
CUADRO 3: ESQUEMA DE ESTRUCTURAS DE CONTROL EN PERL
EXPRESIONES REGULARES Y PATRONES DE BÚSQUEDA
Una de las características más potente y usada en perl es la manipulación
de cadenas. Para ello existen una gran variedad de símbolos y caracteres
especiales que actúan como patrones de búsqueda, comparación o sustitución
en una cadena. Las expresiones a buscar se escriben entre barras “/”, y si se
quisiera buscar este carácter se escribiría “\/”. Los operadores que se han
empleado en la implementación de scripts son sobre todo [Perl 6]:
Patrones de búsqueda : Se utilizan los símbolos =~ (contiene) y !~ (no
contiene) para la comparación de expresiones. Un ejemplo de su uso es:
if($cadena =~ /hola/) Si la variable cadena contiene “hola”
Para realizar una comparación y búsqueda más exacta se usan los
metacaracteres, que son una serie de caracteres que se usan con un
significado especial y distinto del que representan. Entre los que se han
utilizado destacan:
223
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas ANEXO I
METACARACTER DESCRIPCIÓN/EJEMPLO
/^expresión/ Busca la expresión sólo al principio de la cadenaif ($cadena15 =~ /^expresión)
/$expresión/ Busca la expresión sólo al final de la cadenaif ($cadena =~ /$expresión/)
/^$/Es una combinación de los anteriores que significa que se busca una línea en blancoif ($cadena =~ /^$/)
/carácter*/ó /carácter+/ Indica que se busca una palabra en la cadena que empiece por el carácter indicado
? ó . Busca cualquier carácter en una cadenaif ($cadena =~ /m?no/) Busca mano,mbno, etc..
\b y \B
Busca una cadena o expresión sola o dentro de otra respectivamenteif ($cadena =~ /\bexpresión/) Busca dentro de cadena la expresión sola (no forma parte de una cadena). if ($cadena =~ /\Bexpresión/) Busca dentro de cadena algo que contenga la expresión (forma parte de una cadena).
/expresion1|expresion2/ Se realiza una búsqueda doble o alternativa, es decir, busca dentro de una cadena una expresión u otra
TABLA 66: PATRONES DE BÚSQUEDA EN PERL
Sustituciones: En las sustituciones se antepone la letra “s” de sustitución
a los delimitadores de la expresión. Usando la variable implícita $_ se
realizan sustituciones rápidas. Por ejemplo, la expresión
s/expresión1/expresión2/ busca en la variable $_ la expresión1 y la
sustituye por expresión2. También aquí se utilizan una serie de
metacaracteres que amplían las posibilidades de sustitución pero en este
proyecto se han utilizado:
METACARACTER DESCRIPCIÓNs/exp1/exp2/g Sustituye todas las exp1 que existan en la cadena
por exp2\s Sustituye cualquier espacio en blanco
s/\s/expresión/\D Sustituye cualquier no número de la cadena
s/\D/expresión/\d Sustituye cualquier dígito entre 0-9 de la cadena
s/\d/expresión/\S Sustituye todo lo que no sean espacioss/exp1/exp2/gi Sustituye exp1 por exp2 sin tener en cuenta
mayúsculas y minúsculas
TABLA 67: COMANDOS PARA SUSTITUCIONES EN PERL
15 Muchas veces es preferible usar la variable implícita $_ para realizar las búsquedas, de este modo no es necesario incluir la variable en la comparación. En este caso la instrucción quedaría if(/expresión/) realizándose la comparación con la cadena contenida en la variable $_.
224
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas ANEXO I
Funciones: El lenguaje incluye una serie de funciones especiales para el
tratamiento de cadenas. Entre ellas, se han utilizado split y join. La
función split trocea una cadena en distintos campos, usando como
delimitador un carácter dado y devuelve una matriz @ con los campos
obtenidos. La función join, en cambio, compone una cadena a partir de
distintos campos usando como delimitador de cada campo un carácter
dado y devolviendo la cadena generada.
MANEJO DE ARCHIVOS
Se puede dar el caso que después de realizar cierto proceso con datos, se
tengan que grabar estos para usarlos posteriormente. Se presenta la necesidad
por tanto de crear un archivo. Todo archivo tiene un nombre lógico y un nombre
físico. El nombre lógico es el que se utiliza en la implementación para referirnos
al fichero físico. Se utilizan los metacaracteres “>” y “>>” para escribir por
primera vez y para añadir información a un fichero respectivamente. Las
funciones que se utilizan son open (para abrir el fichero), print (para escribir) y
close (para liberarlo). En el cuadro adjunto se tienen diferentes ejemplos de
utilización de estas funciones para la creación y escritura en ficheros [Perl 6].
CUADRO 4: EJEMPLO MANEJO DE FICHEROS EN PERL
4. Creación fichero por lotes
Todos los ficheros por lotes deben llevar la extensión *.bat, y son ficheros de texto.
A la hora de la ejecución debemos teclear el nombre del archivo a continuación del
símbolo del sistema. Para detener el procesamiento del archivo es necesario teclear
Ctrl+Pausa. [Barajas 96] Como ya se ha comentado todos los comandos de MS-DOS
son admitidos en un archivo por lotes. Además existen una serie símbolos empleados
exclusivamente en los ficheros por lotes.
225
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas ANEXO I
Estos símbolos se muestran en la siguiente tabla:
SÍMBOLO SIGNIFICADO:etiqueta Nombre de la etiqueta%número Parámetro del fichero por lotes%variable% Variable de entorno%%variable Variable de la orden for
TABLA 68: SÍMBOLOS EMPLEADOS EN FICHEROS POR LOTES
Cuando se quiere acceder o utilizar un parámetro introducido por línea de
comandos al script *.bat se utiliza el signo % seguido del número de parámetro para
referirnos a él. Se pueden tener hasta nueve parámetros de entrada.
Existen una serie de órdenes diseñadas específicamente para estos ficheros:
Orden ECHO: Si el eco está activo, se imprime por pantalla todos los
comandos y resultados del proceso. Se puede utilizar de diferentes formas:
ECHO Indica si está activado o desactivado el ecoECHO ON Activa el ecoECHO OFF Desactiva el eco (si @ delante no imprime orden)ECHO mensaje Muestra un mensaje en pantallaECHO. Muestra una línea en blanco en pantalla
Orden REM: Se utiliza para escribir comentarios en el código del fichero por
lotes. Las líneas precedidas por rem serán ignoradas durante el procesado del
fichero. También se utiliza “::” para escribir comentarios que facilitan la lectura y
la detección de errores.
Orden PAUSE: Detiene temporalmente el procesamiento de un script. Si se
encuentra esta orden en un archivo por lotes, se visualiza un mensaje por
pantalla y se bloquea hasta que la pulsación de una tecla le haga seguir. Para
pausar un proceso también se puede pulsar Ctrl+Pausa y así, interrumpir el
desarrollo del fichero.
Orden GOTO: Realiza un salto en la ejecución del programa hasta una etiqueta
especificada como parámetro. Las etiquetas van precedidas por el símbolo “:”
desviar la ejecución del programa hasta una etiqueta especificada como
parámetro.
Orden IF: Realiza un salto condicional en el proceso de ejecución del fichero
por lotes. La sintaxis de esta orden es variada y admite diferentes
implementaciones:
IF EXIST fichero orden Si existe el fichero se ejecuta el comandoIF NOT EXIST fichero orden Si no existe el fichero se ejecuta el comando
226
Desarrollo de un conversor texto-voz multiemoción en castellano por concatenación de difonemas ANEXO I
IF cadena1==cadena2 orden Si se cumple la condición se ejecuta la ordenIF NOT cadena1==cadena2 orden Si no se cumple la condición se ejecuta la orden
IF ERRORLEVEL Nº orden Si el código de salida del último programa es igual o superior al número, se ejecuta la orden
IF NOT ERRORLEVEL Nº orden Si el código de salida del último programa es inferior al número, se ejecuta la orden
Orden FOR: Esta orden repite el comando espedificado para cada valor de un
conjunto (normalmente es una lista de nombres de ficheros). La sintaxis de
esta orden es FOR %%variable IN (conjunto) DO comando
Por ejemplo, en la instrucción “for %%i in (listaFicheros) do type %%i”, la
variable %%i toma cada uno de los valores del conjunto y se los pasa al
comando type que los imprimirá por pantalla.
Orden CALL: Se utiliza para llamar a un fichero por lotes desde otro. Su
sintaxis es CALL fichero [ParámetrosDelFichero]
227