I-                  Introduction.

PolySnd v2.0 est une librairie audio optimisée pour la programmation de jeux sous TI68K. Son but est d’apporter un maximum de fonctions et de conforts de programmation. Elle a était totalement réécrite et repensée comparé au autre version. La version 2.0 permet enfin de jouer du son en tâche de fond avec des niveaux de gris…

II-              Les améliorations apportées.

PolySnd v2.0 est la seule librairie qui soit capable de jouer des musiques, des effets sonores ou encore de simple fréquences dans des programmes sans que celle-ci ne bloque sont processus. Elle est capable de jouer des musiques sur 2 canaux (2 voies), avec des niveaux de gris et ceux sans ralentir le programme en cours. Elle incorpore 3 fonctions de gestions de données (Musiques, Effets sonores, simple fréquence), diverses fonctions informant sur l’état de la librairie et d’autres fonctions sur le traitement des données musicales. PolySnd v2.0 est idéal pour les programmes audio comme (Player, Programme de compositions musical ou encore simple démos graphique…), c’est la seule librairie audio sur tous supports confondus (calculatrices) d’être utilisable dans des programmes même nécessitant une grande puissance.

PolySnd v2.0 est le fruit de nombreux mois de recherche est de développement, j’espère quelle combleras tout vos désirs.

III-           Comment fabriquer obtenir ou fabriquer un adaptateur Jack 3.5 mm <-> 2.5 mm ?

PolySnd v2.0 nécessite un adaptateur Jack 3.5 mm en 2.5 mm stéréo, en effet PolySnd v2.0 est une librairie polyphonique en stéréo et donc pour pouvoir sortir du son sur un casque (conseillé car sur d’autre supports, le son risque d’être parasité)  ou sur des enceintes.

Si vous n’avez pas d’adaptateur Jack 3.5 mm en 2.5 mm, vous pouvez-vous en procurez un dans certain magasin, si ce n’ai pas possible vous pouvais vous en fabriquer un avec peu de matériels, pour ça suivez la procédure ci-dessous :

Matériels :

-     Prise Jack Mâle 2.5 mm

Vous pouvez en trouvez une dans un magasin d’électronique ou en récupérant la prise Jack d’un cordon fournis avec la TI.

-     Prise Jack Femelle 3.5 mm.

Ce trouve facilement dans les grandes surfaces ou dans des magasins d’électronique.

-          Fer à souder, avec de l’étain.

-         Ruban adhésif Noir.

Vous devez relier en semble la masse, et les 2 fils de données.


Le fil gris correspond à la masse, et les fils rouge et bleu, aux données.

Ce schéma peut être adapté avec une prise Jack Mâle 2.5 mm avec une prise Jack Mâle 3.5 mm.

IV-           Fonctionnement de la librairie et précautions à prendre pour créer un programme.

Pour pourvoir jouer du son dans un programme en tâche de fond (background) c'est à dire faire dérouler un programme tout en jouant de la musique… Cette librairie utilise l’auto interruption n°5 poussait au maximum (8khz sur HW2 et 11khz sur HW1) mais elle reste toujours disponible au programmeurs grâce à une fonction inclus dans PolySnd v2.0. Cette auto interruption étant rediriger vers les routines de PolySnd v2.0, certaines fonctions de l’AMS (Advanced Mathematic Software)  seront inutilisable c’est pourquoi vous devrez utiliser des équivalents.

Pour que cette librairie fonctionne correctement, vous devez désactiver certaines interruptions :

-         L’auto Int n°1, utilisée par l’AMS pour restaurer la ligne de statut (status line), et pour afficher le statut des touches. Utilisée par certaine fonctions.

-         L’auto Int n°2, utilisée par ngetchx de l’AMS (Perturbe la librairie, importante à désactiver).

-    L’auto Int n°4, utilisée pour la gestion du link.

Attention : C’est 3 interruptions doivent être obligatoirement redirigé. Voir les programmes d’exemples.

V-               Utiliser PolySnd v2.0 dans un programme.

Version dynamique :

            Ne peut être seulement utilisé que si vous programmez en mode kernel, vous devez dans ce cas posséder un kernel comme PreOs v0.64 et la librairie PolySnd v2.0 sur votre TI.

