-
Notifications
You must be signed in to change notification settings - Fork 0
/
audioHelper.c
91 lines (82 loc) · 2.43 KB
/
audioHelper.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
/*!\file audioHelper.c
*
* \brief éléments audio pouvant être utiles pour la démo.
* \author Farès BELHADJ, [email protected]
* \date May 5, 2014 - February 26, 2016
*/
#include "audioHelper.h"
/*!\brief pointeur vers la musique chargée par SDL_Mixer */
static Mix_Music * _mmusic = NULL;
/*!\brief pointeur vers le flux audio.
* \see ahGetAudioStream
* \see ahSetAudioStream
*/
static Uint8 * _audioStream = NULL;
/*!\brief longueur du flux audio.
* \see ahGetAudioStreamLength
* \see ahSetAudioStream
*/
static int _audioStreamLength = 0;
/*!\brief renvoie le pointeur vers le flux audio.
* \return le pointeur vers le flux audio.
*/
Uint8 * ahGetAudioStream(void) {
return _audioStream;
}
/*!\brief renvoie la longueur du flux audio.
* \return la longueur du flux audio.
*/
int ahGetAudioStreamLength(void) {
return _audioStreamLength;
}
/*!\brief met à jour le pointeur vers le flux audio et sa longueur.
*/
void ahSetAudioStream(Uint8 * audioStream, int audioStreamLength) {
_audioStream = audioStream;
_audioStreamLength = audioStreamLength;
}
/*!\brief Cette fonction est appelée quand l'audio est joué et met
* dans \a stream les données audio de longueur \a len.
* \param udata pour user data, données passées par l'utilisateur, ici NULL.
* \param stream flux de données audio.
* \param len longueur de \a stream.
*/
static void mixCallback(void *udata, Uint8 *stream, int len) {
ahSetAudioStream(stream, len);
gl4dhUpdateWithAudio();
ahSetAudioStream(NULL, 0);
}
/*!\brief Cette fonction initialise les paramètres SDL_Mixer et charge
* le fichier audio.
*/
void ahInitAudio(const char * file) {
int mixFlags = MIX_INIT_OGG | MIX_INIT_MP3, res;
res = Mix_Init(mixFlags);
if( (res & mixFlags) != mixFlags ) {
fprintf(stderr, "Mix_Init: Erreur lors de l'initialisation de la bibliotheque SDL_Mixer\n");
fprintf(stderr, "Mix_Init: %s\n", Mix_GetError());
exit(-3);
}
if(Mix_OpenAudio(44100, AUDIO_S16LSB, 2, 1024) < 0)
exit(-4);
if(!(_mmusic = Mix_LoadMUS(file))) {
fprintf(stderr, "Erreur lors du Mix_LoadMUS: %s\n", Mix_GetError());
exit(-5);
}
Mix_SetPostMix(mixCallback, NULL);
if(!Mix_PlayingMusic())
Mix_PlayMusic(_mmusic, 1);
gl4dhStartingSignal();
}
/*!\brief Libère l'audio.
*/
void ahClean(void) {
if(_mmusic) {
if(Mix_PlayingMusic())
Mix_HaltMusic();
Mix_FreeMusic(_mmusic);
_mmusic = NULL;
}
Mix_CloseAudio();
Mix_Quit();
}