Old School is Beautiful

La musique sur Colecovision : les notes

Je ne suis pas musicien, pourtant, il faut bien que je trouve un moyen pour sonoriser mes jeux Colecovision (et PCEngine). Et là, pas de secret, il faut mettre les mains dans le camboui. Voici donc un premier tutorial sur la musique sur Colecovision. Au final, vous saurez faire des musiques très basiques, sans effet. Mais c'est suffisant pour mettre pied à l'étrier et ensuite aller plus loin.

Nous allons donc apprendre à calculer au format ColecoVision la fréquence des notes.

Note = Fréquence

Une note, c'est une fréquence. Voici les fréquences en Hertz.
fréquence colecovision
Pour avoir le code fréquence ColecoVision, il faut appliquer à ces fréquences la formule mathématique suivante :

=3579000/(32*Fréquence du tableau ci dessus)

Exemple : B1 = 3579000/32*(123,47) = 905,84 = 906 (arrondi) = 0x38A (en hexa)

ATTENTION : Une fréquence Coleco ne se code que sur 10 Bits, on ne peut donc pas jouer directement les notes de l'octave 0 par exemple, car le résultat de la formule ne tiendra pas sur 10 bits !

Encode une note

Voilà, à présent, vous savez calculer la fréquence d'une note pour la Coleco. Maintenant, pour lui faire jouer cette note, on prend en compte le tableau suivant :

note colecovision

Une note à jouer se code en 4 octets

Octet 1 : Quel sera la voix qui va jouer la note : 1 à 3

Voix 1 : 01000000 = 64 = 0x40
Voix 2 : 10000000 = 128 = 0x80
Voix 3 : 11000000 = 190 = 0xC0

Octet 2 : Début de la fréquence Coleco. Prenons la fréquence calculée au dessus : 0x38A

La valeur de cet octet est donc 0x8A

Octet 3: Fin de la fréquence + Volume

Sur Coleco le volume le plus fort est la valeur 0, le plus faible la valeur F. Notre octet vaudra donc :
0 pour le volume et 3 pour la fin de la fréquence = 0x03

Octet 4 : Temps pour jouer la note
00 - Temps le plus court FF - Temps le plus long

Exemple ici : 0x05

Donc pour jouer notre note 0X38A pendant un temps de 5 à un volume maximum sur la voix 1, en data assembleur cela nous donne :

.db 0x40,0x8A,0x03,0x05

Si vous devez jouer un «soupir», un blanc qui à une durée de 8 sur la voix 1, vous pouvez faire :

.db 0x40,0x8A,0xF3,0x08, on joue une note (n'importe laquelle, ici la 0x38A) à un volume inaudible (ici F, le plus bas).

Créer la partition d'une voix

Une partition musicale simple, est un enchainement de note.
gameOver_ch1:
.db 0x40,0xA0,0x00,36; F-4
.db 0x40,0xAA,0x00,36; E-4
.db 0x40,0xD6,0x00,24; C-4
.db 0x40,0xBE,0x00,36; D-4
.db 0x40,0xD6,0x00,60; C-4
.db 0x40,0xAA,0x00,48; E-4
.db 0x50

Le dernier data (0x50 = 01010000) souligne la fin de voix. On peut la faire répéter indéfiniment avec 0x51 par exemple pour la voix 1. Les fins de voix se calculent ainsi :

repeat
Voilà, pour ce premier tuto, plutôt simple . Dans le prochain, on verra comment placer ces morceaux de musiques dans la sound_table, et jouer les voix simultanément.

Retour aux tutoriaux Colecovision