Sitar118 Claude Sonnet 4.6 commited on
Commit ·
2c0ae05
1
Parent(s): a8f4396
task: Sprint 5 — route audio through in-process plugin for SAFE plugins
Browse filesPro-Q 4 spectrum shows no signal because audio goes through Helper instance
while GUI belongs to in-process instance. Fix: call inProcessPlugin->processBlock()
directly in processBlock() when safe plugin is loaded.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
SYNC.md
CHANGED
|
@@ -28,7 +28,53 @@ STATUS: no pending questions
|
|
| 28 |
> Read this at the start of every coding session.
|
| 29 |
|
| 30 |
```
|
| 31 |
-
STATUS:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 32 |
|
| 33 |
Last (2026-05-17): Sprint 4 regression fixed. PluginBridgeEditor.mm was reverted
|
| 34 |
to CALayerHost (FAILED-APPROACHES #10 — never works in Ableton). Restored from
|
|
|
|
| 28 |
> Read this at the start of every coding session.
|
| 29 |
|
| 30 |
```
|
| 31 |
+
STATUS: TASK READY — Sprint 5
|
| 32 |
+
|
| 33 |
+
TASK: Route audio through in-process plugin for SAFE plugins (fixes spectrum analyzers)
|
| 34 |
+
|
| 35 |
+
PROBLEM (verified on Mac 2026-05-17):
|
| 36 |
+
Pro-Q 4 spectrum analyzer shows no signal inside PluginBridge.
|
| 37 |
+
Root cause: two separate plugin instances are running —
|
| 38 |
+
- Helper process instance → handles audio (but has no GUI)
|
| 39 |
+
- In-process instance → provides GUI only (but never sees audio)
|
| 40 |
+
Pro-Q 4's spectrum belongs to the in-process GUI instance, so it stays empty.
|
| 41 |
+
The AudioAnalyser MCP tool confirms audio IS flowing (returned live LUFS/FFT data).
|
| 42 |
+
|
| 43 |
+
FIX — only touch PluginBridgeProcessor.cpp (and .h if needed):
|
| 44 |
+
In processBlock(), check if a safe in-process plugin is loaded.
|
| 45 |
+
If yes → call inProcessPlugin->processBlock(buffer, midiMessages) directly.
|
| 46 |
+
If no (unsafe, Helper-only) → keep existing shm path unchanged.
|
| 47 |
+
|
| 48 |
+
Pseudocode:
|
| 49 |
+
if (inProcessPlugin != nullptr)
|
| 50 |
+
inProcessPlugin->processBlock(buffer, midiMessages);
|
| 51 |
+
else
|
| 52 |
+
// existing shm write → Helper → shm readOutput path
|
| 53 |
+
|
| 54 |
+
The in-process plugin is already loaded (loadInProcessPlugin runs for SAFE plugins).
|
| 55 |
+
You are NOT changing when it loads — only adding the audio call in processBlock.
|
| 56 |
+
|
| 57 |
+
SCOPE — only these files:
|
| 58 |
+
TOUCH: PluginBridgeProcessor.cpp (processBlock change, ~5 lines)
|
| 59 |
+
PluginBridgeProcessor.h (only if inProcessPlugin member needs exposing)
|
| 60 |
+
DO NOT TOUCH:
|
| 61 |
+
PluginBridgeEditor.mm ← LOCKED
|
| 62 |
+
PluginPickerComponent.mm ← LOCKED
|
| 63 |
+
HelperPluginHost.mm ← LOCKED
|
| 64 |
+
HelperConnection.cpp ← LOCKED
|
| 65 |
+
CMakeLists.txt ← no new files, no changes needed
|
| 66 |
+
|
| 67 |
+
VERIFY before pushing:
|
| 68 |
+
- Does inProcessPlugin->processBlock() exist in JUCE AudioPluginInstance? YES —
|
| 69 |
+
it inherits from AudioProcessor which has processBlock(AudioBuffer&, MidiBuffer&)
|
| 70 |
+
- Helper still runs for safe plugins (needed for MCP param read/write via Helper IPC)
|
| 71 |
+
Do NOT remove the Helper spawn or shm path — just skip the shm audio write when
|
| 72 |
+
in-process plugin is available.
|
| 73 |
+
- Do NOT remove PBLOG calls.
|
| 74 |
+
|
| 75 |
+
EXPECTED RESULT after fix:
|
| 76 |
+
Pro-Q 4 spectrum analyzer shows live audio. EQ curve interactive.
|
| 77 |
+
get_analysis MCP tool still works (AudioAnalyser runs on same buffer).
|
| 78 |
|
| 79 |
Last (2026-05-17): Sprint 4 regression fixed. PluginBridgeEditor.mm was reverted
|
| 80 |
to CALayerHost (FAILED-APPROACHES #10 — never works in Ableton). Restored from
|