Lire de la musique sur Gamebuino

Bonjour à tous,

J’ai vu passer il y à un certain temps déjà un lecteur de musique sur Gamebuino,
à l’époque, de mémoire je n’ai même pas su lire un son… est ce que c’était un soucis de format ? sans doute.

Je trouve que ce fonction pourrait être vraiment très intéressante, le format de la
Gamebuino, son autonomie et la prise mini jack s’y prête à merveille !

si toutefois vous avez des infos sur ce sujet, cela m’intéresse !

Bonjour, dans mon jeu “Demon Girls”, j’utilise un peu toutes les fonctions différentes pour produire du son. Tu peux regarder dans le code. GitHub - JuiceLizard/DemonGirls: Helltaker demake for Gamebuino Meta
Je l’utilise même presque comme un walkman, car tu peux télécharger des musiques faites par Mittsies, et les écouter en allant dans le menu de sélection des niveaux (appuie sur MENU quand tu es dans un niveau) puis en appuyant sur BAS ou HAUT pour choisir le morceau. GitHub - JuiceLizard/BonusForDemonGirls
Pour le format des musiques, j’utilise Audacity. Il faut mettre en mono, 44100Hz et exporter en WAV (Microsoft), Unsigned 8-bit PCM. Puis placer ce fichier son dans le dossier du jeu, dans la carte SD de la console.

1 Like

Jette surtout un oeil au super boulot d’@eriban :wink:

2 Likes

Salut Steph,

Effectivement c’est très intéressant ! un lecteur quasi complet ! en lisant les explications, il apparait que la manip soit de modifier le code pour insérer un son convertit en WAV - 8 bits - 22500 Khz…à la limite pourquoi pas descendre la qualité, même si la prise mini jack donne envie de brancher la Gamebuino sur un système son (je ne suis pas audiofil :slight_smile: donc si la qualité est acceptable, je ne chipoterais pas) (et en passant: est-ce l’hardware qui limite la gestion de son à 8bits/22050 Khz ?) par contre le besoin de modifier le code en C++ pour chaque son est un peu lourd pour une utilisation en mode lecteur MP3 de base… j’avoue que je remets un peu le nez dans le code seulement depuis quelques semaines (depuis que j’ai de nouveau une Gamebuino :sunny: ) et que je survole les codes, je cherche du coup un système simple… Et comme je n’ai pas vraiment le temps de m’y mettre plus sérieusement ces temps ci, mais je mets de coté toutes les infos, afin de d’avancer sur cette idée. dans tout les cas, un grand merci à toi pour ton message ! Klm

1 Like

Salut Juice_Lizard,

Effectivement j’ai vu passé ton jeu (et l’ai topé :wink: merci !) Merci pour ton tips pour lire des sons a partir de ton jeu ! ce serait deja un grand pas pour moi pour pouvoir lire du son via la Gamebuino… je regarde ça dés que je peux… comme tu t’en doute, mon interrogation est de pouvoir faire un lecteur MP3 de base… je n’ai que la curiosité pour l’instant, et pas trop de temps en ce moment, mais je note et testerais (aussi) rapidement (que je pourrais) ce que tu me propose ! Merci pour ton message, A+. Klm

1 Like

Salut @Klm,

Je ne me suis encore jamais vraiment penché sur la gestion du son sur les micro-contrôleurs, donc je ne voudrais pas dire trop de bêtises. :joy:

Mais en règle générale, sur la Gamebuino, si tu as encodé un son WAV avec un taux d’échantillonnage de X Hz, alors la macro SOUND_FREQ doit être égale à X/2.

En effet, SOUND_FREQ correspond à la fréquence maximale et non à l’amplitude du signal. Dans la mesure où l’onde est sinusoïdale, il faut donc diviser la fréquence par deux.

Autrement dit, si le son est encodé avec un taux d’échantilonnage à 44100 Hz, alors SOUND_FREQ doit être égal à 22050 Hz.

Cette macro, au même titre que d’autres macros, sont prédéfinies ainsi :

///////////////
// sound defines
///////////////

#ifndef SOUND_CHANNELS
#define SOUND_CHANNELS 4
#endif

#ifndef SOUND_FREQ
#define SOUND_FREQ 44100
#endif

#ifndef SOUND_BUFFERSIZE
#define SOUND_BUFFERSIZE (2048 * SOUND_FREQ / 44100)
#endif

// Even though it default to same value as SOUND_BUFFER size, give the FX its own size so the
// buffer sizes can be optimized independently. For sound effects there should never be a need to
// have a buffer much larger than required to contain the samples played in a single update cycle.
// This will only introduce an unnecessary delay before a sound effect is played. However, for
// music streamed from a WAV file, a bigger buffer might help mitigate occassional delays when
// reading from SD.
#ifndef SOUND_FX_BUFFERSIZE
#define SOUND_FX_BUFFERSIZE (2048 * SOUND_FREQ / 44100)
#endif

#ifndef SOUND_ENABLE_FX
#define SOUND_ENABLE_FX 1
#endif

Mais tu peux tout à fait les redéfinir dans un fichier de configuration, qui doit être nommé config-gamebuino.h et placé à la racine de ton projet. Par exemple en redéfinissant la macro SOUND_FREQ ainsi :

// à inscrire dans le fichier config-gamebuino.h

#define SOUND_FREQ 22050

Pour finir, tu peux utiliser ffmpeg pour convertir ton fichier MP3 au format WAV avec les paramètres suivants :

ffmpeg -i filename.mp3 -ac 1 -ar 44100 -acodec pcm_u8 filename.wav

Tu peux aussi dégrader le taux d’échantillonnage pour soulager le micro-contrôleur et obtenir une ressource qui pèse moins lourd.

En espérant que ça puisse t’éclairer un peu… :frowning_with_open_mouth:

1 Like