A simple text editor for musicians that automatically detects and plays guitar/piano chords using FluidSynth synthesis.
- Text editor with syntax highlighting for chord symbols
- Real-time chord detection (supports major, minor, 7th, dim, aug, sus, and complex jazz chords)
- Interactive chord playback (click any chord to hear it)
- Auto-play mode with configurable BPM and time signature
- Visual chord highlighting during playback
- File operations (New, Open, Save, Save As)
- Recent files menu
- Configurable font size and BPM settings
-
Linux: FluidSynth library (
libfluidsynthpackage)# Fedora/RHEL sudo dnf install fluidsynth # Ubuntu/Debian sudo apt install libfluidsynth3 # Arch sudo pacman -S fluidsynth
-
Windows: No additional dependencies needed (FluidSynth DLL will be bundled with the executable)
- Python 3.10+
- Pipenv for dependency management
Download the latest release from the Releases page:
- Linux:
ChordNotepad-linux-x64(standalone executable) - Windows:
ChordNotepad-windows-x64.exe - macOS:
ChordNotepad-macos-x64
All releases are automatically built and tested using GitHub Actions.
-
Clone the repository:
git clone https://github.com/yourusername/chord-notepad.git cd chord-notepad -
Install dependencies:
pipenv install
-
Run the application:
make run # or pipenv run python src/main.py
Install development dependencies:
pipenv install --devBuild a standalone executable for your current platform:
make buildThe executable will be created in the dist/ directory:
- Linux:
dist/ChordNotepad - Windows:
dist/ChordNotepad.exe
Building on Linux for Linux:
make build
# Output: dist/ChordNotepadBuilding on Windows for Windows:
pipenv install --dev
pipenv run pyinstaller --clean chord-notepad.spec
REM Output: dist\ChordNotepad.exeNote: PyInstaller creates platform-specific executables. To build for Windows, you must run the build on a Windows machine. To build for Linux, run on a Linux machine.
-
Create or Open a File: Use File > New or File > Open
-
Write Lyrics with Chords: Type chord symbols above lyrics
C Am F G This is a simple song Dm7 G7 Cmaj7 With jazz chords too -
Click Chords: Click any highlighted chord to hear it
-
Auto-Play: Click the Play button to auto-play all chords sequentially
-
Configure Settings:
- Settings > BPM: Adjust playback speed (default: 120)
- Settings > Font Size: Adjust editor font size
- Major: C, D, E, F, G, A, B
- Minor: Cm, Dm, Em, Am
- Seventh: C7, Dm7, Gmaj7, Am7
- Diminished: C°, Ddim, Cdim7
- Augmented: C+, Daug
- Suspended: Csus2, Csus4, Dsus
- Extended: C9, D11, E13
- Alterations: C7b5, D7#9, Em7b5
- Half-diminished: Cø7, Dm7b5
- Add chords: Cadd9, Dadd11
Ctrl+N: New fileCtrl+O: Open fileCtrl+S: Save fileCtrl+Shift+S: Save AsCtrl+Q: QuitCtrl+MouseWheel: Zoom in/out
chord-notepad/
├── src/
│ ├── main.py # Application entry point
│ ├── ui/
│ │ ├── main_window.py # Main window with menu and toolbar
│ │ └── text_editor.py # Custom text editor widget
│ ├── audio/
│ │ ├── player.py # FluidSynth audio player
│ │ └── chord_picker.py # Chord-to-MIDI converter
│ └── chord/
│ └── converter.py # Chord notation parser
├── resources/
│ └── soundfont/
│ └── GeneralUser-GS.sf2 # Bundled soundfont
├── chord-notepad.spec # PyInstaller spec file
├── Pipfile # Python dependencies
├── Makefile # Build commands
└── README.md
make testmake cleanThe project uses standard Python conventions with:
- 4-space indentation
- Clear, descriptive variable names
- Docstrings for all public methods
- Main Thread: Tkinter GUI event loop
- Player Thread: FluidSynth playback with precise timing
- Cross-thread Communication: Queue-based invoke system for thread-safe GUI updates
- Uses FluidSynth for high-quality MIDI synthesis
- Supports real-time note triggering (click-to-play)
- Scheduled playback with configurable BPM and time signatures
- Each chord plays for 1 bar (4 beats in 4/4 time)
pyfluidsynth: Python bindings for FluidSynthpychord: Chord parsing and music theorytkinter: GUI framework (included with Python)
pyinstaller: Creates standalone executablespytest: Testing framework
MIT License - feel free to use and modify for your own projects.
Contributions are welcome! Please feel free to submit a Pull Request.
- FluidSynth for MIDI synthesis
- PyChord for chord parsing
- GeneralUser GS soundfont by S. Christian Collins