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