From 8b0e95ec5a209483888b95a68f03a130f3edda72 Mon Sep 17 00:00:00 2001 From: Tobias Doerffel Date: Tue, 13 May 2008 09:22:01 +0000 Subject: [PATCH] after changed quality-settings also update interpolation for samplerate-conversion git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@962 0778d3d1-df1d-0410-868b-ea421aaaa00d --- include/audio_device.h | 5 ++--- src/core/audio/audio_alsa.cpp | 2 ++ src/core/audio/audio_device.cpp | 19 +++++++++++++++++-- src/core/audio/audio_jack.cpp | 2 ++ src/core/audio/audio_oss.cpp | 2 ++ src/core/audio/audio_sdl.cpp | 2 ++ 6 files changed, 27 insertions(+), 5 deletions(-) diff --git a/include/audio_device.h b/include/audio_device.h index 4921236a6..975836ab7 100644 --- a/include/audio_device.h +++ b/include/audio_device.h @@ -88,9 +88,8 @@ public: virtual void stopProcessing( void ); - virtual void applyQualitySettings( void ) - { - } + virtual void applyQualitySettings( void ); + class setupWidget : public tabWidget diff --git a/src/core/audio/audio_alsa.cpp b/src/core/audio/audio_alsa.cpp index 8ec37b4de..a36478146 100644 --- a/src/core/audio/audio_alsa.cpp +++ b/src/core/audio/audio_alsa.cpp @@ -221,6 +221,8 @@ void audioALSA::applyQualitySettings( void ) return; } } + + audioDevice::applyQualitySettings(); } diff --git a/src/core/audio/audio_device.cpp b/src/core/audio/audio_device.cpp index 00d564c3d..7a0d2cca4 100644 --- a/src/core/audio/audio_device.cpp +++ b/src/core/audio/audio_device.cpp @@ -51,7 +51,6 @@ audioDevice::audioDevice( const ch_cnt_t _channels, mixer * _mixer ) : { printf( "Error: src_new() failed in audio_device.cpp!\n" ); } - m_srcData.end_of_input = 0; } @@ -132,6 +131,22 @@ void audioDevice::stopProcessing( void ) +void audioDevice::applyQualitySettings( void ) +{ + src_delete( m_srcState ); + + int error; + if( ( m_srcState = src_new( + getMixer()->currentQualitySettings().libsrcInterpolation(), + SURROUND_CHANNELS, &error ) ) == NULL ) + { + printf( "Error: src_new() failed in audio_device.cpp!\n" ); + } +} + + + + void audioDevice::registerPort( audioPort * ) { } @@ -168,13 +183,13 @@ void audioDevice::resample( const surroundSampleFrame * _src, m_srcData.data_in = (float *) _src[0]; m_srcData.data_out = _dst[0]; m_srcData.src_ratio = (double) _dst_sr / _src_sr; + m_srcData.end_of_input = 0; int error; if( ( error = src_process( m_srcState, &m_srcData ) ) ) { printf( "audioDevice::resample(): error while resampling: %s\n", src_strerror( error ) ); } - m_srcData.end_of_input = 0; } diff --git a/src/core/audio/audio_jack.cpp b/src/core/audio/audio_jack.cpp index 64919d44b..cda58541d 100644 --- a/src/core/audio/audio_jack.cpp +++ b/src/core/audio/audio_jack.cpp @@ -243,6 +243,8 @@ void audioJACK::applyQualitySettings( void ) setSampleRate( jack_get_sample_rate( m_client ) ); } } + + audioDevice::applyQualitySettings(); } diff --git a/src/core/audio/audio_oss.cpp b/src/core/audio/audio_oss.cpp index cee247627..3ed20abf1 100644 --- a/src/core/audio/audio_oss.cpp +++ b/src/core/audio/audio_oss.cpp @@ -293,6 +293,8 @@ void audioOSS::applyQualitySettings( void ) setSampleRate( value ); } } + + audioDevice::applyQualitySettings(); } diff --git a/src/core/audio/audio_sdl.cpp b/src/core/audio/audio_sdl.cpp index e7f439368..ae4f2dbab 100644 --- a/src/core/audio/audio_sdl.cpp +++ b/src/core/audio/audio_sdl.cpp @@ -148,6 +148,8 @@ void audioSDL::applyQualitySettings( void ) SDL_GetError() ); } } + + audioDevice::applyQualitySettings(); }