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.
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…