Celý projekt ke stažení ZDE
Generátor MIDI hudby řízený jazykovým modelem, který hraje noty na tvém MIDI keyboardu v reálném čase.
🎯 Co to dělá
Popíšeš hudbu přirozeným jazykem a LLM vygeneruje hudební notaci, která se přehraje na tvém MIDI keyboardu (Novation Launchkey nebo jakémkoli jiném MIDI zařízení).
Example:
🎹 > Play C major scale
🤖 Asking LLM to generate notation...
📝 Generated notation: C4 D4 E4 F4 G4 A4 B4 C5
🔄 Parsing notation...
✓ Parsed 16 MIDI events
▶️ Playing...
✓ Done!
🚀 Rychlý start
1. Instalace závislostí
pip install -r requirements.txt
2. Nastavení OpenAI API klíče
Vytvoř soubor .env v kořenové složce projektu:
OPENAI_API_KEY=your_api_key_here
3. Připojení MIDI zařízení
Připoj MIDI keyboard (Novation Launchkey nebo jakékoli jiné MIDI zařízení) k počítači.
4. Spuštění
python src/main.py
💡 Příklady použití
Po spuštění zadáváš požadavky přirozeným jazykem:
Play C major scalePlay a C major chordPlay D# suspended 4th chordPlay twinkle twinkle little starPlay a simple happy melodyPlay C D E C E G C
📝 Formát notace
LLM generuje notaci v tomto formátu:
Jednotlivé noty
C4 D4 E4 F4 G4
Noty s posuvkami
C#4 D#4 F#4
Akordy (současně hrané noty)
C4+E4+G4
Vlastní délka (v milisekundách)
C4:1000 D4:500 E4:250
Kombinace
C4 E4 C4+E4+G4 G4:1000
🏗️ Struktura projektu
midi-realtime-generator/
├── src/
│ ├── main.py # Hlavní aplikace
│ ├── devices/
│ │ ├── detector.py # Detekce MIDI zařízení
│ │ └── launchkey.py # Podpora Novation Launchkey
│ ├── llm/
│ │ ├── client.py # OpenAI LLM klient
│ │ └── prompts.py # Systémové prompty
│ ├── midi/
│ │ ├── controller.py # Odesílání MIDI zpráv
│ │ ├── parser.py # Převod notace na MIDI
│ │ └── player.py # Přehrávání v reálném čase
│ └── utils/
│ └── config.py # Načítání konfigurace
├── config/
│ └── settings.json # Nastavení aplikace
├── requirements.txt
└── README.md
⚙️ Konfigurace
Uprav config/settings.json:
{
"midi": {
"device_name": "S-1",
"send_to_all_launchkey_ports": false,
"default_velocity": 100,
"default_duration_ms": 500,
"default_octave": 4
},
"llm": {
"model": "gpt-4o-mini",
"temperature": 0.7,
"max_tokens": 3000
}
}
🎵 Výběr LLM modelu
gpt-4o-mini(výchozí): Rychlejší a levnější, vhodné pro krátké melodie a experimentygpt-4o: Lepší hudební porozumění, generuje delší a komplexnější melodie (doporučeno pro skladby)gpt-4-turbo: Nejlepší kvalita, nejdražší
Pro lepší výsledky u celých skladeb změň v config/settings.json:
"model": "gpt-4o"
🎼 Jak to funguje
- Vstup uživatele → Požadavek v přirozeném jazyce (např. „Play C major scale")
- Generování LLM → OpenAI vygeneruje hudební notaci (
C4 D4 E4 F4 G4 A4 B4 C5) - Parsování → Parser notace převede zápis na MIDI čísla not a časování
- Přehrávání → MIDI přehrávač odesílá zprávy NOTE_ON/OFF v reálném čase
- Výstup → Tvůj MIDI keyboard zahraje hudbu! 🎹
🔧 Požadavky
- Python 3.8+
- MIDI výstupní zařízení (Novation Launchkey nebo jakýkoli MIDI keyboard/syntezátor)
- OpenAI API klíč
📦 Závislosti
mido— zpracování MIDI zprávpython-rtmidi— real-time MIDI I/Oopenai— OpenAI API klientpython-dotenv— správa proměnných prostředí
🎵 Pokročilé použití
Přímý režim notace
Parser lze použít i přímo bez LLM:
from midi.parser import NotationParser
from midi.controller import MIDIController
from midi.player import MIDIPlayer
parser = NotationParser()
controller = MIDIController()
controller.open()
player = MIDIPlayer(controller)
# Parsování a přehrání
events = parser.parse_to_midi_sequence("C4 E4 G4 C5")
player.play_sequence(events)
🐛 Troubleshooting
No MIDI devices found
- Zkontrolujte zda je MIDI zařízení správně připojeno a zapnuto
- Zkontrolujte zda se zařízení zobrazuje v nastavení MIDI vašeho operačního systému
- Zkuste spustit:
python -c "import mido; print(mido.get_output_names())"
LLM initialization failed
- Zkontrolujte zda váš
.envsoubor obsahujeOPENAI_API_KEY=... - Ověřte, zda je API klíč platný na platform.openai.com
Notes not playing
- Zkontrolujte zda MIDI zařízení není používáno jinou aplikací
- Ověřte, zda je zařízení nastaveno na příjem MIDI zpráv
- Zkuste upravit hodnotu velocity v
config/settings.json
Made with ❤️ and 🎵