daw-compatibility-guide
DAW-specific quirks, known issues, and workarounds for Logic Pro, Ableton Live, Pro Tools, Cubase, Reaper, FL Studio, Bitwig with format-specific requirements (AU/VST3/AAX). Use when troubleshooting DAW compatibility, fixing host-specific bugs, implementing DAW workarounds, passing auval validation, or debugging automation issues.
What this skill does
# DAW Compatibility Guide
Comprehensive guide to DAW-specific quirks, known issues, and workarounds for ensuring your JUCE plugin works correctly across all major digital audio workstations.
## Overview
Each DAW has unique behaviors, assumptions, and quirks that can affect plugin operation. This guide documents common issues and proven solutions for Logic Pro, Ableton Live, Pro Tools, Cubase, Reaper, FL Studio, Bitwig, and others.
## When to Use This Guide
- Debugging DAW-specific issues reported by users
- Testing plugin compatibility across multiple DAWs
- Implementing DAW-specific workarounds
- Understanding format-specific requirements (AU, VST3, AAX)
- Planning cross-DAW automation and state compatibility
---
## Logic Pro (macOS - AU/VST3)
### Overview
- **Formats:** Audio Unit (preferred), VST3
- **Strictness:** Very strict AU validation (`auval`)
- **Automation:** Sample-accurate, works well
- **Unique Features:** AU-specific validation, side-chain routing
### AU Validation Requirements
**Issue:** Logic requires plugins to pass `auval` validation.
**Requirements:**
```cpp
// PluginProcessor.h - Ensure these are set correctly
#define JucePlugin_Name "MyPlugin"
#define JucePlugin_Desc "Description"
#define JucePlugin_Manufacturer "YourCompany"
#define JucePlugin_ManufacturerCode 'Manu' // 4 characters, unique!
#define JucePlugin_PluginCode 'Plug' // 4 characters, unique!
#define JucePlugin_AUMainType 'aufx' // Effect
// OR 'aumu' for MIDI effect
// OR 'aumf' for instrument
#define JucePlugin_AUSubType JucePlugin_PluginCode
#define JucePlugin_AUExportPrefix MyPluginAU
#define JucePlugin_AUExportPrefixQuoted "MyPluginAU"
```
**Validation Command:**
```bash
auval -v aufx Plug Manu
```
**Common auval Failures:**
1. **Failure: "FATAL ERROR: AudioUnitInitialize failed"**
```cpp
// Cause: prepareToPlay() throws exception or asserts
void prepareToPlay(double sampleRate, int samplesPerBlock) override {
// ❌ Don't do this:
jassert(sampleRate == 44100.0); // Fails in auval!
// ✅ Do this:
if (sampleRate < 8000.0 || sampleRate > 192000.0)
return; // Handle gracefully
}
```
2. **Failure: "FATAL ERROR: Property size is incorrect"**
```cpp
// Cause: Incorrect I/O configuration
bool isBusesLayoutSupported(const BusesLayout& layouts) const override {
// Be permissive for auval
if (layouts.getMainOutputChannelSet().isDisabled())
return false; // Must have output
return true; // Allow any channel config for auval
}
```
3. **Failure: "FATAL ERROR: Render called with null buffer"**
```cpp
void processBlock(AudioBuffer<float>& buffer, MidiBuffer&) override {
// auval sometimes passes zero-size buffers
if (buffer.getNumSamples() == 0)
return; // Early exit for empty blocks
}
```
**Run auval successfully:**
```bash
# Full validation (takes ~5 minutes)
auval -v aufx Plug Manu
# Strict validation (recommended)
auval -strict -v aufx Plug Manu
# If it passes, you'll see:
# * * * * * * * * * * * * * * * * * * * * * * * * * * * *
# AU VALIDATION SUCCEEDED
# * * * * * * * * * * * * * * * * * * * * * * * * * * * *
```
### Logic-Specific Issues
**Issue: Automation writes incorrectly or doesn't play back**
**Cause:** Parameter smoothing interfering with Logic's automation.
**Solution:**
```cpp
// Don't smooth parameters that Logic is automating
void processBlock(AudioBuffer<float>& buffer, MidiBuffer&) override {
// ❌ Always smoothing
float cutoff = smoother.getNextValue(*cutoffParam);
// ✅ Only smooth if parameter changed recently
if (cutoffParam->load() != lastCutoffValue) {
smoother.setTargetValue(*cutoffParam);
lastCutoffValue = *cutoffParam;
}
float cutoff = smoother.getNextValue();
}
```
**Issue: Offline bounce doesn't match realtime**
**Cause:** Tempo/time info assumptions.
**Solution:**
```cpp
void processBlock(AudioBuffer<float>& buffer, MidiBuffer&) override {
// ✅ Always query tempo from host
auto playHead = getPlayHead();
if (playHead != nullptr) {
juce::AudioPlayHead::CurrentPositionInfo posInfo;
playHead->getCurrentPosition(posInfo);
float bpm = posInfo.bpm;
double ppqPosition = posInfo.ppqPosition;
bool isPlaying = posInfo.isPlaying;
// Use this info, don't cache tempo!
}
}
```
**Issue: Side-chain input doesn't work (AU)**
**Cause:** AU side-chain requires special bus configuration.
**Solution:**
```cpp
MyPluginProcessor::MyPluginProcessor()
: AudioProcessor(BusesProperties()
.withInput ("Input", AudioChannelSet::stereo(), true)
.withOutput("Output", AudioChannelSet::stereo(), true)
.withInput ("Sidechain", AudioChannelSet::stereo(), false)) // Optional
{
}
void processBlock(AudioBuffer<float>& buffer, MidiBuffer&) override {
// Get sidechain bus
auto mainInputOutput = getBusBuffer(buffer, true, 0);
auto sidechain = getBusBuffer(buffer, true, 1); // Second input bus
if (!sidechain.getNumChannels())
return; // No sidechain connected
// Process with sidechain...
}
```
---
## Ableton Live (VST3/AU)
### Overview
- **Formats:** VST3 (Windows/macOS), AU (macOS)
- **Automation:** Works well, supports breakpoint automation
- **Unique Features:** Max for Live integration, Device Racks, Macro mapping
### Live-Specific Issues
**Issue: Plugin doesn't appear in Live's browser**
**Cause:** VST3 not in correct folder or not scanned.
**Solution:**
```bash
# macOS VST3 path
~/Library/Audio/Plug-Ins/VST3/MyPlugin.vst3
# Windows VST3 path
C:\Program Files\Common Files\VST3\MyPlugin.vst3
# Rescan in Live:
# Preferences → Plug-Ins → "Rescan" button
```
**Issue: Undo/Redo causes parameter jumps**
**Cause:** Live's undo system conflicts with plugin parameter changes.
**Solution:**
```cpp
// Mark parameter changes as gestures to prevent undo conflicts
void parameterValueChanged(int parameterIndex, float newValue) override {
// Notify host of parameter change
auto* param = getParameters()[parameterIndex];
param->beginChangeGesture();
param->setValueNotifyingHost(newValue);
param->endChangeGesture();
}
```
**Issue: Plugin latency not compensated correctly**
**Cause:** Plugin doesn't report latency.
**Solution:**
```cpp
int getLatencySamples() const override {
return latencyInSamples; // Report actual latency
}
void prepareToPlay(double sampleRate, int samplesPerBlock) override {
// Update latency if it changes
latencyInSamples = calculateLatency();
setLatencySamples(latencyInSamples);
}
```
**Issue: Freeze/Flatten produces incorrect audio**
**Cause:** Non-deterministic behavior or offline/realtime mismatch.
**Solution:**
- Ensure processBlock is deterministic
- Reset all state in prepareToPlay()
- Don't use system time or random numbers without seeding
```cpp
void prepareToPlay(double sampleRate, int samplesPerBlock) override {
// ✅ Reset all state for deterministic processing
filter.reset();
envelope.reset();
rng.setSeed(12345); // Seeded random for determinism
}
```
**Issue: Macro mapping doesn't work**
**Cause:** Parameter range or normalization issues.
**Solution:**
```cpp
// Ensure parameters use normalized 0-1 range internally
auto param = std::make_unique<AudioParameterFloat>(
"cutoff",
"Cutoff",
NormalisableRange<float>(20.0f, 20000.0f, 0.01f, 0.3f), // Skew
1000.0f
);
// Live's macros expect normalized parameter access to work
```
---
## Pro Tools (AAX)
### Overview
- **Format:** AAX (PACE/iLok signed)
- **Strictness:** Very strict, requires code signing
- **Automation:** Sample-accurate, very robust
- **Unique Features:** AudioSuite (offline processing), HDX DSP
### AAX Requirements
**Issue: Plugin doesn't load - "damaged" or "unsigned" error**
**Cause:** Related in General
modeling-omnistudio-epc-catalog
IncludedSalesforce Industries CME EPC product-modeling skill for Product2-based catalog creation. Use when creating EPC products, configuring product attributes, building offer bundles with Product Child Items, or reviewing EPC DataPack JSON metadata for product catalog changes. TRIGGER when: user creates or updates Product2 EPC records, AttributeAssignment payloads, AttributeMetadata/AttributeDefaultValues, Offer bundles, or ProductChildItem relationships. DO NOT TRIGGER when: designing OmniScripts/FlexCards/Integration Procedures (use building-omnistudio-omniscript, building-omnistudio-flexcard, or building-omnistudio-integration-procedure), implementing Apex business logic (use generating-apex), or troubleshooting deployment pipelines (use deploying-metadata).
relationship-science-coach
IncludedUse this skill for direct, practical adult relationship coaching: couples conflict, repair, trust, marriage, dating, flirting, attachment patterns, emotional connection, sex, desire differences, eroticism, kink negotiation, affection, love languages, breakups, and long-term passion. Draw on Gottman, EFT and Hold Me Tight, attachment science, modern sex research, Perel, Nagoski, Kerner, Schnarch, Love and Stosny, and flexible love-language tools. Be concrete and low-hedge. Redirect only for imminent danger, abuse, coercive control, minors, non-consent, self-harm, stalking, or medical/legal/psychiatric decisions.
building-sf-integrations
IncludedSalesforce integration architecture and runtime plumbing with 120-point scoring. Use this skill to set up Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, and Change Data Capture. TRIGGER when: user sets up Named Credentials, External Services, REST/SOAP callouts, Platform Events, CDC, or touches .namedCredential-meta.xml files. DO NOT TRIGGER when: Connected App/OAuth config (use configuring-connected-apps), Apex-only logic (use generating-apex), or data import/export (use handling-sf-data).
venue-templates
IncludedAccess comprehensive LaTeX templates, formatting requirements, and submission guidelines for major scientific publication venues (Nature, Science, PLOS, IEEE, ACM), academic conferences (NeurIPS, ICML, CVPR, CHI), research posters, and grant proposals (NSF, NIH, DOE, DARPA). This skill should be used when preparing manuscripts for journal submission, conference papers, research posters, or grant proposals and need venue-specific formatting requirements and templates.
let-fate-decide
IncludedDraws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, makes Yu-Gi-Oh references, or when you are about to arbitrarily pick between multiple reasonable approaches. Prefer over ask-questions-if-underspecified when the user's tone is casual or playful rather than precision-seeking.
net-ops
IncludedCross-platform network troubleshooting (Windows, macOS, Linux) via local or remote shell. Use for: DNS broken, can't resolve hostnames, nslookup/dig works but apps fail, NRPT, WFP, scutil, /etc/resolver, systemd-resolved, /etc/resolv.conf, NetworkManager, VPN DNS leak residue (ProtonVPN/Mullvad/WireGuard/AnyConnect), AV/firewall blocking DNS or DoH, Tailscale DNS interaction, intermittent connectivity, remote diagnostics over SSH.