English Version French Version Spanish Version

Tutorial de Sonidos Wavetable #1

Este tutorial describe cómo analizar y recrear sonidos wavetable de melodías SID con el SID MIDIbox.

El término "wavetable" se usa en la comunidad C64 para un método de síntesis, en el que la forma de onda y la frecuencia de una voz SID se modula tan rápido que los sonidos de salida resultantes parecen una nueva forma de onda, función que originariamente el chip no provee por sí mismo.Los cambios de parámetro se almacenan en una tabla- esa es la razón de este nombre- La técnica no está relacionada con la "síntesis wavetable", que se basa en muestras de audio.

MIDIbox SID provee un secuenciador wavetable muy genérico, que no solo controla la forma de onda y su frecuencia, sino cualquier parámetro CC (ver también la lista de todos los parámetros CC). Están disponibles tres pistas de hasta 32 pasos, que pueden controlar 3 CCs diferentes.Para sonidos comunes wavetable, es suficiente controlar la forma de onda (OSC1 waveform: CC#33) y el valor de transporte (OSC1 transpose: CC#17) de una única voz. También es posible controlar los valores waveform/transpose de todos los osciladores al mismo tiempo (CC#32 y CC#16), o modular el CC de un segundo oscilador en paralelo con el primero. Otro uso interesante de la tercera pista restante es la modulación de un LFO o parámetro de envolvente; debo mencionar que el secuenciador wavetable se puede usar para tocar notas y frases de arpegiador- ¡los métodos apropiados se discuten en el siguiente fascículo del tutorial!

Copiando sonidos de tambor típicos de C64 mirando las formas de onda

La creación de wavetables debe parecerse a la alquimia avanzada, pero su uso es muy fácil y abre un nuevo potencial para los sonidos una vez que conoces lo básico. Se pueden aprender de melodías SID ya existentes. En este tutorial, tomaré como ejemplo el tambor de base de "Auf Wiedersehen Monty" de Rob Hubbard (esta canción me impresionó tanto en los 80, que nunca fui capaz de olvidar esos groove drums). Así que, ¿por qué no echar un vistazo a la muestra de audio de esta canción reproducido con un SID original? Bueno, es difícil extraer el tambor de base en sí mismo, porque se reproducen al mismo tiempo otros sonidos. Esto dificulta la localización de la forma de onda y diferenciarla del resto de la suma de audio.

Pero hay ayuda: hoy en día se pueden reproducir canciones SID con emuladores en el PC. SIDPLAY es uno viejo, pero a diferencia del sidplay2, permite enmudecer canales de voces del SID (View->Mixer). El canal aislado se puede reproducir tanto con un SID emulado como con la MIDIbox. Pero el método más sencillo es escribir la salida del SID emulado en un archivo .wav ("File->Save as", seleccionar tipo de archivo ".wav")

Aquí finalmente una vista de la base de tambores emulada, que empieza en  0:38, canal #2:

Tenemos las siguientes partes:

  • empieza con una onda triangular, que se mantiene activa durante 20 mS
  • luego hay una parte corta de ruido durante 20 mS
  • acaba con una onda de pulso, la frecuencia y la amplitud se hacen más bajas

En las canciones SID, las secuencias wavetable están, en su mayor parte, divididas en fotogramas de 20 mS, lo que está relacionado con la manera en la que los trackers están incluídos en los juegos (se les llama desde una interrupción de línea de trama, la frecuencia de llamada depende del ratio de actualización de pantalla, que es de 50 Hz en sistemas PAL (50Hz -> periodo 20 mS)).

Para reconstruir la forma de onda, primero tienes que seleccionar la misma tasa de wavetable. Dado que MIDIbox SID temporiza el motor de sonido mucho más deprisa que un C64 (ciclo de actualización de 0.819 mS), la wavetable tiene que ser ralentizada. Se puede calcular el periodo de actualización de la wavetable con la siguiente fórmula:: periodo = 2 * (127-tasa) * 0.819mS.  Para obtener un periodo de 20 mS, la tasa apropiada es 115 In order to get a period of 20 mS.

Ahora puedes asignarle la pista uno a CC#33 (forma de onda OSC1) y la pista 2 a CC#17 (OSC1 transpose). Prueba a seguir la secuencia (también puedes usar el editor JSynthLib, o edita esta secuencia directamente desde el control de superficie SID)

STEP CMD    #1  #2  #3
00 Play 01 40 +00 # Reproduce triángulo, transportado por +0 (40 es la mitad)
01 Play 08 +00 +00 # Reproduce ruido, valor de transporte no tocado
02 Play 04 +00 +00 # Reproduce un pulso, valor de transporte no tocado
03 Play 14 -07 +00 # Libera bit de gate, valor de transporte disminuye -7
03 Play +00 -07 +00 # valor de transporte disminuye -7
03 Play +00 -07 +00 #
valor de transporte disminuye -7
06 End +00 +00 +00 # para (stop) el wavetable

Para difuminar el waveform después de que el bit de gate haya sido liberado, necesitas incrementar la tasa de liberación de la envolvente OSC DCA. Toca algunas notas en el teclado para probar el sonido.

Copiar trazando los cambios de registro SID

El método descrito arriba no es el idóneo para copiar un sonido de wavetable 1:1, porque las frecuencias (valores de transporte) tienen que ser determinadas a oído (por ej. comparando frecuencias. ¿No sería mejor extraer los valores que están escritos en los registros de sonido SID, directamente del archivo.sid ? Sí - esto es posible usando una herramienta de trazado. Encontré SIDDump V1.0 en covertbitops.c64.org , muy útil para este tipo de análisis. Procesa el archivo .sid emulando el C64 CPU, y descarga los cambios de registro SID a STDOUT.

De vuelta al tambor de base- estos son los cambios de registro que SIDdump ha trazado:

| Frame | Freq Note/Abs WF ADSR Pul | Freq Note/Abs WF ADSR Pul | Freq Note/Abs..
+-------+---------------------------+---------------------------+--------------..
...
| 1937 | .... ... .. 08 0000 ... | 0EA3 A-3 AD 11 08F8 ... | 057B E-2 9C ..
| 1938 | .... ... .. .. .... ... | 40A3 (B-5 C7) 81 .... ... | 684C (G-6 CF)..
| 1939 | .... ... .. .. .... ... | 0B23 (E-3 A8) 41 .... ... | .... ... .. ..
| 1940 | .... ... .. .. .... ... | 0923 (C#3 A5) 40 .... ... | 057B (E-2 9C)..
| 1941 | .... ... .. .. .... ... | 03CE (A#1 96) .. .... ... | .... ... .. ..
| 1942 | 2BD6 ... .. .. .... ... | .... ... .. .. .... ... | .... ... .. ..

(El principio del archivo, y las columnas de más a la derecha "channel 3" y "filter" están cortadas para mejorar el aspecto de esta página)

Para aquellos que estén interesados, aquí hay una explicación acerca de los cambios de valor en el canal #2. Si te sientes confuso, sólo tienes que ir al siguiente capítulo , en el que se describe un método simplificador.

En la primera fila puedes ver:

  • nota A-3 con forma de onda triangular, valores ADSR : A=0, D=8, S=F, R=8
  • nota B-5 con forma de onda de ruido
  • nota E-3 con forma de onda de pulso
  • nota C#3, pulso, gate liberado
  • nota A#1 (pulso, gate aún liberado)

Para la "traducción" al formato de parámetros SID MIDIbox , hay que tener en cuenta lo siguiente:

  • se procesa un fotograma cada 20 mS (50 Hz), la tasa wavetable apropiada de MIDIbox SID es 115 (ver arriba).
    Si sabes el tiempo en el que se reproduce el sonido, se puede calcular el número de fotograma apropiado con: fotograma = 50 * segundos
  • el semitono "A-3" de SID-Dump es equivalente al semitono "A-2" de MIDIbox SID (la misma octava es mostrada por MIDI-Ox)
  • Cuando usas un parámetro de transporte (CC#16..CC#19), es más fácil calcular las diferencias entre los números en la columna "Abs":
    • empezamos con valor de transporte 40 (transpose (transporte) es un parámetro de polarización negativa, 40 es el valor central) - nota: para MIDIbox SID-D se requiere el ajuste de este valor de inicialización, para que el sonido siempre empiece con la frecuencia deseada. MBSID-D reproduce "C-3",  lo que significa que la nota debe ser transportada a -3 para empezar con A-2
      El valor de transporte inicial resultante es 40-03 = 3C
    • transporte entre fotogramas 1. y 2.: C7-AD = +1A
    • transporte entre fotogramas 2. y 3.: A8-C7 = -1F
    • transporte entre fotogramas 3. y 4.: A5-A8 = -03
    • transporte entre fotogramas 4. y 5. : 96-A5 = -0F
    Todos los números están en formato hexadecimal- Es útil tener una calculadora que soporte esto (Yo uso mi querida HP48GX)
  • los dos dígitos del parámetro WF son barridos en MIDIbox SID CC#32..CC#35 (ver lista de implementación sid_cc.txt)
  • hay que multiplicar por 8 los valores ADSR 

Convirtiendo trazados SID

La automatización del re-cálculo de los valores de registro SID a parámetros MIDIbox SID CC puede ahorrar mucho tiempo, para ello, hice un script PERL que lee el archivo de descarga y lo convierte a un formato que puede ser metido directamente en la wavetable. Puedes descargar el script de aquí.

Después de que el trazado SIDdump de salida haya sido escrito en un archivo inmediato:

   siddump.exe Auf_Wiedersehen_Monty.sid > dump
el conversor puede ser iniciado con (por ejemplo):
   perl siddump_convert.pl dump -track 2 -time 0:38 -lines 100
o se puede escribir la descarga completa convertida en un nuevo archivo con:
   perl siddump_convert.pl dump -track 2 -frame 0 > converted
Aquí, la salida convertida:

| Fotograma | Tiempo  | Freq Nota/Abs WF ADSR Pul | MBSID Wave Transpose Att Dec Sus Rel |
+-------+-------+---------------------------+--------------------------------------+
...
| 1937 | 0:38 | 0EA3 A-3 AD 11 08F8 ... | 01 49 ( 49) 0 64 120 64 |
| 1938 | 0:38 | 40A3 (B-5 C7) 81 .... ... | 08 +1A ( 63) ... ... ... ... |
| 1939 | 0:38 | 0B23 (E-3 A8) 41 .... ... | 04 -1F ( 44) ... ... ... ... |
| 1940 | 0:38 | 0923 (C#3 A5) 40 .... ... | 14 -03 ( 41) ... ... ... ... |
| 1941 | 0:38 | 03CE (A#1 96) .. .... ... | +00 -0F ( 32) ... ... ... ... |
| 1942 | 0:38 | .... ... .. .. .... ... | +00 +00 (+00) ... ... ... ... |

Los valores ADSR de la derecha se pueden introducir directamente en el editor de parches de MIDIbox SID (o superficie de control...) - también se pueden copiar directamente los valores wavetable:

STEP CMD    #1  #2
00 Play 01 49
01 Play 08 +1A
02 Play 04 -1F
03 Play 14 -03
03 Play +00 -0F
03 Play +00 +00 # (1) ver notas abajo
03 Play +00 +00
03 Play +00 +00
06 End 7F +00 # (2) (stop) para la wavetable y resetea ADSR
Ver también este pantallazo de JSynthLib.

Reproduce C-3 (la "nota central") en el teclado - ¡deberías escuchar exactamente el tambor de base del archivo .sid! :-)

(1) para permitir que la nota se desvanezca correctamente, hay que insertar algunas filas vacías
(2) "End 7F" ha sido introducido con MIDIbox SID-D, y también será soportado por el firmware común de MIDIbox SID > v1.7 - este comando resetea los registros de envolvente  para evitar los  "hick-ups" (picos) de ADSR, que se pueden dar debido a un error de silicona en el chip de sonido SID .

Y así es como queda finalmente la forma de onda, reproducida por hardware-SID:

¿Echas algo de menos? ¡Sí, la onda triangular no es visible! Esto se debe al irritante error de delay ADSR del SID:  El error tiene diferentes efectos, que han sido corregidos por by Dag Lem, y documentados en el código fuente de reSID. sidplay2 usa este motor, más nuevo, y por ello emula el SID de manera mucho más precisa que SIDPLAY (desafortunadamente sidplay2 no permite enmudecer canales...). El gate se demora hasta ca.30mS!

Esta demora puede eliminarse completamente estableciendo la tasa de liberación de ADSR en 0. Pero en este caso, el sonido no se desvanece más (-> menos dinámico):

Esta es también la explicación de por qué la mayoría de los sonidos preestablecidos del MIDIbox SID común no usan liberación- añade una latencia inaceptable, que solo puede ser compensada reproduciendo 30 mS antes las notas MIDI (no hay problema con los secuenciadores host de hoy en día si se reproduce en directo), o cortando la demora inicial de la muestra grabada.

En la configuración por defecto de MIDIbox SID-D, se acepta esta demora (los tambores se reproducen por algún secuenciador de cualquier manera, no en directo). De cualquier manera la pista de percusión debe ser reproducida con una demora de -30mS, o los tambores deben ser reproducidos por un sampler, una vez hayan sido correctamente sintonizados y coincidan con el resto de instrumentos usados en la canción.

Reproducir percusión wavetable

Con el firmware común de MIDIbox SID, solo se puede reproducir un parche por cada par de core/SID. Solo hay una wavetable de 3 pistas por cada parche, y cambiar entre los parches tarda cierto tiempo, hecho que no interesa mientras reproduces una secuencia de sonidos de tambores diferentes. En otras palabras: el firmware común está bien cuando quieres crear sonidos aislados del tipo de los del C64, grabarlos y reproducirlos con un sampler, pero no es lo adecuado para reproducir una secuencia de percusión directamente desde un único SID. Este tipo de limitación es poco óptima si se debe sintonizar un set completo de tambores para la canción, por ello he implementado un firmware alternativo optimizado para percusión: MIDIbox SID-D.

Puedes encontrar más información sobre MIDIbox SID-D solo en este artículo del foro. Crearé una página web individual una vez que el firmware esté terminado.

En esta demo de sonido he usado los sonidos de tambor copiados del tema de Rob Hubbard's "Auf Wiedersehen Monty". Los parches también forman parte de la librería preestablecida de MBSID-D (carpeta TK, primer drumkit)
mbsid-d_demo2.mp3

Enlaces relacionados



Last update: 2015-09-24

Copyright 1998-2015, Thorsten Klose. All rights reserved.