lundi 13 avril 2015

Comment créer des bruitages sous Gamebuino avec FX Synth

FX Synth (forum) est un éditeur d'effets sonores pour Gamebuino assez pratique, crée par yodasvideoarcade.

Il permet d'ajouter des bruitages plus complexes que ceux fournis par la librairie de base (il n'y en a que 3...), et sans avoir à déchiffrer le système sonore de la console... Car oui, j'avoue ne pas saisir (pour l'instant) les 3/4 de la page wiki dédiée, et cet utilitaire est plus que bienvenue!
Comme il fonctionne parfaitement sous émulateur Simbuino, on peut l'utiliser très facilement.

Pour des mélodies plus élaborées, je conseille d'utiliser les trackers suivants:
Les contrôles utiles à savoir:
HAUT/BAS pour bouger le curseur d'un paramètre à l'autre.
GAUCHE/DROITE pour bouger le curseur sur les règlettes horizontales.
A pour jouer le son crée.
B pour alterner la forme du signal sonore (carré ou bruit).

Il y a une dizaine de paramètres dans l'éditeur (qui tourne très bien dans l'émulateur Simbuino) que je vais expliquer:
  1. l'icône dans le coin du haut à gauche indique le type de signal sonore voulu, soit carré (square) ou bruit (noise).
    La réglette à sa droite indique le pitch, c'est-à-dire des notes les plus basses ou notes les plus hautes.
    1= note la plus grave (A#2)...... 58= note la plus aigüe (D#8).
  2. PMD (Pitch Modulation Depth) règle la profondeur de modulation du pitch: la moitié gauche est descendante, la moitiée droite est ascendante. (noté de 0 à 116).
  3. PMT (Pitch Modulation Time) règle la durée de modulation du pitch. Exemples:
    0 = (minimum) aucune modulation
    1 = extrêmement rapide
    2= un peu moins rapide...
    19 = (maximum) si lent que c'est à l'arrêt (équivaut à 0).
  4. VMD (Volume Modulation Depth) règle la modulation de l'amplitude du volume sonore.
    Exemples:
    0 = (minimum) aucune modulation
    1 = légère atténuation...
    5 = atténuation modérée...
    7 = (maximum) modulation abrupte.
  5. VMT (Volume Modulation Time) règle la rapidité de la modulation:
    0 = pas de modification ... 5 = modulation .
  6. VOL (Volume) précise le volume global du bruitage (0 = silencieux 7 =maximum).
  7. LEN (Length) indique la longeur du bruitage en 1/20 de secondes.
    0 = (minimum) pas de son possible.
    1 = ne dure qu'une frame.
    57 = (maximum)
  8. MEM (Memory) permet de sauvegarder temporairement 13 bruitages (ils seront effacés en fermant FX Synth).
Pour ajouter dans son programme les effets sonores ainsi crées, c'est très simple: 3 blocs de code sont à écrire.

Premièrement, un ensemble de variables à déclarer au début du programme, avant void setup() :
const int soundfx[fxno][8] = {
    {wave,2,3,4,5,6,7,8}, // sound 0
};

On crée autant de lignes qu'on souhaite de bruitages, en modifiant en conséquence le chiffre situé entre les premiers crochets.
Exemple:
2 sons crées == soundfx[2][8].
6 sons crées == soundfx[6][8].
etc.
En code, on obtient ça:
const int soundfx[3][8] = {
    {1,2,3,4,5,6,7,8}, // sound 0
    {1,2,3,4,5,6,7,8}, // sound 1
    {1,2,3,4,5,6,7,8}, // sound 2
};

Deuxièmement, on ajoute un script playsoundfx() :
void playsoundfx(int fxno, int channel) {
    gb.sound.command(0,soundfx[fxno][6],0,channel);
    // set volume
    gb.sound.command(1,soundfx[fxno][0],0,channel);
    // set waveform
    gb.sound.command(2,soundfx[fxno][5],-soundfx[fxno][4],channel);
    // set volume slide
    gb.sound.command(3,soundfx[fxno][3],soundfx[fxno][2]-58,channel)
    // set pitch slide
    gb.sound.playNote(soundfx[fxno][1],soundfx[fxno][7],channel);
    // play note
}


Enfin, pour jouer un son, on colle cette ligne à l'endroit nécessaire:
playsoundfx(number,channel);
Deux variables seront utilisés par le script précédent:
number renvoie au bruitage désiré.
channel renvoie au channel désiré.

Et pour terminer cet article, une demi-douzaine de sons différents:
{0, 47, 3, 5, 1, 16, 7, 57} ... bump
{0, 24, 6, 1, 0, 0, 7, 2} ... gain de pièce d'or?
{0, 21, 4, 2, 0, 0, 7, 6} ... encore plus d'or?
{0, 9, 111, 8, 4, 4, 7, 57} ... bruitage à la Metroid?
{0, 57, 2, 1, 7, 19, 7, 57} ... ouverture d'un mystérieux coffre façon Zelda?
{0, 33, 103, 1, 1, 8, 6, 57} ... Metroid?
{0, 24, 55, 1, 0, 0, 7, 7} ... mort?
{0, 1, 57, 4, 0, 0, 7, 4}... qestion?
...

Aucun commentaire:

Enregistrer un commentaire