Guide
de programmation pour PolySnd 2.0 en ASM et en C.
Un
second projet:
Nous
avons vu pour l'instant comment ce forme un programme
en C ou en ASM utilisant PolySnd, notre exemple utilisait
des fonctions simple de PolySnd v2.0, maintenant nous
allons réaliser un programme capable de sortir
une musique en stéréo en attendant la pression
de la touche ESC ou la fin de la musique, pour cela nous
allons procéder par étapes et nous aurons
besoin de PolySnd MIDI Converter.
Vous
devez tout d'abord télécharger la musique
'Mario' que nous allons utiliser pour notre projet.
Télécharger
Mario.mid
Maintenant
nous devons télécharger PolySnd MIDI
Converter qui s'occupera de convertir ce fichier MIDI
dans le format voulu pour notre programme.
Télécharger
PolySnd MIDI Converter v3.2.1
Après
avoir téléchargé PolySnd MIDI
Converter, il vous reste à l'installer sur
votre disque dur. Une fois cette étape de terminée,
nous allons commencer à réaliser notre projet.
Réalisation
du projet:
Ouvrez
TIGCC et réaliser un projet en C avec PolySnd v2.0
ce nommant 'example2',
procédez de la même façon que pour
notre premier programme. Vous devez vous retrouver avec
un projet constitué de cette façon:

Nous
allons pour l'instant enregistrer notre projet et mettre
de côté TIGCC pour pouvoir convertir 'Mario',
ouvrez PolySnd MIDI Converter, vous devez vous
retrouver avec cette environnement:

Cliquez
sur le 'File/Open'
et choisissez 'Mario',
la liste 'Tracks'
dans 'Convert
tracks' doit ce remplir avec 3 pistes classé.
Dans 'Data
type' cochez la case C et dans 'Management
of PolyNotes' cochez la case 'Last
Note'.
La zone
'Data type'
permet de choisir le langage dans le quel on veut que
les données soit traduite.
La zone
'Management
of PolyNotes' définit le comportement du
convertisseur lorsqu'il rencontre plusieurs notes joué
en même temps, le mode:
- Alternation
(Alterné) joue toutes les notes mais avec une durée
de 1 cycle ce qui augmente dans des cas considérablement
la taille des données mais la qualité s'en
trouve bien meilleur.
- Average
frequency (Frequence moyenne), parmis toutes
les notes, le convertisseur cherche la note moyenne, ce
mode est assez moyen en qualité et peu des fois
donner des résultats assez inattendus, il est généralement
utilisé dans des musique dont le nombre de PolyNote
est élevé.
- First
note (Première note), dans la liste
des notes, le convertisseur prend la première note,
ce mode est le plus économique mais donne des résultats
horrible pour la plupart des fichiers MIDI, généralement
il est utilisé pour des fichiers MIDI assez simple.
- Last Note
(Dernière note), dans la liste des notes, le convertisseur
prend la dernière note, ce mode est très
très économique et donne un bon rapport
en qualité et en taille, c'est ce mode là
que nous allons utiliser pour convertir Mario, dans la
mesure ou Mario possède très peu de PolyNotes
qui ne sont pas importante. Ce mode s'adapte parfaitement
dans la plupart des musique sauf dans celle composé
de beaucoup de PolyNotes.
PolySnd
MIDI Converter offre de multiple informations et il
est possible de modifier certains paramètres comme:
- Add octaves
(Ajouter octave), ce mode permet de monter ou descendre
la musique à partir du MIDI d'un certain nombres
d'octaves, plus ce nombre est élevé plus
la musique convertie sera aigus et inversement, il est
possible d'entrer un argument négatif mais attention,
si dans vos données vous avez un octave inférieur
à 0 ou supérieur à 9 vous ne pourrais
pas l'utiliser, PolySnd possède au maximum 10 octaves
notée de 0 à 9.
- Division
of duration (Division de durée), ce
mode permet d'augmenter ou diminuer le tempo d'origine,
plus la valeur est petite plus le tempo est élevé
et plus la musique à une meilleur qualité
dans le cas du mode 'Alternation' et dans le cas contraire
vous obtenez des données de plus petite taille
qui peuvent voir leur qualité diminuer dans le
cas ou vous perdez des notes. Il est possible d'entrer
un nombre à 2 chiffres après la virgule.
Le convertisseur vous donnera la valeur du nouveau tempo
de PolySnd comparé au tempo réel du MIDI.
Sur ces
explications vous serez capable de convertir n'importe
quel MIDI et de modifier certains paramètres suivant
ce que vous recherchez (qualité audio ou taille
des données), mais reste un point assez important,
car il n'est pas réellement conseilléde
convertir un MIDI tel quel qui de plus contienténormément
de pistes (plus de 4), vous devrez pour cela le modifier
et effacer les pistes inutile pour PolySnd, comme vous
le savez PolySnd est capable de jouer que 2 pistes (une
par canal) voir plus si le mode 'Alternation' est coché.
Pour voir la procédure de retouche d'un fichier
MIDI, allez dans la rubrique consacré à
PolySnd MIDI Converter.
Revenons à
la conversion de 'Mario',
vous devez vous retrouver avec les bon paramètres:

