A simple, feature-rich MIDI editor with advanced audio processing capabilities
Work in progress
Features β’ Screenshots β’ Installation β’ Usage β’ Architecture β’ Todo β’ Contributing
Note Naga is a professional MIDI editor built with C++ and Qt, featuring a custom real-time audio engine. It provides comprehensive tools for MIDI composition, editing, mixing, and audio processing with an intuitive graphical interface.
- Piano Roll Editor - Visual note editing with grid snapping and multiple selection
- Multi-track Support - Unlimited MIDI tracks with individual routing
- Advanced Note Manipulation:
- βοΈ Quantize notes to grid
- π² Humanize timing and velocity
- πΌ Transpose notes
- π Velocity editing and scaling
- β±οΈ Duration editing and scaling
- π΅ Legato and Staccato modes
- π Invert and retrograde transformations
- π§Ή Delete overlapping notes
- β° Scale timing
- Flexible Grid System - Multiple resolution options (whole, half, quarter, eighth, etc.)
- Follow Modes - Center, left-side, step-by-step, and none
- Loop Playback - Seamless loop support for composition workflow
- Track Mixer - Per-track volume, pan, mute, and solo controls
- Visual Volume Meters - Real-time multi-channel volume visualization
- Instrument Assignment - Support for FluidSynth (SoundFont) and external MIDI devices
- Flexible Routing - Connect tracks to different synthesizers and DSP chains
The engine includes 18 professional DSP effects:
| Effect | Description |
|---|---|
| π Gain | Volume control with dB scaling |
| ποΈ Pan | Stereo positioning |
| β‘ Compressor | Dynamic range compression |
| π« Limiter | Peak limiting protection |
| π Noise Gate | Automatic noise reduction |
| ποΈ Single EQ | Parametric equalizer (single band) |
| π Multi EQ | Multi-band equalizer |
| πΈ Filter | Low-pass, high-pass, band-pass filters |
| π Reverb | Room and hall reverb effects |
| β±οΈ Delay | Echo and delay effects |
| π΅ Chorus | Thickening and doubling |
| π Flanger | Jet-like modulation |
| π Phaser | Phase-shifting modulation |
| π₯ Saturator | Harmonic saturation and warmth |
| β‘ Exciter | High-frequency enhancement |
| πͺ Tremolo | Amplitude modulation |
| π‘ Stereo Imager | Stereo width control |
| π² Bitcrusher | Lo-fi digital distortion |
- Spectrum Analyzer - Real-time frequency spectrum visualization
- Volume Indicators - LED-style volume meters with peak detection
- Video Export - Export MIDI performance as video with visual piano roll
- MIDI Export - Save projects as standard MIDI files (coming soon)
- Customizable Video Settings - Resolution, FPS, codec options
- Real-time Preview - Preview video output before export
- FluidSynth Integration - High-quality SoundFont-based synthesis
- External MIDI Support - Route to hardware synthesizers
- Multi-instance Support - Multiple synthesizer instances per project
- Modern Dark Theme - Eye-friendly dark color scheme
- Flexible Dock System - Customizable workspace layout
- Keyboard Shortcuts - Efficient workflow with hotkeys
- Responsive Design - Smooth interaction and real-time updates
Note Naga is built on a modular architecture separating the GUI from the audio engine:
NoteNaga/
βββ src/ # GUI application
β βββ gui/ # Main window and UI components
β β βββ components/ # Reusable UI widgets
β β βββ dialogs/ # Dialog windows
β β βββ dock_system/ # Custom dock system
β β βββ editor/ # Piano roll editor
β β βββ widgets/ # Track list, mixer, DSP widgets
β βββ media_export/ # Video/audio export functionality
β βββ main.cpp # Application entry point
β
βββ note_naga_engine/ # Audio engine library
βββ core/ # Core types and project data
βββ dsp/ # DSP effect blocks
βββ io/ # MIDI file I/O
βββ module/ # Engine modules (mixer, playback, etc.)
βββ synth/ # Synthesizer implementations
The audio engine features a multi-threaded architecture:
- Playback Worker - Reads MIDI sequences and sends note events to mixer
- Mixer - Routes notes to appropriate synthesizers and processes audio
- DSP Engine - Applies effect chains to audio streams
- Audio Worker - Manages audio output callback and buffer management
- Spectrum Analyzer - Real-time frequency analysis
MIDI File β Project Data β Playback Worker β Mixer β Synthesizers
β
DSP Engine β Audio Output
- CMake 3.16 or higher
- Qt 5 or 6 (Widgets, Concurrent, Svg)
- OpenCV (for video export)
- FluidSynth (for SoundFont synthesis)
- C++17 compatible compiler
git clone https://github.com/0xMartin/NoteNagaCPlusPlus.git
cd NoteNagaCPlusPluscmake -S . -B build
make -C build -j8cd note_naga_engine
cmake -S . -B build -DQT_DEACTIVATED=ON
make -C build -j8./build/NoteNaga.app/Contents/MacOS/NoteNaga # macOS
./build/NoteNaga # Linux
./build/NoteNaga.exe # Windows- Load MIDI File:
File β Opento load an existing MIDI file - Edit Notes: Click and drag in the piano roll to create/modify notes
- Configure Instruments: Assign SoundFonts to tracks in the mixer
- Apply Effects: Add DSP blocks to tracks or master output
- Playback: Use transport controls to play and navigate
- Export:
File β Export Videoto render performance
| Shortcut | Action |
|---|---|
Space |
Play/Pause |
Home |
Go to start |
End |
Go to end |
Ctrl+O |
Open MIDI file |
Ctrl+E |
Export video |
Ctrl+Q |
Quit application |
Access advanced MIDI editing tools from the Edit menu:
- Quantize - Snap notes to grid
- Humanize - Add natural timing variations
- Transpose - Shift pitch up/down
- Velocity Tools - Set or scale note velocities
- Duration Tools - Adjust note lengths
- Articulation - Apply legato or staccato
- π Fix: Newly added notes not playing during playback
- πΎ MIDI Export: Save projects as standard MIDI files
- πΎ Project Save/Load: Complete project persistence
- π Project Explorer: Dialog for new/open/recent projects
- π¨ Section-based Layout: Split app into dedicated sections
- MIDI Editor: Track list + Piano roll + Mixer
- DSP Editor: DSP blocks + Volume indicator + Spectrum analyzer + Track preview
- Export: Media export dialog
- π±οΈ Context Menus: Right-click menus for all major components
- π Velocity Editor: Visual velocity editing panel
- βοΈ Enhanced Note Editing: Better manipulation and selection tools
- π― Apply to Selection: MIDI utilities work on selected notes only (or all if none selected)
- πΉ MIDI Input: Record notes from external MIDI devices
- β©οΈ Undo/Redo: History system for all edit operations
- π Plugin Support: VST/AU plugin integration
- ποΈ Automation: Automate mixer and effect parameters over time
- π Notation View: Traditional music notation display
- π¨ Custom Themes: User-configurable color schemes
- π΅ Audio Import: Mix audio tracks with MIDI
- π§ͺ Unit Tests: Comprehensive test coverage for engine
- π Documentation: Complete API documentation
- π§ Performance: Optimize DSP processing for large projects
- π Localization: Multi-language support
- π¦ Package Manager: Simplified installation process
Current project stores:
- MIDI data (sequences, tracks, notes)
- Mixer configuration (routing entries)
- DSP block data (effects and parameters)
Contributions are welcome! Please feel free to submit pull requests or open issues for bugs and feature requests.
- 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
- Follow C++17 standards
- Use Qt conventions for GUI code
- Keep engine code Qt-independent (can be built with
-DQT_DEACTIVATED=ON) - Add comments for complex algorithms
- Test changes thoroughly before submitting
This project is licensed under the MIT License - see the LICENSE file for details.
Martin KrΔma (0xMartin)
- GitHub: @0xMartin
- Repository: NoteNagaCPlusPlus
- Qt Framework - Cross-platform GUI toolkit
- FluidSynth - Software synthesizer
- OpenCV - Computer vision and video processing library
- CMake - Build system generator
Made with β€οΈ by 0xMartin
β Star this repo if you find it useful!


