25 #include "sound_driver.h"
26 #include "sound/playing_sound.h"
28 #include "generic/managed.h"
29 #include "generic/identifiable.h"
31 #include "signals/signal.h"
54 uint32_t sample_rate()
const {
return sample_rate_; }
55 void set_sample_rate(uint32_t rate) { sample_rate_ = rate; }
57 AudioDataFormat format() {
return format_; }
58 void set_format(AudioDataFormat format) { format_ = format; }
60 std::size_t buffer_size()
const;
62 uint8_t channels()
const {
return channels_; }
63 void set_channels(uint8_t ch) { channels_ = ch; }
65 std::shared_ptr<std::istream>& input_stream() {
return sound_data_; }
66 void set_input_stream(std::shared_ptr<std::istream> stream) {
69 stream->seekg(0, std::ios_base::end);
70 int end = stream->tellg();
71 stream->seekg(0, std::ios_base::beg);
75 std::size_t stream_length()
const {
76 return stream_length_;
79 template<
typename Func>
80 void set_playing_sound_init_function(Func&& func) {
81 init_playing_sound_ = func;
91 std::shared_ptr<std::istream> sound_data_;
93 uint32_t sample_rate_ = 0;
94 AudioDataFormat format_;
95 uint8_t channels_ = 0;
96 std::size_t stream_length_ = 0;
111 AudioRepeat repeat=AUDIO_REPEAT_NONE,
112 DistanceModel model=DISTANCE_MODEL_DEFAULT
115 bool stop_sound(PlayingSoundID sound_id);
118 uint8_t playing_sound_count()
const;
122 uint8_t played_sound_count()
const;
124 bool is_sound_playing()
const;
126 sig::signal<void ()>& signal_stream_finished() {
return signal_stream_finished_; }
128 void update_source(
float dt);
133 Stage* stage_ =
nullptr;
134 Window* window_ =
nullptr;
138 std::list<PlayingSound::ptr> instances_;
145 static void source_update_thread();