Votre programme nécessitera donc la présence de PolySnd v2.0 sur votre TI pour fonctionner.

Vous trouverez la librairie dans le répertoire bin puis l’header dans le répertoire headers/dynamique.

Version statique

Si votre programme est développé en nostub ou en kernel, vous désirez que votre programme fonctionne sans la présence de la librairie PolySnd v2.0 et que celle-ci ce trouve en interne dans le programme, vous devrez utiliser la version statique de PolySnd v2.0, les avantage de la version statique sont que vous économiserais de la place car votre programme utiliseras seulement les fonctions qu’il a besoin de la librairie, vous trouverez la librairie au format statique dans le répertoire bin et l’header dans le répertoire headers\statique. A savoir que si votre programme utilise la version statique de PolySnd v2.0.

Conclusion :

Il est préférable d’utiliser la version dynamique pour des programmes très petit et ne ce limitant qu’à une séquence audio (morceaux de musiques ou simple effets sonores). Ses programmes n’on que pour seul but, exécuter une musique… Elle ne peut être utilisé dans des programmes en nostub.

Par contre la version statique doit être utilisé dans de gros projet comme programmes audio, jeux, démos sonores, éditeur de partitions…

Il est conseillé de choisir correctement en fonction de votre programme le format de la librairie, vous ne pourrez qu’économiser de la mémoire si ce choix est bien fait.

VI-             Informations à propos des niveaux de gris et de l’auto int 5.

PolySnd v2.0 a était testé avec les routines de niveaux de gris de TIGCC, pour que les niveaux de gris fonctionnent correctement avec PolySnd v2.0 vous devez utiliser la fonction USE_GRAY_WIDTH_POLYSND avant l’appel de GrayOn. USE_GRAY_WIDTH_POLYSND n’est en fait une définition faisant appel à un hack de TIGCC, il n’est pas garanti que cette ligne fonctionne dans les versions de TIGCC antérieure ou supérieur à la version 0.94. Cette ligne à pour but de ne pas désactiver et de dérégler l’auto int 5 utilisé par PolySnd v2.0 lors du passage de la routine de niveaux de gris via l’auto int 1.

            PolySnd v2.0 utilise peux de ressources de l’auto int 5 c’est pourquoi il est possible de l’utiliser dans vos programmes à une fréquence de 5 000 Hz. Voir liste des fonctions.

VII-          Liste et descriptions des fonctions de PolySnd v2.0.

La liste est donnée sous forme de prototype pour le C et en fonction pour l’assembleur, un exemple en assembleur sera donné pour chaque fonction.

void  EnableSound (void) ;

jsr     polysnd2 ::EnableSound

Initialise le Port I/O.

Cette fonction initialise le port I/O en bas niveaux pour permettre de sortir des impulsions électriques sous forme binaire, généralement cette fonction est appelé en premier et est suivit de InstallSound.

void DisableSound (void) ;

jsr     polysnd2 ::DisableSound

Remet le Port I/O à son état courant.

Cette fonction active le port en haut niveau pour rendre la main au TIOS et ainsi être géré correctement.

void InstallSound (void) ;

jsr    polysnd2 ::InstallSound

Installe l’interruption audio.

Redirige l’auto int 5, initialise les variables de PolySnd v2.0 et installe l’interruption audio.

Cette fonction se situe généralement après EnableSound.

void DesinstallSound (void) ;

jsr    polysnd2 ::DesinstallSound

Desinstall l’interruption audio.

Cette fonction redirige l’auto int 5 à son état initiale. Elle désactive toutes les fonctions de PolySnd v2.0.

void Initialize (void);

jsr    polysnd2 ::Initialize

Remet à zéro les variables de PolySnd v2.0.

Cette fonction remet à zéro les variables système de PolySnd v2.0. Elle annule toutes musiques ou tous effets sonores en cours.

void SetTempo_voice1 (unsigned short tempo) ;

void SetTempo_voice2 (unsigned short tempo);

#define SetTempo (tempo);

move.w   #120,-(a7)

jsr            polysnd2::SetTempo_voice[1|2]

lea           2(a7),a7

Règle le tempo sur la voie choisie.

Le tempo est donné en bpm. La valeurs du tempo doit ce situer entre 1 et 15 850 bpm, ce tempo est indicatif et plus ça valeurs sera élevée, moins il sera précis.

