From 05a612b5632f1c98e0a151c42e1c9316edc615b2 Mon Sep 17 00:00:00 2001 From: Ben Loftis Date: Fri, 16 Jan 2015 17:14:06 -0600 Subject: 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. --- libs/ardour/ardour/audio_backend.h | 2 +- libs/backends/wavesaudio/waves_audiobackend.cc | 13 +++++++++++++ libs/backends/wavesaudio/waves_audiobackend.h | 2 ++ .../wavesapi/devicemanager/WCMRAudioDeviceManager.h | 2 ++ .../wavesapi/devicemanager/WCMRPortAudioDeviceManager.cpp | 2 ++ 5 files changed, 20 insertions(+), 1 deletion(-) (limited to 'libs') 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 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 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 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 m_OutputChannels; ///< List of output channel names. std::vector m_SamplingRates; ///< List of available sampling rates. std::vector 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; } -- cgit v1.2.3