Este artículo es una curiosa mezcla de arte y tecnología, pero lo he escrito al instante tras ver un increíble video que explica brevemente como incursiono la computación en el mundo del arte. Con sus matices, es toda una genialidad matemática. Que ahora haya un gran caos porque las máquinas cantan demasiado bien mediante plagiar a los humanos, ya es un asunto del que hablaré más adelante.
Introducción
Todo empieza con este genial vídeo de Bit Wonder en el que explican como fue apareciendo la voz digital en sus inicios, con la conocida canción Daisy Daisy.
Este vídeo esta explicando como funcionan los formantes para dar origen a la conocida cancion Daisy Daisy cantada por la IBM 7094 en el año 1961.
See, suena medio siniestro. Pero como dato adicional, es increíble la calidad con la que suena la voz. Esto es muy notable en el sentido de que en mis recuerdos, el texto a voz no funcionaba tan bien. Esto es debido a la potencia de calculo pues, la IBM 7094 era un monstruo de millones de dolares, mientras que se tuvo que usar sistemas mas modestos con resultados menos satisfactorios.
El experimento de 1961 se realizó en una IBM 704, una computadora central (mainframe) que costaba millones de dólares, ocupaba una habitación entera y tenía la potencia necesaria para procesar complejos filtros matemáticos en una señal de audio.
Cuando la tecnología de voz computarizada se intentó masificar en los años 70 y 80 para el consumidor común, se tuvieron que hacer enormes sacrificios:
- Microchips muy limitados: Las computadoras domésticas y los juguetes usaban procesadores de 8 bits extremadamente económicos. No tenían la capacidad de calcular filtros dinámicos y fluidos en tiempo real.
- Falta de memoria: El audio digitalizado consume mucho espacio. Para meter voz en un cartucho o chip de la época, se usaron métodos de compresión agresivos (como la codificación predictiva lineal o LPC). Esto reducía el habla a «fonemas» básicos muy comprimidos, lo que daba como resultado ese sonido robótico, raspy, metálico y cortado que asociamos con la ciencia ficción retro.
Biomimetica: La voz humana
Hablar un idioma es una operación inmensamente compleja en la que usamos muchos componentes que modifican un único sonido básico que es lo que da origen a la voz. Es una de esas cosas inquietantes que se aprenden conforme se descubren cosas al estudiar la naturaleza, pero las cuerdas vocales, no producen palabras claramente discernibles. Solo zumban. Y solo pueden aumentar y disminuir la frecuencia y el volumen. Sin los componentes de modulación, no podríamos distinguir nuestra voz de un zumbido del vuelo de una mosca.
En este vídeo se puede ver una tomografía mostrando cada componente y como interactuan entre si para generar un canto. Pero seguro te habras dado cuenta que sin mover la lengua, no puedes pronunciar algunas palabras. y sin modificar la forma de la boca, tampoco puedes pronunciar algunas vocales.
La ciencia ha estudiado intensivamente como funciona el aparato fonador humano y hasta ha logrado hacer replicas de este, de tal manera que se pueden reproducir voces muy distinguibles. Este vídeo de hace 19 años, muestra como un solo zumbido cambia por la forma del tracto respiratorio, reproduciendo vocales en voces de hombres o mujeres.
Por supuesto, esto significa que es posible reproducir el habla de forma mecánica como en este vídeo
Y aquí te dejo un vídeo gratis de una chica explicando con una banda elástica como funcionan las cuerdas vocales
Pero aunque hay muchísima información sobre como funciona el sistema fonador humano, no puedes ponerle cuerdas vocales y traquea y lengua y boca a una computadora. Ten en cuenta que todos los sonidos se reproducen por un altavoz y nada mas. Así que aquí entran las matemáticas.
Formantes: Las matematicas tras el habla
Para entender cómo hacíamos hablar a las computadoras antes de la Inteligencia Artificial, primero debemos entender cómo hablamos los humanos. Nuestro aparato fonador funciona bajo un principio llamado Modelo de Fuente y Filtro.
Cuando hablas, tus cuerdas vocales vibran y producen un zumbido áspero, monótono y lleno de frecuencias (la Fuente). Si escucharas ese sonido de forma aislada, te parecería el zumbido de un insecto o una onda eléctrica. Sin embargo, cuando ese zumbido viaja por tu garganta, tu boca y tu nariz, la forma en que mueves la lengua y los labios actúa como una caja de resonancia (el Filtro). Al cambiar la forma de la «caja», amplificas ciertas frecuencias y apagas otras.
A esos picos de frecuencia que tu boca amplifica para darle forma a una vocal los llamamos formantes.
El Modelo Matemático: ¿Cómo se programa una boca?
En el software clásico, no grabamos archivos de audio reales. En su lugar, recreamos la física humana utilizando matemáticas puras y dos componentes principales:
- La Fuente Virtual (Oscilador): Generamos una onda geométrica, usualmente una onda de sierra (sawtooth) o un tren de pulsos. Esta onda emula el zumbido de las cuerdas vocales a una frecuencia base (el pitch). Para una voz masculina estándar, este oscilador vibra a unos 100-125 Hz.
- El Filtro Virtual (Filtros de Resonancia): Pasamos esa onda de sierra a través de filtros de paso de banda de segundo orden (IIR o Infinite Impulse Response). Cada filtro está diseñado matemáticamente para aislar y amplificar un punto específico del espectro de audio, imitando una cavidad de la boca.
- Para que una computadora pronuncie una vocal de forma reconocible, solo necesitamos activar dos o tres de estos filtros en frecuencias muy específicas (medidas en Hertz):
- Para decir «A»: Sintonizamos el Filtro 1 (F1) en 730 Hz y el Filtro 2 (F2) en 1090 Hz.
- Para decir «I»: Movemos el Filtro 1 (F1) a 270 Hz y el Filtro 2 (F2) a 2290 Hz.
Cuando el código cambia fluidamente los valores de estos filtros a lo largo del tiempo, la computadora realiza una transición de sonido (un diptongo como «Ai») que imita a la perfección el movimiento de los músculos humanos.
Aplicación Histórica en el Software
Este enfoque matemático fue la primera gran revolución del procesamiento de voz (Text-to-Speech o TTS). En lugar de necesitar gigabytes de memoria para almacenar grabaciones de voz humana (algo imposible en el siglo pasado), la síntesis por formantes permitía generar habla calculando ecuaciones en tiempo real.
- Los Años 60 (Bell Labs): Científicos como Max Mathews usaron masivos mainframes como la IBM 7094 para resolver estas ecuaciones mediante tarjetas perforadas, logrando el histórico hito de hacer cantar a una computadora por primera vez en 1961.
- Los Años 70 y 80 (El chip LPC): Para llevar esta tecnología a los hogares de forma barata, se simplificó el modelo matemático mediante la Codificación Predictiva Lineal (LPC). Chips legendarios como el Texas Instruments TMS5100 redujeron los filtros a una pequeña tabla de datos de fonemas. Gracias a esto nacieron juguetes icónicos como el Speak & Spell (Aprende el Alfabeto) y las voces robóticas de las máquinas de arcade de la época.
- La síntesis por formantes demostró que el habla humana no es más que una hermosa combinación de frecuencias y geometría acústica.
Los juguetes de Speak & Spell se aprovecharon bastante de poder convertir la voz en matematicas pues, no necesitaban almacenar archivos de voz enteros en el escasisimo espacio de almacenamiento, sino que las voces eran generadas en tiempo real, permitiendo agregar funcionalidades en lugar de ahorrar ese espacio para archivos de voz.
Notese como cambia la calidad del sonido entre las voces generadas por formantes con los sonidos de audio ultra comprimido en algunos videojuegos para la Famicon
Por supuesto, The 8-bit Guy explica todo esto con mejores detalles.
Las voces digitales en el arte
Quiero destacar algo que noté mientras escribía este artículo. Es posible que lo que entendemos por hardware y software haya sido entendido de forma muy diferente en la antigüedad.
Digo esto por la forma en la que se describe el logro de hacer cantar una máquina. En la actualidad, nosotros discernimos claramente la diferencia entre la máquina y el software, siendo que la cualidad del software es transferible entre diferentes máquinas, siendo estas últimas solo un cascarón desechable para el software. Pero en el pasado, ambos eran indistinguibles entre sí, generando esa curiosa relación con la ciencia ficción en la que la máquina era la parte que vemos, con la parte que no vemos. Es decir, un ser completo. Algo diferente a nosotros, pero que se puede entender como a nosotros.
Esto lo he notado en la forma en la que se describían a los robots en la ciencia ficción. Cosas como Metrópolis (1927), donde la máquina «María la androide» (o el Maschinenmensch) no era un programa ejecutándose, sino un duplicado físico y metálico con identidad propia diseñado para desatar el caos; Planeta Prohibido (1956), donde Robby el Robot personificaba al sirviente perfecto e incorruptible, cuya mente y cuerpo mecánico formaban una sola voluntad inquebrantable; o la serie televisiva Perdidos en el Espacio (1965), donde el Robot B-9 poseía una personalidad protectora y miedos tan ligados a su chasis de aluminio que nadie concebía «mudar» su mente a otra computadora, de tal manera que se puede notar la manera en la que la máquina y el software eran para la gente, exactamente lo mismo.
Esto me ha llamado la atención mucho porque tenemos a un autor muy reconocido que vio cantar a la IBM 704 en vivo, tanto que dio origen a la historia de 2001: Odisea del Espacio: Arthur C. Clarke.
El quedó tan impactado por el realismo de esa máquina de millones de dólares que decidió plasmarlo en el libro, obligando a HAL a cantar exactamente la misma canción mientras el astronauta Dave Bowman le desconecta los módulos de memoria uno a uno.
Esto es interesante por cuanto, a pesar de haber visto en persona la máquina cantando, en su obra, posteriormente representada por Kubrick en 1968, demostró no comprender la tecnología al desconectar a HAL 9000.
Muchos de los diálogos que habla la máquina se parecen más a lo que diría una persona que a una máquina real, siendo el curioso caso de que ni los modernos LLM hubiesen actuado de esa manera. Pero la muerte de HAL 9000, mientras lo desconectaban, fue más bien como la degeneración por demencia de una persona que va quedando senil, mientras su voz se va apagando hasta la muerte.
Considero muy buena la escena. La he vuelto a ver. Efectiva en cuanto a la empatía, y siendo que era la intención empatizar con la máquina. Esta hasta dice que tiene miedo, causando una impresión profunda en quien vea la obra. Pero el efecto de la desconexión, habiendo entendido el funcionamiento de los formantes, hubiese sido más inquietante y perturbador. Mientras se desconectan funciones, la voz de HAL 9000 hubiese tenido este recorrido:
- [CONCIENCIA TOTAL] -> HAL habla con voz perfecta (Filtros estables y dinámicos).
- [FASE 1: Pérdida de Consonantes] -> Desaparece el ruido blanco. Ya no puede modular la «S» ni la «T». La voz se vuelve un balbuceo de puras vocales unidas.
- [FASE 2: Pérdida del Formante Superior (F2)] -> El filtro agudo se apaga. La voz pierde toda la claridad y brillo. Suena como si HAL estuviera hablando bajo el agua o atrapado dentro de una caja de metal gruesa.
- [FASE 3: El Zumbido Desnudo] -> El filtro principal (F1) muere. La «boca virtual» se cierra por completo. Solo queda la FUENTE pura: la onda de sierra matemática, un zumbido eléctrico de 120Hz continuo y plano. La máquina sigue encendida, pero el software ha muerto.
Como ya hemos visto en los videos anteriores, la voz humana sin los formantes es solo un zumbido inerte. Un electrocardiograma plano para efectos literarios en la escena.
Al final, como decía Clarke, la tecnología avanzada es indistinguible de la magia. Muchos autores de ciencia ficción no entendían plenamente la tecnología que avanzaba vertiginosamente en esos tiempos. Tampoco tenían acceso tan sencillo a la información como lo tenemos ahora (lo que probablemente era mejor, ya que crearon grandes obras sin caer en las rigideces del hard sci-fi). Y el público, por supuesto, tampoco era especialmente académico como para entender si decidían hablar de formantes en la historia de una IA psicópata. Por esta razón, se ha dado una curiosa separación entre las máquinas de la literatura y las máquinas reales.
En la realidad, ya distinguimos a las máquinas de su software, al punto de que la máquina en sí es solo una carcasa descartable para el código, que es la identidad en sí misma. Ya no hay una «máquina que canta». Hay un software que canta en cualquier máquina. Por esa razón, conocemos a Hatsune Miku y no a la computadora específica que usaron para hacerla cantar; conocemos a Vocaloid y todo lo que esto implica. Y ahora, conocemos los modelos generativos de música por IA, como Suno AI o las herramientas multimodales de Google Gemini, que ya están dando sus primeros pasos para incursionar en el mundo de la música. La tecnología ha avanzado de tal manera que se ha vuelto una caja negra que no somos capaces de entender, pero que ya no vemos como una entidad física que puede causarnos daño… o salvarnos, dependiendo de la obra.
Por otro lado, la literatura y la ficción se quedaron con las máquinas monolíticas. Se afianzan profundamente a este concepto pues, si las máquinas reales son desechables y el software es infinitamente replicable, el drama desaparece. No hay tragedia en la inmortalidad digital. Esto se nota claramente en obras como Big Hero 6, que tuvo un momento dramático cuando el robot Baymax se sacrifica en otra dimensión y se considera una pérdida permanente, hasta que Hiro rescata el chip que contenía su programación y logra «revivirlo». «Devuélvanme mis lágrimas», como dirían algunas personas.
Pero luego tenemos el caso de Vivy: Fluorite Eye’s Song, el anime donde la protagonista, una androide cantante, vive 100 años combatiendo el apocalipsis hasta que su historia termina de forma definitiva. Otros personajes robóticos de esa misma historia también murieron de manera permanente. Son máquinas: se les pudo haber hecho un respaldo en la nube, pero eso habría quitado todo el peso dramático a sus sacrificios.
Pasa lo mismo en la saga clásica de Megaman, donde el argumento se empeña en recordarnos que los Reploids y los robots mueren permanentemente; incluso sienten miedo a la muerte a pesar de que bastaría con respaldar sus datos, repararlos o cambiarles el procesador. Al igual que una computadora que se queda sin energía puede volver a funcionar si se conecta de nuevo, un robot, mientras mantengas sus datos a salvo, siempre debería poder revivir.
Esta ironía se explora de manera increíble en el videojuego NieR: Automata. Allí, los androides 2B y 9S sacrifican sus vidas constantemente bajo el consuelo de que siempre pueden volver a despertar en un cuerpo nuevo gracias a su respaldo en el servidor de la Base… hasta que el servidor es destruido, el respaldo desaparece y la muerte se vuelve real por primera vez (ignorando el hecho de que, en una de las escenas más extrañas, 2B mata a 9S asfixiándolo, ¡a un robot que técnicamente no necesita respirar!).
Un pequeño experimento
Habiendo explorado todo esto, tambien queria darme una vuelta por el mundo de la programacion para intentar entender como funcionan los formantes. Por supuesto, las maquinas actuales si que pueden reproducir con abrumadora facilidad un sistema de sintetizacion de texto a voz por formantes, pero no cuento con la capacidad matematica para reproducir fielmente un sistema asi. Aun asi, quiero compartir un codigo que permite reproducir un texto mediante esta tecnica.
import numpy as np from scipy import signal import scipy.io.wavfile as wav # 1. Configuración de audio sample_rate = 44100 duracion_fonema = 0.25 # Duración de cada letra en segundos t = np.linspace(0, duracion_fonema, int(sample_rate * duracion_fonema), endpoint=False) # Frecuencia de la voz (Afinación robótica constante) pitch = 130 # 2. Diccionario de Fonemas (La base de datos de nuestra "boca virtual") # Las vocales usan filtros (F1, F2). Las consonantes usan modos especiales ('ruido' o 'silencio') fonemas = { 'a': {'tipo': 'vocal', 'f1': 730, 'f2': 1090}, 'e': {'tipo': 'vocal', 'f1': 530, 'f2': 1840}, 'i': {'tipo': 'vocal', 'f1': 270, 'f2': 2290}, 'o': {'tipo': 'vocal', 'f1': 570, 'f2': 840}, 'u': {'tipo': 'vocal', 'f1': 300, 'f2': 870}, 's': {'tipo': 'ruido', 'f_corte': 4000}, # Ruido agudo 'f': {'tipo': 'ruido', 'f_corte': 2500}, # Ruido más sordo 't': {'tipo': 'explosion', 'f_corte': 3000}, # Ruido corto de golpe ' ': {'tipo': 'silencio'} } def sintetizar_letra(letra, sr, t_array): letra = letra.lower() # Si la letra no está en nuestra base de datos, usamos un espacio en blanco if letra not in fonemas: letra = ' ' info = fonemas[letra] # Caso A: Silencio (Espacios) if info['tipo'] == 'silencio': return np.zeros_like(t_array) # Caso B: Vocales (Onda de sierra + Filtros de formantes) elif info['tipo'] == 'vocal': fuente = signal.sawtooth(2 * np.pi * pitch * t_array) # Filtro Formante 1 b1, a1 = signal.iirpeak(info['f1'], info['f1'] / 50, fs=sr) f1 = signal.lfilter(b1, a1, fuente) # Filtro Formante 2 b2, a2 = signal.iirpeak(info['f2'], info['f2'] / 50, fs=sr) f2 = signal.lfilter(b2, a2, fuente) return (f1 + f2) # Caso C: Consonantes continuas (Ruido blanco filtrado de forma sibilante) elif info['tipo'] == 'ruido': ruido_blanco = np.random.normal(0, 1, len(t_array)) # Filtro paso alto para simular el siseo de los dientes b, a = signal.butter(4, info['f_corte'], btype='high', fs=sr) return signal.lfilter(b, a, ruido_blanco) * 0.3 # Caso D: Consonantes percusivas (Un golpe rápido de ruido que decae) elif info['tipo'] == 'explosion': ruido_blanco = np.random.normal(0, 1, len(t_array)) envolvente = np.exp(-25 * t_array) # Decaimiento ultra rápido b, a = signal.butter(4, info['f_corte'], btype='high', fs=sr) return signal.lfilter(b, a, ruido_blanco) * envolvente * 0.8 # 3. El motor de Texto a Voz (TTS) # ¡Prueba a cambiar esta frase usando las letras configuradas (a, e, i, o, u, s, f, t)! texto_a_decir = "formantes" audio_final = np.array([]) for letra in texto_a_decir: print(f"Articulando fonema: '{letra}'") audio_letra = sintetizar_letra(letra, sample_rate, t) # Suavizado en los bordes para evitar clicks eléctricos audibles ventana = signal.windows.hann(len(audio_letra)) audio_letra = audio_letra * ventana audio_final = np.concatenate((audio_final, audio_letra)) # Normalizar volumen if len(audio_final) > 0 and np.max(np.abs(audio_final)) > 0: audio_final = audio_final / np.max(np.abs(audio_final)) # Guardar archivo de salida nombre_salida = "tts_robotico.wav" wav.write(nombre_salida, sample_rate, (audio_final * 32767).astype(np.int16)) print(f"\n¡Audio generado con éxito! Archivo guardado como '{nombre_salida}'.")
El resultado es malisimo, pero si que se puede apreciar, como adjunto en este archivo de audio. Es gracioso porque suena como si hiciera beatbox XD.
Conclusiones
Es interesante como se sabe tanto sobre la voz humana al punto de que es posible hasta revivir la voz de una momia. Da hasta miedo. pero tambien es interesante como se tuvo que hacer tanta ingenieria para poder recrear voces mediante matematicas. Explorar como trabajan los formantes para convertir un simple zumbido, biológico o digital, en voz, es interesante porque ayuda a comprender como funciona el mundo. La sintesis de texto a voz actual ha evolucionado mucho, al punto de que la naturalidad en la que funcionan puede llegar a ser inquietante. Y es justamente la humanidad de las voces modernas lo que las hace agotadoras. Algunas personas pueden ajustar sus sistemas de lectura de pantalla a la síntesis clásica pues su predictibilidad y claridad les permiten escuchar textos a velocidades sobrehumanas (300-400 palabras por minuto) sin perder la comprensión.