unsigned short GetTempo_voice1 (void) ;

unsigned short GetTempo_voice2 (void);

jsr    polysnd2::GetTempo_voice[1|2]

Renvoie la valeur via d0.

Renvoie le tempo en cours de la voie choisit.

Cette fonction retourne le tempo en  cours, la valeur du tempo est indicatif et peut donc posséder une certaine marge d’erreur.

void SetState (unsigned char state) ;

subq.l     #2,a7

move.b   #_ALLVOICE,1(a7)

jsr           polysnd2::SetState

lea          2(a7),a7

Règle l’état des voies.

Cette option permet de mettre en pause/jouer un canal audio en fonction d’un bit.

Le canal 1 correspond au bit 0 et le canal 2 au bit 1, lorsque le bit d’un canal est à1, le canal est activé, si le bit est à 0, le canal est en pause.

#define NOVOICE   0

#define VOICE1       1

#define VOICE2       2

#define ALLVOICE 3

_NOVOICE   equ       0

_VOICE1       equ       1

_VOICE2       equ       2

_ALLVOICE equ       3

Cette fonction ne peut prendre en paramètre que ses énumérations.

void SetLoop (unsigned char loop) ;

subq.l     #2,a7

move.b   #_ALLVOICE,1(a7)

jsr           polysnd2::SetLoop

lea          2(a7),a7

Règle la répétition de son.

Cette option permet de répéter en boucle une musiques, des effets sonores ou une simple fréquence, elle a pour but de faciliter le programmeur pour par exemple le développement de jeux, si une musique et jouée sur le canal 1 et quelle dois être jouée en boucle, PolySnd v2.0 s’en chargeras en regardant la valeurs passée par SetLoop.

Attention, il n’est pas conseillé de jouer en boucle une musique en stéréo avec cette fonction car les voies risquent d’être désynchronisée. Voir fonction StateVoice.

Cette fonction ne peut prendre en paramètres que les énumérations cités plus haut.

void SetBeep_voice1 (unsigned short freq, unsigned char duree) ;

void SetBeep_voice2 (unsigned short freq, unsigned char duree) ;

move.w    #440,-(a7)

subq.l       #2,a7

move.b     #30,1(a7)

jsr            polysnd2::SetBeep_voice[1|2]

lea           4(a7),a7

Joue une fréquence sur le canal voulu.

Cette fonction permet de jouer une simple fréquence sur le canal de son choix. Il existe la fonction beep qui règle les 2 canaux en même temps.

void PlayFX_voice1 (unsigned short *);

void PlayFX_voice2 (unsigned short *);

pea   SoundFX(PC)

jsr     polysnd2::PlayFX_voice[1|2]

lea    4(a7),a7

Joue un effet sonore sur le canal voulu.

Cette fonction permet de jouer des effets sonores (bruitages) sur le canal voulu. Cette fonction demande en paramètre un pointeur correspondant à des données codées en short. La fonction PlayFX permet de régler les 2 canaux en même temps. Voir ci-dessous.

En C pour utiliser correctement cette fonction vous devez utiliser une liste à une dimension qui ce compose de cette façon :

fréquence, durée, fréquence, durée… fréquence, durée, fin

Les fréquences sont comprises entre 1 et 32768, 0 est considéré comme une pause.

Durée ici peuvent aller de 1 à 65535.

Les fréquences sont approximative donc il est conseillé de ce référer à ce calcul :

value = (32 768 / 8 192)*freq

Ou freq correspond à votre fréquence réelle et value correspond à la fréquence à donnée pour PolySnd v2.0. Donc pour une fréquence réelle de 440 Hz, il faut entrer 1760 pour PolySnd v2.0.

Voici un exemple de données effets sonores pour PlayFX… :

unsigned short MySoundFX[]={5000,30,

                                                     485,10,

                                                     8000,90,

                                                     7000,50,

                                                     6542,45,

                                                     0xFFFF} ;

0xFFFF (65535) signale à PolySnd v2.0 la fin de l’effet sonore, il est important à mettre sans lui PolySnd v2.0 seras perdu.

Les xx correspondent aux fréquences de l’effet sonore MySoundFX.

