Skip to content

Conversation

@google-labs-jules
Copy link

Converted Jamulus to VST3 plugin using JUCE.

  • Architectural approach: Hybrid model where JUCE handles VST hosting and GUI, while a headless QCoreApplication instance runs the existing Jamulus client logic.
  • Audio: Implemented src/sound/vst/sound.cpp using a ring buffer to bridge DAW float samples to Jamulus int16 blocks.
  • Dependencies: Stubbed levelmeter.h to decouple QtWidgets, linking only against Qt5::Core/Network.
  • GUI: Native JUCE Editor implemented for basic connection and fader control.
  • Platform: Configured for Linux/Windows VST3 build via CMake.

PR created automatically by Jules for task 17469803722198705924 started by @ignotus666

This commit transforms the Jamulus client into a VST3 plugin.
Key changes include:
- Integrated JUCE framework via CMake.
- Implemented `PluginProcessor` and `PluginEditor` to wrap Jamulus logic.
- Created `CSound` VST backend with ring buffer for audio bridging.
- Stubbed `CStereoSignalLevelMeter` to remove `QtWidgets` dependency.
- Modernized `global.h` to use `<cstdint>` to resolve type conflicts.
- Added `QCoreApplication` management within the plugin to support Jamulus networking.
- Implemented basic GUI for connection and input level control.
@google-labs-jules
Copy link
Author

👋 Jules, reporting for duty! I'm here to lend a hand with this pull request.

When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down.

I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job!

For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with @jules. You can find this option in the Pull Request section of your global Jules UI settings. You can always switch back!


For security, I will only act on instructions from the user who triggered this task.

New to Jules? Learn more at jules.google/docs.

