Patch to allow compilation with RtAudio-5.2
authorIOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org>
Fri, 17 Dec 2021 09:40:12 +0000 (10:40 +0100)
committerIOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org>
Fri, 17 Dec 2021 09:40:12 +0000 (10:40 +0100)
debian/patches/RtAudio52.patch [new file with mode: 0644]
debian/patches/series

diff --git a/debian/patches/RtAudio52.patch b/debian/patches/RtAudio52.patch
new file mode 100644 (file)
index 0000000..215b85e
--- /dev/null
@@ -0,0 +1,168 @@
+From: =?utf-8?q?IOhannes_m_zm=C3=B6lnig?= <zmoelnig@iem.at>
+Date: Fri, 17 Dec 2021 10:35:28 +0100
+Subject: RtAudio-5.2.0 support
+
+Upstream vendored in a RtAudio-6 git snapshot and called it 5.2.0
+---
+ src/core/kernelAudio.cpp | 107 ++++++++++++++++++++++++++---------------------
+ 1 file changed, 60 insertions(+), 47 deletions(-)
+
+diff --git a/src/core/kernelAudio.cpp b/src/core/kernelAudio.cpp
+index 4a52d88..df7ae5b 100644
+--- a/src/core/kernelAudio.cpp
++++ b/src/core/kernelAudio.cpp
+@@ -94,10 +94,6 @@ int KernelAudio::openDevice(const Conf::Data& conf)
+               return 0;
+       }
+-      m_rtAudio->setErrorCallback([](RtAudioErrorType type, const std::string& msg) {
+-              u::log::print("[KA] RtAudio error %d: %s\n", type, msg.c_str());
+-      });
+-
+       u::log::print("[KA] Opening device out=%d, in=%d, samplerate=%d\n",
+           conf.soundDeviceOut, conf.soundDeviceIn, conf.samplerate);
+@@ -158,33 +154,33 @@ int KernelAudio::openDevice(const Conf::Data& conf)
+ #endif
+-      m_callbackInfo = {
+-          /* kernelAudio      = */ this,
+-          /* ready            = */ true,
+-          /* withJack         = */ getAPI() == G_SYS_API_JACK,
+-          /* outBuf           = */ nullptr, // filled later on in audio callback
+-          /* inBuf            = */ nullptr, // filled later on in audio callback
+-          /* bufferSize       = */ 0,       // filled later on in audio callback
+-          /* channelsOutCount = */ m_channelsOutCount,
+-          /* channelsInCount  = */ m_channelsInCount};
+-
+-      RtAudioErrorType res = m_rtAudio->openStream(
+-          &outParams,                                     // output params
+-          conf.soundDeviceIn != -1 ? &inParams : nullptr, // input params if inDevice is selected
+-          RTAUDIO_FLOAT32,                                // audio format
+-          m_realSampleRate,                               // sample rate
+-          &m_realBufferSize,                              // buffer size in byte
+-          &audioCallback,                                 // audio callback
+-          &m_callbackInfo,                                // user data passed to callback
+-          &options);
+-
+-      if (res == RtAudioErrorType::RTAUDIO_NO_ERROR)
++      try
+       {
++              m_callbackInfo = {
++                  /* kernelAudio      = */ this,
++                  /* ready            = */ true,
++                  /* withJack         = */ getAPI() == G_SYS_API_JACK,
++                  /* outBuf           = */ nullptr, // filled later on in audio callback
++                  /* inBuf            = */ nullptr, // filled later on in audio callback
++                  /* bufferSize       = */ 0,       // filled later on in audio callback
++                  /* channelsOutCount = */ m_channelsOutCount,
++                  /* channelsInCount  = */ m_channelsInCount};
++
++              m_rtAudio->openStream(
++                  &outParams,                                     // output params
++                  conf.soundDeviceIn != -1 ? &inParams : nullptr, // input params if inDevice is selected
++                  RTAUDIO_FLOAT32,                                // audio format
++                  m_realSampleRate,                               // sample rate
++                  &m_realBufferSize,                              // buffer size in byte
++                  &audioCallback,                                 // audio callback
++                  &m_callbackInfo,                                // user data passed to callback
++                  &options);
+               m_ready = true;
+               return 1;
+       }
+-      else
++      catch (RtAudioError& e)
+       {
++              u::log::print("[KA] RtAudio init error: %s\n", e.getMessage());
+               closeDevice();
+               return 0;
+       }
+@@ -194,24 +190,33 @@ int KernelAudio::openDevice(const Conf::Data& conf)
+ int KernelAudio::startStream()
+ {
+-      if (m_rtAudio->startStream() == RtAudioErrorType::RTAUDIO_NO_ERROR)
++      try
+       {
+-              u::log::print("[KA] Start stream - latency = %lu\n", m_rtAudio->getStreamLatency());
++              m_rtAudio->startStream();
++              u::log::print("[KA] latency = %lu\n", m_rtAudio->getStreamLatency());
+               return 1;
+       }
+-      return 0;
++      catch (RtAudioError& e)
++      {
++              u::log::print("[KA] Start stream error: %s\n", e.getMessage());
++              return 0;
++      }
+ }
+ /* -------------------------------------------------------------------------- */
+ int KernelAudio::stopStream()
+ {
+-      if (m_rtAudio->stopStream() == RtAudioErrorType::RTAUDIO_NO_ERROR)
++      try
+       {
+-              u::log::print("[KA] Stop stream\n");
++              m_rtAudio->stopStream();
+               return 1;
+       }
+-      return 0;
++      catch (RtAudioError& /*e*/)
++      {
++              u::log::print("[KA] Stop stream error\n");
++              return 0;
++      }
+ }
+ /* -------------------------------------------------------------------------- */
+@@ -328,24 +333,32 @@ void KernelAudio::logCompiledAPIs()
+ m::KernelAudio::Device KernelAudio::fetchDevice(size_t deviceIndex) const
+ {
+-      RtAudio::DeviceInfo info = m_rtAudio->getDeviceInfo(deviceIndex);
++      try
++      {
++              RtAudio::DeviceInfo info = m_rtAudio->getDeviceInfo(deviceIndex);
+-      if (!info.probed)
++              if (!info.probed)
++              {
++                      u::log::print("[KA] Can't probe device %d\n", deviceIndex);
++                      return {deviceIndex};
++              }
++
++              return {
++                  deviceIndex,
++                  true,
++                  info.name,
++                  static_cast<int>(info.outputChannels),
++                  static_cast<int>(info.inputChannels),
++                  static_cast<int>(info.duplexChannels),
++                  info.isDefaultOutput,
++                  info.isDefaultInput,
++                  u::vector::cast<int>(info.sampleRates)};
++      }
++      catch (RtAudioError& e)
+       {
+-              u::log::print("[KA] Can't probe device %d\n", deviceIndex);
+-              return {deviceIndex};
++              u::log::print("[KA] Error fetching device %d: %s\n", deviceIndex, e.getMessage());
++              return {0};
+       }
+-
+-      return {
+-          deviceIndex,
+-          true,
+-          info.name,
+-          static_cast<int>(info.outputChannels),
+-          static_cast<int>(info.inputChannels),
+-          static_cast<int>(info.duplexChannels),
+-          info.isDefaultOutput,
+-          info.isDefaultInput,
+-          u::vector::cast<int>(info.sampleRates)};
+ }
+ /* -------------------------------------------------------------------------- */
index d26eddc872eedf4cc0d2fa0bad6ae6dd8e2f9fb1..f31c8b47d7bc656a867ceefbad236206e79d681e 100644 (file)
@@ -1,3 +1,4 @@
 02-geompp.patch
 03-system-rtaudio.patch
 04-system-json.patch
+RtAudio52.patch