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 SIDEl
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.
|