Les yy correspondent aux durées des fréquences associées, les durées dépendent du tempo.

En assembleur MySoundFX donnera :

MySoundFX :

   dc.w    5000,30

   dc.w    485,10

   dc.w    8000,90

   dc.w    7000,50

   dc.w    6542,45

   dc.w    $FFFF

unsigned short GetFrequency_voice1 (void);

unsigned short GetFrequency_voice2 (void);

jsr      polysnd2::GetFrequency_voice[1|2]

Renvoie la valeur via d0.

Renvoie la fréquence en cours sur le canal voulus.

Cette fonction renvoie la fréquence en train d’être joué sur le canal voulu.

unsigned char PortStatus (void) ;

jsr      polysnd2 ::PortStatus

Renvoie la valeur via d0.

Renvoie l’état du port I/O en bas niveaux.

Cette fonction permet de savoir quand la librairie émet des impulsions. Le canal 1 correspond au bit 0 et le canal 2 au bit 1 si un bit est armé alors la tension traversant le fils de données du canal correspondant est à 0 V si le bit est désarmé la tension et à ~5V. Cette fonction est utile pour la création d’un oscilloscope à ondes en créneaux…

Cette fonction renvoie juste l’état du port (0x60000E).

void Interrupt5 (INT_HANDLER) :

move.l  #Interrupt_handler,-(a7)

jsr        polysnd2 ::Interrupt5

lea        4(a7),a7

Auto Int n°5 de PolySnd v2.0.

Cette fonction permet d’utiliser l’auto int n°5 avec PolySnd v2.0. Elle tourne à une fréquence précise de 5 000 Hz.

Exemple :

En C :

INT_HANDLER OldInt1 = NULL;

INT_HANDLER OldInt2 = NULL;

INT_HANDLER OldInt4 = NULL;

INT_HANDLER OldInt5 = NULL;

INT_HANDLER OldInt6 = NULL;

volatile unsigned long counter ;

DEFINE_INT_HANDLER (Interrupt_handler5)

{

   counter++;

}

void _main (void)

{

  OldInt1 = GetIntVec (AUTO_INT_1);

  OldInt2 = GetIntVec (AUTO_INT_2);

  OldInt4 = GetIntVec (AUTO_INT_4);

  OldInt5 = GetIntVec (AUTO_INT_5);

  OldInt6 = GetIntVec (AUTO_INT_6);

  SetIntVec (AUTO_INT_1, DUMMY_HANDLER);

  SetIntVec (AUTO_INT_2, DUMMY_HANDLER);

  SetIntVec (AUTO_INT_4, DUMMY_HANDLER);

  SetIntVec (AUTO_INT_5, DUMMY_HANDLER);

  SetIntVec (AUTO_INT_6, DUMMY_HANDLER);

  counter=0;

  EnableSound ();

  InstallSound ();

  Interrupt5 (Interrupt_handler5);

  ....

  DesinstallSound ();

  DisableSound ();

  SetIntVec (AUTO_INT_1, OldInt1);

  SetIntVec (AUTO_INT_2, OldInt2);

  SetIntVec (AUTO_INT_4, OldInt4);

  SetIntVec (AUTO_INT_5, OldInt5);

  SetIntVec (AUTO_INT_6, OldInt6);

}

Dans ce programme counter sera incrémenté de 1, 5 000 fois par secondes.

void PlaySound_voice1 (unsigned char *);

void PlaySound_voice2 (unsigned char *);

pea   channel(PC)

jsr     polysnd2::PlaySound_voice[1|2]

lea    4(a7),a7

Joue une musique sur le canal voulu.

Cette fonction permet de jouer une musique sur le canal voulu. Cette fonction demande un pointeur sur des données en char. La fonction PlaySound permet de régler les 2 canaux en même temps. Voir ci-dessous.

En C pour utiliser correctement cette fonction vous devez utiliser une liste à une dimension qui ce compose de cette façon :

note_octave,durée, note_octave, durée… note_octave, durée, fin

Les notes suivit de leur octave sont définis grâce à un tableau de fréquences, regarder le fichier header en C ou en ASM pour connaître les notes dans leurs format. Ce procédé est identique pour les durées.

Les bémols sont notés b et les dièse d en C et en ASM. Une note est toujours précédée d’un tiret _.