This commit transforms the Jamulus client into a VST3 plugin.
Key changes include:
- Integrated JUCE framework via CMake.
- Implemented `PluginProcessor` and `PluginEditor` to wrap Jamulus logic.
- Created `CSound` VST backend with ring buffer for audio bridging.
- Removed dependency on `src/levelmeter.cpp` and renamed `levelmeter.h` to `levelmeter_orig.h` to decouple from `QtWidgets` (using `util.h` for logic).
- Modernized `global.h` to use `<cstdint>` to resolve type conflicts.
- Added `QCoreApplication` management within the plugin to support Jamulus networking.
- Implemented basic GUI for connection and input level control (mapped to automation).
- Enabled `CMAKE_AUTOMOC` to support Qt Meta-Object Compiler.
This commit transforms the Jamulus client into a VST3 plugin.
Key changes include:
- Integrated JUCE framework via CMake.
- Implemented `PluginProcessor` and `PluginEditor` to wrap Jamulus logic.
- Created `CSound` VST backend with ring buffer for audio bridging.
- Removed dependency on `src/levelmeter.cpp` and renamed `levelmeter.h` to `levelmeter_orig.h` to decouple from `QtWidgets` (using `util.h` for logic).
- Modernized `global.h` to use `<cstdint>` to resolve type conflicts.
- Added `QCoreApplication` management within the plugin to support Jamulus networking.
- Implemented basic GUI for connection and input level control (mapped to automation).
- Enabled `CMAKE_AUTOMOC` to support Qt Meta-Object Compiler.
This commit transforms the Jamulus client into a VST3 plugin.
Key changes include:
- Integrated JUCE framework via CMake.
- Implemented `PluginProcessor` and `PluginEditor` to wrap Jamulus logic.
- Created `CSound` VST backend with ring buffer for audio bridging.
- Removed dependency on `src/levelmeter.cpp` and renamed `levelmeter.h` to `levelmeter_orig.h` to decouple from `QtWidgets` (using `util.h` for logic).
- Excluded `src/sound/midi-win/` from compilation to avoid Windows-specific MIDI/ASIO dependencies on Linux.
- Modernized `global.h` to use `<cstdint>` to resolve type conflicts.
- Added `QCoreApplication` management within the plugin to support Jamulus networking.
- Implemented basic GUI for connection and input level control (mapped to automation).
- Enabled `CMAKE_AUTOMOC` to support Qt Meta-Object Compiler.
This commit transforms the Jamulus client into a VST3 plugin.
Key changes include:
- Integrated JUCE framework via CMake.
- Implemented `PluginProcessor` and `PluginEditor` to wrap Jamulus logic.
- Created `CSound` VST backend with ring buffer for audio bridging.
- Updated `CMakeLists.txt` to properly exclude `levelmeter.cpp`, `midi-win/`, and invalid audio backends.
- Linked necessary Linux dependencies (GTK, Curl, Opus) with `-fPIC`.
- Removed dependency on `src/levelmeter.cpp` and renamed `levelmeter.h` to `levelmeter_orig.h`.
- Modernized `global.h` to use `<cstdint>` to resolve type conflicts.
- Added `QCoreApplication` management within the plugin to support Jamulus networking.
- Implemented basic GUI for connection and input level control (mapped to automation).
- Enabled `CMAKE_AUTOMOC` to support Qt Meta-Object Compiler.
This commit transforms the Jamulus client into a VST3 plugin.
Key changes include:
- Integrated JUCE framework via CMake.
- Implemented `PluginProcessor` and `PluginEditor` to wrap Jamulus logic.
- Created `CSound` VST backend with ring buffer for audio bridging.
- Updated `CMakeLists.txt` to properly exclude `levelmeter.cpp` and `midi-win/`.
- Configured Linux build to find and link GTK, Webkit, and Curl for JUCE.
- Enabled `-fPIC` and `CMAKE_AUTOMOC` for proper shared library and Qt MOC generation.
- Renamed `levelmeter.h` to `levelmeter_orig.h` to decouple from `QtWidgets`.
- Modernized `global.h` to use `<cstdint>` to resolve type conflicts.
- Added `QCoreApplication` management within the plugin to support Jamulus networking.
- Implemented native JUCE GUI with connection settings and input level automation.
This commit transforms the Jamulus client into a VST3 plugin.
Key changes include:
- Integrated JUCE framework via CMake.
- Implemented `PluginProcessor` and `PluginEditor` to wrap Jamulus logic.
- Created `CSound` VST backend with ring buffer for audio bridging.
- Updated `CMakeLists.txt` to properly exclude `levelmeter.cpp` and `midi-win/`.
- Configured Linux build to find and link GTK, Webkit, and Curl for JUCE.
- Enabled `-fPIC` and `CMAKE_AUTOMOC` for proper shared library and Qt MOC generation.
- Renamed `levelmeter.h` to `levelmeter_orig.h` to decouple from `QtWidgets`.
- Modernized `global.h` to use `<cstdint>` to resolve type conflicts.
- Added `QCoreApplication` management within the plugin to support Jamulus networking.
- Implemented native JUCE GUI with connection settings and input level automation.
This commit transforms the Jamulus client into a VST3 plugin.
Key changes include:
- Integrated JUCE framework via CMake.
- Implemented `PluginProcessor` and `PluginEditor` to wrap Jamulus logic.
- Created `CSound` VST backend with ring buffer for audio bridging.
- Updated `CMakeLists.txt` to properly exclude `levelmeter.cpp` and `midi-win/`.
- Configured Linux build to find and link GTK, Webkit, and Curl for JUCE.
- Enabled `-fPIC` and `CMAKE_AUTOMOC` for proper shared library and Qt MOC generation.
- Renamed `levelmeter.h` to `levelmeter_orig.h` to decouple from `QtWidgets`.
- Modernized `global.h` to use `<cstdint>` to resolve type conflicts.
- Added `QCoreApplication` management within the plugin to support Jamulus networking.
- Implemented `ServerListListener` to bridge Qt networking signals to JUCE GUI.
- Added Server List browser, Directory selector, and improved Disconnect logic to VST Editor.
This commit transforms the Jamulus client into a VST3 plugin.
Key changes include:
- Integrated JUCE framework via CMake.
- Implemented `PluginProcessor` and `PluginEditor` to wrap Jamulus logic.
- Created `CSound` VST backend with ring buffer for audio bridging.
- Updated `CMakeLists.txt` to properly exclude `levelmeter.cpp` and `midi-win/`.
- Configured Linux build to find and link GTK, Webkit, and Curl for JUCE.
- Enabled `-fPIC` and `CMAKE_AUTOMOC` for proper shared library and Qt MOC generation.
- Renamed `levelmeter.h` to `levelmeter_orig.h` to decouple from `QtWidgets`.
- Modernized `global.h` to use `<cstdint>` to resolve type conflicts.
- Added `QCoreApplication` management within the plugin to support Jamulus networking.
- Implemented `ServerListListener` to bridge Qt networking signals to JUCE GUI.
- Added Server List browser, Directory selector, and improved Disconnect logic to VST Editor.
- Fixed string conversion and access rights issues in `PluginEditor.cpp`.
This commit transforms the Jamulus client into a VST3 plugin.
Key changes include:
- Integrated JUCE framework via CMake.
- Implemented `PluginProcessor` and `PluginEditor` to wrap Jamulus logic.
- Created `CSound` VST backend with ring buffer for audio bridging.
- Updated `CMakeLists.txt` to properly exclude `levelmeter.cpp` and `midi-win/`.
- Configured Linux build to find and link GTK, Webkit, and Curl for JUCE.
- Enabled `-fPIC` and `CMAKE_AUTOMOC` for proper shared library and Qt MOC generation.
- Renamed `levelmeter.h` to `levelmeter_orig.h` to decouple from `QtWidgets`.
- Modernized `global.h` to use `<cstdint>` to resolve type conflicts.
- Added `QCoreApplication` management within the plugin to support Jamulus networking.
- Implemented `JamulusBridge` to bridge Qt networking signals (Server/Client lists) to JUCE GUI.
- Added Server List browser, Directory selector, and improved Disconnect logic to VST Editor.
- Added Mixer view with Channel Strips (visual) to the VST GUI.
- Fixed string conversion and access rights issues in `PluginEditor.cpp`.
This commit transforms the Jamulus client into a VST3 plugin.
Key changes include:
- Integrated JUCE framework via CMake.
- Implemented `PluginProcessor` and `PluginEditor` to wrap Jamulus logic.
- Created `CSound` VST backend with ring buffer for audio bridging.
- Updated `CMakeLists.txt` to properly exclude `levelmeter.cpp` and `midi-win/`.
- Configured Linux build to find and link GTK, Webkit, and Curl for JUCE.
- Enabled `-fPIC` and `CMAKE_AUTOMOC` for proper shared library and Qt MOC generation.
- Renamed `levelmeter.h` to `levelmeter_orig.h` to decouple from `QtWidgets`.
- Modernized `global.h` to use `<cstdint>` to resolve type conflicts.
- Added `QCoreApplication` management within the plugin to support Jamulus networking.
- Implemented `JamulusBridge` to bridge Qt networking signals to JUCE GUI.
- Added Server List browser, Directory selector, and improved Disconnect logic to VST Editor.
- Added Mixer view with Channel Strips (Client List integration) to the VST GUI.
- Fixed compilation issues (`ProgressBar` property access, string conversions).
This commit transforms the Jamulus client into a VST3 plugin.
Key changes include:
- Integrated JUCE framework via CMake.
- Implemented `PluginProcessor` and `PluginEditor` to wrap Jamulus logic.
- Created `CSound` VST backend with ring buffer for audio bridging.
- Updated `CMakeLists.txt` to properly exclude `levelmeter.cpp` and `midi-win/`.
- Configured Linux build to find and link GTK, Webkit, and Curl for JUCE.
- Enabled `-fPIC` and `CMAKE_AUTOMOC` for proper shared library and Qt MOC generation.
- Renamed `levelmeter.h` to `levelmeter_orig.h` to decouple from `QtWidgets`.
- Modernized `global.h` to use `<cstdint>` to resolve type conflicts.
- Added `QCoreApplication` management within the plugin to support Jamulus networking.
- Implemented `JamulusBridge` to bridge Qt networking signals to JUCE GUI.
- Added Server List browser, Directory selector, and improved Disconnect logic to VST Editor.
- Added Mixer view with Channel Strips (Client List integration) to the VST GUI.
- Fixed `ProgressBar` API usage and `QString` conversion.
- Updated address parsing to use `ParseNetworkAddressWithSrvDiscovery`.
This commit transforms the Jamulus client into a VST3 plugin.
Key changes include:
- Integrated JUCE framework via CMake.
- Implemented `PluginProcessor` and `PluginEditor` to wrap Jamulus logic.
- Created `CSound` VST backend with ring buffer for audio bridging.
- Updated `CMakeLists.txt` to properly exclude `levelmeter.cpp` and `midi-win/`.
- Configured Linux build to find and link GTK, Webkit, and Curl for JUCE.
- Enabled `-fPIC` and `CMAKE_AUTOMOC` for proper shared library and Qt MOC generation.
- Renamed `levelmeter.h` to `levelmeter_orig.h` to decouple from `QtWidgets`.
- Modernized `global.h` to use `<cstdint>` to resolve type conflicts.
- Added `QCoreApplication` management within the plugin to support Jamulus networking.
- Implemented `JamulusBridge` to bridge Qt networking signals to JUCE GUI.
- Added Server List browser, Directory selector, and improved Disconnect logic to VST Editor.
- Added Mixer view with Channel Strips (Client List integration) to the VST GUI.
- Fixed string conversion and access rights issues in `PluginEditor.cpp`.
- Fixed Thread Affinity: Initialized `CClient` on Main Thread to ensure correct signal delivery from network thread.
This commit transforms the Jamulus client into a VST3 plugin.
Key changes include:
- Integrated JUCE framework via CMake.
- Implemented `PluginProcessor` and `PluginEditor` to wrap Jamulus logic.
- Created `CSound` VST backend with ring buffer for audio bridging.
- Updated `CMakeLists.txt` to properly exclude `levelmeter.cpp` and `midi-win/`.
- Configured Linux build to find and link GTK, Webkit, and Curl for JUCE.
- Enabled `-fPIC` and `CMAKE_AUTOMOC` for proper shared library and Qt MOC generation.
- Renamed `levelmeter.h` to `levelmeter_orig.h` to decouple from `QtWidgets`.
- Modernized `global.h` to use `<cstdint>` to resolve type conflicts.
- Added `QCoreApplication` management within the plugin to support Jamulus networking.
- Implemented `JamulusBridge` to bridge Qt networking signals to JUCE GUI.
- Added Server List browser, Directory selector, and improved Disconnect logic to VST Editor.
- Added Mixer view with Channel Strips (Client List integration) to the VST GUI.
- Fixed string conversion and access rights issues in `PluginEditor.cpp`.
- Fixed Thread Affinity: Initialized `CClient` on Main Thread to ensure correct signal delivery.
- Registered Qt MetaTypes for Jamulus structures to fix QueuedConnection signal dropping.
This commit transforms the Jamulus client into a VST3 plugin.
Key changes include:
- Integrated JUCE framework via CMake.
- Implemented `PluginProcessor` and `PluginEditor` to wrap Jamulus logic.
- Created `CSound` VST backend with ring buffer for audio bridging.
- Updated `CMakeLists.txt` to properly exclude `levelmeter.cpp` and `midi-win/`.
- Configured Linux build to find and link GTK, Webkit, and Curl for JUCE.
- Enabled `-fPIC` and `CMAKE_AUTOMOC` for proper shared library and Qt MOC generation.
- Renamed `levelmeter.h` to `levelmeter_orig.h` to decouple from `QtWidgets`.
- Modernized `global.h` to use `<cstdint>` to resolve type conflicts.
- Added `QCoreApplication` management within the plugin to support Jamulus networking.
- Implemented `JamulusBridge` to bridge Qt networking signals to JUCE GUI.
- Added Server List browser, Directory selector, and improved Disconnect logic to VST Editor.
- Added Mixer view with Channel Strips (Client List integration) to the VST GUI.
- Fixed string conversion and access rights issues in `PluginEditor.cpp`.
- Fixed Thread Affinity: Initialized `CClient` on Main Thread to ensure correct signal delivery.
- Registered Qt MetaTypes for Jamulus structures to fix QueuedConnection signal dropping.
This commit transforms the Jamulus client into a VST3 plugin.
Key changes include:
- Integrated JUCE framework via CMake.
- Implemented `PluginProcessor` and `PluginEditor` to wrap Jamulus logic.
- Created `CSound` VST backend with ring buffer for audio bridging.
- Updated `CMakeLists.txt` to properly exclude `levelmeter.cpp` and `midi-win/`.
- Configured Linux build to find and link GTK, Webkit, and Curl for JUCE.
- Enabled `-fPIC` and `CMAKE_AUTOMOC` for proper shared library and Qt MOC generation.
- Renamed `levelmeter.h` to `levelmeter_orig.h` to decouple from `QtWidgets`.
- Modernized `global.h` to use `<cstdint>` to resolve type conflicts.
- Added `QCoreApplication` management within the plugin to support Jamulus networking.
- Implemented `JamulusBridge` to bridge Qt networking signals to JUCE GUI.
- Added Server List browser, Directory selector, and improved Disconnect logic to VST Editor.
- Added Mixer view with Channel Strips (Client List integration) to the VST GUI.
- Fixed string conversion and access rights issues in `PluginEditor.cpp`.
- Fixed Thread Affinity: Initialized `CClient` on Main Thread to ensure correct signal delivery.
- Registered Qt MetaTypes for Jamulus structures to fix QueuedConnection signal dropping.
- Added `Q_DECLARE_METATYPE` macros to `util.h` for custom types.
This commit transforms the Jamulus client into a VST3 plugin.
Key changes include:
- Integrated JUCE framework via CMake.
- Implemented `PluginProcessor` and `PluginEditor` to wrap Jamulus logic.
- Created `CSound` VST backend with ring buffer for audio bridging.
- Updated `CMakeLists.txt` to properly exclude `levelmeter.cpp` and `midi-win/`.
- Configured Linux build to find and link GTK, Webkit, and Curl for JUCE.
- Enabled `-fPIC` and `CMAKE_AUTOMOC` for proper shared library and Qt MOC generation.
- Renamed `levelmeter.h` to `levelmeter_orig.h` to decouple from `QtWidgets`.
- Modernized `global.h` to use `<cstdint>` to resolve type conflicts.
- Added `QCoreApplication` management within the plugin to support Jamulus networking.
- Implemented `JamulusBridge` to bridge Qt networking signals to JUCE GUI.
- Added Server List browser, Directory selector, and improved Disconnect logic to VST Editor.
- Added Mixer view with Channel Strips (Client List integration) to the VST GUI.
- Fixed string conversion and access rights issues in `PluginEditor.cpp`.
- Fixed Thread Affinity: Initialized `CClient` on Main Thread to ensure correct signal delivery.
- Registered Qt MetaTypes for Jamulus structures to fix QueuedConnection signal dropping.
- Added `Q_DECLARE_METATYPE` macros to `util.h` for custom types.
Resolved invalid variable usage in `OnCLChannelLevelListReceived` by restoring the original logic.
Removed unused and undefined `OnCLRedServerListReceived` function implementation.
Added proper connection for `CLRedServerListReceived` signal to `OnVSTServerListReceived` slot.
Cleaned up duplicate member definitions in `src/client.h`.
Verified successful build of JamulusVST target.
Moved CClient to the PluginEditor thread (GUI thread) in the constructor to ensure that `QCoreApplication::processEvents()` correctly processes queued signals from the network thread (server lists, disconnects).
Added logging to `OnVSTServerListReceived` for verification.
Fixed includes in PluginEditor.cpp and client.h.
Moved CClient to the PluginEditor thread (GUI thread) in the constructor to ensure that `QCoreApplication::processEvents()` correctly processes queued signals from the network thread (server lists, disconnects).
Removed temporary debug logging from PluginEditor.cpp and client.h.
Verified build using `make JamulusVST_VST3` to ensure VST3 bundle is updated.
Added explicit `client->Start()` call in `PluginEditor` constructor to ensure the network socket and channel are enabled when the GUI opens. This fixes the issue where server lists could not be fetched and disconnects failed because the underlying network thread was not running.
Rebuilt using `make JamulusVST_VST3` to ensure the VST3 bundle is updated.
Modified `src/client.cpp` to use `Qt::DirectConnection` for processing `DetectedCLMessage` and `CLServerListReceived` signals in the VST plugin. This ensures that server list updates (received on the network worker thread) are processed immediately on that thread, bypassing the Qt Event Loop on the GUI thread which may be stalled or blocked in some VST hosts (like Carla).
This change, combined with the previous fix to ensure the socket is started (`client->Start()`), guarantees robust server list fetching.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant