Score Generation
v0.4.0Générez des partitions musicales par IA avec export MIDI. Décrivez votre morceau en texte, obtenez une partition PNG et un fichier MIDI jouable.
Base URL :
https://api.s33d.fr
POST /v1/score
Génère une partition musicale à partir d'une description textuelle. Utilise un LLM pour produire de la notation ABC, puis music21 + LilyPond pour rendre la partition en image PNG et exporter un fichier MIDI jouable.
Paramètres (JSON body)
| Paramètre | Type | Requis | Description |
|---|---|---|---|
| prompt | string | oui | Description du morceau à composer (2-1000 caractères). Ex: "A jazz waltz in D minor, 8 measures with syncopation" |
| key | string | null | non | Tonalité souhaitée. Ex: "C major", "Am", "Bb minor". Par défaut : choix du LLM. |
| time_signature | string | null | non | Signature rythmique. Ex: "4/4", "3/4", "6/8". Par défaut : choix du LLM. |
| measures | integer | non | Nombre approximatif de mesures (4-32). Défaut : 8. |
Réponse
| Champ | Type | Description |
|---|---|---|
| abc_notation | string | Notation ABC complète du morceau généré (format texte standard). |
| score_png_base64 | string | Image PNG de la partition encodée en base64. |
| midi_base64 | string | Fichier MIDI encodé en base64 (décodez et sauvez en .mid pour écouter). |
| title | string | Titre du morceau généré. |
| key | string | Tonalité détectée du morceau (ex: "C major"). |
| time_signature | string | Signature rythmique du morceau. |
| generation_time_ms | integer | Temps total de génération en millisecondes. |
💡 Astuce
Le fichier MIDI peut être lu directement dans la plupart des lecteurs audio ou importés dans un DAW (GarageBand, Ableton, FL Studio). L'ABC notation peut être éditée manuellement dans n'importe quel éditeur ABC.
Exemples
cURL
curl -X POST https://api.s33d.fr/v1/score \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"prompt": "A jazz waltz in D minor with walking bass",
"key": "Dm",
"time_signature": "3/4",
"measures": 8
}'
Python
import requests, base64
resp = requests.post(
"https://api.s33d.fr/v1/score",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={
"prompt": "A celtic jig in G major, lively tempo",
"time_signature": "6/8",
"measures": 16
}
)
data = resp.json()
# Sauvegarder la partition PNG
with open("partition.png", "wb") as f:
f.write(base64.b64decode(data["score_png_base64"]))
# Sauvegarder le fichier MIDI
with open("morceau.mid", "wb") as f:
f.write(base64.b64decode(data["midi_base64"]))
print(f"Titre: {data['title']}")
print(f"Tonalité: {data['key']}")
print(f"ABC:\n{data['abc_notation']}")
JavaScript
const resp = await fetch("https://api.s33d.fr/v1/score", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
},
body: JSON.stringify({
prompt: "A blues riff in A minor, 12 bars",
measures: 12
})
});
const data = await resp.json();
// Afficher la partition dans un <img>
const img = document.createElement("img");
img.src = `data:image/png;base64,${data.score_png_base64}`;
document.body.appendChild(img);
// Créer un lien de téléchargement MIDI
const blob = new Blob(
[Uint8Array.from(atob(data.midi_base64), c => c.charCodeAt(0))],
{ type: "audio/midi" }
);
const a = document.createElement("a");
a.href = URL.createObjectURL(blob);
a.download = "score.mid";
a.textContent = "Télécharger le MIDI";
document.body.appendChild(a);