Voici un exemple de données effets sonores pour PlaySound… :

unsigned char channel[]={_do0,noir,

                                           _fa5,blanche,

                                           _sold4,croche,

                                           _sib9,croche_pointee,

                                            0xFF} ;

Le 0xFF indique à PolySnd v2.0 la fin des données musical.

En assembleur channel donneras :

channel :

   dc.b   _do0,noir

   dc.b   _fa5,blanche

   dc.b   _sold4,croche

   dc.b   _sib9,croche_pointee

   dc.b   $FF

Attention, certaines fonctions de PolySnd v2.0 ne peuvent être utilisé qu’avec ce mode là.

unsigned char GetLenght_voice1 (void);

unsigned char GetLenght_voice2 (void);

jsr     polysnd2::GetLenght_voice[1|2]

Renvoie la valeur via d0.

Renvoie la durée d’une note.

Cette fonction permet de connaître la durée d’un fréquence ou note en train d’être jouée. Idéal pour suivre l’avancer d’un morceau de musiques ou d’effets sonores.

unsigned short GetTime (unsigned char *);

unsigned short GetTime (unsigned char *);

pea  channel(PC)

jsr    polysnd2::GetTime

lea   4(a7),a7

Renvoie la valeur via d0.

Renvoie le temps total d’une musique.

Renvoie le temps que mettras PolySnd v2.0 pour jouer une musique, ce temps est renvoyé en secondes. Cette fonction ne fonctionne qu’avec des données musicales sous la forme de PlaySound…

Cette fonction est extérieur à PolySnd v2.0 et modifieras en rien sont comportement. Elle permet de faciliter le travail du programmeur. Idéal pour un player ou pour estimer la durée d’une musique.

unsigned char GetState (void);

jsr   polysnd2 ::GetState

Renvoie la valeur via d0.

Renvoie l’état d’un canal.

Renvoie l’état d’un canal et indique si le canal est en pause ou non. Le canal 1 correspond au bit 0 et le canal2 au bit 1, si ce bit est armé, du son est joué sur le canal correspondant, si le bit est désarmé le canal est en pause.

Ces énumérations sont valables pour tester les canaux :

#define NOVOICE   0

#define VOICE1       1

#define VOICE2       2

#define ALLVOICE 3

_NOVOICE   equ       0

_VOICE1       equ       1

_VOICE2       equ       2

_ALLVOICE equ       3

La fonction est StateVoice est assez identique mais elle est utilisé pour une fonction bien précise, utilisez GetState pour savoir si du son est joué sur un canal et StateVoice si un canal a terminé de jouer une simple fréquence, une musique ou un effet sonore.

unsigned char GetMode (void);

jsr    polysnd2::GetMode

Renvoie la valeur via d0.

Renvoie le type de données que PolySnd v2.0 est en train d’exécuter.

Cette fonction permet de savoir si une simple fréquence, un effet sonore ou une musique est en train d’être joué sur un canal.

Cette fonction suit un codage bien précis pour connaître le mode de données exécuté.

Les bits 0 et 1 concerne le canal 1, si :

00 = beep                    (simple fréquence)

01 = Non utilisé

10 = PlayFX               (effet sonore)

11 = PlaySound          (musique)

Les bits 2 et 3 concerne le canal 2 :

Ces énumérations suivantes sont valables pour tester les canaux :

#define BEEP_VOICE1       0

#define BEEP_VOICE2       0

#define FX_VOICE1 2

#define FX_VOICE2 8

#define SOUND_VOICE1   3

#define SOUND_VOICE2   12

_BEEP_VOICE1     equ        0

_BEEP_VOICE2     equ        0

_FX_VOICE1          equ        2

_FX_VOICE2          equ        8

_SOUND_VOICE1 equ        3

_SOUND_VOICE2 EQU     12

Exemple pour un effet sonore sur le canal1 et une musique sur le canal2. 0000 1110

En C :

if (GetMode ()==(FX_VOICE1 |  SOUND_VOICE2)) {…}

En ASM:

jsr         polysnd2::GetMode                           ;appel de GetMode

move.b #_FX_VOICE1,d1                           ;d1 contient 0000 0010

