diff options
Diffstat (limited to 'libs/backends/wavesaudio/waves_audiobackend.cc')
-rw-r--r-- | libs/backends/wavesaudio/waves_audiobackend.cc | 212 |
1 files changed, 106 insertions, 106 deletions
diff --git a/libs/backends/wavesaudio/waves_audiobackend.cc b/libs/backends/wavesaudio/waves_audiobackend.cc index 8cd94c4e34..d7467c315e 100644 --- a/libs/backends/wavesaudio/waves_audiobackend.cc +++ b/libs/backends/wavesaudio/waves_audiobackend.cc @@ -99,7 +99,7 @@ void WavesAudioBackend::AudioDeviceManagerNotification (NotificationReason reaso ); } break; - + default: break; }; @@ -135,7 +135,7 @@ WavesAudioBackend::WavesAudioBackend (AudioEngine& e) WavesAudioBackend::~WavesAudioBackend () { - + } std::string @@ -156,59 +156,59 @@ WavesAudioBackend::is_realtime () const } -bool +bool WavesAudioBackend::requires_driver_selection () const -{ - return false; +{ + return false; } -std::vector<std::string> +std::vector<std::string> WavesAudioBackend::enumerate_drivers () const -{ +{ // this backend does not suppose driver selection assert (false); - return std::vector<std::string> (); + return std::vector<std::string> (); } -int +int WavesAudioBackend::set_driver (const std::string& /*drivername*/) { //Waves audio backend does not suppose driver selection assert (false); - return -1; + return -1; } -std::vector<AudioBackend::DeviceStatus> +std::vector<AudioBackend::DeviceStatus> WavesAudioBackend::enumerate_devices () const -{ +{ // COMMENTED DBG LOGS */ std::cout << "WavesAudioBackend::enumerate_devices (): " << std::endl; std::vector<DeviceStatus> devicesStatus; - const DeviceInfoVec& deviceInfoList = _audio_device_manager.DeviceInfoList(); + const DeviceInfoVec& deviceInfoList = _audio_device_manager.DeviceInfoList(); for (DeviceInfoVecConstIter deviceInfoIter = deviceInfoList.begin (); deviceInfoIter != deviceInfoList.end (); ++deviceInfoIter) { // COMMENTED DBG LOGS */ std::cout << "\t Device found: " << (*deviceInfoIter)->m_DeviceName << std::endl; devicesStatus.push_back (DeviceStatus ((*deviceInfoIter)->m_DeviceName, true)); } - + return devicesStatus; -} +} -std::vector<float> +std::vector<float> WavesAudioBackend::available_sample_rates (const std::string& device_name) const { // COMMENTED DBG LOGS */ std::cout << "WavesAudioBackend::available_sample_rates (): [" << device_name << "]" << std::endl; std::vector<int> sr; - + WTErr retVal = _audio_device_manager.GetDeviceSampleRates(device_name, sr); - + if (eNoErr != retVal) { std::cerr << "WavesAudioBackend::available_sample_rates (): Failed to find device [" << device_name << "]" << std::endl; return std::vector<float> (); @@ -217,21 +217,21 @@ WavesAudioBackend::available_sample_rates (const std::string& device_name) const // COMMENTED DBG LOGS */ std::cout << "\tFound " << devInfo.m_AvailableSampleRates.size () << " sample rates for " << device_name << ":"; std::vector<float> sample_rates (sr.begin (), sr.end ()); - + // COMMENTED DBG LOGS */ for (std::vector<float>::iterator i = sample_rates.begin (); i != sample_rates.end (); ++i) std::cout << " " << *i; std::cout << std::endl; return sample_rates; } -float WavesAudioBackend::default_sample_rate () const -{ +float WavesAudioBackend::default_sample_rate () const +{ // COMMENTED DBG LOGS */ std::cout << "WavesAudioBackend::default_sample_rate (): " << AudioBackend::default_sample_rate () << std::endl; - return AudioBackend::default_sample_rate (); + return AudioBackend::default_sample_rate (); } -std::vector<uint32_t> +std::vector<uint32_t> WavesAudioBackend::available_buffer_sizes (const std::string& device_name) const { // COMMENTED DBG LOGS */ std::cout << "WavesAudioBackend::available_buffer_sizes (): [" << device_name << "]" << std::endl; @@ -254,12 +254,12 @@ WavesAudioBackend::available_buffer_sizes (const std::string& device_name) const } -uint32_t +uint32_t WavesAudioBackend::available_input_channel_count (const std::string& device_name) const { DeviceInfo devInfo; WTErr err = _audio_device_manager.GetDeviceInfoByName(device_name, devInfo); - + if (eNoErr != err) { std::cerr << "WavesAudioBackend::available_input_channel_count (): Failed to find device [" << device_name << "]" << std::endl; return 0; @@ -272,12 +272,12 @@ WavesAudioBackend::available_input_channel_count (const std::string& device_name } -uint32_t +uint32_t WavesAudioBackend::available_output_channel_count (const std::string& device_name) const { DeviceInfo devInfo; WTErr err = _audio_device_manager.GetDeviceInfoByName(device_name, devInfo); - + if (eNoErr != err) { std::cerr << "WavesAudioBackend::available_output_channel_count (): Failed to find device [" << device_name << "]" << std::endl; return 0; @@ -311,7 +311,7 @@ int WavesAudioBackend::set_device_name (const std::string& device_name) { // COMMENTED DBG LOGS */ std::cout << "WavesAudioBackend::set_device_name (): " << device_name << std::endl; - + if (_ports.size ()) { std::cerr << "WavesAudioBackend::set_device_name (): There are unregistered ports left after [" << (_device ? _device->DeviceName () : std::string ("<NULL>")) << "]!" << std::endl; for (size_t i = 0; i < _ports.size (); ++i) { @@ -379,11 +379,11 @@ WavesAudioBackend::drop_device() } -int +int WavesAudioBackend::set_sample_rate (float sample_rate) { // COMMENTED DBG LOGS */ std::cout << "WavesAudioBackend::set_sample_rate (): " << sample_rate << std::endl; - + WTErr retVal = eNoErr; if (!_device) { @@ -391,9 +391,9 @@ WavesAudioBackend::set_sample_rate (float sample_rate) return -1; } - + bool device_needs_restart = _device->Streaming (); - + if (device_needs_restart) { retVal = _device->SetStreaming (false); // COMMENTED DBG LOGS */ std::cout << "\t\t[" << _device->DeviceName() << "]->_device->SetStreaming (false);"<< std::endl; @@ -402,9 +402,9 @@ WavesAudioBackend::set_sample_rate (float sample_rate) return -1; } } - + retVal = _device->SetCurrentSamplingRate ((int)sample_rate); - + if (retVal != eNoErr) { std::cerr << "WavesAudioBackend::set_sample_rate (): [" << _device->DeviceName() << "]->SetCurrentSamplingRate ((int)" << sample_rate << ") failed (" << retVal << ") !" << std::endl; return -1; @@ -415,7 +415,7 @@ WavesAudioBackend::set_sample_rate (float sample_rate) // this means we are driven by device for buffer size sample_rate = _device->CurrentSamplingRate (); _sample_rate_change(sample_rate); - + if (device_needs_restart) { // COMMENTED DBG LOGS */ std::cout << "\t\t[" << _device->DeviceName() << "]->SetStreaming (true);"<< std::endl; retVal = _device->SetStreaming (true); @@ -428,7 +428,7 @@ WavesAudioBackend::set_sample_rate (float sample_rate) } -int +int WavesAudioBackend::set_buffer_size (uint32_t buffer_size) { // COMMENTED DBG LOGS */ std::cout << "WavesAudioBackend::set_buffer_size (" << buffer_size << "):"<< std::endl; @@ -441,7 +441,7 @@ WavesAudioBackend::set_buffer_size (uint32_t buffer_size) } bool device_needs_restart = _device->Streaming (); - + if (device_needs_restart) { retVal = _device->SetStreaming (false); // COMMENTED DBG LOGS */ std::cout << "\t\t[" << _device->DeviceName() << "]->SetStreaming (false);"<< std::endl; @@ -450,20 +450,20 @@ WavesAudioBackend::set_buffer_size (uint32_t buffer_size) return -1; } } - + retVal = _device->SetCurrentBufferSize (buffer_size); - + if (retVal != eNoErr) { std::cerr << "WavesAudioBackend::set_buffer_size (): [" << _device->DeviceName() << "]->SetCurrentBufferSize (" << buffer_size << ") failed (" << retVal << ") !" << std::endl; return -1; } - + // if call to set buffer is successful but device buffer size differs from the value we tried to set // this means we are driven by device for buffer size buffer_size = _device->CurrentBufferSize (); _buffer_size_change(buffer_size); - + if (device_needs_restart) { // COMMENTED DBG LOGS */ std::cout << "\t\t[" << _device->DeviceName() << "]->SetStreaming (true);"<< std::endl; retVal = _device->SetStreaming (true); @@ -472,12 +472,12 @@ WavesAudioBackend::set_buffer_size (uint32_t buffer_size) return -1; } } - + return 0; } -int +int WavesAudioBackend::set_sample_format (SampleFormat sample_format) { // COMMENTED DBG LOGS */ std::cout << "WavesAudioBackend::set_sample_format (): " << sample_format << std::endl; @@ -486,7 +486,7 @@ WavesAudioBackend::set_sample_format (SampleFormat sample_format) return 0; } -int +int WavesAudioBackend::reset_device () { // COMMENTED DBG LOGS */ std::cout << "WavesAudioBackend::_reset_device ():" << std::endl; @@ -500,7 +500,7 @@ WavesAudioBackend::reset_device () } -int +int WavesAudioBackend::_buffer_size_change (uint32_t new_buffer_size) { _buffer_size = new_buffer_size; @@ -509,7 +509,7 @@ WavesAudioBackend::_buffer_size_change (uint32_t new_buffer_size) } -int +int WavesAudioBackend::_sample_rate_change (float new_sample_rate) { _sample_rate = new_sample_rate; @@ -518,7 +518,7 @@ WavesAudioBackend::_sample_rate_change (float new_sample_rate) } -int +int WavesAudioBackend::set_interleaved (bool yn) { /*you can ignore them totally*/ @@ -527,7 +527,7 @@ WavesAudioBackend::set_interleaved (bool yn) } -int +int WavesAudioBackend::set_input_channels (uint32_t input_channels) { // COMMENTED DBG LOGS */ std::cout << "WavesAudioBackend::set_input_channels (): " << input_channels << std::endl; @@ -537,7 +537,7 @@ WavesAudioBackend::set_input_channels (uint32_t input_channels) } -int +int WavesAudioBackend::set_output_channels (uint32_t output_channels) { // COMMENTED DBG LOGS */ std::cout << "WavesAudioBackend::set_output_channels (): " << output_channels << std::endl; @@ -547,19 +547,19 @@ WavesAudioBackend::set_output_channels (uint32_t output_channels) } -std::string +std::string WavesAudioBackend::device_name () const { if (!_device) { return ""; } // COMMENTED DBG LOGS */ std::cout << "WavesAudioBackend::device_name (): " << _device->DeviceName () << std::endl; - + return _device->DeviceName (); } -float +float WavesAudioBackend::sample_rate () const { // COMMENTED DBG LOGS */ std::cout << "WavesAudioBackend::sample_rate (): " << std::endl; @@ -577,7 +577,7 @@ WavesAudioBackend::sample_rate () const } -uint32_t +uint32_t WavesAudioBackend::buffer_size () const { @@ -589,14 +589,14 @@ WavesAudioBackend::buffer_size () const } int size = _device->CurrentBufferSize (); - + // COMMENTED DBG LOGS */ std::cout << "\t[" << _device->DeviceName () << "]->CurrentBufferSize () returned " << size << std::endl; return (uint32_t)size; } -SampleFormat +SampleFormat WavesAudioBackend::sample_format () const { // COMMENTED DBG LOGS */ std::cout << "WavesAudioBackend::sample_format ()" << std::endl; @@ -604,7 +604,7 @@ WavesAudioBackend::sample_format () const } -bool +bool WavesAudioBackend::interleaved () const { // COMMENTED DBG LOGS */ std::cout << "WavesAudioBackend::interleaved ()" << std::endl; @@ -613,7 +613,7 @@ WavesAudioBackend::interleaved () const } -uint32_t +uint32_t WavesAudioBackend::input_channels () const { // COMMENTED DBG LOGS */ std::cout << "WavesAudioBackend::input_channels ()" << std::endl; @@ -622,7 +622,7 @@ WavesAudioBackend::input_channels () const } -uint32_t +uint32_t WavesAudioBackend::output_channels () const { // COMMENTED DBG LOGS */ std::cout << "WavesAudioBackend::output_channels ()" << std::endl; @@ -631,16 +631,16 @@ WavesAudioBackend::output_channels () const } -std::string +std::string WavesAudioBackend::control_app_name () const { - std::string app_name = ""; + std::string app_name = ""; if (_device && !dynamic_cast<WCMRNativeAudioNoneDevice*> (_device)) { app_name = "PortAudioMayKnowIt"; } - return app_name; + return app_name; } @@ -652,9 +652,9 @@ WavesAudioBackend::launch_control_app () std::cerr << "WavesAudioBackend::launch_control_app (): No device is set!" << std::endl; return; } - + WTErr err = _device->ShowConfigPanel (NULL); - + if (eNoErr != err) { std::cerr << "WavesAudioBackend::launch_control_app (): [" << _device->DeviceName () << "]->ShowConfigPanel () failed (" << err << ")!" << std::endl; } @@ -719,8 +719,8 @@ WavesAudioBackend::_start (bool for_latency_measurement) void -WavesAudioBackend::_audio_device_callback (const float* input_buffer, - float* output_buffer, +WavesAudioBackend::_audio_device_callback (const float* input_buffer, + float* output_buffer, unsigned long nframes, framepos_t sample_time, uint64_t cycle_start_time_nanos) @@ -741,21 +741,21 @@ WavesAudioBackend::_audio_device_callback (const float* input_buffer, if (_call_thread_init_callback) { _call_thread_init_callback = false; // COMMENTED DBG LOGS */ std::cout << "\tAudioEngine::thread_init_callback() invoked for " << std::hex << pthread_self() << std::dec << " !" << std::endl; - + /* There is the possibility that the thread this runs in may change from * callback to callback, so do it every time. */ _main_thread = pthread_self (); - + AudioEngine::thread_init_callback (this); } if ( !engine.thread_initialised_for_audio_processing () ) { std::cerr << "\tWavesAudioBackend::_audio_device_callback (): It's an attempt to call process callback from the thread which didn't initialize it " << std::endl; - + AudioEngine::thread_init_callback (this); } - + if (pthread_equal (_main_thread, pthread_self()) == 0) { #ifdef PTW32_VERSION std::cerr << "Process thread ID has changed. Expected thread: " << _main_thread.p << " current thread: " << pthread_self().p << std::dec << " !" << std::endl; @@ -766,12 +766,12 @@ WavesAudioBackend::_audio_device_callback (const float* input_buffer, } engine.process_callback (nframes); - + _write_audio_data_to_device (output_buffer, nframes); _write_midi_data_to_devices (nframes); - + uint64_t dsp_end_time_nanos = __get_time_nanos(); - + _dsp_load_accumulator -= *_dsp_load_history.begin(); _dsp_load_history.pop_front(); uint64_t dsp_load_nanos = dsp_end_time_nanos - dsp_start_time_nanos; @@ -822,11 +822,11 @@ WavesAudioBackend::freewheel (bool start_stop) } _call_thread_init_callback = true; _freewheel_thread (); - + while (!engine.freewheeling()) { sleep(0); } - + // freewheel thread was not activated successfully if (_freewheel_thread_active == false) { engine.freewheel_callback(false); @@ -834,11 +834,11 @@ WavesAudioBackend::freewheel (bool start_stop) } else { _freewheel_thread_active = false; // stop _freewheel_thread () - + while (engine.freewheeling()) { sleep(0); } - + _call_thread_init_callback = true; WTErr retval = _device->SetStreaming (true); if (retval != eNoErr) { @@ -853,12 +853,12 @@ WavesAudioBackend::freewheel (bool start_stop) } -void +void WavesAudioBackend::_freewheel_thread () { // COMMENTED DBG LOGS */ std::cout << "WavesAudioBackend::_freewheel_thread ():" << std::endl; if (!_freewheel_thread_active) { // Lets create it - + // COMMENTED DBG LOGS */ std::cout << "\tCreating the thread _freewheel_thread () . . ." << std::endl; pthread_attr_t attributes; pthread_t thread_id; @@ -869,7 +869,7 @@ WavesAudioBackend::_freewheel_thread () std::cerr << "WavesAudioBackend::freewheel_thread (): pthread_attr_init () failed!" << std::endl; return; } - + if (pthread_attr_setstacksize (&attributes, __thread_stack_size ())) { std::cerr << "WavesAudioBackend::freewheel_thread (): pthread_attr_setstacksize () failed!" << std::endl; return; @@ -878,10 +878,10 @@ WavesAudioBackend::_freewheel_thread () _freewheel_thread_active = true; if ((pthread_create (&thread_id, &attributes, __start_process_thread, thread_data))) { _freewheel_thread_active = false; - + // release invoking thread engine.freewheel_callback(true); - + std::cerr << "WavesAudioBackend::freewheel_thread (): pthread_create () failed!" << std::endl; return; } @@ -889,10 +889,10 @@ WavesAudioBackend::_freewheel_thread () // COMMENTED DBG LOGS */ std::cout << "\t. . . _freewheel_thread () complete." << std::endl; return; } - + // notify angine that freewheeling is started engine.freewheel_callback(true); - + if (_call_thread_init_callback) { _call_thread_init_callback = false; AudioEngine::thread_init_callback (this); @@ -901,10 +901,10 @@ WavesAudioBackend::_freewheel_thread () while (_freewheel_thread_active) { engine.process_callback (_buffer_size); } - + // notify angine that freewheeling is stopped engine.freewheel_callback(false); - + // COMMENTED DBG LOGS */ std::cout << "WavesAudioBackend::_freewheel_thread (): FINISHED" << std::endl; return; } @@ -921,7 +921,7 @@ WavesAudioBackend::dsp_load () const } float average_dsp_load = (float)_dsp_load_accumulator/_dsp_load_history_length; - + return ( average_dsp_load / _audio_cycle_period_nanos)*100.0; } @@ -932,11 +932,11 @@ WavesAudioBackend::_init_dsp_load_history() if((_sample_rate <= 0.0) || (_buffer_size <= 0.0)) { return; } - + _audio_cycle_period_nanos = ((uint64_t)1000000000L * _buffer_size) / _sample_rate; - + _dsp_load_accumulator = 0; - + _dsp_load_history_length = (_sample_rate + _buffer_size - 1) / _buffer_size; // COMMENTED DBG LOGS */ std::cout << "\t\t_dsp_load_history_length = " << _dsp_load_history_length << std::endl; _dsp_load_history = std::list<uint64_t>(_dsp_load_history_length, 0); @@ -951,7 +951,7 @@ WavesAudioBackend::transport_start () void -WavesAudioBackend::transport_stop () +WavesAudioBackend::transport_stop () { // COMMENTED DBG LOGS */ std::cout << "WavesAudioBackend::transport_stop (): " << std::endl; } @@ -961,7 +961,7 @@ TransportState WavesAudioBackend::transport_state () const { // COMMENTED DBG LOGS */ std::cout << "WavesAudioBackend::transport_state (): " << std::endl; - return TransportStopped; + return TransportStopped; } @@ -974,17 +974,17 @@ WavesAudioBackend::transport_locate (framepos_t pos) framepos_t WavesAudioBackend::transport_frame () const -{ +{ // COMMENTED DBG LOGS */ std::cout << "WavesAudioBackend::transport_frame (): " << std::endl; - return 0; + return 0; } int WavesAudioBackend::set_time_master (bool yn) -{ +{ // COMMENTED DBG LOGS */ std::cout << "WavesAudioBackend::set_time_master (): " << yn << std::endl; - return 0; + return 0; } @@ -1022,7 +1022,7 @@ WavesAudioBackend::sample_time () { // WARNING: This is approximate calculation. Implementation of accurate calculation is pending. // http://kokkinizita.linuxaudio.org/papers/usingdll.pdf - + return _sample_time_at_cycle_start + ((__get_time_nanos () - _cycle_start_time_nanos)*_sample_rate)/1000000000L; } @@ -1035,7 +1035,7 @@ WavesAudioBackend::__get_time_nanos () // the API should be a part of WCMRCoreAudioDeviceManager to give a chance of being tied to the // audio device transport timeß. return AudioConvertHostTimeToNanos (AudioGetCurrentHostTime ()); - + #elif PLATFORM_WINDOWS LARGE_INTEGER Count; QueryPerformanceCounter (&Count); @@ -1055,7 +1055,7 @@ WavesAudioBackend::sample_time_at_cycle_start () pframes_t WavesAudioBackend::samples_since_cycle_start () { - pframes_t diff_sample_time; + pframes_t diff_sample_time; diff_sample_time = sample_time () - _sample_time_at_cycle_start; // COMMENTED DBG LOGS */ std::cout << "samples_since_cycle_start: " << diff_sample_time << std::endl; @@ -1065,10 +1065,10 @@ WavesAudioBackend::samples_since_cycle_start () bool WavesAudioBackend::get_sync_offset (pframes_t& /*offset*/) const -{ +{ // COMMENTED DBG LOGS */ std::cout << "get_sync_offset: false" << std::endl; - return false; + return false; } @@ -1090,7 +1090,7 @@ WavesAudioBackend::create_process_thread (boost::function<void ()> func) std::cerr << "Cannot set thread attr init res = " << retVal << endmsg; return -1; } - + if ((retVal = pthread_attr_setstacksize (&attributes, stacksize_aligned))) { std::cerr << "Cannot set thread stack size (" << stacksize_aligned << ") res = " << retVal << endmsg; return -1; @@ -1131,7 +1131,7 @@ WavesAudioBackend::join_process_threads () ++i) { // COMMENTED DBG LOGS */ std::cout << "\t\t\tstopping thread " << std::hex << *i << std::dec << "...\n"; - void* status; + void* status; if (pthread_join (*i, &status) != 0) { std::cerr << "AudioEngine: cannot stop process thread !" << std::endl; ret += -1; @@ -1146,7 +1146,7 @@ WavesAudioBackend::join_process_threads () } -bool +bool WavesAudioBackend::in_process_thread () { // COMMENTED DBG LOGS */ std::cout << "WavesAudioBackend::in_process_thread ()" << std::endl; @@ -1175,7 +1175,7 @@ WavesAudioBackend::__thread_stack_size () } -uint32_t +uint32_t WavesAudioBackend::process_thread_count () { // COMMENTED DBG LOGS */ std::cout << "WavesAudioBackend::process_thread_count (): returns " << _backend_threads.size () << std::endl; @@ -1266,7 +1266,7 @@ uint64_t WavesAudioBackend::__performance_counter_frequency; #endif -int +int WavesAudioBackend::__instantiate (const std::string& arg1, const std::string& arg2) { // COMMENTED DBG LOGS */ std::cout << "WavesAudioBackend::__instantiate ():" << "[" << arg1 << "], [" << arg2 << "]" << std::endl; @@ -1282,7 +1282,7 @@ WavesAudioBackend::__instantiate (const std::string& arg1, const std::string& ar } -int +int WavesAudioBackend::__deinstantiate () { // COMMENTED DBG LOGS */ std::cout << "WavesAudioBackend::__deinstantiate ():" << std::endl; |