From 7895b5ec7e01c5ffecc510fbe4313b2470ff3b4b Mon Sep 17 00:00:00 2001 From: Jonathan Moore Liles Date: Sun, 11 Oct 2020 23:16:26 -0700 Subject: [PATCH] Mixer: Allow Mono Pan module to be added a stereo chain. This converts the signal to mono and then pans the result. Useful for auditioning a mix in mono. --- mixer/src/Mono_Pan_Module.C | 34 +++++++++++++++++++++++++++++----- mixer/src/Mono_Pan_Module.H | 2 +- 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/mixer/src/Mono_Pan_Module.C b/mixer/src/Mono_Pan_Module.C index 9eac660..3ed6810 100644 --- a/mixer/src/Mono_Pan_Module.C +++ b/mixer/src/Mono_Pan_Module.C @@ -66,8 +66,22 @@ Mono_Pan_Module::handle_sample_rate_change ( nframes_t n ) } bool -Mono_Pan_Module::configure_inputs ( int ) +Mono_Pan_Module::configure_inputs ( int n ) { + THREAD_ASSERT( UI ); + + int on = audio_input.size(); + + if ( n > on ) + { + add_port( Port( this, Port::INPUT, Port::AUDIO ) ); + } + else if ( n < on ) + { + audio_input.back().disconnect(); + audio_input.pop_back(); + } + return true; } @@ -82,7 +96,10 @@ Mono_Pan_Module::process ( nframes_t nframes ) { if ( unlikely( bypass() ) ) { - buffer_copy( (sample_t*)audio_output[1].buffer(), (sample_t*)audio_input[0].buffer(), nframes ); + if ( audio_input.size() == 1 ) + { + buffer_copy( (sample_t*)audio_output[1].buffer(), (sample_t*)audio_input[0].buffer(), nframes ); + } } else { @@ -90,11 +107,18 @@ Mono_Pan_Module::process ( nframes_t nframes ) sample_t gainbuf[nframes]; bool use_gainbuf = smoothing.apply( gainbuf, nframes, gt ); - + + if ( audio_input.size() == 2 ) + { + /* convert stereo to mono */ + buffer_mix( (sample_t*)audio_input[0].buffer(), + (sample_t*)audio_input[1].buffer(), + nframes ); + } + if ( unlikely( use_gainbuf ) ) { - /* right channel */ - + /* right channel */ buffer_copy_and_apply_gain_buffer( (sample_t*)audio_output[1].buffer(), (sample_t*)audio_input[0].buffer(), gainbuf, diff --git a/mixer/src/Mono_Pan_Module.H b/mixer/src/Mono_Pan_Module.H index 7ede987..d94f93a 100644 --- a/mixer/src/Mono_Pan_Module.H +++ b/mixer/src/Mono_Pan_Module.H @@ -33,7 +33,7 @@ public: const char *name ( void ) const { return "Mono Pan"; } - int can_support_inputs ( int n ) { return ( n == 1 ) ? 2 : -1; } + int can_support_inputs ( int n ) { return ( n == 1 || n == 2 ) ? 2 : -1; } bool configure_inputs ( int n ); LOG_CREATE_FUNC( Mono_Pan_Module );