Mercurial > hg > svapp
diff audioio/AudioJACKTarget.cpp @ 91:9fc4b256c283
* PortAudio driver: do not specify frames per buffer, let PA decide
* Remove old non-RubberBand time stretcher -- it doesn't work with varying
buffer sizes such as the PA driver may now be using
* Rewrite getCurrentPlayingFrame for greater correctness when using long
buffer sizes (interpolating according to audio stream timestamp)
* Several changes to make the timestretch management RT safe(r)
author | Chris Cannam |
---|---|
date | Fri, 08 Feb 2008 17:51:15 +0000 |
parents | 19142c58cc4c |
children | 9c5c1989d0f8 |
line wrap: on
line diff
--- a/audioio/AudioJACKTarget.cpp Thu Feb 07 12:35:08 2008 +0000 +++ b/audioio/AudioJACKTarget.cpp Fri Feb 08 17:51:15 2008 +0000 @@ -257,6 +257,10 @@ { std::cerr << "AudioJACKTarget::~AudioJACKTarget()" << std::endl; + if (m_source) { + m_source->setTarget(0, m_bufferSize); + } + shutdown(); if (m_client) { @@ -293,6 +297,16 @@ return (m_client != 0); } +double +AudioJACKTarget::getCurrentTime() const +{ + if (m_client && m_sampleRate) { + return double(jack_frame_time(m_client)) / double(m_sampleRate); + } else { + return 0.0; + } +} + int AudioJACKTarget::processStatic(jack_nframes_t nframes, void *arg) { @@ -310,7 +324,7 @@ { m_mutex.lock(); - m_source->setTargetBlockSize(m_bufferSize); + m_source->setTarget(this, m_bufferSize); m_source->setTargetSampleRate(m_sampleRate); size_t channels = m_source->getSourceChannelCount();