Un second projet  
Un second projet

  -- Le site --
· News
· Moi
· Liens
·
 Forum
· Me Contacter

  -- Mes projets sur TI --
· Blib
· Librairie PolySnd
· PolySnd Player
· PolySnd MIDI Converter
· PolySnd Converti
· Arkanoid
· Nebulus

 

  -- Rubriques --
· PolySnd v1.0
· PolySnd v1.2
· PolySnd v1.3
· PolySnd v2.0
· Guide de programmation

 

   

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.