| @@ -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[0] != nullptr) { delete[] audio.outBuf[0]; audio.outBuf[0] = nullptr; } | ||||
| if (audio.outBuf[1] != nullptr) { delete[] audio.outBuf[1]; audio.outBuf[1] = nullptr; } | if (audio.outBuf[1] != nullptr) { delete[] audio.outBuf[1]; audio.outBuf[1] = nullptr; } | ||||
| CARLA_SAFE_ASSERT_RETURN(bufferSize > 0,); | |||||
| try { | try { | ||||
| audio.inBufTmp[0] = new float[bufferSize]; | audio.inBufTmp[0] = new float[bufferSize]; | ||||
| audio.inBufTmp[1] = new float[bufferSize]; | audio.inBufTmp[1] = new float[bufferSize]; | ||||
| @@ -586,6 +586,9 @@ public: | |||||
| carla_zeroChar(fTmpBuf, STR_MAX+1); | 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 | // set-up engine | ||||
| if (kIsPatchbay) | if (kIsPatchbay) | ||||
| { | { | ||||
| @@ -715,6 +718,14 @@ protected: | |||||
| if (pData->bufferSize == newBufferSize) | if (pData->bufferSize == newBufferSize) | ||||
| return; | return; | ||||
| { | |||||
| const CarlaMutexLocker cml(fUiServer.getWriteLock()); | |||||
| fUiServer.writeAndFixMsg("buffer-size"); | |||||
| std::sprintf(fTmpBuf, "%i\n", newBufferSize); | |||||
| fUiServer.writeMsg(fTmpBuf); | |||||
| } | |||||
| pData->bufferSize = newBufferSize; | pData->bufferSize = newBufferSize; | ||||
| CarlaEngine::bufferSizeChanged(newBufferSize); | CarlaEngine::bufferSizeChanged(newBufferSize); | ||||
| } | } | ||||
| @@ -724,6 +735,15 @@ protected: | |||||
| if (carla_compareFloats(pData->sampleRate, newSampleRate)) | if (carla_compareFloats(pData->sampleRate, newSampleRate)) | ||||
| return; | 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; | pData->sampleRate = newSampleRate; | ||||
| CarlaEngine::sampleRateChanged(newSampleRate); | CarlaEngine::sampleRateChanged(newSampleRate); | ||||
| } | } | ||||
| @@ -953,18 +973,28 @@ protected: | |||||
| const CarlaMutexLocker cml(fUiServer.getWriteLock()); | const CarlaMutexLocker cml(fUiServer.getWriteLock()); | ||||
| fUiServer.writeAndFixMsg("carla-complete-license"); | |||||
| fUiServer.writeAndFixMsg("complete-license"); | |||||
| fUiServer.writeAndFixMsg(carla_get_complete_license_text()); | 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_get_juce_version()); | ||||
| fUiServer.writeAndFixMsg("carla-file-exts"); | |||||
| fUiServer.writeAndFixMsg("file-exts"); | |||||
| fUiServer.writeAndFixMsg(carla_get_supported_file_extensions()); | 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); | std::sprintf(fTmpBuf, "%i\n", pData->maxPluginNumber); | ||||
| fUiServer.writeMsg(fTmpBuf); | 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() | void uiServerOptions() | ||||
| @@ -1389,6 +1419,7 @@ protected: | |||||
| uiServerInfo(); | uiServerInfo(); | ||||
| uiServerOptions(); | uiServerOptions(); | ||||
| uiServerCallback(ENGINE_CALLBACK_ENGINE_STARTED, 0, pData->options.processMode, pData->options.transportMode, 0.0f, "Plugin"); | |||||
| fUiServer.show(); | fUiServer.show(); | ||||
| @@ -2896,8 +2896,6 @@ class CarlaHostPlugin(CarlaHostMeta): | |||||
| self.fSupportedFileExts = "" | self.fSupportedFileExts = "" | ||||
| self.fMaxPluginNumber = 0 | self.fMaxPluginNumber = 0 | ||||
| self.fLastError = "" | self.fLastError = "" | ||||
| self.fOscUrlTCP = "" | |||||
| self.fOscUrlUDP = "" | |||||
| # plugin info | # plugin info | ||||
| self.fPluginsInfo = [] | self.fPluginsInfo = [] | ||||
| @@ -2913,7 +2911,6 @@ class CarlaHostPlugin(CarlaHostMeta): | |||||
| } | } | ||||
| # some other vars | # some other vars | ||||
| self.fHostName = "" | |||||
| self.fBufferSize = 0 | self.fBufferSize = 0 | ||||
| self.fSampleRate = 0.0 | self.fSampleRate = 0.0 | ||||
| @@ -2950,7 +2947,7 @@ class CarlaHostPlugin(CarlaHostMeta): | |||||
| return "Plugin" | return "Plugin" | ||||
| def get_engine_driver_device_names(self, index): | def get_engine_driver_device_names(self, index): | ||||
| return [self.fHostName] | |||||
| return [] | |||||
| def get_engine_driver_device_info(self, index, name): | def get_engine_driver_device_info(self, index, name): | ||||
| return PyEngineDriverDeviceInfo | return PyEngineDriverDeviceInfo | ||||
| @@ -3194,10 +3191,10 @@ class CarlaHostPlugin(CarlaHostMeta): | |||||
| return self.fLastError | return self.fLastError | ||||
| def get_host_osc_url_tcp(self): | def get_host_osc_url_tcp(self): | ||||
| return self.fOscUrlTCP | |||||
| return "" | |||||
| def get_host_osc_url_udp(self): | def get_host_osc_url_udp(self): | ||||
| return self.fOscUrlUDP | |||||
| return "" | |||||
| # -------------------------------------------------------------------------------------------------------- | # -------------------------------------------------------------------------------------------------------- | ||||
| @@ -401,6 +401,10 @@ class HostWindow(QMainWindow): | |||||
| self.ui.tabWidget.setCurrentIndex(0) | self.ui.tabWidget.setCurrentIndex(0) | ||||
| self.fixCanvasPreviewSize() | 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) | QTimer.singleShot(0, self.slot_engineStart) | ||||
| # -------------------------------------------------------------------------------------------------------- | # -------------------------------------------------------------------------------------------------------- | ||||
| @@ -37,7 +37,6 @@ class PluginHost(CarlaHostPlugin): | |||||
| self.fExternalUI = None | self.fExternalUI = None | ||||
| self.fIsRunning = True | 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") | name = self.readlineblock().replace("\r", "\n") | ||||
| self.host._set_midiProgramData(pluginId, midiProgId, {'bank': bank, 'program': program, 'name': name}) | 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") | license = self.readlineblock().replace("\r", "\n") | ||||
| self.host.fCompleteLicenseText = license | self.host.fCompleteLicenseText = license | ||||
| elif msg == "carla-juce-version": | |||||
| elif msg == "juce-version": | |||||
| version = self.readlineblock().replace("\r", "\n") | version = self.readlineblock().replace("\r", "\n") | ||||
| self.host.fJuceVersion = version | self.host.fJuceVersion = version | ||||
| elif msg == "carla-file-exts": | |||||
| elif msg == "file-exts": | |||||
| exts = self.readlineblock().replace("\r", "\n") | exts = self.readlineblock().replace("\r", "\n") | ||||
| self.host.fSupportedFileExts = exts | self.host.fSupportedFileExts = exts | ||||
| elif msg == "carla-max-plugin-number": | |||||
| elif msg == "max-plugin-number": | |||||
| maxnum = int(self.readlineblock()) | maxnum = int(self.readlineblock()) | ||||
| self.host.fMaxPluginNumber = maxnum | 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": | elif msg == "error": | ||||
| error = self.readlineblock().replace("\r", "\n") | error = self.readlineblock().replace("\r", "\n") | ||||
| engineCallback(self.host, ENGINE_CALLBACK_ERROR, 0, 0, 0, 0.0, error) | engineCallback(self.host, ENGINE_CALLBACK_ERROR, 0, 0, 0, 0.0, error) | ||||
| @@ -449,11 +456,6 @@ if __name__ == '__main__': | |||||
| else: | else: | ||||
| gui = CarlaMiniW(host) | 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 | # App-Loop | ||||