diff options
| author | Carl Hetherington <cth@carlh.net> | 2022-11-12 00:02:51 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2022-11-13 00:12:26 +0100 |
| commit | c37626ccfe3b6b8ef29c2122c616052d042f8016 (patch) | |
| tree | 71064bfe941fb120ae03f6516a96fffee32f8a8a | |
| parent | 5f9aff54d9b082ffa9a5635300c6acc219f714e8 (diff) | |
Add AudioAPI and some related methods.
| -rw-r--r-- | src/wx/audio_api.cc | 100 | ||||
| -rw-r--r-- | src/wx/audio_api.h | 71 | ||||
| -rw-r--r-- | src/wx/wscript | 1 |
3 files changed, 172 insertions, 0 deletions
diff --git a/src/wx/audio_api.cc b/src/wx/audio_api.cc new file mode 100644 index 000000000..7c2c94b51 --- /dev/null +++ b/src/wx/audio_api.cc @@ -0,0 +1,100 @@ +/* + Copyright (C) 2022 Carl Hetherington <cth@carlh.net> + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + + +#include "audio_api.h" +#include "lib/dcpomatic_assert.h" +#include <boost/optional.hpp> +#include <vector> + + +using std::string; +using std::vector; +using boost::optional; + + +static AudioAPI wasapi(_("WASAPI"), "wasapi", RtAudio::WINDOWS_WASAPI); +static AudioAPI asio(_("ASIO"), "asio", RtAudio::WINDOWS_ASIO); +static AudioAPI pulse(_("PulseAudio"), "pulse", RtAudio::LINUX_PULSE); +static AudioAPI alsa(_("ALSA"), "alsa", RtAudio::LINUX_ALSA); +static AudioAPI core(_("CoreAudio"), "core", RtAudio::MACOSX_CORE); + + +vector<AudioAPI> +audio_apis() +{ +#ifdef DCPOMATIC_WINDOWS + return { wasapi, asio }; + }; +#endif +#ifdef DCPOMATIC_LINUX + return { pulse, alsa }; +#endif +#ifdef DCPOMATIC_OSX + return { core }; +#endif +} + + +AudioAPI +id_to_audio_api(string id) +{ + const auto apis = audio_apis(); + auto iter = std::find_if(apis.begin(), apis.end(), [&id](AudioAPI const& api) { return api.id() == id; }); + if (iter == apis.end()) { + return apis[0]; + } + + return *iter; +} + + +AudioAPI +rtaudio_id_to_audio_api(RtAudio::Api id) +{ + const auto apis = audio_apis(); + auto iter = std::find_if(apis.begin(), apis.end(), [&id](AudioAPI const& api) { return api.rtaudio_id() == id; }); + DCPOMATIC_ASSERT(iter != apis.end()); + return *iter; +} + +AudioAPI +id_to_audio_api(optional<string> id) +{ + const auto apis = audio_apis(); + if (!id) { + return apis[0]; + } + + return id_to_audio_api(*id); +} + + +AudioAPI +index_to_audio_api(int index) +{ + const auto apis = audio_apis(); + if (index < 0 || index >= static_cast<int>(apis.size())) { + return apis[0]; + } + + return apis[index]; +} + diff --git a/src/wx/audio_api.h b/src/wx/audio_api.h new file mode 100644 index 000000000..3231d1d24 --- /dev/null +++ b/src/wx/audio_api.h @@ -0,0 +1,71 @@ +/* + Copyright (C) 2022 Carl Hetherington <cth@carlh.net> + + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + DCP-o-matic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with DCP-o-matic. If not, see <http://www.gnu.org/licenses/>. + +*/ + + +#ifndef DCPOMATIC_AUDIO_API_H +#define DCPOMATIC_AUDIO_API_H + + +#include <dcp/warnings.h> +#include <wx/wx.h> +LIBDCP_DISABLE_WARNINGS +#include <RtAudio.h> +LIBDCP_ENABLE_WARNINGS +#include <boost/optional.hpp> +#include <string> + + +class AudioAPI +{ +public: + AudioAPI(wxString name, std::string id, RtAudio::Api rtaudio_id) + : _name(name) + , _id(id) + , _rtaudio_id(rtaudio_id) + {} + + wxString name() const { + return _name; + } + + std::string id() const { + return _id; + } + + RtAudio::Api rtaudio_id() const { + return _rtaudio_id; + } + +private: + wxString _name; + std::string _id; + RtAudio::Api _rtaudio_id; +}; + + +std::vector<AudioAPI> audio_apis(); +AudioAPI id_to_audio_api(std::string id); +AudioAPI id_to_audio_api(boost::optional<std::string> id); +AudioAPI rtaudio_id_to_audio_api(RtAudio::Api api); +AudioAPI index_to_audio_api(int index); + + +#endif + diff --git a/src/wx/wscript b/src/wx/wscript index ba51aec57..d4e25950c 100644 --- a/src/wx/wscript +++ b/src/wx/wscript @@ -26,6 +26,7 @@ import i18n sources = """ about_dialog.cc + audio_api.cc audio_dialog.cc audio_gain_dialog.cc audio_mapping_view.cc |
