MIDI Maestro is a sophisticated Python-based MIDI player featuring a custom sheet music format and an intuitive PyQt5 GUI. This application empowers users to load, play, and manipulate both MIDI files and custom sheet music with ease.
- Features
- Requirements
- Installation
- Usage
- Custom Sheet Format
- File Structure
- Controls
- Contributing
- License
- Load and play standard MIDI files (.mid, .midi)
- Support for proprietary sheet music format (.sheet)
- Sleek PyQt5-based graphical user interface
- Real-time playback control (play, pause, stop)
- Comprehensive song list with search functionality
- Dynamic BPM (tempo) and transposition display
- Visual progress bar for playback tracking
- Convenient keyboard shortcuts for playback control
- Multi-threaded playback for smooth performance
- Error handling and user feedback system
- Python 3.7+
- PyQt5
- mido
- pynput
-
Clone the repository:
git clone https://github.com/yourusername/midi-maestro.git cd midi-maestro
-
Create a virtual environment (optional but recommended):
python -m venv venv source venv/bin/activate # On Windows use `venv\Scripts\activate`
-
Install the required packages:
pip install -r requirements.txt
-
Launch the application:
python init.py
-
Place your MIDI files (.mid, .midi) or custom sheet files (.sheet) in the
songs
directory. -
Use the GUI to:
- Select and play songs
- Control playback (play, pause, stop)
- Search for specific tracks
- Adjust tempo and transposition
MIDI Maestro supports a proprietary sheet music format (.sheet) alongside standard MIDI files. The format is structured as follows:
- Line 1: Tempo (BPM)
- Line 2: Transposition value
- Remaining lines: Note sequences using custom notation
Example:
120
0
C D E F G A B C
init.py
: Main application file with GUI implementationmidi.py
: MIDI file handling and translation logicplayer.py
: Core music playback engineclasses.py
: Data classes for song representation
- F1: Navigate to previous song
- F2: Toggle play/pause
- F3: Skip to next song
We welcome contributions to MIDI Maestro! If you'd like to contribute, please follow these steps:
- Fork the repository
- Create a new branch (
git checkout -b feature/AmazingFeature
) - Commit your changes (
git commit -m 'Add some AmazingFeature'
) - Push to the branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
Please ensure your code adheres to our coding standards and includes appropriate tests.
This project is licensed under the GNU Affero General Public License v3.0 - see the LICENSE file for details.