Por Qué a Tu Imagen de Forma de Onda Le Falta la Batería
Dibujar una forma de onda es un problema de reducción: varios millones de números tienen que convertirse en unos cientos de columnas de píxeles. Casi todas las herramientas lo resuelven igual, en una línea, y esa línea está mal de una manera que se puede medir con exactitud.
Esta es la aritmética que lo convierte en un problema. Una pista de tres minutos a 44,1 kHz son 7.938.000 muestras. Dibujada a 800 px de ancho, cada columna de píxeles tiene que representar 9.922,5 de ellas. Algo tiene que decidir qué significa la altura de una columna.
La respuesta habitual es tomar una muestra de cada columna y dibujar su altura. Eso lee 800 muestras de 7.938.000 — el 0,0101 % del archivo. No es un resumen de la columna. Es un muestreo puntual de ella, a una tasa miles de veces por debajo de la de la propia señal, que es el escenario de manual del aliasing.
Un tono a escala completa dibujado como línea plana
La forma más limpia de verlo es dibujar un audio cuyo dibujo correcto ya conoces. Generamos 180 segundos de un tono constante a amplitud 1,0 — escala completa desde la primera muestra hasta la última. El dibujo verdadero es un bloque sólido de altura 1,000, en todas las columnas, sin discusión.
Esto es lo que devuelve una muestra por columna cuando lo único que cambia es la frecuencia:
| Tono | Una muestra por columna | Todas las muestras (pico) |
|---|---|---|
| 100 Hz | 0,0036 | 1,0000 |
| 220 Hz | 0,0078 | 1,0000 |
| 261,63 Hz | 0,6361 | 1,0000 |
| 440 Hz | 0,0157 | 1,0000 |
| 441 Hz | 0,6352 | 1,0000 |
| 1000 Hz | 0,0356 | 1,0000 |
| 2000 Hz | 0,0710 | 1,0000 |
| 5000 Hz | 0,1744 | 1,0000 |
Audio idéntico, al mismo volumen, y las respuestas van de 0,0036 a 0,6361. Ciento ochenta segundos de un tono que nunca sale de la escala completa se dibujan como una línea plana a 440 Hz — y a 441 Hz, un hercio más allá, como una onda al 64 % de altura.
Nada de eso es una propiedad del audio. Es una propiedad de cómo el periodo del tono se divide en el paso de las columnas: 440 Hz a 44,1 kHz son 100,227 muestras por ciclo, y 9.922,5 muestras por columna son 99,0 de esos ciclos — así que columna tras columna cae casi en la misma fase. El retrato es de la aritmética, no del sonido.
Cambia el tamaño y la onda cambia de forma
Esta es la señal que mucha gente ya ha visto sin saber nombrarla. Coge ese mismo archivo de 440 Hz y redibújalo a distintos anchos, sin tocar nada más:
| Ancho | Muestras por columna | Una muestra por columna | Todas las muestras |
|---|---|---|---|
| 600 px | 13.230,0 | 0,0000 | 1,0000 |
| 700 px | 11.340,0 | 0,6259 | 1,0000 |
| 800 px | 9.922,5 | 0,0157 | 1,0000 |
| 900 px | 8.820,0 | 0,0000 | 1,0000 |
| 1000 px | 7.938,0 | 0,6155 | 1,0000 |
| 1200 px | 6.615,0 | 0,0000 | 1,0000 |
| 1920 px | 4.134,4 | 0,5114 | 1,0000 |
Un archivo, un tono, siete dibujos — tres de ellos en blanco. Si alguna vez has exportado una onda en dos tamaños y el segundo te pareció raro, tenías razón, y es por esto. Un dibujo que cambia cuando cambias el lienzo no está describiendo el audio.
Una pista de batería sin batería
El caso de la frecuencia es una demostración limpia, pero el caso que cuesta trabajo de verdad son los transitorios. Un estallido de 2 ms a 44,1 kHz son 88 muestras — el 0,89 % de una columna de 9.922 muestras. Leer una muestra por columna cae encima de él alrededor del 0,89 % de las veces.
Montamos una pista de clics: 360 estallidos a escala completa, uno cada 500 ms, a lo largo de tres minutos. Luego la dibujamos de las dos maneras.
| Medición | Una muestra por columna | Todas las muestras (pico) |
|---|---|---|
| Columnas que muestran un estallido | 0 de 800 | 360 de 800 |
| Columna más alta | 0,0000 | 0,8973 |
| Muestra única a escala completa encontrada (200 posiciones al azar) | 0 / 200 | 200 / 200 |
| Estallido de 2 ms encontrado (200 posiciones al azar) | 3 / 200 | 200 / 200 |
Cero. No una batería más floja — ninguna batería. Cada uno de los 360 golpes a escala completa cayó entre las muestras observadas, y el dibujo volvió como una línea plana. Escondiendo una única muestra a escala completa en un archivo silencioso y moviéndola a 200 posiciones al azar, el atajo la encontró ninguna de las 200 veces; ensanchándola a un estallido de 2 ms, encontró tres.
Por qué nadie se da cuenta
Porque nunca falla a gritos. Una onda un 65 % más baja, o sin sus transitorios, o con otra forma a otro tamaño, sigue pareciendo una onda. Tiene picos y valles, empieza donde empieza el audio y acaba donde acaba, y en general es más alta en las partes altas. No hay error, no hay aviso y no hay con qué compararla — que es exactamente la forma de los otros defectos que seguimos encontrando en herramientas creativas pequeñas: un anillo dibujado a la mitad del ancho que pediste parece un anillo más fino, no un fallo, y una rodaja de carrusel desplazada medio píxel parece una foto un poco blanda.
La razón para que te importe no es estética. Si estás cortando por la onda, alineando un subtítulo con un golpe o quitando silencio a ojo, estás decidiendo a partir de un dibujo que ha tirado el 99,99 % de las pruebas.
El arreglo, y lo que cuesta
Guarda el mínimo y el máximo de cada columna. Eso es todo. No puede perderse una muestra porque las lee todas, es estable al cambiar de tamaño porque no depende de qué muestras se miran por casualidad, y atrapa un transitorio de 88 muestras por el mismo motivo.
El coste: reducir las 7.938.000 muestras a 800 columnas llevó 4,70 ms, mejor de cinco ejecuciones, en un navegador normal. El atajo llevó 0,00 ms. Ese es todo el ahorro que se está defendiendo, y compra un dibujo que no es de tu audio.
El RMS es otra pregunta, no una respuesta equivocada
Hay una tercera opción que conviene nombrar, porque las herramientas la mezclan en silencio. El RMS es la energía media de la columna y no su muestra más fuerte. Para una sinusoide, el RMS es 0,7071 frente a un pico de 1,0000 — una onda en RMS es un 29,29 % más baja que una onda en pico del mismo audio.
Ninguna está mal. El pico te enseña los transitorios; el RMS sigue el volumen percibido y sale más suave. Lo que está mal es no saber cuál estás mirando, o una herramienta que usa una para la vista previa y la otra para la exportación.
Confirmado en un archivo real, después de publicar la herramienta
Las señales sintéticas demuestran el mecanismo; un archivo real demuestra que sobrevive al contacto con audio de verdad. Soltamos un fragmento de voz de 20 segundos — 960.000 muestras, mono, 48 kHz — en el generador de imagen de forma de onda terminado y leímos los números de la propia página, no de una reimplementación suya.
| Ancho | Pico real (todas las muestras) | Pico hallado por una muestra |
|---|---|---|
| 600 px | 0,2964 | 0,2387 |
| 800 px | 0,2964 | 0,2172 |
| 1000 px | 0,2964 | 0,1886 |
| 1200 px | 0,2964 | 0,2387 |
| 1920 px | 0,2964 | 0,2343 |
El pico real es 0,2964 a todos los anchos, porque es un hecho sobre el archivo. La respuesta del atajo vaga entre 0,1886 y 0,2387 según únicamente el ancho que pediste para la imagen. En el mismo fragmento, 88 de 480 columnas llegan a la mitad del pico real; leer una muestra por columna encuentra 10. Su dibujo es un 65,42 % más bajo de media.
La herramienta dibuja tu archivo de las dos maneras, lado a lado, e imprime esos números para lo que le des — así que la comparación es algo que ejecutas, no algo que te crees.
Preguntas frecuentes
¿Es un defecto real o una queja de purista?
Es un defecto con números detrás. En una pista de clics sintética el atajo dibujó 0 de 360 golpes y devolvió una columna más alta de 0,0000 para un audio que llega a escala completa una y otra vez. En un fragmento de voz real de 20 segundos informó del pico entre 0,1886 y 0,2387 según únicamente el ancho de la imagen, frente a un pico real de 0,2964. Nada de eso es cuestión de gusto.
¿Por qué iba alguien a leer una muestra por columna?
Porque es gratis y se ve bien. Reducir 7.938.000 muestras como es debido llevó 4,70 ms en un navegador; el atajo llevó 0,00 ms. Y el resultado sigue pareciendo una forma de onda, así que nada se queja — no hay error ni nada obvio con lo que compararlo.
¿Afecta también a los archivos cortos?
Mucho menos. El daño crece con cuántas muestras tiene que representar una columna. Un archivo de 10 segundos a 800 px son 551 muestras por columna y uno de 10 minutos son 33.075. Los clips cortos dibujados anchos son el caso más seguro; los archivos largos dibujados estrechos son el peor.
¿Y si hago la media de la columna?
La media de las muestras con signo es peor que las dos — una onda simétrica promedia hacia cero, así que el audio fuerte se dibuja como una línea plana por otro motivo. La media de los valores absolutos o el RMS son defendibles, pero ambos son más bajos que el pico por construcción: el RMS de una sinusoide es 0,7071 frente a un pico de 1,0000.
¿Leer todas las muestras hace lenta la página?
No. 4,70 ms para una pista de tres minutos es imperceptible, y ocurre una vez por redibujado, no continuamente. El coste dominante en el navegador es decodificar el archivo comprimido en muestras, algo que cualquier enfoque tiene que hacer igual.
¿Dónde pruebo la comparación con mi propio audio?
El generador de imagen de forma de onda dibuja tu archivo de las dos maneras en la misma página e informa del pico real, del pico que encontró el atajo, de cuántas columnas enseña cada método por encima de la mitad del pico real y de cuánto más bajo es el dibujo del atajo. No se sube nada: la decodificación y el dibujo ocurren en tu navegador.