Browse Source

Implemement MIDI output for RtAudio native audio fallback

Signed-off-by: falkTX <falktx@falktx.com>
pull/506/head
falkTX 6 months ago
parent
commit
da5be4446f
Signed by: falkTX <falktx@falktx.com> GPG Key ID: CDBAA37ABC74FBA0
3 changed files with 25 additions and 3 deletions
  1. +1
    -1
      distrho/src/jackbridge/JackBridge.cpp
  2. +23
    -1
      distrho/src/jackbridge/RtAudioBridge.hpp
  3. +1
    -1
      distrho/src/jackbridge/WebBridge.hpp

+ 1
- 1
distrho/src/jackbridge/JackBridge.cpp View File

@@ -951,7 +951,7 @@ jack_client_t* jackbridge_client_open(const char* client_name, uint32_t options,
return kValidClient;
delete nativeBridge;
#endif
#if defined(HAVE_RTAUDIO) && defined(RTAUDIO_API_TYPE)
nativeBridge = new RtAudioBridge;
if (nativeBridge->open(client_name))


+ 23
- 1
distrho/src/jackbridge/RtAudioBridge.hpp View File

@@ -33,7 +33,7 @@
# define RTAUDIO_API_TYPE WINDOWS_WASAPI
# define RTMIDI_API_TYPE WINDOWS_MM
#else
# if defined(HAVE_PULSEAUDIO)
# if defined(HAVE_PULSEAUDIO) && !defined(DPF_JACK_STANDALONE_SKIP_PULSEAUDIO_FALLBACK)
# define __LINUX_PULSE__
# define RTAUDIO_API_TYPE LINUX_PULSE
# elif defined(HAVE_ALSA)
@@ -392,6 +392,28 @@ struct RtAudioBridge : NativeBridge {
const ScopedDenormalDisable sdd;
self->jackProcessCallback(numFrames, self->jackProcessArg);

#if DISTRHO_PLUGIN_WANT_MIDI_OUTPUT
if (self->midiOutBuffer.isDataAvailableForReading())
{
static_assert(kMaxMIDIInputMessageSize + 1u == 4, "change code if bumping this value");
uint8_t data[4] = {};

while (self->midiOutBuffer.isDataAvailableForReading() &&
self->midiOutBuffer.readCustomData(data, ARRAY_SIZE(data)))
{
// offset not used in RtMidiOut
self->midiOutBuffer.readUInt();

for (std::vector<RtMidiOut>::iterator it = self->midiOuts.begin(), end = self->midiOuts.end(); it != end; ++it)
{
static_cast<RtMidiOut&>(*it).sendMessage(data + 1, data[0]);
}
}

self->midiOutBuffer.flush();
}
#endif

return 0;
}



+ 1
- 1
distrho/src/jackbridge/WebBridge.hpp View File

@@ -494,7 +494,7 @@ struct WebBridge : NativeBridge {
}, offset, bytes[0], bytes[1], bytes[2], bytes[3], timestamp);
}

self->midiOutBuffer.clearData();
self->midiOutBuffer.flush();
}
#endif
}


Loading…
Cancel
Save