ori.b      #_SOUND_VOICE2,d1                  ;effectue un OU logique avec 0000 0010 et 0000 1100, d1 contient 000 1110

cmp.b   d0,d1                                                 ;si d0=d1

beq       continue                                             ;alors aller continue

rts                                                                  ;sinon fin

continue:

....

unsigned char GetLoop (void);

jsr   polysnd2::GetLoop

Renvoie la valeur via d0.

Renvoie si le mode loop est activé sur un canal.

Cette fonction renvoie si le mode loop est activé sur un canal. Le bit 0 correspond au canal 1 et le bit 1 au canal 2. Si le bit est armé, le mode loop est activé, si le bit est désarmé le mode loop est désactivé.

Ces énumérations sont valables pour tester les canaux :

#define NOVOICE   0

#define VOICE1       1

#define VOICE2       2

#define ALLVOICE 3

_NOVOICE   equ       0

_VOICE1       equ       1

_VOICE2       equ       2

_ALLVOICE equ       3

unsigned short _Time_voice1 (void);

unsigned short _Time_voice2 (void);

jsr   polysnd2::_Time_voice[1|2]

Renvoie la valeur via d0.

Renvoie le temps écoulé en seconde depuis le début d’une simple fréquence, d’un effet sonore ou d’une musique sur le canal voulu.

Cette fonction renvoie le temps écoulé depuis le début d’une simple fréquence, d’un effet sonore ou d’une musique sur le canal voulu. Ce temps est donné en seconde. Idéal pour un player. Ce temps peut être initialisé à tout moment grâce à InitializeTime…

void InitializeTime_voice1 (void),

void InitializeTime_voice2 (void);

jsr   polysnd2::InitializeTime_voice[1|2]

Initialise le compteur de temps écoulé sur le canal voulu.

Cette fonction remet à zéro le compteur permettant de déterminer le temps écoulé d’un morceau de musique…

unsigned char StateVoice (void) ;

jsr   polysnd2 ::StateVoice

Renvoie la valeur via d0.

Renvoie l’état d’un canal.

Cette fonction permet de déterminer si un canal à finit de jouer du son… Le bit 0 correspond au canal 1 et le bit 1 au canal 2, si ce bit est armé le mode est en train d’être joué sur le canal correspondant, si le bit est désarmé, PolySnd v2.0 à finit de jouer une musique…

Cette fonction est utile pour synchroniser et répéter en boucle une musique en stéréo.

Ces énumérations sont valables pour tester les canaux :

#define NOVOICE   0

#define VOICE1       1

#define VOICE2       2

#define ALLVOICE 3

_NOVOICE   equ       0

_VOICE1       equ       1

_VOICE2       equ       2

_ALLVOICE equ       3

Exemple pour jouer une musique en stéréo en boucle sans utiliser la fonction loop :

while (_keytest (RR_ESC)==FALSE)

{

  if (StateVoice ()==NOVOICE) PlaySound (channel1,channel2);

  ....

}

void SetStateVoice (unsigned char state);

move.b   #_VOICE1,-(a7)

jsr           polysnd2::SetStateVoice

lea          2(a7),a7

Régle StateVoice.

Attention, cette fonction permet de régler StateVoice en fonction de ses besoins.

La valeur passée par SetStateVoice sera initialisé si une musique est rejouée ou si PolySnd v2.0 a était configuré pour recevoir un autre traitement de données. Utilisé cette fonction à titre temporaire.

void SetIntMask (unsigned short mask);

move.w    #$2700,-(a7)

jsr             polysnd2::SetIntMask

lea            2(a7),a7

Règle le masque d’interruptions de PolySnd v2.0.

Cette fonction est assez important si vous avez du mal à utiliser PolySnd v2.0 avec d’autres interruptions et que vous constatez que l’auto int 1… est ralentie, ce masque permet à PolySnd de désactiver ou ne pas désactiver certaines interruption lors du passage de l’interruption de PolySnd v2.0. La valeur du masque dois ce situer entre 0x2100 et 0x2700.

USE_GRAY_WIDTH_POLYSND

Cette définition ne peux être utiliser en C que sous TIGCC, elle a pour but de faire fonctionner correctement PolySnd v2.0 avec les niveaux de gris de TIGCC.

