From 202692a56af39d7dfa0da0b877cd09cc697cbd28 Mon Sep 17 00:00:00 2001 From: rexy712 Date: Tue, 25 Aug 2020 14:05:36 -0700 Subject: [PATCH] Add accessors to audio::mixer --- include/audio/impl/mixer.hpp | 6 +++++- include/audio/mixer.hpp | 5 ++++- include/audio/stream.hpp | 4 ++++ src/audio/impl/mixer.cpp | 10 ++++++++-- src/audio/mixer.cpp | 10 ++++++++-- src/audio/stream.cpp | 3 +++ 6 files changed, 32 insertions(+), 6 deletions(-) diff --git a/include/audio/impl/mixer.hpp b/include/audio/impl/mixer.hpp index 42e34c0..affba79 100644 --- a/include/audio/impl/mixer.hpp +++ b/include/audio/impl/mixer.hpp @@ -44,7 +44,7 @@ namespace audio::impl{ audio::stream m_output_sink; public: - mixer(int output_channels, size_t channel_count); + mixer(int output_channels, size_t channel_count, size_t samplerate); mixer(const mixer&) = delete; mixer(mixer&&) = delete; ~mixer(); @@ -67,6 +67,10 @@ namespace audio::impl{ bool should_exit()const; void exit(); size_t output_channels()const; + + size_t get_samplerate()const; + size_t channel_count()const; + private: static int callback(const void* /*input*/, void* output, unsigned long frame_count, unsigned long flags, mixer& mix); }; diff --git a/include/audio/mixer.hpp b/include/audio/mixer.hpp index 0efc05c..20224ba 100644 --- a/include/audio/mixer.hpp +++ b/include/audio/mixer.hpp @@ -38,7 +38,7 @@ namespace audio{ private: impl::mixer* m_mix; public: - mixer(mode m, size_t channel_count); + mixer(mode m, size_t channel_count, size_t samplerate = 48000); mixer(const mixer&) = delete; mixer(mixer&&) = delete; ~mixer(); @@ -56,6 +56,9 @@ namespace audio{ void pause(); void resume(); void terminate(); + + size_t get_samplerate()const; + size_t channel_count()const; }; } diff --git a/include/audio/stream.hpp b/include/audio/stream.hpp index e89dea2..ca1f7b2 100644 --- a/include/audio/stream.hpp +++ b/include/audio/stream.hpp @@ -34,6 +34,7 @@ namespace audio{ detail::callback_iface* m_cb = nullptr; PaStream* m_stream = nullptr; mutable PaError m_err = paNoError; + double m_samplerate; int m_in_channels; int m_out_channels; @@ -46,6 +47,7 @@ namespace audio{ m_cb(new detail::callback_impl(std::forward(cb), std::forward(cbargs)...)), m_stream(initialize_global_instance()), m_err(open_default_stream(&m_stream, in_c, out_c, paFloat32, samplerate, buffersize, m_cb)), + m_samplerate(samplerate), m_in_channels(in_c), m_out_channels(out_c){} @@ -62,6 +64,8 @@ namespace audio{ int input_count()const; int output_count()const; + double get_samplerate()const; + error last_error()const; private: diff --git a/src/audio/impl/mixer.cpp b/src/audio/impl/mixer.cpp index 5cb3a98..2a4a691 100644 --- a/src/audio/impl/mixer.cpp +++ b/src/audio/impl/mixer.cpp @@ -28,13 +28,13 @@ namespace audio::impl{ return (left < right) ? left : right; } - mixer::mixer(int output_channels, size_t channel_count): + mixer::mixer(int output_channels, size_t channel_count, size_t samplerate): m_paused(false), m_exit(false), m_operating(false), m_channels(channel_count), m_lk(m_copy_lock, std::defer_lock), - m_output_sink(0, output_channels, 44100, 0, callback, *this) + m_output_sink(0, output_channels, samplerate, 0, callback, *this) { m_output_sink.start(); } @@ -100,6 +100,12 @@ namespace audio::impl{ size_t mixer::output_channels()const{ return m_output_sink.output_count(); } + size_t mixer::get_samplerate()const{ + return m_output_sink.get_samplerate(); + } + size_t mixer::channel_count()const{ + return m_channels.size(); + } int mixer::callback(const void* /*input*/, void* output, unsigned long frame_count, unsigned long flags, mixer& mix){ if(flags & paPrimingOutput) return paContinue; diff --git a/src/audio/mixer.cpp b/src/audio/mixer.cpp index ce204c2..7528b76 100644 --- a/src/audio/mixer.cpp +++ b/src/audio/mixer.cpp @@ -21,8 +21,8 @@ namespace audio{ - mixer::mixer(mode m, size_t channel_count): - m_mix(new impl::mixer(static_cast(m), channel_count)){} + mixer::mixer(mode m, size_t channel_count, size_t samplerate): + m_mix(new impl::mixer(static_cast(m), channel_count, samplerate)){} mixer::~mixer(){ delete m_mix; } @@ -60,4 +60,10 @@ namespace audio{ m_mix->exit(); } + size_t mixer::get_samplerate()const{ + return m_mix->get_samplerate(); + } + size_t mixer::channel_count()const{ + return m_mix->channel_count(); + } } diff --git a/src/audio/stream.cpp b/src/audio/stream.cpp index 4da020d..aa39634 100644 --- a/src/audio/stream.cpp +++ b/src/audio/stream.cpp @@ -61,6 +61,9 @@ namespace audio{ return m_out_channels; } + double stream::get_samplerate()const{ + return m_samplerate; + } error stream::last_error()const{ return error(m_err);