Discussion: [GBA] Lecteur ADPCM
Afficher un message
Vieux 16/01/2006, 21h40   #46
Nrx
Membre confirmé
 
Date d'inscription: 10/11/2005
Messages: 277
Par défaut

Ben il faut modifier la fonction "AdpcmDecodeVbl"... Mais le changement n'est pas aussi trivial qu'il n'y parait :

Actuellement, les sons sont soit de pur PCM (= sons non compresses), soit en ADPCM (compression 8 bits => 4 bits).
  • Les sons non compresses sont directement lus de la ROM, sans aucune conversion ou transfert memoire prealable ;
  • Les sons compresses sont d'abord decompresses dans un buffer en RAM, puis ensuite envoyes au circuit sonor de la GBA par DMA. Evidemment ce buffer n'est pas aussi grand que la musique elle-meme : il suffit juste de reserver suffisamment de memoire pour pouvoir stocker les echantillons necessaire pendant un cycle (= 1 VBL). En gros on decompresse un paquet d'echantillons a chaque VBL, echantillons qui seront utilises par le circuit sonor jusqu'au prochain VBL.

Pour le moment il n'y a pas de reglage du volume, ni mixage des sons sur le meme canal. Pour implementer ces "features", il suffit de modifier le buffer qui contient les echantillons... ce qui signifie qu'il FAUT un buffer. En clair il est assez simple de modifier la version ADPCM, mais pour la version PCM, il faut d'abord modifier le code et implementer une copie des echantillons de la ROM vers un buffer en RAM a chaque cycle.

Pour ce qui est des modifs :
  • Pour le volume : il faut faire une mise a l'echelle de chaque echantillon du buffer ; par exemple au lieu de faire
    Code:
    *outputData++=sample>>8;
    on peut faire
    Code:
    *outputData++=(sample*volume)>>(8+6);
    en reglant le volume de 0 a 255 (0 = pas de son / 255 = 4 fois plus fort).
  • Pour le mixage de plusieurs musiques sur le meme canal, il faut faire la somme des echantillons de chacune des musiques.

Voila ! "Y a plus qu'a"

Dernière modification par Nrx ; 16/01/2006 à 21h43.
Nrx est déconnecté   Réponse avec citation