diff --git a/include/audio/detail.hpp b/include/audio/detail.hpp index eb62b50..fd1c479 100644 --- a/include/audio/detail.hpp +++ b/include/audio/detail.hpp @@ -29,8 +29,10 @@ namespace audio::detail{ std::tuple m_args; template - int operator()(const void* input, void* output, unsigned long frame_count, std::integer_sequence){ - return std::forward(m_f)(input, output, frame_count, std::get(m_args)...); + int operator()(const void* input, void* output, unsigned long frame_count, + unsigned long flags, std::integer_sequence) + { + return std::forward(m_f)(input, output, frame_count, flags, std::get(m_args)...); } }; @@ -40,7 +42,7 @@ namespace audio::detail{ callback_iface() = default; virtual ~callback_iface() = default; - virtual int operator()(const void* input, void* output, unsigned long frame_count) = 0; + virtual int operator()(const void* input, void* output, unsigned long frame_count, unsigned long flags) = 0; }; template @@ -52,8 +54,8 @@ namespace audio::detail{ template callback_impl(Fn&& f, Ts&&... ts): m_ch{std::forward(f), {std::forward(ts)...}}{} - int operator()(const void* input, void* output, unsigned long frame_count)override{ - return m_ch(input, output, frame_count, typename ::util::sequence_gen::type{}); + int operator()(const void* input, void* output, unsigned long frame_count, unsigned long flags)override{ + return m_ch(input, output, frame_count, flags, typename ::util::sequence_gen::type{}); } }; } diff --git a/include/audio/impl/mixer.hpp b/include/audio/impl/mixer.hpp index c503eee..42e34c0 100644 --- a/include/audio/impl/mixer.hpp +++ b/include/audio/impl/mixer.hpp @@ -68,7 +68,7 @@ namespace audio::impl{ void exit(); size_t output_channels()const; private: - static int callback(const void* /*input*/, void* output, unsigned long frame_count, mixer& mix); + static int callback(const void* /*input*/, void* output, unsigned long frame_count, unsigned long flags, mixer& mix); }; } diff --git a/src/audio/impl/mixer.cpp b/src/audio/impl/mixer.cpp index c996ccd..6caa236 100644 --- a/src/audio/impl/mixer.cpp +++ b/src/audio/impl/mixer.cpp @@ -100,7 +100,9 @@ namespace audio::impl{ size_t mixer::output_channels()const{ return m_output_sink.output_count(); } - int mixer::callback(const void* /*input*/, void* output, unsigned long frame_count, mixer& mix){ + int mixer::callback(const void* /*input*/, void* output, unsigned long frame_count, unsigned long flags, mixer& mix){ + if(flags & paPrimingOutput) + return paContinue; //mark mixer data as being processed mix.set_active(true); diff --git a/src/audio/stream.cpp b/src/audio/stream.cpp index 38bcf53..ce919a2 100644 --- a/src/audio/stream.cpp +++ b/src/audio/stream.cpp @@ -81,11 +81,11 @@ namespace audio{ return Pa_OpenStream(stream, inp, outp, samplerate, paFramesPerBufferUnspecified, paNoFlag, callback, cb); } int stream::callback(const void* input, void* output, unsigned long framecount, - const PaStreamCallbackTimeInfo* /*timeInfo*/, PaStreamCallbackFlags /*statusFlags*/, + const PaStreamCallbackTimeInfo* timeinfo, PaStreamCallbackFlags statusflags, void* userdata) { detail::callback_iface* cb = static_cast(userdata); - return (*cb)(input, output, framecount); + return (*cb)(input, output, framecount, statusflags); } } diff --git a/src/main.cpp b/src/main.cpp index c5412c2..507cfe9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -143,7 +143,6 @@ void gay_thread(audio::mixer& m, std::atomic_bool& should_gay_thread_stop){ int main(){ srand(time(NULL)); audio::mixer mix(audio::mixer::mode::STEREO, 1); - audio::mixchunk ch = read_audio_file(select_audio_file().c_str()); game_state gs = {}; manager.init(640, 480, "Tic-Tac-Gugh");