La Place des Développeurs [EN COURS] Jouer des Bribes Audio ADPCM en continu sur le Music Module. Comment Charger et jouer des Bribes AUDIO sans discontinu.
Reprise du message précédent
Le plus simple est de ne pas traduire en BASIC, mais de créer la routine en assembleur et de l'appeler par USR(x).Ceci dit, il y a un point important pour toi dans la boucle : la lecture commence après l'instruction "DI" (arrêt de toutes les interruptions).
Ce qui veut dire qu'une fois que tu as lancé la lecture, l'ordinateur ne peut rien faire tant que la lecture n'est pas finie.
Je doute que tu arrives à quelque chose par ce moyen là. Edité par Metalion Le 16/10/2014 à 11h04
MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
igal
Membre non connecté
Conseiller Municipal
Fabf :
Même si c'est traduisible en basic ce sera jamais assez rapide pour que quelque chose d'audible
Bon...Alors voila ma nouvelle idée bien Tordue
De la même façon que je charge des Bribes Vidéo dans la Vram, je voulais en faire autant en utilisant l'espace réservé aux Sprites en y envoyant un flot continu de Bribes contenant simplement des données Audio Brut.
Par expérimentation, je peux déjà dire que tu peux BLOAD"CHOUX-CAROTTE-NAVET",S (Très important le S
du moment que tu laisses places la bonne entête comme on peut le voir ici =>http://www.msxvillage.fr/forum/topic.php?id=2491
L'intérêt du BLOAD"XYZ,S est que l'on peut instantanément déterminer la "Latitude" dans la PAGE VRAM et donc Charger et Recharger des données en continu sans avoir à interrompre le processus pour désigner ou placer les données.
Le COVOX (largement accessible à tous) ne demande qu'à faire du décodage en ne s’embarrassant pas de la vitesse, quantité etc...
Il suffit de lui envoyer en VRAC n'importe quoi pour qu'il traduise les signaux Numérique en Analogique
En supposant que l'on utilise le SCREEN 12, on peut stocker dans la Zone réservée aux Sprite (Page 0):
Sachant qu'une page de 256 X 212 en SCREEN12 (ou encore 8,10,11) pèse => 54 219 Octets
Si l'on divise 54 219 par 212 ligne contenues dans la page, on obtient => 255,75
On a donc 255 Octets par ligne.
En testant:
10 SCREEN12
20 TIME=0: BLOAD"512Octets",S: SCREEN 0 : PRINT TIME
30 END
On obtient Time = 42. (Forcément, SCREEN 0 est de trop, mais ça donne déjà une idée.)
On peut donc compter sur un renouvellement de 512 Octets toutes les 42 unites (TIME) pour alimenter le COVOX en données bruts.
NYYRIKKI charge 4095 Octets sur la Zone RAM depuis C000 à CFFF. (4095 octets)
4095 est l'équivalent de 255,75 X 16,0588... Soit l'équivalent de 8 X 2 lignes à 42 TIME!
En extrapolant, on peut considérer qu'il faut 8 X 42 TIME pour charger "Un sample qui dure (je sais pas combien )
Bref, si on charge plus vite que l'ont lit ca peut le faire.
En fait si je demande à convertir en Basic, c'est pour pouvoir tester des idées farfelues Edité par igal Le 16/10/2014 à 11h17
igal
Membre non connecté
Conseiller Municipal
Metalion :
Le plus simple est de ne pas traduire en BASIC, mais de créer la routine en assembleur et de l'appeler par USR(x).
Ceci dit, il y a un point important pour toi dans la boucle : la lecture commence après l'instruction "DI" (arrêt de toutes les interruptions).
Ce qui veut dire qu'une fois que tu as lancé la lecture, l'ordinateur ne peut rien faire tant que la lecture n'est pas finie.
Je doute que tu arrives à quelque chose par ce moyen là.
Ceci dit, il y a un point important pour toi dans la boucle : la lecture commence après l'instruction "DI" (arrêt de toutes les interruptions).
Ce qui veut dire qu'une fois que tu as lancé la lecture, l'ordinateur ne peut rien faire tant que la lecture n'est pas finie.
Je doute que tu arrives à quelque chose par ce moyen là.
Ce problème se pose même si on utilise le Music Module?
Encore une fois, pour ce qui est de la vitesse, c'est vraiment de l'expérimentation
C'est pour cela que ce code en Basic me serait utile. Edité par igal Le 16/10/2014 à 11h23
Igal ... Un lecteur de sample pour le Music Module en BASIC, tu en as un tout prêt, en première page de ce sujet.
C'est toi qui l'a posté
C'est toi qui l'a posté
MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
Fabf
Membre non connecté
Conseiller Municipal
Pourquoi charger les données en VRAM
Il va falloir les passer en RAM pour pouvoir les envoyer au Covox.
Il va falloir les passer en RAM pour pouvoir les envoyer au Covox.
igal
Membre non connecté
Conseiller Municipal
@Metalion: Le programme au tout début est conçu pour "Digitaliser" des SONS et rejouer la digit faite précédemment.
je sais pas trop ce qu'il faut modifier ni comment modifier pour charger des "Samples" par BLOAD
@Fabf: En fait je voudrais intégrer le SON au moteur VDP (27) en utilisant le même principe que pour les Bribes Vidéo, mais en y mettant des données AUDIO brutes!
En plaçant les données AUDIO dans la VRAM, je peux visualiser au Pixel près à quel moment, le Module AUDIO à besoin d'être réalimenté en données
De la sorte, je peu modeler à volonté et sans trop de difficultés la "recharge" de nouvelles données AUDIO.
La notion de TEMPS me serait donnée par le déroulement de la vidéo
En chargeant directement les données dans la VRAM on est obligé de la recopier vers la RAM pour ensuite seulement pouvoir la rendre lisible par le Music Module?
Dans l'absolu, effectivement, rien n'empêche d'envoyer les données vers la RAM plutot que la VRAM!
J'ai retrouvé le testes que j'avais fait avec le logiciel MAGIC qui utilise NBASIC (il me semble que c'est toi Eric qui en a parlé).
L'exemple ci dessous fonctionne avec la MoonSound, mais il me semble qu'il est possible d'en faire autant avec d'autre Chip Audio
Voici le résulta en image:
https://www.youtube.com/watch?v=UigcyoFEre8
La partie Audio qui nous intéresse est celle ci:
Donc oui il est bien possible de jouer de la Musique, des WAV simultanément à des Images en SCREEN12 sur MSX
Par contre, je suis pas sur que cela fonctionne sur BlueMsx!
Savez vous si il faut charger une MoonSound Virtuelle sur le SLOT de BlueMSX pour qu'elle soit émulée ou alors la case MOONSOUND cochée suffit à l'émuler complètement?
J'ai essayé sur BlueMsx, mais ca à pas l'air de fonctionner Edité par igal Le 16/10/2014 à 15h12
je sais pas trop ce qu'il faut modifier ni comment modifier pour charger des "Samples" par BLOAD
@Fabf: En fait je voudrais intégrer le SON au moteur VDP (27) en utilisant le même principe que pour les Bribes Vidéo, mais en y mettant des données AUDIO brutes!
En plaçant les données AUDIO dans la VRAM, je peux visualiser au Pixel près à quel moment, le Module AUDIO à besoin d'être réalimenté en données
De la sorte, je peu modeler à volonté et sans trop de difficultés la "recharge" de nouvelles données AUDIO.
La notion de TEMPS me serait donnée par le déroulement de la vidéo
En chargeant directement les données dans la VRAM on est obligé de la recopier vers la RAM pour ensuite seulement pouvoir la rendre lisible par le Music Module?
Dans l'absolu, effectivement, rien n'empêche d'envoyer les données vers la RAM plutot que la VRAM!
J'ai retrouvé le testes que j'avais fait avec le logiciel MAGIC qui utilise NBASIC (il me semble que c'est toi Eric qui en a parlé).
L'exemple ci dessous fonctionne avec la MoonSound, mais il me semble qu'il est possible d'en faire autant avec d'autre Chip Audio
Voici le résulta en image:
https://www.youtube.com/watch?v=UigcyoFEre8
La partie Audio qui nous intéresse est celle ci:
Code TEXT :
301 bload "nbasic.bin",r:e=usr(1) 302 if p(0)=0 then print "MSX à bsoin de 128 Ko de ram":end 303 p(0)=2:e=usr(73) 304 e=usr(1):if p(0)<7 then print "pas assez de mémoire pour charger une musique":end 305 if p(0)<8 then print "ce MSX ne peut charger que des musique de moins de 16Ko" 306 f$(0)="CAPYPSO2.mbm":f$(1)="CALYPSO2.mbk":p(0)=0 'p(0)=1 pour un .mwm 307 e=usr(71):if e=0 then print "Replayer active" else print "probleme avec le replayer" 308 e=usr(31):p(2)=6 309 p(3)=0:p(4)=&h4000:e=usr(33) 310 if (e<>0 and e<>1 and e<>199) then print "Erreur fichier ":end 311 if e=0 then p(2)=p(2)+1:goto 309 312 e=usr(32):if e=0 then print "Musique chargée" 313 f$(0)=f$(1) 314 e=usr(31):if e<>0 then "print erreur chargement sample kit":end 315 e=usr(78) ' charge un fichier mwk (78) pour un fichier mbk 316 e=usr(32):if e=0 then print "Sample kit charge" else print "Erreur sample kit" 317 p(0)=6:p(1)=0:e=usr(74) ' start
Donc oui il est bien possible de jouer de la Musique, des WAV simultanément à des Images en SCREEN12 sur MSX
Par contre, je suis pas sur que cela fonctionne sur BlueMsx!
Savez vous si il faut charger une MoonSound Virtuelle sur le SLOT de BlueMSX pour qu'elle soit émulée ou alors la case MOONSOUND cochée suffit à l'émuler complètement?
J'ai essayé sur BlueMsx, mais ca à pas l'air de fonctionner Edité par igal Le 16/10/2014 à 15h12
igal :
@Metalion: Le programme au tout début est conçu pour "Digitaliser" des SONS et rejouer la digit faite précédemment.
je sais pas trop ce qu'il faut modifier ni comment modifier pour charger des "Samples" par BLOAD
je sais pas trop ce qu'il faut modifier ni comment modifier pour charger des "Samples" par BLOAD
Igal, je te rappelle que tu veux écrire en BASIC un jeu complet en SCREEN12, avec scrolling, des sprites, du son ...
Si tu veux faire tout ça, tu devrais être en mesure d'analyser ce programme et en extraire la partie qui joue le son.
MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
Fabf
Membre non connecté
Conseiller Municipal
Dans le meilleur des cas si tu veux quelque chose de continue, tu ne pourra envoyer des octets au Covox que toutes les 0.04 seconde (On interval gosub)
Cela nous fait un échantillonnage du PCM à 25Hz, c'est pas brillant du tout niveau sonore
Maintenant je me suis peut être trompé dans mes calculs et conversions
Cela nous fait un échantillonnage du PCM à 25Hz, c'est pas brillant du tout niveau sonore
Maintenant je me suis peut être trompé dans mes calculs et conversions
igal
Membre non connecté
Conseiller Municipal
@Métalion: Même si l'idée de refaire un stage de Gradius 4 n'est pas le sujet ici, tu as quand même raison, faut que je creuse la question par moi même.
J'ai pas trouvé le Music Module à émuler dans BlueMSX! (Cest le meilleur moyen pour moi de trifouiller dans tous les sens )
@Fabf, tu dois avoir raison là aussi, mais c'est justement ça qui me plait! Quand ca devrait pas marcher mais qu'on trouve une astuce pour contourner le problème.
Pour mémo:
facdemo3.dsk
http://fms.komkon.org/MSX/Docs/BIOS.txt
http://www.z80.info/z80oplist.txt Edité par igal Le 18/10/2014 à 21h48
J'ai pas trouvé le Music Module à émuler dans BlueMSX! (Cest le meilleur moyen pour moi de trifouiller dans tous les sens )
@Fabf, tu dois avoir raison là aussi, mais c'est justement ça qui me plait! Quand ca devrait pas marcher mais qu'on trouve une astuce pour contourner le problème.
Pour mémo:
Code TEXT :
10 IFPEEK(&HF677)=&HD0THEN20ELSEPOKE&HF677,&HD0:POKE&HF676,1:POKE&HD000,0:RUN"002.ASC" 20 POKE&HFF89,229:POKE&HFBB1,1:ONERRORGOTO510 30 'DEFINTA-Z:COLOR 15,0,0 40 L0=PEEK(&HFD9F):L1=PEEK(&HFDA0):L2=PEEK(&HFDA1) 50 BLOAD"FAC-III.003":BLOAD"FAC-III.004":SCREEN0:'SETPAGE0,1:SETPAGE0,0 60 GOSUB170 70 GOSUB400 80 OUT&HFE,6:BLOAD"FAC-III.006":OUT&HFE,7:BLOAD"FAC-III.007" 90 OUT&HFE,4:BLOAD"FAC-III.008":OUT&HFE,5:BLOAD"FAC-III.009" 100 OUT&HFE,2:BLOAD"FAC-III.00A":OUT&HFE,3:BLOAD"FAC-III.00B" 110 OUT&HFE,6:DEFUSR=&HC300:A=USR(0) 120 OUT&HFE,7:DEFUSR=&HC300:A=USR(0) 130 OUT&HC0,7:OUT&HC1,1 140 OUT&HC0,10:OUT&HC1,0:OUT&HC0,12:OUT&HC1,&H1F 150 GOSUB420 160 FORW=1TO1450:NEXTW:GOTO190 170 DEFUSR=&H41:A=USR(0):GOSUB440 180 FORC=0TO15:COLOR=(C,0,0,0):NEXTC:DEFUSR=&H44:A=USR(0):RETURN 190 'FORC=2TO4:FORY=0TO3:COLOR=(C,7-Y,7-Y,7-Y):COLOR=(C+3,Y,0,Y):NEXTY:COLOR=(C+3,0,0,0):COLOR=(C,0,0,0):NEXTC:FORW=1TO200:NEXTW 200 'FORC=2TO4:COLOR=(C,7,7,7):COLOR=(C+3,2,0,3):FORW=1TO240:NEXTW,C 210 'FORI=0TO4:FORC=5TO7:COLOR=(C,2+I,0,3+I):NEXTC:FORW=1TO10:NEXTW,I 220 'FORI=4TO0STEP-1:FORC=5TO7:COLOR=(C,2+I,0,3+I):NEXTC:FORW=1TO10:NEXTW,I 230 'FORW=1TO1000:NEXTW 240 GOSUB400 241 OUT&HFE,2:DEFUSR=&HC300:A=USR(0) 242 OUT&HFE,3:DEFUSR=&HC300:A=USR(0) 243 OUT&HC0,7:OUT&HC1,1:OUT&HC0,9:OUT&HC1,255:OUT&HC0,10:OUT&HC1,0:OUT&HC0,11:OUT&HC1,&HAF:OUT&HC0,12:OUT&HC1,&H11 250 'COPY (0,180)-(260,210)TO(0,212) 260 Z=-1:ONINTERVAL=1GOSUB280:INTERVALON 270 'GOTO270 280 VDP(24)=Z+1:Z=Z+1:IFZ=180THENINTERVALOFF:GOTO 310 285 IFZ=70THENGOSUB420 290 'LINE(0,Z)-(511,Z),0 300 RETURN 310 DEFUSR=&H41:A=USR(0) 360 POKE&HEFFF,0:GOSUB400:OUT&HFE,4:DEFUSR=&HC300:A=USR(0):OUT&HFE,5:DEFUSR=&HC300:A=USR(0):DEFUSR=49500!:A=USR(0):GOSUB410:GOSUB430 370 FORI=1TO255:OUT&HC0,18:OUT&HC1,I:NEXTI:DEFUSR=&H44:A=USR(0) 380 ONSTRIGGOSUB490,490,490:STRIG(0)ON:STRIG(1)ON:STRIG(2)ON 390 FORI=1TO12000:NEXTI:GOTO490 400 OUT&HC0,7:OUT&HC1,1:OUT&HC0,8:OUT&HC1,0:OUT&HC0,9:OUT&HC1,0:OUT&HC0,10:OUT&HC1,0:OUT&HC0,11:OUT&HC1,&HFF:OUT&HC0,12:OUT&HC1,&H1F:OUT&HC0,7:OUT&HC1,&H60:RETURN 410 OUT&HC0,7:OUT&HC1,1:OUT&HC0,8:OUT&HC1,0:OUT&HC0,9:OUT&HC1,60:OUT&HC0,10:OUT&HC1,0:OUT&HC0,11:OUT&HC1,&HFF:OUT&HC0,12:OUT&HC1,&H1F:OUT&HC0,7:OUT&HC1,&H60:RETURN 420 OUT&HC0,16:OUT&HC1,&HF0:OUT&HC0,17:OUT&HC1,&H51:OUT&HC0,18:OUT&HC1,255:OUT&HC0,24:OUT&HC1,8:OUT&HC0,7:OUT&HC1,&HA0:RETURN 430 OUT&HC0,16:OUT&HC1,&HF0:OUT&HC0,17:OUT&HC1,&H51:OUT&HC0,18:OUT&HC1,0:OUT&HC0,24:OUT&HC1,8:OUT&HC0,7:OUT&HC1,&HB0:RETURN 440 'DRAW"BM29,10C2R63D46L15D16R12D41L12D60L48U163" 450 'DRAW"BM96,10C3R63D163L26U60L11D60L26U163BM122,56R11D16L11U16" 460 'DRAW"BM163,10C4R63D46L15D71R15D46L63U163" 470 'PAINT(30,11),5,2:PAINT(97,11),6,3:PAINT(164,11),7,4 480 RETURN 490 VOL=255:VOL=VOL-1.8:OUT&HC0,18:OUT&HC1,INT(VOL):NEXTI:GOSUB400:POKE&HFD9F,201:POKE&HFDA0,L1:POKE&HFDA1,L2:POKE&HFD9F,L0 495 CLS:GOTO40 500 END 510 DEFUSR=0:A=USR(0)
facdemo3.dsk
http://fms.komkon.org/MSX/Docs/BIOS.txt
http://www.z80.info/z80oplist.txt Edité par igal Le 18/10/2014 à 21h48
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie