Score Generation

v0.4.0

Gé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);