A professional audio plugin for DAW final stage mixing that provides instant switching between your work-in-progress mix and reference audio sources. Built with JUCE framework and modern web technologies.
- Dual Source Switching: Seamlessly switch between HOST (DAW) and WAV file sources
- Playlist Management: Add, remove, and reorder audio files with drag-and-drop support
- Audio Transport: Play, pause, seek, loop, and jump controls
- Real-time Monitoring: Volume meters and audio level monitoring
- Low-pass Filter: Built-in LPF for frequency analysis
- Modern UI: Web-based interface using React 19, Material-UI v7, and TypeScript
- VST3: Compatible with most modern DAWs
- AU: Native macOS Audio Unit support
- AAX: Protools
- Standalone: Independent application for testing and reference
- Windows 10 or later
- Visual Studio 2019 or later (for building)
- CMake 3.22 or later
- macOS 10.15 or later
- Xcode 12 or later (for building)
- CMake 3.22 or later
-
Clone the repository
git clone https://github.com/yourusername/MixCompare.git cd MixCompare -
Install dependencies
- Windows: Install Visual Studio with C++ development tools
- macOS: Install Xcode command line tools
- Both: Install Node.js 18+ and npm
-
AAX SDK Setup (for AAX plugin builds)
- Register at Avid Developer Portal
- Download AAX SDK from the developer portal
- Place the SDK in one of these directories:
MixCompare/ ├── AAX_SDK/ # Recommended ├── aax-sdk/ # Alternative 1 └── AAX/ # Alternative 2 - Note: AAX SDK is not included in the repository due to licensing restrictions
-
Set up environment variables (optional, for signed builds) Add to your PowerShell profile (
$PROFILE):# PACE Anti-Piracy signing credentials (for developers only) $env:PACE_USERNAME = "your-username" $env:PACE_PASSWORD = "your-password" $env:PACE_ORGANIZATION = "your-org-guid" $env:PACE_KEYPASSWORD = "your-key-password" # PFX certificate path (optional - will fallback to project root if not set) $env:PACE_PFX_PATH = "D:\path\to\your\certificate.pfx"
-
Build the plugin
.\build_windows_release.ps1
Note: If PACE credentials are not set, the build will create unsigned plugins suitable for development and testing.
AAX Build Options:
- If AAX SDK is not available, AAX plugin builds will be skipped automatically
- VST3 and Standalone builds will still work without AAX SDK
Certificate Options:
- Set
PACE_PFX_PATHenvironment variable to specify custom certificate location - Place
mixcompare-dev.pfxin project root directory - Place certificate in
%USERPROFILE%\.mixcompare\dev.pfx - Place certificate in
.\certificates\mixcompare-dev.pfx
-
Set up environment variables (optional, for signed builds) Add to your shell profile:
# PACE Anti-Piracy signing credentials (for developers only) export PACE_USERNAME="your-username" export PACE_PASSWORD="your-password" export PACE_ORGANIZATION="your-org-guid" export PACE_KEYPASSWORD="your-key-password" # Code signing (optional - will auto-detect from Keychain if not set) export CODESIGN_IDENTITY="Developer ID Application: Your Name (TEAMID)" # Notarization (choose one method) # Method 1: App Store Connect API Key export APPLE_API_KEY_PATH="/path/to/AuthKey_XXXXXXXXXX.p8" export APPLE_API_KEY_ID="XXXXXXXXXX" export APPLE_API_ISSUER="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" # Method 2: Keychain Profile (recommended) export NOTARYTOOL_PROFILE="your-profile-name" # Method 3: Apple ID (legacy) export APPLE_ID="your-apple-id@example.com" export APP_PASSWORD="your-app-specific-password" export TEAM_ID="XXXXXXXXXX"
-
Build the plugin
./build_local_macos.zsh
Note: macOS builds automatically detect code signing certificates from Keychain. If
CODESIGN_IDENTITYis not set, the script will automatically find and use the first available "Developer ID Application" certificate.AAX Build Options:
- If AAX SDK is not available, AAX plugin builds will be skipped automatically
- VST3, AU, and Standalone builds will still work without AAX SDK
Keychain Integration:
- Code signing certificates are automatically detected from Keychain
- Notarization credentials can be stored as Keychain profiles
- No hardcoded paths or credentials required
For development with live web UI updates:
-
Start the web development server
cd webui npm install npm run dev -
Build the plugin in development mode
- The plugin will load the web UI from
http://localhost:5173 - Changes to the web UI will be reflected immediately
- The plugin will load the web UI from
- Audio processing and file I/O
- State management with ValueTree/APVTS
- Cross-platform plugin framework
- Modern user interface
- Drag-and-drop playlist management
- Real-time audio monitoring
- Responsive design with Material-UI
- Bidirectional messaging between native and web layers
- Throttled updates for performance (20-60Hz)
- Command-based API for user interactions
- Load the plugin in your DAW's final stage
- Add reference files to the playlist using drag-and-drop
- Switch sources between HOST (your DAW mix) and WAV files
- Use transport controls for playback, seeking, and looping
- Monitor levels with built-in meters and volume controls
MixCompare/
├── plugin/src/ # C++ plugin source code
├── webui/ # React/TypeScript web interface
└── cmake/ # CMake configuration
- JUCE Framework: Cross-platform audio plugin development
- React 19: Modern web UI framework
- Material-UI v7: Component library
- TypeScript: Type-safe JavaScript
- Vite: Fast build tool and dev server
- DnD Kit: Drag-and-drop functionality
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Built with JUCE Framework
- Web UI powered by React and Material-UI
- Audio plugin development best practices from the JUCE community
For issues, feature requests, or questions:
- Open an issue on GitHub