git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@2697 0c269be4-1314-0410-8aa9-9f06e86f4224tags/1.90
@@ -21,6 +21,10 @@ Romain Moret | |||||
Jackdmp changes log | Jackdmp changes log | ||||
--------------------------- | --------------------------- | ||||
2008-07-18 Stephane Letz <letz@grame.fr> | |||||
* Correct audioadapter when a sample rate value different from jack server one is chosen. | |||||
2008-07-12 Stephane Letz <letz@grame.fr> | 2008-07-12 Stephane Letz <letz@grame.fr> | ||||
* Loopback driver working again. | * Loopback driver working again. | ||||
@@ -81,7 +81,8 @@ void JackAudioAdapterInterface::ResampleFactor(jack_nframes_t& frame1, jack_nfra | |||||
jack_nframes_t time2 = fProducerDLL.Time2Frames(time); | jack_nframes_t time2 = fProducerDLL.Time2Frames(time); | ||||
frame1 = time1; | frame1 = time1; | ||||
frame2 = time2; | frame2 = time2; | ||||
jack_log("JackAudioAdapterInterface::ResampleFactor src_ratio_input = %f src_ratio_output = %f", double(time1) / double(time2), double(time2) / double(time1)); | |||||
jack_log("JackAudioAdapterInterface::ResampleFactor time1 = %ld time2 = %ld src_ratio_input = %f src_ratio_output = %f", | |||||
long(time1), long(time2), double(time1) / double(time2), double(time2) / double(time1)); | |||||
} | } | ||||
} | } | ||||
@@ -120,7 +120,15 @@ namespace Jack | |||||
{ | { | ||||
fSampleRate = sample_rate; | fSampleRate = sample_rate; | ||||
fConsumerDLL.Init(fBufferSize, fSampleRate); | fConsumerDLL.Init(fBufferSize, fSampleRate); | ||||
// Producer (Audio) keep the same SR | |||||
// Producer (Audio) keeps the same SR | |||||
return 0; | |||||
} | |||||
virtual int SetIntSampleRate(jack_nframes_t sample_rate) | |||||
{ | |||||
fSampleRate = sample_rate; | |||||
// Consummer (Audio) keeps the same SR | |||||
fProducerDLL.Init(fBufferSize, fSampleRate); | |||||
return 0; | return 0; | ||||
} | } | ||||
@@ -116,14 +116,14 @@ namespace Jack | |||||
jack_nframes_t Time2Frames(jack_time_t time) | jack_nframes_t Time2Frames(jack_time_t time) | ||||
{ | { | ||||
jack_nframes_t res = fFrames + (long) rint(((double) (long(time - fCurrentWakeup)) / ((jack_time_t)(fNextWakeUp - fCurrentWakeup))) * fBufferSize); | |||||
return (res < 0) ? 1 : res; | |||||
long delta = (long) rint(((double) (long(time - fCurrentWakeup)) / ((jack_time_t)(fNextWakeUp - fCurrentWakeup))) * fBufferSize); | |||||
return (delta < 0) ? ((fFrames > 0) ? fFrames : 1) : (fFrames + delta); | |||||
} | } | ||||
jack_time_t Frames2Time(jack_nframes_t frames) | jack_time_t Frames2Time(jack_nframes_t frames) | ||||
{ | { | ||||
jack_time_t res = fCurrentWakeup + (long) rint(((double) (long(frames - fFrames)) * ((jack_time_t)(fNextWakeUp - fCurrentWakeup))) / fBufferSize); | |||||
return (res < 0) ? 1 : res; | |||||
long delta = (long) rint(((double) (long(frames - fFrames)) * ((jack_time_t)(fNextWakeUp - fCurrentWakeup))) / fBufferSize); | |||||
return (delta < 0) ? ((fCurrentWakeup > 0) ? fCurrentWakeup : 1) : (fCurrentWakeup + delta); | |||||
} | } | ||||
jack_nframes_t CurFrame() | jack_nframes_t CurFrame() | ||||
@@ -203,11 +203,6 @@ namespace Jack | |||||
} | } | ||||
}; | }; | ||||
inline float Range(float min, float max, float val) | |||||
{ | |||||
return (val < min) ? min : ((val > max) ? max : val); | |||||
} | |||||
} | } | ||||
#endif | #endif |
@@ -67,7 +67,7 @@ unsigned int JackLibSampleRateResampler::ReadResample(float* buffer, unsigned in | |||||
res = src_process(fResampler, &src_data); | res = src_process(fResampler, &src_data); | ||||
if (res != 0) { | if (res != 0) { | ||||
jack_error("JackLibSampleRateResampler::ReadResample err = %s", src_strerror(res)); | |||||
jack_error("JackLibSampleRateResampler::ReadResample ratio = %f err = %s", fRatio, src_strerror(res)); | |||||
return 0; | return 0; | ||||
} | } | ||||
@@ -117,7 +117,7 @@ unsigned int JackLibSampleRateResampler::WriteResample(float* buffer, unsigned i | |||||
res = src_process(fResampler, &src_data); | res = src_process(fResampler, &src_data); | ||||
if (res != 0) { | if (res != 0) { | ||||
jack_error("JackLibSampleRateResampler::ReadResample err = %s", src_strerror(res)); | |||||
jack_error("JackLibSampleRateResampler::ReadResample ratio = %f err = %s", fRatio, src_strerror(res)); | |||||
return 0; | return 0; | ||||
} | } | ||||
@@ -26,6 +26,11 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||||
namespace Jack | namespace Jack | ||||
{ | { | ||||
inline float Range(float min, float max, float val) | |||||
{ | |||||
return (val < min) ? min : ((val > max) ? max : val); | |||||
} | |||||
class JackLibSampleRateResampler : public JackResampler | class JackLibSampleRateResampler : public JackResampler | ||||
{ | { | ||||
@@ -45,7 +50,7 @@ namespace Jack | |||||
void SetRatio(unsigned int num, unsigned int denom) | void SetRatio(unsigned int num, unsigned int denom) | ||||
{ | { | ||||
JackResampler::SetRatio(num, denom); | JackResampler::SetRatio(num, denom); | ||||
fRatio = double(num) / double(denom); | |||||
fRatio = Range(0.25f, 4.0f, (double(num) / double(denom))); | |||||
} | } | ||||
void Reset(); | void Reset(); | ||||
@@ -62,7 +62,7 @@ namespace Jack | |||||
break; | break; | ||||
case 'r': | case 'r': | ||||
SetSampleRate(param->value.ui); | |||||
SetIntSampleRate(param->value.ui); | |||||
break; | break; | ||||
} | } | ||||
} | } | ||||
@@ -188,7 +188,7 @@ OSStatus JackCoreAudioAdapter::Render(void *inRefCon, | |||||
break; | break; | ||||
case 'r': | case 'r': | ||||
SetSampleRate(param->value.ui); | |||||
SetIntSampleRate(param->value.ui); | |||||
break; | break; | ||||
case 'l': | case 'l': | ||||
@@ -111,7 +111,7 @@ JackPortAudioAdapter::JackPortAudioAdapter(jack_nframes_t buffer_size, jack_nfra | |||||
break; | break; | ||||
case 'r': | case 'r': | ||||
SetSampleRate(param->value.ui); | |||||
SetIntSampleRate(param->value.ui); | |||||
break; | break; | ||||
case 'd': | case 'd': | ||||