1 #include <stdlib.h>
2 #include "audio/audio.h"
3 #include "audio/source.h"
4 #include "audio/sources/raw_source.h"
5 #include "audio/sink.h"
6 #include "audio/sound.h"
7 #include "resources/sounds_loader.h"
8 
9 static float _sound_volume = VOLUME_DEFAULT;
10 
11 #ifdef STANDALONE_SERVER
sound_play(int id,float volume,float panning,float pitch)12 void sound_play(int id, float volume, float panning, float pitch) {}
13 #else
sound_play(int id,float volume,float panning,float pitch)14 void sound_play(int id, float volume, float panning, float pitch) {
15     audio_sink *sink = audio_get_sink();
16 
17     // If there is no sink, do nothing
18     if(sink == NULL) {
19         return;
20     }
21 
22     // If the sound is already playing, stop it.
23     if(sink_is_playing(sink, id)) {
24         sink_stop(sink, id);
25     }
26 
27     // Get sample data
28     char *buf;
29     int len;
30     if(sounds_loader_get(id, &buf, &len) != 0) {
31         return;
32     }
33 
34     // Play
35     audio_source *src = malloc(sizeof(audio_source));
36     source_init(src);
37     raw_source_init(src, buf, len);
38     sink_play(sink, src, id, volume * _sound_volume, panning, pitch);
39 }
40 #endif
41 
sound_playing(unsigned int id)42 int sound_playing(unsigned int id) {
43     audio_sink *sink = audio_get_sink();
44     if(sink == NULL) {
45         return 0;
46     }
47     return sink_is_playing(sink, id);
48 }
49 
sound_set_volume(float volume)50 void sound_set_volume(float volume) {
51     _sound_volume = volume;
52 }
53