pythonmusicAI

AI muzikant

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 scale
  • Play a C major chord
  • Play D# suspended 4th chord
  • Play twinkle twinkle little star
  • Play a simple happy melody
  • Play 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 experimenty
  • gpt-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

  1. Vstup uživatele → Požadavek v přirozeném jazyce (např. „Play C major scale")
  2. Generování LLM → OpenAI vygeneruje hudební notaci (C4 D4 E4 F4 G4 A4 B4 C5)
  3. Parsování → Parser notace převede zápis na MIDI čísla not a časování
  4. Přehrávání → MIDI přehrávač odesílá zprávy NOTE_ON/OFF v reálném čase
  5. 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áv
  • python-rtmidi — real-time MIDI I/O
  • openai — OpenAI API klient
  • python-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áš .env soubor obsahuje OPENAI_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 🎵