1

Bonjour,

quelqu'un aurait il un exemple de code pour jouer un échantillon de musique typiquement sur Falcon (pas avec le Yamaha!)?

Olivier

2

http://toshyp.atari.org/en/004011.html
/* Test and lock sound systeme */ if( Locksnd()==1 ) { /* Set playback(0) buffer */ Setbuffer ( 0, adr_buffer+128, adr_buffer+taille_fichier ); /* fichier AVR, le sample commence à +128 */ /* sample 8 bit stéréo */ Setmode( 0 ); /* src=DMA, dest=D/A, scrclock=25.175Mhz, prescale=25khz, protocol=1 */ Devconnect( 0, 8, 0, 3, 1); /* DMA sound playback sans loop */ Buffoper ( 1 ); /* le son démarre */ Sound_play=TRUE; } /* le programme continue sa route ... */ evnt_timer(2000); if( Sound_play==TRUE ) { Sound_play=FALSE; /* Stop DMA sound playback */ Buffoper ( 0 ); /* Unlock sound systeme */ Unlocksnd(); }

3

Nalfus a règler le pb smile
avatar
Accrochez vous ca va être Cerebral !!

4

Nalfus (./2) :
http://toshyp.atari.org/en/004011.html
/* Test and lock sound systeme */ if( Locksnd()==1 ) { /* Set playback(0) buffer */ Setbuffer ( 0, adr_buffer+128, adr_buffer+taille_fichier ); /* fichier AVR, le sample commence à +128 */ /* sample 8 bit stéréo */ Setmode( 0 ); /* src=DMA, dest=D/A, scrclock=25.175Mhz, prescale=25khz, protocol=1 */ Devconnect( 0, 8, 0, 3, 1); /* DMA sound playback sans loop */ Buffoper ( 1 ); /* le son démarre */ Sound_play=TRUE; } /* le programme continue sa route ... */ evnt_timer(2000); if( Sound_play==TRUE ) { Sound_play=FALSE; /* Stop DMA sound playback */ Buffoper ( 0 ); /* Unlock sound systeme */ Unlocksnd(); }


Génial, puisque j'ai quelqu'un qui s'y connait je vais abuser! comment fait on si on lit une musique au fur et à mesure pour remettre un buffer quand le précédent est fini. J'ai cru comprendre que l'on pouvait avoir une sorte d'interruption pour faire l'opération, n'y a t'il pas une fonction plus évoluée ou l'on travaille sur un double buffer?

Enfin déjà super merci, je vais commencer à m'amuser!

Olivier

5

Il y a la fonction buffptr() qui donne la position des pointeurs DMA en lecture et écriture.
Tu divises ton buffer en 2 (ou le double), et tu mets à jour l'une des parties quand le pointeur DMA passe dans l'autre.

6

Nalfus (./5) :
Il y a la fonction buffptr() qui donne la position des pointeurs DMA en lecture et écriture.
Tu divises ton buffer en 2 (ou le double), et tu mets à jour l'une des parties quand le pointeur DMA passe dans l'autre.


Génial

merci

Olivier

7

La partie replay est assez similaire au STE, donc effectivement tu as le timer A en mode event count.



GT Sous interruption smile
avatar
Accrochez vous ca va être Cerebral !!

8

GT, tu as déjà testé/utilisé le mode interruption ?

D'après la doc, l'interruption est générée à la fin du buffer, et après ? le temps de relancer la lecture et/ou de mettre à jour le buffer, le son va être coupé durant l'opération non ?

C'est juste par curiosité, j'utilise pas cette possibilité car ça doit pas être dispo sur tous les clones.

9

Vu la priorité du timer, si tu colle une routine assembleur propre, je pense que cela doit pas s'entendre (A part peut etre Zerosquare, mais encore heureux que la population a pas la même oreille que lui... wink ) Bon perso j'ai pas essayer.

Sinon il y a une technique un peu de 'gorret'. Tu peux jouer le son en replay infini. Tu lance ta reproduction sonore en inifni, puis direct après tu écris l'adresse du nouvel echantillon, qui sera jouer seulement a la fin de celui qui est en cours. Et après a chaque interruption, tu écris l'adresse du prochain, ce qui fait que tu as un échantillon d'avance smile Et le micro s'occupera tout seul du bouclage smile

GT En boucle !!! wink
avatar
Accrochez vous ca va être Cerebral !!

10

GT Turbo (./9) :
Vu la priorité du timer, si tu colle une routine assembleur propre, je pense que cela doit pas s'entendre (A part peut etre Zerosquare, mais encore heureux que la population a pas la même oreille que lui... wink ) Bon perso j'ai pas essayer.
C'est ce qui se passait sur les toutes premières cartes son PC, et je crois me souvenir que les gens se plaignaient de craquements périodiques. Peut-être que sur un ST ça passe, mais ce n'est pas un truc que je recommanderais.
GT Turbo (./9) :
Sinon il y a une technique un peu de 'gorret'. Tu peux jouer le son en replay infini. Tu lance ta reproduction sonore en inifni, puis direct après tu écris l'adresse du nouvel echantillon, qui sera jouer seulement a la fin de celui qui est en cours. Et après a chaque interruption, tu écris l'adresse du prochain, ce qui fait que tu as un échantillon d'avance smile Et le micro s'occupera tout seul du bouclage smile