Vous
constatez que la musique 'Mario'
comporte 3 pistes pour le convertisseur, or réellement
'Mario'
comporte 2 piste, la piste n°1 est en faite une piste
contenant des informations mais sans aucune note. La plupart
des morceau possède cette structure mais il peut
exister des exceptions.
Nous
allons tout d'abord convertir un par un les tracks et
les enregistrer dans des fichiers, pour cela cliquer sur
le chiffre 2 dans le menu Tracks et faite le passer à
droite avec le bouton ">"
ou avec un double clique, le bouton 'Convert'
devient disponible, cliquez dessus. Le convertisseur créer
les données à travers divers étapes
qui sont affiché en bas, une fois les étapes
terminé, le bloc note de Windows s'ouvre avec les
données sous la forme du langage choisit. Fermez
le bloc note et cliquez sur le menu 'File/Save ' de PolySnd
MIDI Converter, choisissez le répertoire ou
ce trouve le projet de l'exemple 2 et nommez le fichier
'mario1.h'.
Ouvrez ce fichier avec un éditeur de texte et modifier
'unsigned
char channel []' par 'unsigned
char mario_channel1 []'.
Nous
allons procéder de la même façon pour
convertir la piste n°3 de 'Mario' mais auparavant
vous devez enlever de la liste 'Convert tracks' l'ancienne
piste qui a été convertie. Une fois la conversion
terminé de la piste n°3, enregistré
les données dans le fichier 'mario2.h'
dans le répertoire de votre projet. Ouvrez ce fichier
avec un éditeur de texte et modifier 'unsigned
char channel []' par 'unsigned
char mario_channel2 []'.
Nous
n'utiliserons plus PolySnd MIDI Converter à
partir de maintenant, nous devons maintenant inclure dans
notre projet les fichiers 'mario1.h'
et 'mario2.h'
et écrire le code permettant de jouer cette musique.
Pour cela cliquez sur le menu 'Project/Add Files'.

Pour
déclarer ses 2 fichiers dans notre programme nous
allons écrire ses lignes en dessous de '#include
"polysnd2.h"'
#include
"mario1.h"
#include "mario2.h"
|
Une fois
la déclaration des fichiers, nous allons écrire
le code qui devra s'occuper de jouer la musique de 'Mario'.
Vous devez ajouter ce code en dessous de 'pSnd_InstallSound
();'
pSnd_PlayMode (STEREO);
pSnd_SetTempo (105);
pSnd_PlaySound_voice1 (mario_channel1);
pSnd_PlaySound_voice2 (mario_channel2);
pSnd_SetState (ALLVOICES);
|
pSnd_PlayMode
(STEREO), s'occupe de régler PolySnd v2.0
en mode stéréo ce qui signifie qu'il est
possible d'utiliser un mode différent ou des données
différente sur un canal, contrairement au mode
mono qui ignore les fonctions basé sur voice2
(canal n°2) et donc le mode est joué sur les
2 canals.
pSnd_SetTempo,
aurait plus être remplacé par pSnd_SetTempo_voice1
et pSnd_SetTempo_voice2, en effet pSnd_SetTempo
est une définition qui permet de régler
le tempo des 2 canals en même temps. Dans notre
exemple nous avons un tempo de 105 bpm pour 'Mario'
sur les 2 canals.
pSnd_PlaySound_voice[1|2],
s'occupe de mettre PolySnd v2.0 en mode 'MIDI' sur le
canal 1 ou 2, l'argument spécifié doit être
une série de données audio. Dans notre exemple
mario_channel1 et mario_channel2.
pSnd_SetState
(ALLVOICES), enfin cette instruction permet de
dire à PolySnd v2.0 de jouer les modes précédemment
configuré sur le ou les canals voulu. Dans notre
exemples nous activons la lecture des données MIDI
sur tout les canals.
Maintenant
il nous reste à ajouter la ligne qui nous permettra
de quitter le programmant en pressant la touche ESC ou
en attendant la fin de la musique.
while
((_keytest
(RR_ESC)==FALSE)
&& (pSnd_GetState()!=NOVOICE1));
|
pSnd_GetState()!=NOVOICE,
signifie que tant que tout les canals ne sont pas terminé,
nous continuons la boucle, de façon plus logique
nous auront plus remplacer cette ligne par:
while
((!_keytest
(RR_ESC))
&& (!(pSnd_GetState()==NOVOICE1)));
|
Cette
ligne contenant une boucle vide n'exécute aucunes
instructions et pourtant la musique continue à
être joué, pourquoi? PolySnd v2.0 est une
librairie multitâche dans le fait qu'il est possible
d'exécuter une série d'instructions en même
temps que du son ce joue en tâche de fond. Dans
notre exemple le son commence à l'instruction pSnd_SetState
qui s'occupe 'd'activer' PolySnd v2.0, le programme ce
déroule et la librairie joue le son en même
temps, elle ne s'arrêtera que lorsque vous aurez
modifier son comportement avec une fonction de PolySnd
ou que les données quelle doit lire soit épuisé.
Voyez PolySnd v2.0 comme les niveaux de gris sur TI, quand
vous programmé une image en niveau de gris, vous
avez juste besoin de spécifier les plans et non
contrôler l'écran, c'est le même principe
pour PolySnd, vous spécifiez des données
sonores et la librairie fait le reste.
Grâce
au 2 premiers exemples vous voyez qu'il est assez plaisant
et facile de programmer avec PolySnd v2.0, de plus son
incorporation dans des projets demandant beaucoup de ressources
est possible tel que les jeux, player...
Dans
notre prochain exemple nous allons voir comment utiliser
PolySnd v2.0 dans un projet s'occupant d'afficher une
balles sur l'écran et de jouer des sons et ce sans
interrompre le mouvement de la balle pendant que le son
est joué. Nous étudierons ensuite comment
bloquer une action en attendant la fin d'un son.
Télécharger
example2.zip
Rubrique
suivante.