diff --git a/source/backend/engine/CarlaEngineGraph.cpp b/source/backend/engine/CarlaEngineGraph.cpp index 3b37985a4..fed0d606a 100644 --- a/source/backend/engine/CarlaEngineGraph.cpp +++ b/source/backend/engine/CarlaEngineGraph.cpp @@ -173,6 +173,8 @@ void RackGraph::setBufferSize(const uint32_t bufferSize) noexcept if (audio.outBuf[0] != nullptr) { delete[] audio.outBuf[0]; audio.outBuf[0] = nullptr; } if (audio.outBuf[1] != nullptr) { delete[] audio.outBuf[1]; audio.outBuf[1] = nullptr; } + CARLA_SAFE_ASSERT_RETURN(bufferSize > 0,); + try { audio.inBufTmp[0] = new float[bufferSize]; audio.inBufTmp[1] = new float[bufferSize]; diff --git a/source/backend/engine/CarlaEngineNative.cpp b/source/backend/engine/CarlaEngineNative.cpp index 22dd6749a..e65b87ad2 100644 --- a/source/backend/engine/CarlaEngineNative.cpp +++ b/source/backend/engine/CarlaEngineNative.cpp @@ -586,6 +586,9 @@ public: carla_zeroChar(fTmpBuf, STR_MAX+1); + pData->bufferSize = pHost->get_buffer_size(pHost->handle); + pData->sampleRate = pHost->get_sample_rate(pHost->handle); + // set-up engine if (kIsPatchbay) { @@ -715,6 +718,14 @@ protected: if (pData->bufferSize == newBufferSize) return; + { + const CarlaMutexLocker cml(fUiServer.getWriteLock()); + + fUiServer.writeAndFixMsg("buffer-size"); + std::sprintf(fTmpBuf, "%i\n", newBufferSize); + fUiServer.writeMsg(fTmpBuf); + } + pData->bufferSize = newBufferSize; CarlaEngine::bufferSizeChanged(newBufferSize); } @@ -724,6 +735,15 @@ protected: if (carla_compareFloats(pData->sampleRate, newSampleRate)) return; + { + const CarlaMutexLocker cml(fUiServer.getWriteLock()); + const ScopedLocale csl; + + fUiServer.writeAndFixMsg("sample-rate"); + std::sprintf(fTmpBuf, "%f\n", newSampleRate); + fUiServer.writeMsg(fTmpBuf); + } + pData->sampleRate = newSampleRate; CarlaEngine::sampleRateChanged(newSampleRate); } @@ -953,18 +973,28 @@ protected: const CarlaMutexLocker cml(fUiServer.getWriteLock()); - fUiServer.writeAndFixMsg("carla-complete-license"); + fUiServer.writeAndFixMsg("complete-license"); fUiServer.writeAndFixMsg(carla_get_complete_license_text()); - fUiServer.writeAndFixMsg("carla-juce-version"); + fUiServer.writeAndFixMsg("juce-version"); fUiServer.writeAndFixMsg(carla_get_juce_version()); - fUiServer.writeAndFixMsg("carla-file-exts"); + fUiServer.writeAndFixMsg("file-exts"); fUiServer.writeAndFixMsg(carla_get_supported_file_extensions()); - fUiServer.writeAndFixMsg("carla-max-plugin-number"); + fUiServer.writeAndFixMsg("max-plugin-number"); std::sprintf(fTmpBuf, "%i\n", pData->maxPluginNumber); fUiServer.writeMsg(fTmpBuf); + + fUiServer.writeAndFixMsg("buffer-size"); + std::sprintf(fTmpBuf, "%i\n", pData->bufferSize); + fUiServer.writeMsg(fTmpBuf); + + const ScopedLocale csl; + + fUiServer.writeAndFixMsg("sample-rate"); + std::sprintf(fTmpBuf, "%f\n", pData->sampleRate); + fUiServer.writeMsg(fTmpBuf); } void uiServerOptions() @@ -1389,6 +1419,7 @@ protected: uiServerInfo(); uiServerOptions(); + uiServerCallback(ENGINE_CALLBACK_ENGINE_STARTED, 0, pData->options.processMode, pData->options.transportMode, 0.0f, "Plugin"); fUiServer.show(); diff --git a/source/carla_backend.py b/source/carla_backend.py index 8c04a5dd8..ffb2b6ca9 100644 --- a/source/carla_backend.py +++ b/source/carla_backend.py @@ -2896,8 +2896,6 @@ class CarlaHostPlugin(CarlaHostMeta): self.fSupportedFileExts = "" self.fMaxPluginNumber = 0 self.fLastError = "" - self.fOscUrlTCP = "" - self.fOscUrlUDP = "" # plugin info self.fPluginsInfo = [] @@ -2913,7 +2911,6 @@ class CarlaHostPlugin(CarlaHostMeta): } # some other vars - self.fHostName = "" self.fBufferSize = 0 self.fSampleRate = 0.0 @@ -2950,7 +2947,7 @@ class CarlaHostPlugin(CarlaHostMeta): return "Plugin" def get_engine_driver_device_names(self, index): - return [self.fHostName] + return [] def get_engine_driver_device_info(self, index, name): return PyEngineDriverDeviceInfo @@ -3194,10 +3191,10 @@ class CarlaHostPlugin(CarlaHostMeta): return self.fLastError def get_host_osc_url_tcp(self): - return self.fOscUrlTCP + return "" def get_host_osc_url_udp(self): - return self.fOscUrlUDP + return "" # -------------------------------------------------------------------------------------------------------- diff --git a/source/carla_host.py b/source/carla_host.py index e4496d22d..c550cb7da 100644 --- a/source/carla_host.py +++ b/source/carla_host.py @@ -401,6 +401,10 @@ class HostWindow(QMainWindow): self.ui.tabWidget.setCurrentIndex(0) self.fixCanvasPreviewSize() + # Plugin needs to have timers always running so it receives messages + if self.host.isPlugin: + self.startTimers() + QTimer.singleShot(0, self.slot_engineStart) # -------------------------------------------------------------------------------------------------------- diff --git a/source/modules/native-plugins/resources/carla-plugin b/source/modules/native-plugins/resources/carla-plugin index 2eb8c5fea..ec5b8e2a0 100755 --- a/source/modules/native-plugins/resources/carla-plugin +++ b/source/modules/native-plugins/resources/carla-plugin @@ -37,7 +37,6 @@ class PluginHost(CarlaHostPlugin): self.fExternalUI = None self.fIsRunning = True - self.fSampleRate = float(sys.argv[1]) if len(sys.argv) > 1 else 44100.0 # ------------------------------------------------------------------- @@ -308,22 +307,30 @@ class CarlaMiniW(ExternalUI, HostWindow): name = self.readlineblock().replace("\r", "\n") self.host._set_midiProgramData(pluginId, midiProgId, {'bank': bank, 'program': program, 'name': name}) - elif msg == "carla-complete-license": + elif msg == "complete-license": license = self.readlineblock().replace("\r", "\n") self.host.fCompleteLicenseText = license - elif msg == "carla-juce-version": + elif msg == "juce-version": version = self.readlineblock().replace("\r", "\n") self.host.fJuceVersion = version - elif msg == "carla-file-exts": + elif msg == "file-exts": exts = self.readlineblock().replace("\r", "\n") self.host.fSupportedFileExts = exts - elif msg == "carla-max-plugin-number": + elif msg == "max-plugin-number": maxnum = int(self.readlineblock()) self.host.fMaxPluginNumber = maxnum + elif msg == "buffer-size": + bufsize = int(self.readlineblock()) + self.host.fBufferSize = bufsize + + elif msg == "sample-rate": + srate = float(self.readlineblock()) + self.host.fSampleRate = srate + elif msg == "error": error = self.readlineblock().replace("\r", "\n") engineCallback(self.host, ENGINE_CALLBACK_ERROR, 0, 0, 0, 0.0, error) @@ -449,11 +456,6 @@ if __name__ == '__main__': else: gui = CarlaMiniW(host) - # ------------------------------------------------------------- - # simulate an engire started callback FIXME - - engineCallback(host, ENGINE_CALLBACK_ENGINE_STARTED, 0, host.processMode, ENGINE_TRANSPORT_MODE_PLUGIN, 0.0, "Plugin") - # ------------------------------------------------------------- # App-Loop