GT En boucle !!! wink
Je pense pas que ce soit une technique de porc, à mon avis ça a justement été prévu pour faire ça : c'est une solution classique à ce problème et ça marche bien smile
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

11

L'avantage de la dernière technique, c'est du moins en asm, que quelque lignes de codes qu'on peux directement inclure dans la routine appellé par le timer A.

En gros la routine une écrit une liste des adresses des échantillons, et par exemple un -1 pour indiquer qu'on peux reprendre depuis le dépàrt et un -2 pour indiquer la fin du replay.

Donc la routine place en inter sur le timer A, a chaque appel lit l'adresse, si c'est -1 on reprend au début de la liste, si c'est -2, coupe le son dma et arrete le timer A.

Peux de personne ont utiliser ce 'type' de son dma, car on utilise plus une routine soundtrack, ou une soundchip.


GT spécial dédicace a Fadest wink
avatar
Accrochez vous ca va être Cerebral !!

12

GT Turbo (./9) :
[...] Tu lance ta reproduction sonore en inifni, puis direct après tu écris l'adresse du nouvel echantillon [...]


Ah oui, j'avais lu quelque part que l'on pouvait changer directement les bornes du buffer son une fois le DMA 'démarré', mais je ne sais plus où...

Je prend note de tes techniques Sioux GT pencil

Merci GT, 0² top

13

Bonjour à tous,

je reviens vers vous car j'ai fait quelques essais et malheureusement je n'ai pas un son qui sort! Bon je suis sous Aranym avec Zmgxsound et j'ai l'impression que cela ne fonctionne pas tout à fait comme cela devrait donc je ne suis peut être pas fautif.

Quelqu'un aurait il un tout petit exemple compilé et source (un simple bip suffit) qui tourne chez lui, que je puisse évaluer si cela marche ou pas et voir si je n'ai pas un soucis coté compilateur.
Je reste perplexe, ca ne semble pas bien compliqué.

Bon a part mxplay qui marche au poil (avec ou sans zmgxsound) je n'ai pas grand chose qui fait du bruit!

Merci

Olivier

14

Juste au cas où, le sample doit être en ST RAM

15

Nalfus (./14) :
Juste au cas où, le sample doit être en ST RAM


malheureusement ne change rien.

Je pense de plus en plus que le problème est du coté de ma version Aranym

Olivier

16

Testé sur MyAES_Aranym_demo
http://dl.free.fr/tvcO1gFC7

17

Nalfus (./16) :
Testé sur MyAES_Aranym_demo
http://dl.free.fr/tvcO1gFC7


Merci beaucoup, je confirme que cela fonctionne parfaitement.

et grace au petit morceau de code j'ai compris ma bétise j'avais mis buffoper(2) au lieu de de buffoper(3)!

Merci, maintenant je n'ai plus qu'a sortir un son qui ressemble à quelque chose car je viens de simuler le marteau piqueur!

Olivier

18

Ok donc c'est règler.

J'etais juste en train de me demander si il y avait pas un volume a fixer.


GT Sans son smile
avatar
Accrochez vous ca va être Cerebral !!

19

GT Turbo (./18) :
Ok donc c'est règler.

J'etais juste en train de me demander si il y avait pas un volume a fixer.


GT Sans son smile


Je verrais pour le volume plus tard mais oui cela marche. Merci à tous pour le coup de main. Les exemples de codes ne courent pas les rues!

Olivier

20

Bonsoir à tous,

me revoilà avec mes soucis de son, ca pourrait presque marcher mais j'ai un soucis avec Buffptr() chez moi (sous Aranym - Emutos + Mint), le pointeur de position de l'écoute retourné est toujours exactement au milieu du buffer son sans jamais changer! Alors ca coince et je me demande si c'est un problème Aranym ou Emutos ou si c'est un problème dans mon code, quelqu'un pourrait essayer mon petit programme sous Mint sur un Falcon? Le risque principal c'est que ca boucle sans fin le son et que celui ci soit du coup cadenacé. Si ca passe il y a des chances que le son soit parfois un peu haché je n'ai pas eu loisir de rafiner et je ne sais pas quelle puissance de machine il faut pour suivre la cadence ce n'est pour le moment pas optimisé du tout.

le programme s'apelle mp3.ttp suffit de lui passer en paramêtres un fichier mp3 (nom court)

http://myaes.lutece.net/telechargement/testson.zip

Olivier

21

Ca vient de l'émulation du DMA audio que j'avais écrite, faute de mieux et de temps, je retourne l'adresse au milieu du buffer joué.
Web: http://pmandin.atari.org/
Programmeur Linux, Atari
Spécialité: Développement, jeux

22

pmandin (./21) :
Ca vient de l'émulation du DMA audio que j'avais écrite, faute de mieux et de temps, je retourne l'adresse au milieu du buffer joué.



Merci Patrice, bon à savoir, je rapporte ce point sur la liste d'Aranym.

Olivier