summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Loftis <ben@harrisonconsoles.com>2015-01-16 17:14:06 -0600
committerBen Loftis <ben@harrisonconsoles.com>2015-01-16 17:15:26 -0600
commit05a612b5632f1c98e0a151c42e1c9316edc615b2 (patch)
tree9c4c2da1e6d47be7b43af016beb904417a85895c
parent9b3f3a9fea462f34268a2b395064cc220212fd9c (diff)
ASIO devices have a preferred buffersize.
pass this value up so it can be used by the engine dialog. if for some reason the engine dialog still doesn't have a buffersize selected, print an error and try 512 instead of crashing.
-rw-r--r--libs/ardour/ardour/audio_backend.h2
-rw-r--r--libs/backends/wavesaudio/waves_audiobackend.cc13
-rw-r--r--libs/backends/wavesaudio/waves_audiobackend.h2
-rw-r--r--libs/backends/wavesaudio/wavesapi/devicemanager/WCMRAudioDeviceManager.h2
-rw-r--r--libs/backends/wavesaudio/wavesapi/devicemanager/WCMRPortAudioDeviceManager.cpp2
5 files changed, 20 insertions, 1 deletions
diff --git a/libs/ardour/ardour/audio_backend.h b/libs/ardour/ardour/audio_backend.h
index ed29bd3c28..8070a1c3aa 100644
--- a/libs/ardour/ardour/audio_backend.h
+++ b/libs/ardour/ardour/audio_backend.h
@@ -186,7 +186,7 @@ class LIBARDOUR_API AudioBackend : public PortEngine {
* if there is any chance that a buffer size of 1024 is not in the list
* returned by available_buffer_sizes()
*/
- virtual uint32_t default_buffer_size () const {
+ virtual uint32_t default_buffer_size (const std::string& device) const {
return 1024;
}
diff --git a/libs/backends/wavesaudio/waves_audiobackend.cc b/libs/backends/wavesaudio/waves_audiobackend.cc
index 65834db495..51ae026c69 100644
--- a/libs/backends/wavesaudio/waves_audiobackend.cc
+++ b/libs/backends/wavesaudio/waves_audiobackend.cc
@@ -221,6 +221,19 @@ float WavesAudioBackend::default_sample_rate () const
return AudioBackend::default_sample_rate ();
}
+uint32_t
+WavesAudioBackend::default_buffer_size (const std::string& device_name) const
+{
+ DeviceInfo devInfo;
+ WTErr err = _audio_device_manager.GetDeviceInfoByName(device_name, devInfo);
+
+ if (err != eNoErr) {
+ std::cerr << "WavesAudioBackend::default_buffer_size (): Failed to get buffer size for device [" << device_name << "]" << std::endl;
+ return AudioBackend::default_buffer_size (device_name);
+ }
+
+ return devInfo.m_DefaultBufferSize;
+}
std::vector<uint32_t>
WavesAudioBackend::available_buffer_sizes (const std::string& device_name) const
diff --git a/libs/backends/wavesaudio/waves_audiobackend.h b/libs/backends/wavesaudio/waves_audiobackend.h
index 3872b23336..20773441a7 100644
--- a/libs/backends/wavesaudio/waves_audiobackend.h
+++ b/libs/backends/wavesaudio/waves_audiobackend.h
@@ -93,6 +93,8 @@ class WavesMidiPort;
virtual std::vector<uint32_t> available_buffer_sizes (const std::string& device) const;
+ virtual uint32_t default_buffer_size (const std::string& device) const;
+
virtual uint32_t available_input_channel_count (const std::string& device) const;
virtual uint32_t available_output_channel_count (const std::string& device) const;
diff --git a/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRAudioDeviceManager.h b/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRAudioDeviceManager.h
index da5be82b4f..3ec108b380 100644
--- a/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRAudioDeviceManager.h
+++ b/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRAudioDeviceManager.h
@@ -59,6 +59,7 @@ struct DeviceInfo
std::vector<int> m_AvailableSampleRates;
unsigned int m_MaxInputChannels;
unsigned int m_MaxOutputChannels;
+ unsigned int m_DefaultBufferSize;
DeviceInfo():
m_DeviceId(-1), m_DeviceName("Unknown"), m_MaxInputChannels(0), m_MaxOutputChannels(0)
@@ -198,6 +199,7 @@ protected:
std::vector<std::string> m_OutputChannels; ///< List of output channel names.
std::vector<int> m_SamplingRates; ///< List of available sampling rates.
std::vector<int> m_BufferSizes; ///< List of available buffer sizes.
+ int m_DefaultBufferSize; ///soundcard preferred buffer size
int m_CurrentSamplingRate; ///< Currently selected sampling rate.
int m_CurrentBufferSize; ///< Currently selected buffer size.
diff --git a/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRPortAudioDeviceManager.cpp b/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRPortAudioDeviceManager.cpp
index 69b677b025..aaf64d6d02 100644
--- a/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRPortAudioDeviceManager.cpp
+++ b/libs/backends/wavesaudio/wavesapi/devicemanager/WCMRPortAudioDeviceManager.cpp
@@ -118,6 +118,7 @@ WCMRPortAudioDevice::WCMRPortAudioDevice (WCMRPortAudioDeviceManager *pManager,
m_PortAudioStream = NULL;
m_CurrentSamplingRate = DEFAULT_SR;
m_CurrentBufferSize = DEFAULT_BUFFERSIZE;
+ m_DefaultBufferSize = DEFAULT_BUFFERSIZE;
m_StopRequested = true;
m_pInputData = NULL;
@@ -361,6 +362,7 @@ void WCMRPortAudioDevice::updateDeviceInfo (bool callerIsWaiting/*=false*/)
{
std::cout << "API::Device " << m_DeviceName << " Buffers: " << minSize << " " << maxSize << " " << preferredSize << std::endl;
+ m_DefaultBufferSize = preferredSize;
m_BufferSizes.push_back (preferredSize);
useDefaultBuffers = false;
}