Line data Source code
1 : #include "audio/backend/audio_backend.h"
2 : #include "audio/backend/audio_backend_registry.h"
3 : #ifdef __APPLE__
4 : #include <TargetConditionals.h>
5 : #endif
6 :
7 : #if defined(AMPLITRON_ANDROID_OBOE)
8 : #include "audio/backend/oboe_backend.h"
9 : static Amplitron::BackendRegistrar<Amplitron::OboeBackend> g_oboe_registrar("oboe");
10 : #elif defined(__EMSCRIPTEN__) || (defined(__APPLE__) && TARGET_OS_IPHONE)
11 : #include "audio/backend/sdl_backend.h"
12 : static Amplitron::BackendRegistrar<Amplitron::SdlBackend> g_sdl_registrar("sdl");
13 : #else
14 : #include "audio/backend/portaudio_backend.h"
15 : #include "audio/backend/sdl_backend.h"
16 2 : static Amplitron::BackendRegistrar<Amplitron::PortAudioBackend> g_portaudio_registrar("portaudio");
17 2 : static Amplitron::BackendRegistrar<Amplitron::SdlBackend> g_sdl_registrar("sdl");
18 : #ifdef WITH_JACK
19 : #include "audio/backend/jack_backend.h"
20 : static Amplitron::BackendRegistrar<Amplitron::JackBackend> g_jack_registrar("jack");
21 : #endif
22 : #endif
23 :
24 : namespace Amplitron {
25 :
26 814 : std::unique_ptr<IAudioBackend> AudioBackendFactory::create_backend(const std::string& type) {
27 814 : auto backend = AudioBackendRegistry::instance().create(type);
28 814 : if (backend) {
29 814 : return backend;
30 : }
31 :
32 : // Fallback: if not found, use first available
33 0 : auto list = get_available_backends();
34 0 : if (!list.empty()) {
35 0 : return AudioBackendRegistry::instance().create(list[0]);
36 : }
37 0 : return nullptr;
38 814 : }
39 :
40 0 : std::vector<std::string> AudioBackendFactory::get_available_backends() {
41 0 : return AudioBackendRegistry::instance().available();
42 : }
43 :
44 : } // namespace Amplitron
|