ASIO devices have a preferred buffersize.
authorBen Loftis <ben@harrisonconsoles.com>
Fri, 16 Jan 2015 23:14:06 +0000 (17:14 -0600)
committerBen Loftis <ben@harrisonconsoles.com>
Fri, 16 Jan 2015 23:15:26 +0000 (17:15 -0600)
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
libs/backends/wavesaudio/waves_audiobackend.cc
libs/backends/wavesaudio/waves_audiobackend.h
libs/backends/wavesaudio/wavesapi/devicemanager/WCMRAudioDeviceManager.h
libs/backends/wavesaudio/wavesapi/devicemanager/WCMRPortAudioDeviceManager.cpp

index ed29bd3c28a1263fd82498351195fd02856e875e..8070a1c3aa3b78f5e46196d8b21c9ce26f9c3857 100644 (file)
@@ -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;
     }
 
index 65834db4958e2c29349ce09355a749c4dba3f71b..51ae026c69ed22413fc292f5b84f1f95390d728c 100644 (file)
@@ -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
index 3872b23336ad4f54267b58355a397f0c6614064c..20773441a717a1cf4601615f884b975ee4434bdb 100644 (file)
@@ -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;
index da5be82b4f6f74224ef5803a245b5a45ab9f7496..3ec108b38078f678bcb34535f14652a79d6b63e9 100644 (file)
@@ -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.
index 69b677b025bfe685c5e35f527928ec0ef94bac6c..aaf64d6d02c1c5ebd94ecb6b8c7e592fed71f9b4 100644 (file)
@@ -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;
        }