commit 6f23c9aaae7b04ba533f15e66d2ce2fc0e0261e2
parent 2e6a0f79df5538755563c17d8c8d62b41d0b603e
Author: falkTX <falktx@falktx.com>
Date: Sat, 26 Jun 2021 21:14:23 +0100
Fallback to RtAudio when JACK fails (macOS only for now, TESTING)
Diffstat:
2 files changed, 424 insertions(+), 151 deletions(-)
diff --git a/Makefile.plugins.mk b/Makefile.plugins.mk
@@ -49,6 +49,10 @@ ifneq ($(HAIKU_OR_MACOS_OR_WINDOWS),true)
JACK_LIBS = -ldl
endif
+ifeq ($(MACOS),true)
+JACK_LIBS += -framework CoreAudio
+endif
+
# backwards compat
BASE_FLAGS += -DHAVE_JACK
diff --git a/distrho/src/jackbridge/JackBridge.cpp b/distrho/src/jackbridge/JackBridge.cpp
@@ -32,6 +32,19 @@
#include <cerrno>
#include "../../extra/LibraryUtils.hpp"
+// in case JACK fails, we fallback to RtAudio's native API
+#ifdef DISTRHO_OS_MAC
+# define __MACOSX_CORE__
+# define RTAUDIO_API_TYPE MACOSX_CORE
+# define Point CorePoint /* fix conflict between DGL and macOS Point name */
+# include "rtaudio/RtAudio.cpp"
+# undef Point
+#endif
+
+#ifdef RTAUDIO_API_TYPE
+# include "../../extra/ScopedPointer.hpp"
+#endif
+
// -----------------------------------------------------------------------------
extern "C" {
@@ -301,6 +314,10 @@ struct JackBridge {
jacksym_set_thread_creator set_thread_creator_ptr;
#endif
+#ifdef RTAUDIO_API_TYPE
+ static bool usingRtAudio;
+#endif
+
JackBridge()
: lib(nullptr),
get_version_ptr(nullptr),
@@ -554,14 +571,161 @@ struct JackBridge {
}
}
+#ifdef RTAUDIO_API_TYPE
+ // TESTING, later on put this on separate file
+ // TODO add MIDI support
+ ScopedPointer<RtAudio> rtAudioPtr;
+ uint rtAudioBufferFrames = 0;
+ JackProcessCallback rtAudioProcessCallback = nullptr;
+ void* rtAudioProcessCallbackArg = nullptr;
+ float* audioBuffers[DISTRHO_PLUGIN_NUM_INPUTS + DISTRHO_PLUGIN_NUM_OUTPUTS];
+
+ uint numAudioIns = 0;
+ uint numAudioOuts = 0;
+ uint numMidiIns = 0;
+ uint numMidiOuts = 0;
+
+ bool initRtAudio()
+ {
+ ScopedPointer<RtAudio> rtAudio;
+
+ try {
+ rtAudio = new RtAudio(RtAudio::RTAUDIO_API_TYPE);
+ } DISTRHO_SAFE_EXCEPTION_RETURN("new RtAudio()", false);
+
+ uint bufferFrames = 512;
+
+ RtAudio::StreamParameters inParams;
+ inParams.deviceId = rtAudio->getDefaultInputDevice();
+ inParams.nChannels = DISTRHO_PLUGIN_NUM_INPUTS;
+
+ RtAudio::StreamParameters outParams;
+ outParams.deviceId = rtAudio->getDefaultOutputDevice();
+ outParams.nChannels = DISTRHO_PLUGIN_NUM_OUTPUTS;
+
+ RtAudio::StreamOptions opts;
+ opts.flags = RTAUDIO_NONINTERLEAVED | RTAUDIO_MINIMIZE_LATENCY | RTAUDIO_ALSA_USE_DEFAULT;
+
+ try {
+ rtAudio->openStream(&outParams, &inParams, RTAUDIO_FLOAT32, 48000, &bufferFrames, RtAudioCallback, this, &opts, nullptr);
+ } DISTRHO_SAFE_EXCEPTION_RETURN("rtAudio->openStream()", false);
+
+ rtAudioPtr = rtAudio;
+ rtAudioBufferFrames = bufferFrames;
+ usingRtAudio = true;
+ d_stdout("JACK setup failed, using RtAudio instead");
+ return true;
+ }
+
+ bool destroyRtAudio()
+ {
+ DISTRHO_SAFE_ASSERT_RETURN(rtAudioPtr != nullptr, false);
+
+ if (rtAudioPtr->isStreamRunning())
+ {
+ try {
+ rtAudioPtr->abortStream();
+ } DISTRHO_SAFE_EXCEPTION("rtAudioPtr->abortStream()");
+ }
+
+ rtAudioPtr = nullptr;
+ usingRtAudio = false;
+ return true;
+ }
+
+ bool startRtAudioStream()
+ {
+ DISTRHO_SAFE_ASSERT_RETURN(rtAudioPtr != nullptr, false);
+
+ try {
+ rtAudioPtr->startStream();
+ } DISTRHO_SAFE_EXCEPTION("rtAudioPtr->startStream()");
+
+ return true;
+ }
+
+ bool stopRtAudioStream()
+ {
+ DISTRHO_SAFE_ASSERT_RETURN(rtAudioPtr != nullptr, false);
+
+ try {
+ rtAudioPtr->stopStream();
+ } DISTRHO_SAFE_EXCEPTION("rtAudioPtr->stopStream()");
+
+ return true;
+ }
+
+ jack_port_t* addRtAudioPort(const bool isAudio, const bool isInput)
+ {
+ uintptr_t ret = 0x0;
+ if (isAudio)
+ ret |= 0x1000;
+ if (isInput)
+ ret |= 0x2000;
+
+ return (jack_port_t*)(ret + (isAudio ? (isInput ? numAudioIns++ : numAudioOuts++)
+ : (isInput ? numMidiIns++ : numMidiOuts++)));
+ }
+
+ void* getRtAudioPortBuffer(jack_port_t* const port)
+ {
+ const uintptr_t portMask = (uintptr_t)port;
+
+ if (portMask & 0x1000)
+ return audioBuffers[(portMask & 0x2000 ? 0 : DISTRHO_PLUGIN_NUM_INPUTS) + (portMask & 0x0fff)];
+
+ return nullptr;
+ }
+
+ jack_nframes_t getRtAudioBufferSize() const
+ {
+ return rtAudioBufferFrames;
+ }
+
+ jack_nframes_t getRtAudioSampleRate()
+ {
+ DISTRHO_SAFE_ASSERT_RETURN(rtAudioPtr != nullptr, 0);
+ return rtAudioPtr->getStreamSampleRate();
+ }
+
+ static int RtAudioCallback(void* const outputBuffer,
+ void* const inputBuffer,
+ const uint numFrames,
+ const double /* streamTime */,
+ const RtAudioStreamStatus /* status */,
+ void* const userData)
+ {
+ JackBridge* const self = (JackBridge*)userData;
+
+ if (self->rtAudioProcessCallback == nullptr)
+ {
+ std::memset((float*)outputBuffer, 0, sizeof(float)*numFrames*DISTRHO_PLUGIN_NUM_OUTPUTS);
+ return 0;
+ }
+
+ float** const selfAudioBuffers = self->audioBuffers;
+ float* const insPtr = (float*)inputBuffer;
+ float* const outsPtr = (float*)outputBuffer;
+
+ uint i = 0;
+ for (uint j=0; j<DISTRHO_PLUGIN_NUM_INPUTS; ++j, ++i)
+ selfAudioBuffers[i] = insPtr + (j * numFrames);
+ for (uint j=0; j<DISTRHO_PLUGIN_NUM_OUTPUTS; ++j, ++i)
+ selfAudioBuffers[i] = outsPtr + (j * numFrames);
+
+ self->rtAudioProcessCallback(numFrames, self->rtAudioProcessCallbackArg);
+ return 0;
+ }
+#endif // RTAUDIO_API_TYPE
+
DISTRHO_DECLARE_NON_COPYABLE(JackBridge);
};
// -----------------------------------------------------------------------------
-static const JackBridge& getBridgeInstance() noexcept
+static JackBridge& getBridgeInstance() noexcept
{
- static const JackBridge bridge;
+ static JackBridge bridge;
return bridge;
}
@@ -780,11 +944,17 @@ struct WineBridge {
// -----------------------------------------------------------------------------
+#ifdef RTAUDIO_API_TYPE
+bool JackBridge::usingRtAudio = false;
+#endif
+
+// -----------------------------------------------------------------------------
+
bool jackbridge_is_ok() noexcept
{
#if defined(JACKBRIDGE_DUMMY)
return false;
-#elif defined(JACKBRIDGE_DIRECT)
+#elif defined(JACKBRIDGE_DIRECT) || defined(RTAUDIO_API_TYPE)
return true;
#else
return (getBridgeInstance().lib != nullptr);
@@ -807,8 +977,9 @@ void jackbridge_get_version(int* major_ptr, int* minor_ptr, int* micro_ptr, int*
#elif defined(JACKBRIDGE_DIRECT)
return jack_get_version(major_ptr, minor_ptr, micro_ptr, proto_ptr);
#else
- if (getBridgeInstance().get_version_ptr != nullptr)
- return getBridgeInstance().get_version_ptr(major_ptr, minor_ptr, micro_ptr, proto_ptr);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().get_version_ptr != nullptr)
+ return getBridgeInstance().get_version_ptr(major_ptr, minor_ptr, micro_ptr, proto_ptr);
#endif
if (major_ptr != nullptr)
*major_ptr = 0;
@@ -826,6 +997,8 @@ const char* jackbridge_get_version_string()
#elif defined(JACKBRIDGE_DIRECT)
return jack_get_version_string();
#else
+ if (JackBridge::usingRtAudio)
+ return RTAUDIO_VERSION;
if (getBridgeInstance().get_version_string_ptr != nullptr)
return getBridgeInstance().get_version_string_ptr();
#endif
@@ -841,7 +1014,10 @@ jack_client_t* jackbridge_client_open(const char* client_name, uint32_t options,
return jack_client_open(client_name, static_cast<jack_options_t>(options), status);
#else
if (getBridgeInstance().client_open_ptr != nullptr)
- return getBridgeInstance().client_open_ptr(client_name, static_cast<jack_options_t>(options), status);
+ if (jack_client_t* const client = getBridgeInstance().client_open_ptr(client_name, static_cast<jack_options_t>(options), status))
+ return client;
+ if (getBridgeInstance().initRtAudio())
+ return (jack_client_t*)0x1; // return non-null
#endif
if (status != nullptr)
*status = JackServerError;
@@ -854,6 +1030,8 @@ bool jackbridge_client_close(jack_client_t* client)
#elif defined(JACKBRIDGE_DIRECT)
return (jack_client_close(client) == 0);
#else
+ if (JackBridge::usingRtAudio)
+ return getBridgeInstance().destroyRtAudio();
if (getBridgeInstance().client_close_ptr != nullptr)
return (getBridgeInstance().client_close_ptr(client) == 0);
#endif
@@ -868,8 +1046,9 @@ int jackbridge_client_name_size()
#elif defined(JACKBRIDGE_DIRECT)
return jack_client_name_size();
#else
- if (getBridgeInstance().client_name_size_ptr != nullptr)
- return getBridgeInstance().client_name_size_ptr();
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().client_name_size_ptr != nullptr)
+ return getBridgeInstance().client_name_size_ptr();
#endif
return 33;
}
@@ -880,6 +1059,11 @@ char* jackbridge_get_client_name(jack_client_t* client)
#elif defined(JACKBRIDGE_DIRECT)
return jack_get_client_name(client);
#else
+ if (JackBridge::usingRtAudio)
+ {
+ char* const name = (char*)DISTRHO_PLUGIN_NAME;
+ return name;
+ }
if (getBridgeInstance().get_client_name_ptr != nullptr)
return getBridgeInstance().get_client_name_ptr(client);
#endif
@@ -894,8 +1078,9 @@ char* jackbridge_client_get_uuid(jack_client_t* client)
#elif defined(JACKBRIDGE_DIRECT)
return jack_client_get_uuid(client);
#else
- if (const jacksym_client_get_uuid func = getBridgeInstance().client_get_uuid_ptr)
- return func(client);
+ if (! JackBridge::usingRtAudio)
+ if (const jacksym_client_get_uuid func = getBridgeInstance().client_get_uuid_ptr)
+ return func(client);
#endif
return nullptr;
}
@@ -906,8 +1091,9 @@ char* jackbridge_get_uuid_for_client_name(jack_client_t* client, const char* nam
#elif defined(JACKBRIDGE_DIRECT)
return jack_get_uuid_for_client_name(client, name);
#else
- if (getBridgeInstance().get_uuid_for_client_name_ptr != nullptr)
- return getBridgeInstance().get_uuid_for_client_name_ptr(client, name);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().get_uuid_for_client_name_ptr != nullptr)
+ return getBridgeInstance().get_uuid_for_client_name_ptr(client, name);
#endif
return nullptr;
}
@@ -918,8 +1104,9 @@ char* jackbridge_get_client_name_by_uuid(jack_client_t* client, const char* uuid
#elif defined(JACKBRIDGE_DIRECT)
return jack_get_client_name_by_uuid(client, uuid);
#else
- if (getBridgeInstance().get_client_name_by_uuid_ptr != nullptr)
- return getBridgeInstance().get_client_name_by_uuid_ptr(client, uuid);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().get_client_name_by_uuid_ptr != nullptr)
+ return getBridgeInstance().get_client_name_by_uuid_ptr(client, uuid);
#endif
return nullptr;
}
@@ -932,8 +1119,9 @@ bool jackbridge_uuid_parse(const char* buf, jack_uuid_t* uuid)
#elif defined(JACKBRIDGE_DIRECT)
return (jack_uuid_parse(buf, uuid) == 0);
#else
- if (const jacksym_uuid_parse func = getBridgeInstance().uuid_parse_ptr)
- return (func(buf, uuid) == 0);
+ if (! JackBridge::usingRtAudio)
+ if (const jacksym_uuid_parse func = getBridgeInstance().uuid_parse_ptr)
+ return (func(buf, uuid) == 0);
#endif
return false;
}
@@ -944,8 +1132,9 @@ void jackbridge_uuid_unparse(jack_uuid_t uuid, char buf[JACK_UUID_STRING_SIZE])
#elif defined(JACKBRIDGE_DIRECT)
jack_uuid_unparse(uuid, buf);
#else
- if (const jacksym_uuid_unparse func = getBridgeInstance().uuid_unparse_ptr)
- return func(uuid, buf);
+ if (! JackBridge::usingRtAudio)
+ if (const jacksym_uuid_unparse func = getBridgeInstance().uuid_unparse_ptr)
+ return func(uuid, buf);
#endif
}
@@ -957,6 +1146,8 @@ bool jackbridge_activate(jack_client_t* client)
#elif defined(JACKBRIDGE_DIRECT)
return (jack_activate(client) == 0);
#else
+ if (JackBridge::usingRtAudio)
+ return getBridgeInstance().startRtAudioStream();
if (getBridgeInstance().activate_ptr != nullptr)
return (getBridgeInstance().activate_ptr(client) == 0);
#endif
@@ -969,6 +1160,8 @@ bool jackbridge_deactivate(jack_client_t* client)
#elif defined(JACKBRIDGE_DIRECT)
return (jack_deactivate(client) == 0);
#else
+ if (JackBridge::usingRtAudio)
+ return getBridgeInstance().stopRtAudioStream();
if (getBridgeInstance().deactivate_ptr != nullptr)
return (getBridgeInstance().deactivate_ptr(client) == 0);
#endif
@@ -981,8 +1174,9 @@ bool jackbridge_is_realtime(jack_client_t* client)
#elif defined(JACKBRIDGE_DIRECT)
return jack_is_realtime(client);
#else
- if (getBridgeInstance().is_realtime_ptr != nullptr)
- return getBridgeInstance().is_realtime_ptr(client);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().is_realtime_ptr != nullptr)
+ return getBridgeInstance().is_realtime_ptr(client);
#endif
return false;
}
@@ -995,7 +1189,7 @@ bool jackbridge_set_thread_init_callback(jack_client_t* client, JackThreadInitCa
#elif defined(JACKBRIDGE_DIRECT)
return (jack_set_thread_init_callback(client, thread_init_callback, arg) == 0);
#else
- if (getBridgeInstance().set_thread_init_callback_ptr != nullptr)
+ if (! JackBridge::usingRtAudio && getBridgeInstance().set_thread_init_callback_ptr != nullptr)
{
# ifdef __WINE__
WineBridge::getInstance().set_thread_init(thread_init_callback);
@@ -1014,7 +1208,7 @@ void jackbridge_on_shutdown(jack_client_t* client, JackShutdownCallback shutdown
#elif defined(JACKBRIDGE_DIRECT)
jack_on_shutdown(client, shutdown_callback, arg);
#else
- if (getBridgeInstance().on_shutdown_ptr != nullptr)
+ if (! JackBridge::usingRtAudio && getBridgeInstance().on_shutdown_ptr != nullptr)
{
# ifdef __WINE__
WineBridge::getInstance().set_shutdown(shutdown_callback);
@@ -1032,7 +1226,7 @@ void jackbridge_on_info_shutdown(jack_client_t* client, JackInfoShutdownCallback
#elif defined(JACKBRIDGE_DIRECT)
jack_on_info_shutdown(client, shutdown_callback, arg);
#else
- if (getBridgeInstance().on_info_shutdown_ptr != nullptr)
+ if (! JackBridge::usingRtAudio && getBridgeInstance().on_info_shutdown_ptr != nullptr)
{
# ifdef __WINE__
WineBridge::getInstance().set_info_shutdown(shutdown_callback);
@@ -1050,6 +1244,12 @@ bool jackbridge_set_process_callback(jack_client_t* client, JackProcessCallback
#elif defined(JACKBRIDGE_DIRECT)
return (jack_set_process_callback(client, process_callback, arg) == 0);
#else
+ if (JackBridge::usingRtAudio)
+ {
+ getBridgeInstance().rtAudioProcessCallback = process_callback;
+ getBridgeInstance().rtAudioProcessCallbackArg = arg;
+ return true;
+ }
if (getBridgeInstance().set_process_callback_ptr != nullptr)
{
# ifdef __WINE__
@@ -1069,7 +1269,7 @@ bool jackbridge_set_freewheel_callback(jack_client_t* client, JackFreewheelCallb
#elif defined(JACKBRIDGE_DIRECT)
return (jack_set_freewheel_callback(client, freewheel_callback, arg) == 0);
#else
- if (getBridgeInstance().set_freewheel_callback_ptr != nullptr)
+ if (! JackBridge::usingRtAudio && getBridgeInstance().set_freewheel_callback_ptr != nullptr)
{
# ifdef __WINE__
WineBridge::getInstance().set_freewheel(freewheel_callback);
@@ -1088,7 +1288,7 @@ bool jackbridge_set_buffer_size_callback(jack_client_t* client, JackBufferSizeCa
#elif defined(JACKBRIDGE_DIRECT)
return (jack_set_buffer_size_callback(client, bufsize_callback, arg) == 0);
#else
- if (getBridgeInstance().set_buffer_size_callback_ptr != nullptr)
+ if (! JackBridge::usingRtAudio && getBridgeInstance().set_buffer_size_callback_ptr != nullptr)
{
# ifdef __WINE__
WineBridge::getInstance().set_bufsize(bufsize_callback);
@@ -1107,7 +1307,7 @@ bool jackbridge_set_sample_rate_callback(jack_client_t* client, JackSampleRateCa
#elif defined(JACKBRIDGE_DIRECT)
return (jack_set_sample_rate_callback(client, srate_callback, arg) == 0);
#else
- if (getBridgeInstance().set_sample_rate_callback_ptr != nullptr)
+ if (! JackBridge::usingRtAudio && getBridgeInstance().set_sample_rate_callback_ptr != nullptr)
{
# ifdef __WINE__
WineBridge::getInstance().set_srate(srate_callback);
@@ -1126,7 +1326,7 @@ bool jackbridge_set_client_registration_callback(jack_client_t* client, JackClie
#elif defined(JACKBRIDGE_DIRECT)
return (jack_set_client_registration_callback(client, registration_callback, arg) == 0);
#else
- if (getBridgeInstance().set_client_registration_callback_ptr != nullptr)
+ if (! JackBridge::usingRtAudio && getBridgeInstance().set_client_registration_callback_ptr != nullptr)
{
# ifdef __WINE__
WineBridge::getInstance().set_client_reg(registration_callback);
@@ -1145,7 +1345,7 @@ bool jackbridge_set_port_registration_callback(jack_client_t* client, JackPortRe
#elif defined(JACKBRIDGE_DIRECT)
return (jack_set_port_registration_callback(client, registration_callback, arg) == 0);
#else
- if (getBridgeInstance().set_port_registration_callback_ptr != nullptr)
+ if (! JackBridge::usingRtAudio && getBridgeInstance().set_port_registration_callback_ptr != nullptr)
{
# ifdef __WINE__
WineBridge::getInstance().set_port_reg(registration_callback);
@@ -1164,7 +1364,7 @@ bool jackbridge_set_port_rename_callback(jack_client_t* client, JackPortRenameCa
#elif defined(JACKBRIDGE_DIRECT)
return (jack_set_port_rename_callback(client, rename_callback, arg) == 0);
#else
- if (getBridgeInstance().set_port_rename_callback_ptr != nullptr)
+ if (! JackBridge::usingRtAudio && getBridgeInstance().set_port_rename_callback_ptr != nullptr)
{
# ifdef __WINE__
WineBridge::getInstance().set_port_rename(rename_callback);
@@ -1183,7 +1383,7 @@ bool jackbridge_set_port_connect_callback(jack_client_t* client, JackPortConnect
#elif defined(JACKBRIDGE_DIRECT)
return (jack_set_port_connect_callback(client, connect_callback, arg) == 0);
#else
- if (getBridgeInstance().set_port_connect_callback_ptr != nullptr)
+ if (! JackBridge::usingRtAudio && getBridgeInstance().set_port_connect_callback_ptr != nullptr)
{
# ifdef __WINE__
WineBridge::getInstance().set_port_conn(connect_callback);
@@ -1202,7 +1402,7 @@ bool jackbridge_set_graph_order_callback(jack_client_t* client, JackGraphOrderCa
#elif defined(JACKBRIDGE_DIRECT)
return (jack_set_graph_order_callback(client, graph_callback, arg) == 0);
#else
- if (getBridgeInstance().set_graph_order_callback_ptr != nullptr)
+ if (! JackBridge::usingRtAudio && getBridgeInstance().set_graph_order_callback_ptr != nullptr)
{
# ifdef __WINE__
WineBridge::getInstance().set_graph_order(graph_callback);
@@ -1221,7 +1421,7 @@ bool jackbridge_set_xrun_callback(jack_client_t* client, JackXRunCallback xrun_c
#elif defined(JACKBRIDGE_DIRECT)
return (jack_set_xrun_callback(client, xrun_callback, arg) == 0);
#else
- if (getBridgeInstance().set_xrun_callback_ptr != nullptr)
+ if (! JackBridge::usingRtAudio && getBridgeInstance().set_xrun_callback_ptr != nullptr)
{
# ifdef __WINE__
WineBridge::getInstance().set_xrun(xrun_callback);
@@ -1240,7 +1440,7 @@ bool jackbridge_set_latency_callback(jack_client_t* client, JackLatencyCallback
#elif defined(JACKBRIDGE_DIRECT)
return (jack_set_latency_callback(client, latency_callback, arg) == 0);
#else
- if (getBridgeInstance().set_latency_callback_ptr != nullptr)
+ if (! JackBridge::usingRtAudio && getBridgeInstance().set_latency_callback_ptr != nullptr)
{
# ifdef __WINE__
WineBridge::getInstance().set_latency(latency_callback);
@@ -1261,8 +1461,9 @@ bool jackbridge_set_freewheel(jack_client_t* client, bool onoff)
#elif defined(JACKBRIDGE_DIRECT)
return jack_set_freewheel(client, onoff);
#else
- if (getBridgeInstance().set_freewheel_ptr != nullptr)
- return getBridgeInstance().set_freewheel_ptr(client, onoff);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().set_freewheel_ptr != nullptr)
+ return getBridgeInstance().set_freewheel_ptr(client, onoff);
#endif
return false;
}
@@ -1273,8 +1474,9 @@ bool jackbridge_set_buffer_size(jack_client_t* client, jack_nframes_t nframes)
#elif defined(JACKBRIDGE_DIRECT)
return jack_set_buffer_size(client, nframes);
#else
- if (getBridgeInstance().set_buffer_size_ptr != nullptr)
- return getBridgeInstance().set_buffer_size_ptr(client, nframes);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().set_buffer_size_ptr != nullptr)
+ return getBridgeInstance().set_buffer_size_ptr(client, nframes);
#endif
return false;
}
@@ -1287,6 +1489,8 @@ jack_nframes_t jackbridge_get_sample_rate(jack_client_t* client)
#elif defined(JACKBRIDGE_DIRECT)
return jack_get_sample_rate(client);
#else
+ if (JackBridge::usingRtAudio)
+ return getBridgeInstance().getRtAudioSampleRate();
if (getBridgeInstance().get_sample_rate_ptr != nullptr)
return getBridgeInstance().get_sample_rate_ptr(client);
#endif
@@ -1299,6 +1503,8 @@ jack_nframes_t jackbridge_get_buffer_size(jack_client_t* client)
#elif defined(JACKBRIDGE_DIRECT)
return jack_get_buffer_size(client);
#else
+ if (JackBridge::usingRtAudio)
+ return getBridgeInstance().getRtAudioBufferSize();
if (getBridgeInstance().get_buffer_size_ptr != nullptr)
return getBridgeInstance().get_buffer_size_ptr(client);
#endif
@@ -1311,8 +1517,9 @@ float jackbridge_cpu_load(jack_client_t* client)
#elif defined(JACKBRIDGE_DIRECT)
return jack_cpu_load(client);
#else
- if (getBridgeInstance().cpu_load_ptr != nullptr)
- return getBridgeInstance().cpu_load_ptr(client);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().cpu_load_ptr != nullptr)
+ return getBridgeInstance().cpu_load_ptr(client);
#endif
return 0.0f;
}
@@ -1325,7 +1532,14 @@ jack_port_t* jackbridge_port_register(jack_client_t* client, const char* port_na
#elif defined(JACKBRIDGE_DIRECT)
return jack_port_register(client, port_name, port_type, flags, buffer_size);
#else
- if (getBridgeInstance().port_register_ptr != nullptr)
+ if (JackBridge::usingRtAudio)
+ {
+ if (std::strcmp(port_type, JACK_DEFAULT_AUDIO_TYPE) == 0)
+ return getBridgeInstance().addRtAudioPort(true, flags & JackPortIsInput);
+ if (std::strcmp(port_type, JACK_DEFAULT_MIDI_TYPE) == 0)
+ return getBridgeInstance().addRtAudioPort(false, flags & JackPortIsInput);
+ }
+ else if (getBridgeInstance().port_register_ptr != nullptr)
return getBridgeInstance().port_register_ptr(client, port_name, port_type,
static_cast<ulong>(flags),
static_cast<ulong>(buffer_size));
@@ -1339,8 +1553,9 @@ bool jackbridge_port_unregister(jack_client_t* client, jack_port_t* port)
#elif defined(JACKBRIDGE_DIRECT)
return (jack_port_unregister(client, port) == 0);
#else
- if (getBridgeInstance().port_unregister_ptr != nullptr)
- return (getBridgeInstance().port_unregister_ptr(client, port) == 0);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().port_unregister_ptr != nullptr)
+ return (getBridgeInstance().port_unregister_ptr(client, port) == 0);
#endif
return false;
}
@@ -1351,6 +1566,8 @@ void* jackbridge_port_get_buffer(jack_port_t* port, jack_nframes_t nframes)
#elif defined(JACKBRIDGE_DIRECT)
return jack_port_get_buffer(port, nframes);
#else
+ if (JackBridge::usingRtAudio)
+ return getBridgeInstance().getRtAudioPortBuffer(port);
if (getBridgeInstance().port_get_buffer_ptr != nullptr)
return getBridgeInstance().port_get_buffer_ptr(port, nframes);
#endif
@@ -1365,8 +1582,9 @@ const char* jackbridge_port_name(const jack_port_t* port)
#elif defined(JACKBRIDGE_DIRECT)
return jack_port_name(port);
#else
- if (getBridgeInstance().port_name_ptr != nullptr)
- return getBridgeInstance().port_name_ptr(port);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().port_name_ptr != nullptr)
+ return getBridgeInstance().port_name_ptr(port);
#endif
return nullptr;
}
@@ -1377,8 +1595,9 @@ jack_uuid_t jackbridge_port_uuid(const jack_port_t* port)
#elif defined(JACKBRIDGE_DIRECT)
return jack_port_uuid(port);
#else
- if (getBridgeInstance().port_uuid_ptr != nullptr)
- return getBridgeInstance().port_uuid_ptr(port);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().port_uuid_ptr != nullptr)
+ return getBridgeInstance().port_uuid_ptr(port);
#endif
return 0;
}
@@ -1389,8 +1608,9 @@ const char* jackbridge_port_short_name(const jack_port_t* port)
#elif defined(JACKBRIDGE_DIRECT)
return jack_port_short_name(port);
#else
- if (getBridgeInstance().port_short_name_ptr != nullptr)
- return getBridgeInstance().port_short_name_ptr(port);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().port_short_name_ptr != nullptr)
+ return getBridgeInstance().port_short_name_ptr(port);
#endif
return nullptr;
}
@@ -1401,8 +1621,9 @@ int jackbridge_port_flags(const jack_port_t* port)
#elif defined(JACKBRIDGE_DIRECT)
return jack_port_flags(port);
#else
- if (getBridgeInstance().port_flags_ptr != nullptr)
- return getBridgeInstance().port_flags_ptr(port);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().port_flags_ptr != nullptr)
+ return getBridgeInstance().port_flags_ptr(port);
#endif
return 0x0;
}
@@ -1413,8 +1634,9 @@ const char* jackbridge_port_type(const jack_port_t* port)
#elif defined(JACKBRIDGE_DIRECT)
return jack_port_type(port);
#else
- if (getBridgeInstance().port_type_ptr != nullptr)
- return getBridgeInstance().port_type_ptr(port);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().port_type_ptr != nullptr)
+ return getBridgeInstance().port_type_ptr(port);
#endif
return nullptr;
}
@@ -1425,8 +1647,9 @@ bool jackbridge_port_is_mine(const jack_client_t* client, const jack_port_t* por
#elif defined(JACKBRIDGE_DIRECT)
return jack_port_is_mine(client, port);
#else
- if (getBridgeInstance().port_is_mine_ptr != nullptr)
- return getBridgeInstance().port_is_mine_ptr(client, port);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().port_is_mine_ptr != nullptr)
+ return getBridgeInstance().port_is_mine_ptr(client, port);
#endif
return false;
}
@@ -1437,8 +1660,9 @@ int jackbridge_port_connected(const jack_port_t* port)
#elif defined(JACKBRIDGE_DIRECT)
return jack_port_connected(port);
#else
- if (getBridgeInstance().port_connected_ptr != nullptr)
- return getBridgeInstance().port_connected_ptr(port);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().port_connected_ptr != nullptr)
+ return getBridgeInstance().port_connected_ptr(port);
#endif
return 0;
}
@@ -1449,8 +1673,9 @@ bool jackbridge_port_connected_to(const jack_port_t* port, const char* port_name
#elif defined(JACKBRIDGE_DIRECT)
return jack_port_connected_to(port, port_name);
#else
- if (getBridgeInstance().port_connected_to_ptr != nullptr)
- return getBridgeInstance().port_connected_to_ptr(port, port_name);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().port_connected_to_ptr != nullptr)
+ return getBridgeInstance().port_connected_to_ptr(port, port_name);
#endif
return false;
}
@@ -1461,8 +1686,9 @@ const char** jackbridge_port_get_connections(const jack_port_t* port)
#elif defined(JACKBRIDGE_DIRECT)
return jack_port_get_connections(port);
#else
- if (getBridgeInstance().port_get_connections_ptr != nullptr)
- return getBridgeInstance().port_get_connections_ptr(port);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().port_get_connections_ptr != nullptr)
+ return getBridgeInstance().port_get_connections_ptr(port);
#endif
return nullptr;
}
@@ -1473,8 +1699,9 @@ const char** jackbridge_port_get_all_connections(const jack_client_t* client, co
#elif defined(JACKBRIDGE_DIRECT)
return jack_port_get_all_connections(client, port);
#else
- if (getBridgeInstance().port_get_all_connections_ptr != nullptr)
- return getBridgeInstance().port_get_all_connections_ptr(client, port);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().port_get_all_connections_ptr != nullptr)
+ return getBridgeInstance().port_get_all_connections_ptr(client, port);
#endif
return nullptr;
}
@@ -1487,6 +1714,8 @@ bool jackbridge_port_rename(jack_client_t* client, jack_port_t* port, const char
#elif defined(JACKBRIDGE_DIRECT)
return (jack_port_rename(client, port, port_name) == 0);
#else
+ if (JackBridge::usingRtAudio)
+ return false;
// Try new API first
if (getBridgeInstance().port_rename_ptr != nullptr)
return (getBridgeInstance().port_rename_ptr(client, port, port_name) == 0);
@@ -1503,8 +1732,9 @@ bool jackbridge_port_set_alias(jack_port_t* port, const char* alias)
#elif defined(JACKBRIDGE_DIRECT)
return (jack_port_set_alias(port, alias) == 0);
#else
- if (getBridgeInstance().port_set_alias_ptr != nullptr)
- return (getBridgeInstance().port_set_alias_ptr(port, alias) == 0);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().port_set_alias_ptr != nullptr)
+ return (getBridgeInstance().port_set_alias_ptr(port, alias) == 0);
#endif
return false;
}
@@ -1515,8 +1745,9 @@ bool jackbridge_port_unset_alias(jack_port_t* port, const char* alias)
#elif defined(JACKBRIDGE_DIRECT)
return (jack_port_unset_alias(port, alias) == 0);
#else
- if (getBridgeInstance().port_unset_alias_ptr != nullptr)
- return (getBridgeInstance().port_unset_alias_ptr(port, alias) == 0);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().port_unset_alias_ptr != nullptr)
+ return (getBridgeInstance().port_unset_alias_ptr(port, alias) == 0);
#endif
return false;
}
@@ -1527,8 +1758,9 @@ int jackbridge_port_get_aliases(const jack_port_t* port, char* const aliases[2])
#elif defined(JACKBRIDGE_DIRECT)
return (jack_port_get_aliases(port, aliases) == 0);
#else
- if (getBridgeInstance().port_get_aliases_ptr != nullptr)
- return getBridgeInstance().port_get_aliases_ptr(port, aliases);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().port_get_aliases_ptr != nullptr)
+ return getBridgeInstance().port_get_aliases_ptr(port, aliases);
#endif
return 0;
}
@@ -1541,8 +1773,9 @@ bool jackbridge_port_request_monitor(jack_port_t* port, bool onoff)
#elif defined(JACKBRIDGE_DIRECT)
return (jack_port_request_monitor(port, onoff) == 0);
#else
- if (getBridgeInstance().port_request_monitor_ptr != nullptr)
- return (getBridgeInstance().port_request_monitor_ptr(port, onoff) == 0);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().port_request_monitor_ptr != nullptr)
+ return (getBridgeInstance().port_request_monitor_ptr(port, onoff) == 0);
#endif
return false;
}
@@ -1553,8 +1786,9 @@ bool jackbridge_port_request_monitor_by_name(jack_client_t* client, const char*
#elif defined(JACKBRIDGE_DIRECT)
return (jack_port_request_monitor_by_name(client, port_name, onoff) == 0);
#else
- if (getBridgeInstance().port_request_monitor_by_name_ptr != nullptr)
- return (getBridgeInstance().port_request_monitor_by_name_ptr(client, port_name, onoff) == 0);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().port_request_monitor_by_name_ptr != nullptr)
+ return (getBridgeInstance().port_request_monitor_by_name_ptr(client, port_name, onoff) == 0);
#endif
return false;
}
@@ -1565,8 +1799,9 @@ bool jackbridge_port_ensure_monitor(jack_port_t* port, bool onoff)
#elif defined(JACKBRIDGE_DIRECT)
return (jack_port_ensure_monitor(port, onoff) == 0);
#else
- if (getBridgeInstance().port_ensure_monitor_ptr != nullptr)
- return (getBridgeInstance().port_ensure_monitor_ptr(port, onoff) == 0);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().port_ensure_monitor_ptr != nullptr)
+ return (getBridgeInstance().port_ensure_monitor_ptr(port, onoff) == 0);
#endif
return false;
}
@@ -1577,8 +1812,9 @@ bool jackbridge_port_monitoring_input(jack_port_t* port)
#elif defined(JACKBRIDGE_DIRECT)
return jack_port_monitoring_input(port);
#else
- if (getBridgeInstance().port_monitoring_input_ptr != nullptr)
- return getBridgeInstance().port_monitoring_input_ptr(port);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().port_monitoring_input_ptr != nullptr)
+ return getBridgeInstance().port_monitoring_input_ptr(port);
#endif
return false;
}
@@ -1591,7 +1827,7 @@ bool jackbridge_connect(jack_client_t* client, const char* source_port, const ch
#elif defined(JACKBRIDGE_DIRECT)
return (jack_connect(client, source_port, destination_port) == 0);
#else
- if (getBridgeInstance().connect_ptr != nullptr)
+ if (! JackBridge::usingRtAudio && getBridgeInstance().connect_ptr != nullptr)
{
const int ret = getBridgeInstance().connect_ptr(client, source_port, destination_port);
return ret == 0 || ret == EEXIST;
@@ -1606,8 +1842,9 @@ bool jackbridge_disconnect(jack_client_t* client, const char* source_port, const
#elif defined(JACKBRIDGE_DIRECT)
return (jack_disconnect(client, source_port, destination_port) == 0);
#else
- if (getBridgeInstance().disconnect_ptr != nullptr)
- return (getBridgeInstance().disconnect_ptr(client, source_port, destination_port) == 0);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().disconnect_ptr != nullptr)
+ return (getBridgeInstance().disconnect_ptr(client, source_port, destination_port) == 0);
#endif
return false;
}
@@ -1618,8 +1855,9 @@ bool jackbridge_port_disconnect(jack_client_t* client, jack_port_t* port)
#elif defined(JACKBRIDGE_DIRECT)
return (jack_port_disconnect(client, port) == 0);
#else
- if (getBridgeInstance().port_disconnect_ptr != nullptr)
- return (getBridgeInstance().port_disconnect_ptr(client, port) == 0);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().port_disconnect_ptr != nullptr)
+ return (getBridgeInstance().port_disconnect_ptr(client, port) == 0);
#endif
return false;
}
@@ -1632,8 +1870,9 @@ int jackbridge_port_name_size()
#elif defined(JACKBRIDGE_DIRECT)
return jack_port_name_size();
#else
- if (getBridgeInstance().port_name_size_ptr != nullptr)
- return getBridgeInstance().port_name_size_ptr();
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().port_name_size_ptr != nullptr)
+ return getBridgeInstance().port_name_size_ptr();
#endif
return 256;
}
@@ -1644,8 +1883,9 @@ int jackbridge_port_type_size()
#elif defined(JACKBRIDGE_DIRECT)
return jack_port_type_size();
#else
- if (getBridgeInstance().port_type_size_ptr != nullptr)
- return getBridgeInstance().port_type_size_ptr();
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().port_type_size_ptr != nullptr)
+ return getBridgeInstance().port_type_size_ptr();
#endif
return 32;
}
@@ -1656,8 +1896,9 @@ uint32_t jackbridge_port_type_get_buffer_size(jack_client_t* client, const char*
#elif defined(JACKBRIDGE_DIRECT)
return static_cast<uint32_t>(jack_port_type_get_buffer_size(client, port_type));
#else
- if (getBridgeInstance().port_type_get_buffer_size_ptr != nullptr)
- return static_cast<uint32_t>(getBridgeInstance().port_type_get_buffer_size_ptr(client, port_type));
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().port_type_get_buffer_size_ptr != nullptr)
+ return static_cast<uint32_t>(getBridgeInstance().port_type_get_buffer_size_ptr(client, port_type));
#endif
return 0;
}
@@ -1670,10 +1911,11 @@ void jackbridge_port_get_latency_range(jack_port_t* port, uint32_t mode, jack_la
#elif defined(JACKBRIDGE_DIRECT)
return jack_port_get_latency_range(port, static_cast<jack_latency_callback_mode_t>(mode), range);
#else
- if (getBridgeInstance().port_get_latency_range_ptr != nullptr)
- return getBridgeInstance().port_get_latency_range_ptr(port,
- static_cast<jack_latency_callback_mode_t>(mode),
- range);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().port_get_latency_range_ptr != nullptr)
+ return getBridgeInstance().port_get_latency_range_ptr(port,
+ static_cast<jack_latency_callback_mode_t>(mode),
+ range);
#endif
range->min = 0;
range->max = 0;
@@ -1685,10 +1927,11 @@ void jackbridge_port_set_latency_range(jack_port_t* port, uint32_t mode, jack_la
#elif defined(JACKBRIDGE_DIRECT)
jack_port_set_latency_range(port, static_cast<jack_latency_callback_mode_t>(mode), range);
#else
- if (getBridgeInstance().port_set_latency_range_ptr != nullptr)
- getBridgeInstance().port_set_latency_range_ptr(port,
- static_cast<jack_latency_callback_mode_t>(mode),
- range);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().port_set_latency_range_ptr != nullptr)
+ getBridgeInstance().port_set_latency_range_ptr(port,
+ static_cast<jack_latency_callback_mode_t>(mode),
+ range);
#endif
}
@@ -1698,8 +1941,9 @@ bool jackbridge_recompute_total_latencies(jack_client_t* client)
#elif defined(JACKBRIDGE_DIRECT)
return (jack_recompute_total_latencies(client) == 0);
#else
- if (getBridgeInstance().recompute_total_latencies_ptr != nullptr)
- return (getBridgeInstance().recompute_total_latencies_ptr(client) == 0);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().recompute_total_latencies_ptr != nullptr)
+ return (getBridgeInstance().recompute_total_latencies_ptr(client) == 0);
#endif
return false;
}
@@ -1712,9 +1956,10 @@ const char** jackbridge_get_ports(jack_client_t* client, const char* port_name_p
#elif defined(JACKBRIDGE_DIRECT)
return jack_get_ports(client, port_name_pattern, type_name_pattern, flags);
#else
- if (getBridgeInstance().get_ports_ptr != nullptr)
- return getBridgeInstance().get_ports_ptr(client, port_name_pattern, type_name_pattern,
- static_cast<ulong>(flags));
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().get_ports_ptr != nullptr)
+ return getBridgeInstance().get_ports_ptr(client, port_name_pattern, type_name_pattern,
+ static_cast<ulong>(flags));
#endif
return nullptr;
}
@@ -1725,8 +1970,9 @@ jack_port_t* jackbridge_port_by_name(jack_client_t* client, const char* port_nam
#elif defined(JACKBRIDGE_DIRECT)
return jack_port_by_name(client, port_name);
#else
- if (getBridgeInstance().port_by_name_ptr != nullptr)
- return getBridgeInstance().port_by_name_ptr(client, port_name);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().port_by_name_ptr != nullptr)
+ return getBridgeInstance().port_by_name_ptr(client, port_name);
#endif
return nullptr;
}
@@ -1737,8 +1983,9 @@ jack_port_t* jackbridge_port_by_id(jack_client_t* client, jack_port_id_t port_id
#elif defined(JACKBRIDGE_DIRECT)
return jack_port_by_id(client, port_id);
#else
- if (getBridgeInstance().port_by_id_ptr != nullptr)
- return getBridgeInstance().port_by_id_ptr(client, port_id);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().port_by_id_ptr != nullptr)
+ return getBridgeInstance().port_by_id_ptr(client, port_id);
#endif
return nullptr;
}
@@ -1751,8 +1998,9 @@ void jackbridge_free(void* ptr)
#elif defined(JACKBRIDGE_DIRECT)
return jack_free(ptr);
#else
- if (getBridgeInstance().free_ptr != nullptr)
- return getBridgeInstance().free_ptr(ptr);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().free_ptr != nullptr)
+ return getBridgeInstance().free_ptr(ptr);
// just in case
std::free(ptr);
@@ -1767,8 +2015,9 @@ uint32_t jackbridge_midi_get_event_count(void* port_buffer)
#elif defined(JACKBRIDGE_DIRECT)
return jack_midi_get_event_count(port_buffer);
#else
- if (getBridgeInstance().midi_get_event_count_ptr != nullptr)
- return getBridgeInstance().midi_get_event_count_ptr(port_buffer);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().midi_get_event_count_ptr != nullptr)
+ return getBridgeInstance().midi_get_event_count_ptr(port_buffer);
#endif
return 0;
}
@@ -1779,8 +2028,9 @@ bool jackbridge_midi_event_get(jack_midi_event_t* event, void* port_buffer, uint
#elif defined(JACKBRIDGE_DIRECT)
return (jack_midi_event_get(event, port_buffer, event_index) == 0);
#else
- if (getBridgeInstance().midi_event_get_ptr != nullptr)
- return (getBridgeInstance().midi_event_get_ptr(event, port_buffer, event_index) == 0);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().midi_event_get_ptr != nullptr)
+ return (getBridgeInstance().midi_event_get_ptr(event, port_buffer, event_index) == 0);
#endif
return false;
}
@@ -1791,8 +2041,9 @@ void jackbridge_midi_clear_buffer(void* port_buffer)
#elif defined(JACKBRIDGE_DIRECT)
jack_midi_clear_buffer(port_buffer);
#else
- if (getBridgeInstance().midi_clear_buffer_ptr != nullptr)
- getBridgeInstance().midi_clear_buffer_ptr(port_buffer);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().midi_clear_buffer_ptr != nullptr)
+ getBridgeInstance().midi_clear_buffer_ptr(port_buffer);
#endif
}
@@ -1802,8 +2053,9 @@ bool jackbridge_midi_event_write(void* port_buffer, jack_nframes_t time, const j
#elif defined(JACKBRIDGE_DIRECT)
return (jack_midi_event_write(port_buffer, time, data, data_size) == 0);
#else
- if (getBridgeInstance().midi_event_write_ptr != nullptr)
- return (getBridgeInstance().midi_event_write_ptr(port_buffer, time, data, data_size) == 0);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().midi_event_write_ptr != nullptr)
+ return (getBridgeInstance().midi_event_write_ptr(port_buffer, time, data, data_size) == 0);
#endif
return false;
}
@@ -1814,8 +2066,9 @@ jack_midi_data_t* jackbridge_midi_event_reserve(void* port_buffer, jack_nframes_
#elif defined(JACKBRIDGE_DIRECT)
return jack_midi_event_reserve(port_buffer, time, data_size);
#else
- if (getBridgeInstance().midi_event_reserve_ptr != nullptr)
- return getBridgeInstance().midi_event_reserve_ptr(port_buffer, time, data_size);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().midi_event_reserve_ptr != nullptr)
+ return getBridgeInstance().midi_event_reserve_ptr(port_buffer, time, data_size);
#endif
return nullptr;
}
@@ -1828,8 +2081,9 @@ bool jackbridge_release_timebase(jack_client_t* client)
#elif defined(JACKBRIDGE_DIRECT)
return (jack_release_timebase(client) == 0);
#else
- if (getBridgeInstance().release_timebase_ptr != nullptr)
- return (getBridgeInstance().release_timebase_ptr(client) == 0);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().release_timebase_ptr != nullptr)
+ return (getBridgeInstance().release_timebase_ptr(client) == 0);
#endif
return false;
}
@@ -1840,7 +2094,7 @@ bool jackbridge_set_sync_callback(jack_client_t* client, JackSyncCallback sync_c
#elif defined(JACKBRIDGE_DIRECT)
return (jack_set_sync_callback(client, sync_callback, arg) == 0);
#else
- if (getBridgeInstance().set_sync_callback_ptr != nullptr)
+ if (! JackBridge::usingRtAudio && getBridgeInstance().set_sync_callback_ptr != nullptr)
{
# ifdef __WINE__
WineBridge::getInstance().set_sync(sync_callback);
@@ -1859,8 +2113,9 @@ bool jackbridge_set_sync_timeout(jack_client_t* client, jack_time_t timeout)
#elif defined(JACKBRIDGE_DIRECT)
return (jack_set_sync_timeout(client, timeout) == 0);
#else
- if (getBridgeInstance().set_sync_timeout_ptr != nullptr)
- return (getBridgeInstance().set_sync_timeout_ptr(client, timeout) == 0);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().set_sync_timeout_ptr != nullptr)
+ return (getBridgeInstance().set_sync_timeout_ptr(client, timeout) == 0);
#endif
return false;
}
@@ -1871,7 +2126,7 @@ bool jackbridge_set_timebase_callback(jack_client_t* client, bool conditional, J
#elif defined(JACKBRIDGE_DIRECT)
return (jack_set_timebase_callback(client, conditional, timebase_callback, arg) == 0);
#else
- if (getBridgeInstance().set_timebase_callback_ptr != nullptr)
+ if (! JackBridge::usingRtAudio && getBridgeInstance().set_timebase_callback_ptr != nullptr)
{
# ifdef __WINE__
WineBridge::getInstance().set_timebase(timebase_callback);
@@ -1890,8 +2145,9 @@ bool jackbridge_transport_locate(jack_client_t* client, jack_nframes_t frame)
#elif defined(JACKBRIDGE_DIRECT)
return (jack_transport_locate(client, frame) == 0);
#else
- if (getBridgeInstance().transport_locate_ptr != nullptr)
- return (getBridgeInstance().transport_locate_ptr(client, frame) == 0);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().transport_locate_ptr != nullptr)
+ return (getBridgeInstance().transport_locate_ptr(client, frame) == 0);
#endif
return false;
}
@@ -1902,8 +2158,9 @@ uint32_t jackbridge_transport_query(const jack_client_t* client, jack_position_t
#elif defined(JACKBRIDGE_DIRECT)
return jack_transport_query(client, pos);
#else
- if (getBridgeInstance().transport_query_ptr != nullptr)
- return getBridgeInstance().transport_query_ptr(client, pos);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().transport_query_ptr != nullptr)
+ return getBridgeInstance().transport_query_ptr(client, pos);
#endif
if (pos != nullptr)
{
@@ -1920,8 +2177,9 @@ jack_nframes_t jackbridge_get_current_transport_frame(const jack_client_t* clien
#elif defined(JACKBRIDGE_DIRECT)
return jack_get_current_transport_frame(client);
#else
- if (getBridgeInstance().get_current_transport_frame_ptr != nullptr)
- return getBridgeInstance().get_current_transport_frame_ptr(client);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().get_current_transport_frame_ptr != nullptr)
+ return getBridgeInstance().get_current_transport_frame_ptr(client);
#endif
return 0;
}
@@ -1932,8 +2190,9 @@ bool jackbridge_transport_reposition(jack_client_t* client, const jack_position_
#elif defined(JACKBRIDGE_DIRECT)
return (jack_transport_reposition(client, pos) == 0);
#else
- if (getBridgeInstance().transport_reposition_ptr != nullptr)
- return (getBridgeInstance().transport_reposition_ptr(client, pos) == 0);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().transport_reposition_ptr != nullptr)
+ return (getBridgeInstance().transport_reposition_ptr(client, pos) == 0);
#endif
return false;
}
@@ -1944,8 +2203,9 @@ void jackbridge_transport_start(jack_client_t* client)
#elif defined(JACKBRIDGE_DIRECT)
jack_transport_start(client);
#else
- if (getBridgeInstance().transport_start_ptr != nullptr)
- getBridgeInstance().transport_start_ptr(client);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().transport_start_ptr != nullptr)
+ getBridgeInstance().transport_start_ptr(client);
#endif
}
@@ -1955,8 +2215,9 @@ void jackbridge_transport_stop(jack_client_t* client)
#elif defined(JACKBRIDGE_DIRECT)
jack_transport_stop(client);
#else
- if (getBridgeInstance().transport_stop_ptr != nullptr)
- getBridgeInstance().transport_stop_ptr(client);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().transport_stop_ptr != nullptr)
+ getBridgeInstance().transport_stop_ptr(client);
#endif
}
@@ -1968,8 +2229,9 @@ bool jackbridge_set_property(jack_client_t* client, jack_uuid_t subject, const c
#elif defined(JACKBRIDGE_DIRECT)
return (jack_set_property(client, subject, key, value, type) == 0);
#else
- if (getBridgeInstance().set_property_ptr != nullptr)
- return (getBridgeInstance().set_property_ptr(client, subject, key, value, type) == 0);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().set_property_ptr != nullptr)
+ return (getBridgeInstance().set_property_ptr(client, subject, key, value, type) == 0);
#endif
return false;
}
@@ -1980,8 +2242,9 @@ bool jackbridge_get_property(jack_uuid_t subject, const char* key, char** value,
#elif defined(JACKBRIDGE_DIRECT)
return (jack_get_property(subject, key, value, type) == 0);
#else
- if (getBridgeInstance().get_property_ptr != nullptr)
- return (getBridgeInstance().get_property_ptr(subject, key, value, type) == 0);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().get_property_ptr != nullptr)
+ return (getBridgeInstance().get_property_ptr(subject, key, value, type) == 0);
#endif
return false;
}
@@ -1992,8 +2255,9 @@ void jackbridge_free_description(jack_description_t* desc, bool free_description
#elif defined(JACKBRIDGE_DIRECT)
jack_free_description(desc, free_description_itself);
#else
- if (getBridgeInstance().free_description_ptr != nullptr)
- getBridgeInstance().free_description_ptr(desc, free_description_itself);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().free_description_ptr != nullptr)
+ getBridgeInstance().free_description_ptr(desc, free_description_itself);
#endif
}
@@ -2003,8 +2267,9 @@ bool jackbridge_get_properties(jack_uuid_t subject, jack_description_t* desc)
#elif defined(JACKBRIDGE_DIRECT)
return (jack_get_properties(subject, desc) == 0);
#else
- if (getBridgeInstance().get_properties_ptr != nullptr)
- return (getBridgeInstance().get_properties_ptr(subject, desc) == 0);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().get_properties_ptr != nullptr)
+ return (getBridgeInstance().get_properties_ptr(subject, desc) == 0);
#endif
return false;
}
@@ -2015,8 +2280,9 @@ bool jackbridge_get_all_properties(jack_description_t** descs)
#elif defined(JACKBRIDGE_DIRECT)
return (jack_get_all_properties(descs) == 0);
#else
- if (getBridgeInstance().get_all_properties_ptr != nullptr)
- return (getBridgeInstance().get_all_properties_ptr(descs) == 0);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().get_all_properties_ptr != nullptr)
+ return (getBridgeInstance().get_all_properties_ptr(descs) == 0);
#endif
return false;
}
@@ -2027,8 +2293,9 @@ bool jackbridge_remove_property(jack_client_t* client, jack_uuid_t subject, cons
#elif defined(JACKBRIDGE_DIRECT)
return (jack_remove_property(client, subject, key) == 0);
#else
- if (getBridgeInstance().remove_property_ptr != nullptr)
- return (getBridgeInstance().remove_property_ptr(client, subject, key) == 0);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().remove_property_ptr != nullptr)
+ return (getBridgeInstance().remove_property_ptr(client, subject, key) == 0);
#endif
return false;
}
@@ -2039,8 +2306,9 @@ int jackbridge_remove_properties(jack_client_t* client, jack_uuid_t subject)
#elif defined(JACKBRIDGE_DIRECT)
return jack_remove_properties(client, subject);
#else
- if (getBridgeInstance().remove_properties_ptr != nullptr)
- return getBridgeInstance().remove_properties_ptr(client, subject);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().remove_properties_ptr != nullptr)
+ return getBridgeInstance().remove_properties_ptr(client, subject);
#endif
return 0;
}
@@ -2051,8 +2319,9 @@ bool jackbridge_remove_all_properties(jack_client_t* client)
#elif defined(JACKBRIDGE_DIRECT)
return (jack_remove_all_properties(client) == 0);
#else
- if (getBridgeInstance().remove_all_properties_ptr != nullptr)
- return (getBridgeInstance().remove_all_properties_ptr(client) == 0);
+ if (! JackBridge::usingRtAudio)
+ if (getBridgeInstance().remove_all_properties_ptr != nullptr)
+ return (getBridgeInstance().remove_all_properties_ptr(client) == 0);
#endif
return false;
}
@@ -2063,7 +2332,7 @@ bool jackbridge_set_property_change_callback(jack_client_t* client, JackProperty
#elif defined(JACKBRIDGE_DIRECT)
return (jack_set_property_change_callback(client, callback, arg) == 0);
#else
- if (getBridgeInstance().set_property_change_callback_ptr != nullptr)
+ if (! JackBridge::usingRtAudio && getBridgeInstance().set_property_change_callback_ptr != nullptr)
{
# ifdef __WINE__
WineBridge::getInstance().set_prop_change(callback);