Browse Source

Correct audioadapter when a sample rate value different from jack server one is chosen.

git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@2697 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/1.90
sletz 17 years ago
parent
commit
99fc35a33c
9 changed files with 30 additions and 17 deletions
  1. +4
    -0
      ChangeLog
  2. +2
    -1
      common/JackAudioAdapterInterface.cpp
  3. +9
    -1
      common/JackAudioAdapterInterface.h
  4. +4
    -9
      common/JackFilters.h
  5. +2
    -2
      common/JackLibSampleRateResampler.cpp
  6. +6
    -1
      common/JackLibSampleRateResampler.h
  7. +1
    -1
      linux/alsa/JackAlsaAdapter.cpp
  8. +1
    -1
      macosx/JackCoreAudioAdapter.cpp
  9. +1
    -1
      windows/JackPortAudioAdapter.cpp

+ 4
- 0
ChangeLog View File

@@ -21,6 +21,10 @@ Romain Moret
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>

* Loopback driver working again.


+ 2
- 1
common/JackAudioAdapterInterface.cpp View File

@@ -81,7 +81,8 @@ void JackAudioAdapterInterface::ResampleFactor(jack_nframes_t& frame1, jack_nfra
jack_nframes_t time2 = fProducerDLL.Time2Frames(time);
frame1 = time1;
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));
}
}



+ 9
- 1
common/JackAudioAdapterInterface.h View File

@@ -120,7 +120,15 @@ namespace Jack
{
fSampleRate = sample_rate;
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;
}


+ 4
- 9
common/JackFilters.h View File

@@ -116,14 +116,14 @@ namespace Jack
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 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()
@@ -203,11 +203,6 @@ namespace Jack
}
};

inline float Range(float min, float max, float val)
{
return (val < min) ? min : ((val > max) ? max : val);
}
}

#endif

+ 2
- 2
common/JackLibSampleRateResampler.cpp View File

@@ -67,7 +67,7 @@ unsigned int JackLibSampleRateResampler::ReadResample(float* buffer, unsigned in
res = src_process(fResampler, &src_data);
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;
}
@@ -117,7 +117,7 @@ unsigned int JackLibSampleRateResampler::WriteResample(float* buffer, unsigned i
res = src_process(fResampler, &src_data);
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;
}


+ 6
- 1
common/JackLibSampleRateResampler.h View File

@@ -26,6 +26,11 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
namespace Jack
{

inline float Range(float min, float max, float val)
{
return (val < min) ? min : ((val > max) ? max : val);
}

class JackLibSampleRateResampler : public JackResampler
{
@@ -45,7 +50,7 @@ namespace Jack
void SetRatio(unsigned int num, unsigned int denom)
{
JackResampler::SetRatio(num, denom);
fRatio = double(num) / double(denom);
fRatio = Range(0.25f, 4.0f, (double(num) / double(denom)));
}
void Reset();


+ 1
- 1
linux/alsa/JackAlsaAdapter.cpp View File

@@ -62,7 +62,7 @@ namespace Jack
break;
case 'r':
SetSampleRate(param->value.ui);
SetIntSampleRate(param->value.ui);
break;
}
}


+ 1
- 1
macosx/JackCoreAudioAdapter.cpp View File

@@ -188,7 +188,7 @@ OSStatus JackCoreAudioAdapter::Render(void *inRefCon,
break;
case 'r':
SetSampleRate(param->value.ui);
SetIntSampleRate(param->value.ui);
break;
case 'l':


+ 1
- 1
windows/JackPortAudioAdapter.cpp View File

@@ -111,7 +111,7 @@ JackPortAudioAdapter::JackPortAudioAdapter(jack_nframes_t buffer_size, jack_nfra
break;

case 'r':
SetSampleRate(param->value.ui);
SetIntSampleRate(param->value.ui);
break;

case 'd':


Loading…
Cancel
Save