Add accessors to audio::mixer

This commit is contained in:
rexy712 2020-08-25 14:05:36 -07:00
parent dd16d8be84
commit 202692a56a
6 changed files with 32 additions and 6 deletions

View File

@ -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);
};

View File

@ -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;
};
}

View File

@ -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<Callback,Args...>(std::forward<Callback>(cb), std::forward<Args>(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:

View File

@ -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;

View File

@ -21,8 +21,8 @@
namespace audio{
mixer::mixer(mode m, size_t channel_count):
m_mix(new impl::mixer(static_cast<int>(m), channel_count)){}
mixer::mixer(mode m, size_t channel_count, size_t samplerate):
m_mix(new impl::mixer(static_cast<int>(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();
}
}

View File

@ -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);