English Version
French Version
Spanish Version
Wavetable Sounds: Tutoriel #1
Ce tutoriel décrit comment analyser et recréer les sons "wavetable" des morceaux SID avec la MIDIbox SID.
Le terme "wavetable" est utilisé par
la communauté C64 pour définir une méthode de
synthèse dans laquelle les formes d'onde et la fréquence
d'une voix SID sont modulé si rapidement que le son en
résultant sonne comme une nouvelle forme d'onde, nouvelle forme
d'onde qui n'est à l'origine pas disponible sur le chip. Les
changements de paramètres sont stockés dans une table -
d'où le nom - cette technique n'a donc rien à voir avec
la "synthèse à table d'onde" (wavetable synthesis), qui
elle est basée sur des samples audio.
La MIDIbox SID
dispose d'un séquenceur de tables d'onde trés souple, qui
peut non seulement séquencer les formes d'ondes et la
fréquence, mais aussi n'importe quel paramètre CC (voir
aussi la liste de tous les paramètres CC).
Trois pistes allant jusqu'à 32 pas sont disponibles, qui peuvent
contrôler trois CCs différents. Pour des sons "wavetable"
classiques, c'est suffisant pour contrôler la forme d'onde (OSC1
waveform: CC#33) et la valeur de transposition (OSC1 transpose: CC#17)
d'une voix simple. Il est également possible de contrôler
les valeurs waveform/transpose pour tous les oscillateurs à la
fois (CC#32 et CC#16), ou de moduler le CC d'un second oscillateur en
parallèle du premier. Une autre utilisation intéressante
de la troisième piste restante est de moduler un
paramètre d'un LFO ou d'un générateur d'enveloppe.
A noter également, le séquenceur de table d'onde peut
être utilisé pour jouer des notes et des phrases
d'arpèges - la méthode appropriée est
décrite dans le tutoriel suivant!
Extraction de son de percussion C64 par l'analyse des formes d'onde
La création de forme d'onde peut
sembler relever d'une alchimie complexe, mais l'usage en est en fait
trés simple et ouvre beaucoup de nouvelles perspectives pour de
nouveaux sons dés que vous en maîtrisez les bases.
L'analyse de morceaux réalisés avec le SID peut nous
apprendre beaucoup. Dans ce tutoriel, j'ai pris la grosse caisse du
titre "Auf Wiedersehen Monty" de Rob Hubbard comme exemple (ce titre
m'a tellement impressioné dans les années 80, que je n'ai
jamais pu oublier ce groove). Donc, pourquoi ne pas jetter un oeil sur
le sample audio de ce morceau, joué sur un SID? Bon, c'est assez
difficile d'extraire la grosse caisse elle-même, dans la mesure
où d'autres sons sont joués simultanément. Ceci
rend difficile d'isoler la forme d'onde qui nous intéresse du
reste du mix.
Mais ceci va nous aider: il est aujourd'hui possible de jouer des titres SID sur des émulateurs sur PC. SIDPLAY
est un des plus ancien de ces simulateurs, mais à la
différence de sidplay2, il permet de muter les voix du SID
(View->Mixer). La voix mise en solo peut aussi bien être
jouée avec l'émulateur qu'avec la MIDIbox.
Mais la méthode la plus simple consiste à enregistrer la
sortie du SID dans un fichier ("File->Save as", sélectionnez
filetype ".wav")
Voici la vue de la grosse caisse émulée, elle commence à 0:38, canal #2:
On peut distinguer ces différentes parties:
- elle commence par une forme d'onde "triangle", active pendant 20 mS
- ensuite une courte partie "noise" pendant 20 mS
- elle termine par une forme d'onde "pulse", dont la fréquencce et l'amplitude diminue progressivement
Dans les titres SID, les séquences
wavetable sont généralement divisées en "frames"
de 20 mS, ce qui correspond à la manière dont sont
implémentés les trackers dans les jeux (les sons sont
appellés selon une trame d'intérruption dont la
fréquence dépends du taux de rafraichissement de
l'écran: 50Hz dans les systèmes PAL (50Hz -> 20
mS period)).
Afin de reconstituer cette forme d'onde,
vous devez commencer par d'abord sélectionner le même taux
de wavetable. Dans la mesure ou le moteur sonore de la MIDIbox SID
fonctionne suivant une horloge plus rapide qu'un C64 (taux de
rafraichissement de 0.819 mS), la wavetable doit être ralentie.
la periode d'actualisation de la wavetable peut être
calculée en suivant la formule suivante: periode = 2 * (127-rate) * 0.819mS. Afin d'obtenir une fréquence de 20 mS, le taux approprié est 115
Vous pouvez maintenant assigner la piste 1
au CC#33 (forme d'onde OSC1) et la piste 2 au CC#17 (OSC1 transpose).
Testez les séquences suivantes
(vous pouvez aussi bien utiliser l'éditeur JSynthLib, ou
éditer cette séquence directement depuis la Surface de
Contrôle du SID):
STEP CMD #1 #2 #3 00 Play 01 40 +00 # Plays triangle, transposed by +0 (40 is the middle) 01 Play 08 +00 +00 # Plays noise, transpose value untouched 02 Play 04 +00 +00 # Plays a pulse, transpose value untouched 03 Play 14 -07 +00 # release gate bit, transpose value decremented by -7 03 Play +00 -07 +00 # transpose value decremented by -7 03 Play +00 -07 +00 # transpose value decremented by -7 06 End +00 +00 +00 # stop wavetable
Afin de faire un "fade out" aprés
que le bit gate ait été relaché, vous devez
augmenter le taux de release de l'envellope DCA de l'OSC . Jouez
quelques notes sur votre clavier pour tester le son.
Extraction par suivi des changements dans les registres SID
La méthode décrite plus haut
n'est pas idéale pour reproduire exactement un son wavetable,
car les fréquences (valeurs de transposition) sont a
dé(terminer à l'oreille (par ex. en comparant les
fréquences). Ne serait-il pas mieux d'extraire les valeurs
envoyées dans les registres sonores du SID directement du
fichier .sid? Si - et c'est possible en utilisant l'outil
approprié. J'ai trouvé SIDDump V1.0 de covertbitops.c64.org
vraiment pratique pour réaliser une telle analyse. Il joue les
fichiers .sid en émulant le CPU C64, et fait un dump des
changements de registres SID vers STDOUT.
Retour à notre Grosse Caisse - voici les changements de registres relevés par SIDdump:
| 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 ... .. .. .... ... | .... ... .. .. .... ... | .... ... .. ..
(Le début du fichier, et la partie
droite contenant la colonne "channel 3" et "filter" ont
été coupés pour plus de clarté)
Pour ceux que ça pourrait
intéresser, voici une explication des changements sur le canal
#2. Si ceci vous laisse perplexe, passer au chapître suivant,
où une méthode plus simple est décrite.
Dans la première colonne vous pouvez voir:
- note A-3 avec forme d'onde triangle, valeurs ADSR: A=0, D=8, S=F, R=8
- note B-5 avec forme d'onde noise
- note E-3 avec forme d'onde pulse
- note C#3, pulse, gate relaché
- note A#1 (pulse, gate toujours relaché)
Pour la transcription vers le format des
paramètres MIDIbox SID, les points suivants doivent êtres
considérés:
- une frame est traitée chaque 20 mS (50
Hz), le taux wavetable approprié pour la MIDIbox SID est 115
(voir plus haut).
Si vous connaissez la durée du son, le nombre de frame peut
être calculé avec la formule suivante: frame = 50 *
seconds
- le demi-ton "A-3" de SID-Dump est
équivalent au demi-ton "A-2" de la MIDIbox SID (la même
octave est affichée dans MIDI-Ox)
- Lorsque vous utilisez le paramètre
Transpose (CC#16..CC#19), il est plus simple de compter avec les
chiffres de la colonne
"Abs":
- nous commençons par une valeur Transpose de 40
(les valeurs transpose sont "décentrées", 40 correspond
à la valeur intermédiaire) - note: pour MIDIbox
SID-D il est nécessaire d'ajuster cette valeur, afin que le son
commence toujours à la fréquence désirée.
MBSID-D joue "C-3", ce qui signifie que la note doit être
transposée par -3 pour commencer sur A-2
LA valeur de transposition initiale est donc 40-03 = 3C
- transpose entre 1. et 2. frame: C7-AD = +1A
- transpose entre 2. et 3. frame: A8-C7 = -1F
- transpose entre 3. et 4. frame: A5-A8 = -03
- transpose entre 4. et 5. frame: 96-A5 = -0F
Tous les nombres sont au format hexadecimal - il est utile
d'avoir une calculatrice qui supporte ce format (Je me sert d'une
HP48GX)
- Les deux chiffres du paramètre WF sont inversés pour les paramètres MIDIbox SID CC#32..CC#35 (voir sid_cc_implementation_chart.txt)
- les valeurs ADSR doivent être multipliées par 8
Convertion des relevés SID
Automatiser la re-calculation des valeurs
des registres SID vers les paramètres CC MIDIbox SID peut nous
faire gagner du temps, du coup j'ai écrit un script perl qui lit
le fichier dump, et le convertit vers un format qui peut être
directement vers les wwavetable. Vous trouverez ce script ici
Aprés que le relevé SIDdump ait été retranscrit dans un fichier approprié:
siddump.exe Auf_Wiedersehen_Monty.sid > dump
le convertisseur peut être lancé avec (exemple):
perl siddump_convert.pl dump -track 2 -time 0:38 -lines 100
ou transcrivez simplement le fichier entier vers un nouveau fichier avec:
perl siddump_convert.pl dump -track 2 -frame 0 > converted
voici le fichier de sortie aprés convertion:
| Frame | Time | Freq Note/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) ... ... ... ... |
Les valeurs ADSR de la partie droite
peuvent être directement entrées dans l'éditeur de
patch MIDIbox SID (ou via la surface de contrôle...) - les
valeurs wavetable peuvent aussi être copiées directement:
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) voir notes plus bas 03 Play +00 +00 03 Play +00 +00 06 End 7F +00 # (2) arrêt de la wavetable et reset de l'ADSR
Voir aussi ce snapshot JSynthLib.
Jouez C-3 (la note "du milieu") sur
votre clavier - vous devriez ententendre exactement le son de Grosse
Caisse du fichier .sid file! :-)
(1) afin de permettre à la note
de se terminer correctement, quelques lignes vides ont
été insérées
(2) "End 7F" a été introduit avec MIDIbox SID-D, et sera aussi supporté par le firmware > v1.7 MIDIbox SID - Ces commandes effectue un "reset" des registres de l'envellope afin d'éviter les "
hick-ups" de l'ADSR, qui peuvent survenir en raisonb d'un bug sillicone du chip SID.
Et voici à quoi ressemble la forme d'onde, jouée par un SID hardware:
Il manque quelque chose? Oui, la forme
d'onde
triangle n'est pas visible! C'est dû à un bug du delai de
l'ADSR du SID. Ce bug a plusieurs conséquences, qui ont
été mise een évidence par Dag Lem, et
documentée dans le source code of reSID.
sidplay2 utilise ce nouveau moteur et du coup émule le SID avec
plus de précision que SIDPLAY (malheureusement sidplay2 ne
permet pas de muter les canaux...). Un delay d'environ 30mS est appliqué au gate !
Ce délai peut être
complètement éliminé en réglant le taux de
Release de l'ADSR sur 0. Mais dans ce cas, le son n'est plus
"fadé" (-> moins de dynamique):
Il y a aussi comme explication que la plupart
des sons Preset d'une MIDIbox SID n'utilisent pas le Release - qui
ajoute une latence inacceptable, qui ne peut être
compensée qu'en jouant les notes
MIDI 30 mS plus tôt (ce qui n'est pas difficile à
réaliser avec les séquenceurs, mais difficile à
réaliser en live), ou en coupant le délai initial du
sample enregistré.
Dans les presets MIDIbox SID-D, ce dalai
est admis (les drums sont joués par un séquencer de toute
façon, et pas en live). Soit la piste drum doit être
jouée avec un delai de -30mS, ou les drums doivent être
rejoués par un sampler, une fois qu'ils ont
été joués correctement et qu'ils ont
été calés avec le reste des instruments
utilisés dans la song
Jouer des Drums wavetable
Avec le firmware standard MIDIbox SID,
seulement un patch peut être joué par paire core/SID. Il
n'y a qu'une wavetable de 3 pistes par patch, et basculer entre les
patches prends un certain temps, ce qui n'est pas souhaitable lors du
jeu d'une séquence de différents sons Drum. En d'autres
mots: le firmware est adapté pour créer un son de DrumC64
simple, l'enregistrer et le rejouer avec un sampler, mais il n'est pas
adapté pour jouer une séquence de drums à partir
d'un unique
SID. Une telle limitation est problèmatique si un Drumset entier
doit être mis en place pour une song, de fait, j'ai
implémenté un firmware alternatif optimisé pour
les Drums: MIDIbox SID-D.
Des informations supplémentaires sur la MIDIbox SID-D sont disponibles uniquement dans cet article du forum. Je réaliserais une page spéciale séparée une fois que le firmware serat finalisé.
Dans la démo suivante, j'ai
utilisé le son de drum extrait du titre de Rob Hubbard's "Auf
Wiedersehen Monty". Les Patches font partie également de la librairie de preset MBSID-D (dossier TK, premier drumkit)
mbsid-d_demo2.mp3
Liens
Last update: 2015-09-24
Copyright © 1998-2015, Thorsten Klose. All rights reserved.
|