Cette définition dois ce situer juste avant GrayOn ().

Il n’est pas assuré que cette définition fonctionne dans les futur version de TIGCC dans ce cas vous devez savoir que la routine de gestion des niveaux de gris ne dois pas désactiver l’auto int 5 lors de son passage, si ce n’ai pas le cas vous constaterais un ralentissement et un son assez grave de PolySnd v2.0, ou tout autre comportement bizarre, c’est pour ça qu’il faut configurer correctement les masques d’interruptions des interruptions que vous utilisez.

VIII-    Tableau des durées.

PolySnd v2.0 est capable de jouer n’importe quelle note sur 10 octaves, les octaves sont notées de 0 à 9. La liste des notes est durée n’est pas exhaustive, il est possible de la compléter selon vos critère.

Une note est précédée d’un tiret puis suivit du nom de la note, puis son type (bémol ou dièse) et enfin un le numéro de l’octave. Pour un DO dièse d’octave 5 vous noterez : _dod4.

Une pause sera notée pause ou 0.

Voici le tableau des durées, la référence de PolySnd v2.0 est la noir avec une durée de 30 cycles de tempo. 30 cycles est équivalents à 1 temps.

Type

Syntaxe

Durée

Ronde

ronde

4 temps

Blanche

blanche

2 temps

Blanche pointée

blanche_pointee

2 + ½ temps

Noir pointée

noir_pointée

1 + ½ temps

Noir

noir

1 temps

Croche pointée

croche_pointee

½ + ¼ temps

Croche

croche

½ temps

Double croche

double_croche

¼ temps

Triple croche

triple_croche

1/8 temps

Quadruple croche

quadruple_croche

1/16 temps

Soupir

soupir

1 temps

Soupir pointé

soupir_pointe

1 + ½ temps

Il existe des abréviations, regardez le fichier PolySnd2.

IX-           Améliorer la qualité du son.

Il est possible d’améliorer la qualité du son en fabriquant un passe bas sur chaque voie. Vous devez posséder 2 condensateurs de 47 pF et 2 résistances de 470 kohms

            Ce passe bas à pour but de transformer les ondes sous forme de créneaux en ondes sinusoïdales.

X-               Me contactez.

N’hésitez pas à me contactez pour toutes suggestions, critiques, rapport de bugs ou tout simplement m’envoyez vos créations musicales ou tout autre programmes utilisant PolySnd v2.0. geoffrey.anneheim@wanadoo.fr

Remerciements :

Florian Drevet pour son superbe Zguide qui m’a permis d’apprendre l’assembleur très facilement

Xavier Vassor, Julien Muchembled, Zeljko Juric, Kevin Kofler, Sebastian Reichelt, Jean Canazzi, Niklas Brunlid, Philipp Winkler pour le compilateur TIGCC SDK et le fichier d’aide très complet. Tout particulièrement Kevin Kofler qui m’as aider dans la réalisation de cette librairie.

Laurent PONCEY pour avoir crée Sound6d sur TI-92 et surtout pour avoir diffuser le code source, sans lui PolySnd n’aurait jamais existé.

Remerciement à TEXAS INSTRUMENTS pour ces calculatrices. http://www.ti.fr/calc

Remerciements à Vertyos alias bob64, Kevin Kofler, MacInToc, EvaSDK, jackiechan, nEUrOne, Uther Lightbringer, Squale92, BiHi, XDanger, Ximoon, fabedal, Nil, ExtendeD, Godzil, squalyl peut leur aide, critiques et suggestions. N’hésitez pas à faire un tours sur : yAronet.com

Remerciements à MasterSam pour son exemple Only For You. Son site WEB : http://perso.wanadoo.fr/mastersam.rc

Logiciels et outils pour PolySnd v2.0 :

PolySnd MIDI : convertisseur MIDI en format PolySnd v2.0, il permet d’obtenir des données en C, ASM ou pour PolySnd Player.

PolySnd Player : Joueur de musiques, les musiques prennent peu de place. Il est capable de renvoyer une multitude d’informations sur la musique en cours.

Reste plus qu’à vous faire des programmes avec PolySnd v2.0.

Visitez http://www.ticalc.org pour trouvez ses logiciels…

Copyright 2003 by Geoffrey ANNEHEIM