diff options
author | Tim Mayberry <mojofunk@gmail.com> | 2015-07-20 21:44:46 +1000 |
---|---|---|
committer | Tim Mayberry <mojofunk@gmail.com> | 2015-07-31 09:59:54 +1000 |
commit | cfbd9dd6d4d87cda4f3b3e55e7b44bdecf5b9e4b (patch) | |
tree | 0ac2a3c89343ad6d57fbd3b3cf593d4d17d583d7 | |
parent | acd17a9b5300a38c4d61ecc0af32974d3b5113f5 (diff) |
Add functionality to show ASIO control panel
-rw-r--r-- | libs/backends/portaudio/portaudio_backend.cc | 12 | ||||
-rw-r--r-- | libs/backends/portaudio/portaudio_backend.h | 4 | ||||
-rw-r--r-- | libs/backends/portaudio/portaudio_io.cc | 47 | ||||
-rw-r--r-- | libs/backends/portaudio/portaudio_io.h | 2 | ||||
-rw-r--r-- | libs/backends/portaudio/wscript | 1 |
5 files changed, 62 insertions, 4 deletions
diff --git a/libs/backends/portaudio/portaudio_backend.cc b/libs/backends/portaudio/portaudio_backend.cc index cfab0d172c..6501224316 100644 --- a/libs/backends/portaudio/portaudio_backend.cc +++ b/libs/backends/portaudio/portaudio_backend.cc @@ -376,6 +376,18 @@ PortAudioBackend::systemic_output_latency () const return _systemic_audio_output_latency; } +std::string +PortAudioBackend::control_app_name () const +{ + return _pcmio->control_app_name (name_to_id (_input_audio_device)); +} + +void +PortAudioBackend::launch_control_app () +{ + return _pcmio->launch_control_app (name_to_id(_input_audio_device)); +} + /* MIDI */ std::vector<std::string> diff --git a/libs/backends/portaudio/portaudio_backend.h b/libs/backends/portaudio/portaudio_backend.h index 22dd386904..b0cc68715f 100644 --- a/libs/backends/portaudio/portaudio_backend.h +++ b/libs/backends/portaudio/portaudio_backend.h @@ -212,8 +212,8 @@ class PortAudioBackend : public AudioBackend { bool can_set_systemic_midi_latencies () const { return false; } /* External control app */ - std::string control_app_name () const { return std::string (); } - void launch_control_app () {} + std::string control_app_name () const; + void launch_control_app (); /* MIDI */ std::vector<std::string> enumerate_midi_options () const; diff --git a/libs/backends/portaudio/portaudio_io.cc b/libs/backends/portaudio/portaudio_io.cc index 30a0a25eb4..f034df7603 100644 --- a/libs/backends/portaudio/portaudio_io.cc +++ b/libs/backends/portaudio/portaudio_io.cc @@ -24,6 +24,10 @@ #include <glibmm.h> #include "portaudio_io.h" +#ifdef WITH_ASIO +#include "pa_asio.h" +#endif + #include "pbd/compose.h" #include "debug.h" @@ -63,6 +67,43 @@ PortAudioIO::~PortAudioIO () free (_output_buffer); _output_buffer = NULL; } +std::string +PortAudioIO::control_app_name (int device_id) const +{ + const PaHostApiInfo* info = Pa_GetHostApiInfo (_host_api_index); + std::string app_name; + + if (info == NULL) { + DEBUG_AUDIO (string_compose ("Unable to determine Host API from index %1\n", + _host_api_index)); + return app_name; + } + + PaHostApiTypeId type_id = info->type; + +#ifdef WITH_ASIO + if (type_id == paASIO) { + // is this used for anything, or just acts as a boolean? + return "PortaudioASIO"; + } +#endif + + return app_name; +} + +void +PortAudioIO::launch_control_app (int device_id) +{ +#ifdef WITH_ASIO + PaError err = PaAsio_ShowControlPanel (device_id, NULL); + + if (err != paNoError) { + // error << ? + DEBUG_AUDIO (string_compose ( + "Unable to show control panel for device with index %1\n", device_id)); + } +#endif +} int PortAudioIO::available_sample_rates(int device_id, std::vector<float>& sampleRates) @@ -209,8 +250,10 @@ PortAudioIO::get_host_api_index_from_name (const std::string& name) for (int i = 0; i < count; ++i) { const PaHostApiInfo* info = Pa_GetHostApiInfo (i); - if (info->name != NULL) { // possible? - if (name == info->name) return i; + if (info != NULL && info->name != NULL) { // possible? + if (name == info->name) { + return i; + } } } DEBUG_AUDIO (string_compose ("Unable to get host API from name: %1\n", name)); diff --git a/libs/backends/portaudio/portaudio_io.h b/libs/backends/portaudio/portaudio_io.h index 25f198bd5a..991c542574 100644 --- a/libs/backends/portaudio/portaudio_io.h +++ b/libs/backends/portaudio/portaudio_io.h @@ -54,6 +54,8 @@ public: int available_sample_rates (int device_id, std::vector<float>& sampleRates); int available_buffer_sizes (int device_id, std::vector<uint32_t>& sampleRates); + std::string control_app_name (int device_id) const; + void launch_control_app (int device_id); void pcm_stop (void); int pcm_start (void); diff --git a/libs/backends/portaudio/wscript b/libs/backends/portaudio/wscript index 93421a0fe2..9c661d83b0 100644 --- a/libs/backends/portaudio/wscript +++ b/libs/backends/portaudio/wscript @@ -17,6 +17,7 @@ def options(opt): def configure(conf): autowaf.configure(conf) autowaf.check_pkg(conf, 'portaudio-2.0', uselib_store='PORTAUDIO', atleast_version='19') + conf.check(header_name='pa_asio.h', define_name='WITH_ASIO', mandatory=False) def build(bld): obj = bld(features = 'cxx cxxshlib') |