--- argument-hint: "[format] [platform] [--quick|--full]" description: "Comprehensive DAW compatibility testing across Logic Pro, Ableton Live, Pro Tools, Cubase, Reaper, FL Studio, Bitwig, and Ardour" allowed-tools: Bash, Read, Write, AskUserQuestion model: sonnet --- # /run-daw-tests - DAW Compatibility Testing Execute comprehensive compatibility testing across multiple DAWs to ensure your JUCE plugin works correctly in all major digital audio workstations. ## Overview This command automates DAW compatibility testing, guiding you through validation in Logic Pro, Ableton Live, Pro Tools, Cubase, Reaper, FL Studio, Bitwig, and Ardour. It ensures automation, state save/load, offline rendering, and format-specific features work correctly across platforms. ## Syntax ```bash /run-daw-tests [format] [platform] [--quick|--full] ``` ### Arguments - `format` (optional): Target format - `vst3`, `au`, `aax`, `standalone`, or `all` (default: `all`) - `platform` (optional): Target platform - `macos`, `windows`, `linux`, or `current` (default: `current`) - `--quick`: Run essential tests only (3 DAWs, 30 min) - `--full`: Run comprehensive test matrix (all DAWs, 2-3 hours) ### Examples ```bash # Quick test in 3 major DAWs on current platform /run-daw-tests --quick # Full test matrix for VST3 on macOS /run-daw-tests vst3 macos --full # Test all formats on current platform /run-daw-tests all current --full # Test AU format only (macOS) /run-daw-tests au macos --quick ``` ## Instructions ### Step 1: Pre-Flight Validation **@test-automation-engineer** - Verify builds are ready for DAW testing. 1. **Check plugin builds exist:** ```bash # macOS ls -la ~/Library/Audio/Plug-Ins/VST3/MyPlugin.vst3 ls -la ~/Library/Audio/Plug-Ins/Components/MyPlugin.component # Windows dir "%CommonProgramFiles%\VST3\MyPlugin.vst3" # Linux ls -la ~/.vst3/MyPlugin.vst3 ``` 2. **Verify plugin loads in standalone validator:** ```bash # Run pluginval first pluginval --strictness-level 10 --validate MyPlugin.vst3 ``` 3. **Check for critical issues:** - Build is Release configuration (not Debug) - No debug assertions enabled - Splash screen disabled (if commercial JUCE license) - Code signed (macOS/Windows production builds) **If pluginval fails, STOP and fix issues before DAW testing.** ### Step 2: DAW Testing Matrix **@daw-compatibility-engineer** + **@qa-engineer** - Execute systematic testing across DAWs. Claude will guide you through DAW-by-DAW testing with standardized test procedures. --- ## Platform-Specific Test Plans ### macOS DAW Testing #### 1. Logic Pro (AU and VST3) **Time Estimate:** 20-30 minutes **Prerequisites:** - Logic Pro installed (latest version recommended) - AU format: `~/Library/Audio/Plug-Ins/Components/MyPlugin.component` - VST3 format: `~/Library/Audio/Plug-Ins/VST3/MyPlugin.vst3` **Test Procedure:** 1. **AU Validation:** ```bash # Run Apple's auval auval -v aufx Plug Manu # Replace with your plugin type, code, manufacturer # Must show "PASS" - if it fails, fix before continuing ``` 2. **Plugin Loading (AU):** - Open Logic Pro - Create new empty project - Add audio track - Load plugin from AU menu - **Verify:** Plugin window opens without errors - **Verify:** UI displays correctly on Retina displays - **Check:** No console errors: `Console.app → Filter: Logic` 3. **Plugin Loading (VST3):** - Reset plugin manager: `Logic Pro → Preferences → Plug-In Manager → Reset & Rescan` - Load plugin from VST3 menu - **Verify:** VST3 and AU versions don't conflict 4. **Automation Recording:** - Enable automation: `A` key - Adjust plugin parameter while playing - **Verify:** Automation curve appears in track - **Verify:** Playback follows automation smoothly 5. **Automation Playback:** - Create automation ramps (slow and fast) - **Test:** Parameter changes are smooth (no zipper noise) - **Test:** Modulation tracks automation precisely 6. **State Save/Load:** - Adjust several parameters - Save project: `⌘S` - Close Logic Pro - Reopen project - **Verify:** All parameters restored exactly - **Verify:** Plugin state is identical 7. **Offline Bounce:** - Set project tempo to 120 BPM - Create automation on tempo-synced parameter - Bounce: `⌘B` → set format - Also record realtime pass - **Verify:** Offline bounce matches realtime render (compare waveforms) 8. **Multiple Instances:** - Add 10+ instances of plugin - **Verify:** No crashes or performance issues - **Verify:** Each instance maintains independent state - **Check:** CPU meter stays reasonable 9. **Logic-Specific Features:** - **Verify:** Plugin appears in correct category - **Test:** Side-chain routing (if applicable) - **Test:** Plugin delay compensation works **Report Issues:** - Screenshot any visual glitches - Note exact steps to reproduce any bugs - Check Console.app for crash logs: `~/Library/Logs/DiagnosticReports/` --- #### 2. Ableton Live (VST3) **Time Estimate:** 15-20 minutes **Prerequisites:** - Ableton Live installed - VST3 format: `~/Library/Audio/Plug-Ins/VST3/MyPlugin.vst3` **Test Procedure:** 1. **Plugin Loading:** - Launch Ableton Live - Rescan plugins: `Preferences → Plug-Ins → Rescan` - Drag plugin onto track - **Verify:** Device view displays correctly - **Verify:** Plugin responds to input 2. **Automation:** - Show automation lane - Record automation on key parameter - **Test:** Breakpoint automation (not just lines) - **Verify:** Automation playback is smooth 3. **Undo/Redo:** - Change multiple parameters - Undo: `⌘Z` repeatedly - Redo: `⌘⇧Z` - **Verify:** All parameter changes tracked correctly - **Verify:** No crashes on undo/redo 4. **Project Save/Load:** - Save Live set - Close and reopen - **Verify:** Plugin state restored - **Verify:** Automation preserved 5. **Freeze/Flatten:** - Freeze track with plugin - **Verify:** Frozen audio is correct - Flatten to audio - **Verify:** Result matches realtime 6. **CPU Efficiency:** - Check Live's CPU meter with plugin active - **Verify:** CPU usage is reasonable - Test with high track count (20+ instances) **Ableton-Specific Tests:** - **Test:** Macro mapping (map plugin param to Live macro) - **Test:** Plug-in delay compensation indicator - **Verify:** Plugin works in both Arrangement and Session view --- #### 3. Reaper (VST3 and AU) **Time Estimate:** 15 minutes **Prerequisites:** - Reaper installed - Both VST3 and AU formats available **Test Procedure:** 1. **Plugin Scanning:** - `Preferences → Plug-ins → VST → Re-scan` - `Preferences → Plug-ins → AU → Re-scan` - **Verify:** Both formats appear 2. **Basic Functionality:** - Add plugin to track FX chain - **Verify:** UI displays correctly - **Test:** Parameter changes reflect immediately 3. **State Management:** - Adjust parameters - Save project - Reload project - **Verify:** State restored perfectly 4. **Automation:** - Show track envelope for plugin parameter - Draw automation curve - **Verify:** Playback follows automation - **Test:** Both slow and fast parameter changes 5. **Reaper-Specific:** - **Test:** Plugin works in FX chain and track input FX - **Test:** Offline processing mode - **Verify:** Plugin bypasses cleanly --- #### 4. Pro Tools (AAX) - If Available **Time Estimate:** 20 minutes **Prerequisites:** - Pro Tools installed - AAX format code-signed with PACE iLok - iLok with valid developer account **Test Procedure:** 1. **AAX Validation:** - Launch Pro Tools - Check plugin appears in correct category - **Verify:** No "damaged" or "unsigned" warnings 2. **Plugin Loading:** - Create audio track - Add plugin as insert - **Verify:** Plugin GUI opens - **Verify:** AAX wrapper reports correct latency 3. **Automation:** - Enable automation mode - Write automation (Latch mode) - **Verify:** Automation writes correctly - Switch to Read mode - **Verify:** Automation plays back accurately 4. **AudioSuite Mode (Offline Processing):** - Select audio region - `AudioSuite → [Your Plugin Category] → MyPlugin` - Process audio offline - **Verify:** Result matches realtime processing 5. **Session Save/Load:** - Save session - Close Pro Tools - Reopen session - **Verify:** Plugin state and automation restored 6. **Pro Tools Specifics:** - **Test:** Plugin delay compensation (PDC) reporting - **Verify:** No clicks on bypass enable/disable - **Test:** Works in both Mono and Stereo formats --- ### Windows DAW Testing #### 5. Ableton Live (Windows - VST3) **Time Estimate:** 15 minutes **Prerequisites:** - Ableton Live (Windows) - VST3: `C:\Program Files\Common Files\VST3\MyPlugin.vst3` **Test Procedure:** 1. **Plugin Loading:** - Launch Live - Rescan VST plugins - Load plugin - **Verify:** No missing dependencies (MSVC runtime) - **Verify:** UI displays on high-DPI displays (125%, 150%, 200%) 2. **Functionality Tests:** - Follow macOS Ableton tests (Steps 2-6 from above) - **Additional:** Test on multiple monitors 3. **Windows-Specific:** - **Verify:** No antivirus false positives - **Check:** Task Manager for memory leaks during long sessions --- #### 6. FL Studio (VST3) **Time Estimate:** 15 minutes **Prerequisites:** - FL Studio installed - VST3 format in plugin path **Test Procedure:** 1. **Plugin Loading:** - Add plugin to mixer track - **Verify:** Plugin loads without errors - **Verify:** Wrapper integration works correctly 2. **FL Studio Wrapper:** - **Test:** Generic wrapper GUI vs plugin GUI - **Verify:** Parameter automation works - **Check:** No conflicts with FL's internal routing 3. **State Save/Load:** - Save project (.flp) - Reload - **Verify:** Plugin state preserved - **Test:** Preset saving in FL's browser 4. **Multiple Instances:** - Load 10+ instances - **Verify:** No multi-instance issues (FL Studio has had issues here) - **Verify:** Each instance independent 5. **Rendering:** - Render to audio file - **Verify:** No artifacts or glitches - **Compare:** Realtime vs. offline render --- #### 7. Cubase/Nuendo (VST3) **Time Estimate:** 15 minutes **Prerequisites:** - Cubase or Nuendo installed - VST3 format **Test Procedure:** 1. **Plugin Loading:** - VST Plug-in Manager → Rescan - Add plugin to audio track - **Verify:** Plugin appears in correct category 2. **Automation:** - Show automation track - Write automation (W mode) - **Test:** Ramp automation - **Verify:** Playback is smooth 3. **Expression Maps (If Applicable):** - Test MIDI/parameter interactions - Verify plugin responds correctly 4. **Offline Processing:** - Direct Offline Processing - Apply plugin to region - **Verify:** Matches realtime 5. **Project Save/Load:** - Standard save/load test - **Verify:** State restoration --- #### 8. Reaper (Windows - VST3) **Time Estimate:** 10 minutes **Prerequisites:** - Reaper (Windows) - VST3 format **Test Procedure:** - Follow macOS Reaper tests (adapted for Windows paths) - **Verify:** No Windows-specific issues --- ### Linux DAW Testing #### 9. Reaper (Linux - VST3) **Time Estimate:** 10 minutes **Prerequisites:** - Reaper for Linux - VST3: `~/.vst3/MyPlugin.vst3` **Test Procedure:** 1. **Plugin Loading:** - Rescan VST3 plugins - Load plugin - **Verify:** No missing dependencies: `ldd MyPlugin.vst3` 2. **Basic Functionality:** - Parameter changes work - State save/load works - Automation works 3. **Linux-Specific:** - **Test:** Different desktop environments (GNOME, KDE, XFCE) - **Verify:** UI scaling on HiDPI displays - **Check:** No X11/Wayland issues --- #### 10. Ardour (VST3) **Time Estimate:** 10 minutes **Prerequisites:** - Ardour installed - VST3 format **Test Procedure:** 1. **Plugin Manager:** - Rescan plugins - Verify plugin appears 2. **Basic Tests:** - Add to track - Test automation - Save/load session - **Verify:** State preservation 3. **Ardour-Specific:** - **Test:** Plugin latency compensation - **Verify:** Works with Ardour's routing --- #### 11. Bitwig Studio (VST3) **Time Estimate:** 10 minutes **Prerequisites:** - Bitwig Studio - VST3 format **Test Procedure:** 1. **Plugin Loading:** - Rescan plugins - Load plugin on track - **Verify:** UI displays correctly 2. **Bitwig Modulation:** - Map Bitwig modulator to plugin parameter - **Verify:** Modulation works smoothly - **Test:** No conflicts with plugin's internal modulation 3. **Project Management:** - Save project - Reload - **Verify:** State restored --- ## Step 3: Cross-DAW Compatibility Validation **@daw-compatibility-engineer** - Verify consistency across DAWs. After testing individual DAWs, perform cross-DAW validation: ### 1. Preset Compatibility **Test:** Do presets work across all DAWs? ```bash # Save preset in Logic Pro (AU) # Load same preset in Ableton Live (VST3) # Verify parameters are identical ``` **Expected:** Presets should transfer seamlessly between DAW formats. **Common Issue:** AU `.aupreset` vs VST3 `.vstpreset` - ensure both save correctly. ### 2. Automation Consistency **Test:** Does automation sound identical across DAWs? - Create same automation curve in 3 different DAWs - Bounce/render each - Compare waveforms (should be bit-identical or very close) **Expected:** Sample-accurate automation across DAWs. **Common Issue:** Different smoothing algorithms can cause minor differences. ### 3. Offline vs Realtime Rendering **Test:** Does offline rendering match realtime in all DAWs? - Test in Logic Pro, Ableton Live, Reaper, Pro Tools - Compare realtime and offline bounces **Expected:** Bit-perfect match (or extremely close). **Red Flag:** If renders differ significantly, investigate: - Buffer size assumptions in DSP code - Tempo-sync calculations - Randomization/non-determinism ### 4. State Serialization Compatibility **Test:** Can projects transfer between DAWs? - Save plugin state in one DAW - Manually load that state data in another DAW - Verify parameter values match **Expected:** Same underlying state representation. **Implementation:** Ensure `getStateInformation()` / `setStateInformation()` are format-agnostic. --- ## Step 4: Generate Compatibility Matrix **@qa-engineer** - Document test results. Create a compatibility matrix spreadsheet: | DAW | Platform | Format | Load | Automation | State Save | Offline Render | Issues | |-----|----------|--------|------|------------|------------|----------------|--------| | Logic Pro | macOS | AU | ✅ | ✅ | ✅ | ✅ | None | | Logic Pro | macOS | VST3 | ✅ | ✅ | ✅ | ✅ | None | | Ableton Live | macOS | VST3 | ✅ | ✅ | ✅ | ✅ | None | | Ableton Live | Windows | VST3 | ✅ | ⚠️ | ✅ | ✅ | Minor: Undo lag | | Pro Tools | macOS | AAX | ✅ | ✅ | ✅ | ✅ | None | | Reaper | macOS | AU | ✅ | ✅ | ✅ | ✅ | None | | Reaper | macOS | VST3 | ✅ | ✅ | ✅ | ✅ | None | | FL Studio | Windows | VST3 | ✅ | ✅ | ⚠️ | ✅ | State lost on crash | | Cubase | Windows | VST3 | ✅ | ✅ | ✅ | ✅ | None | | Bitwig | Linux | VST3 | ✅ | ✅ | ✅ | ✅ | None | **Legend:** - ✅ Pass - ⚠️ Pass with minor issues - ❌ Fail - ➖ Not tested **Save to:** `test-results/daw-compatibility-matrix-[date].md` --- ## Step 5: Issue Documentation and Triage **@support-engineer** - Document issues for engineering. For each issue found, create structured bug report: ### Bug Report Template ```markdown ## Issue: [Brief description] **DAW:** Logic Pro 11.0.1 **Platform:** macOS 14.5 (Sonoma) **Format:** AU **Severity:** Medium ### Steps to Reproduce 1. Load plugin on audio track 2. Enable automation 3. Record automation on Cutoff parameter 4. Save project and reopen ### Expected Behavior Automation curve should be preserved and play back smoothly. ### Actual Behavior Automation curve appears but playback has zipper noise on parameter changes. ### Additional Info - Happens only in Logic Pro (not in Live or Reaper) - Only affects Cutoff parameter (other parameters fine) - Console shows warning: "Parameter smoothing issue" ### Files - Project file: `repro-logic-automation.logicx` - Screen recording: `automation-bug.mov` - Console log: `console-errors.txt` ``` **@daw-compatibility-engineer** - Investigate root cause and implement fixes. --- ## Step 6: Performance Benchmarking **@qa-engineer** - Measure performance in each DAW. Document CPU usage across DAWs: 1. **Single Instance CPU:** - Load plugin on single track - Play audio through it - Record CPU usage from DAW's performance meter 2. **Multi-Instance Stress Test:** - Load 50 instances - Measure total CPU - Check for performance degradation (should scale linearly) 3. **Latency Reporting:** - Verify plugin reports latency correctly - Check that DAW's latency compensation works **Expected:** Consistent performance across DAWs (within 10% variance). **Red Flag:** If one DAW shows 2x CPU usage, investigate wrapper or host-specific issues. --- ## Quick Test Mode (--quick) For rapid validation (30 minutes), test these 3 DAWs only: ### macOS: 1. Logic Pro (AU) - 10 min 2. Ableton Live (VST3) - 10 min 3. Reaper (VST3) - 10 min ### Windows: 1. Ableton Live (VST3) - 10 min 2. FL Studio (VST3) - 10 min 3. Reaper (VST3) - 10 min ### Linux: 1. Reaper (VST3) - 10 min 2. Bitwig (VST3) - 10 min 3. Ardour (VST3) - 10 min Run core tests only: - Plugin loads - Automation works - State saves/loads - No crashes --- ## Full Test Mode (--full) Comprehensive testing (2-3 hours): - All DAWs listed above - All test procedures - Cross-DAW validation - Performance benchmarking - Issue documentation --- ## Automated Checks (Where Possible) Some tests can be scripted: ### 1. Plugin Availability Check ```bash # macOS function check_plugin_installed() { local format=$1 local name=$2 case $format in vst3) [ -d ~/Library/Audio/Plug-Ins/VST3/$name.vst3 ] && echo "✅ VST3 found" || echo "❌ VST3 missing" ;; au) [ -d ~/Library/Audio/Plug-Ins/Components/$name.component ] && echo "✅ AU found" || echo "❌ AU missing" ;; aax) [ -d "/Library/Application Support/Avid/Audio/Plug-Ins/$name.aaxplugin" ] && echo "✅ AAX found" || echo "❌ AAX missing" ;; esac } check_plugin_installed vst3 MyPlugin check_plugin_installed au MyPlugin ``` ### 2. AU Validation (macOS) ```bash # Automated AU validation auval -v aufx Plug Manu 2>&1 | tee auval-results.txt if grep -q "PASSED" auval-results.txt; then echo "✅ AU Validation Passed" else echo "❌ AU Validation Failed" cat auval-results.txt exit 1 fi ``` ### 3. Check for Missing Dependencies (Windows) ```powershell # Check for DLL dependencies $dllCheck = dumpbin /dependents "C:\Program Files\Common Files\VST3\MyPlugin.vst3\Contents\x86_64-win\MyPlugin.vst3" if ($dllCheck -match "MSVCP|VCRUNTIME") { Write-Host "⚠️ Warning: MSVC runtime dependencies detected" -ForegroundColor Yellow Write-Host "Ensure static linking or distribute runtime" } ``` --- ## Integration with CI/CD Add DAW testing to GitHub Actions workflow: ```yaml # .github/workflows/daw-testing.yml name: DAW Compatibility Testing on: release: types: [created] jobs: daw-tests-macos: runs-on: macos-latest steps: - uses: actions/checkout@v3 - name: Build plugin run: | cmake -B build -DCMAKE_BUILD_TYPE=Release cmake --build build - name: Install plugin run: | cp -r build/MyPlugin_artefacts/VST3/MyPlugin.vst3 ~/Library/Audio/Plug-Ins/VST3/ cp -r build/MyPlugin_artefacts/AU/MyPlugin.component ~/Library/Audio/Plug-Ins/Components/ - name: Run auval run: | auval -v aufx Plug Manu # Manual DAW testing must be done locally - name: Reminder run: echo "⚠️ Manual DAW testing required - see /run-daw-tests command" ``` --- ## Definition of Done DAW testing is complete when: - ✅ All targeted DAWs tested (quick or full mode) - ✅ Compatibility matrix generated and saved - ✅ All critical issues documented with repro steps - ✅ Performance benchmarks recorded - ✅ Cross-DAW consistency verified (presets, automation, rendering) - ✅ Results shared with team for triage - ✅ Regression testing plan created for future releases --- ## Common Issues and Solutions ### Issue: Plugin doesn't appear in DAW **Cause:** Plugin not in correct location or not scanned. **Solution:** - Verify plugin path (see platform-specific paths above) - Rescan plugins in DAW preferences - Check file permissions (should be readable) - macOS: Remove quarantine attribute: `xattr -dr com.apple.quarantine MyPlugin.vst3` ### Issue: AU validation fails on macOS **Cause:** Apple's auval is very strict. **Solution:** - Check `JucePlugin_*` defines in PluginProcessor.h - Ensure manufacturer code and plugin code are correct - Verify bundle ID matches: `com.yourcompany.pluginname` - Check Info.plist in AU bundle ### Issue: Automation has zipper noise **Cause:** Insufficient parameter smoothing. **Solution:** ```cpp // In PluginProcessor.cpp void prepareToPlay(double sampleRate, int samplesPerBlock) { // Smooth parameters over ~20ms parameterSmoother.reset(sampleRate, 0.02); } void processBlock(AudioBuffer& buffer, MidiBuffer&) { auto cutoffTarget = *cutoffParam; auto smoothedCutoff = parameterSmoother.getNextValue(cutoffTarget); // Use smoothedCutoff in DSP } ``` ### Issue: Offline render doesn't match realtime **Cause:** Non-deterministic behavior or tempo-sync assumptions. **Solution:** - Remove any randomization or ensure seeded RNG - Use `getPlayHead()` for tempo info, don't assume fixed tempo - Ensure `prepareToPlay()` resets all state ### Issue: State doesn't restore correctly **Cause:** `getStateInformation()` / `setStateInformation()` mismatch. **Solution:** - Use `ValueTree::toXmlString()` and `ValueTree::fromXml()` for robust serialization - Test round-trip: save → load → save → compare - Version your state format for backward compatibility --- ## Expert Help Delegate DAW testing tasks: - **@daw-compatibility-engineer** - Lead DAW testing, investigate compatibility issues - **@qa-engineer** - Execute manual test procedures, document results - **@support-engineer** - Triage and document bug reports - **@test-automation-engineer** - Automate checks where possible - **@technical-lead** - Review critical issues and prioritize fixes --- ## Related Documentation - **TESTING_STRATEGY.md** - Overall testing approach - **RELEASE_CHECKLIST.md** - Pre-release validation (includes DAW testing) - **daw-compatibility-guide** skill - DAW-specific quirks and solutions - `/run-pluginval` command - Plugin format validation --- **Remember:** DAW compatibility testing is critical for user satisfaction. Each DAW has unique quirks and behaviors. Thorough testing prevents support headaches and builds trust with users.