Communitygithub.com

Qiushuii/score-sync-guide

Erstelle ein langes Video ("mit der Partitur hören") aus einer MusicXML-Partitur und einer Audioaufnahme eines Orchesterwerks unter Windows: mit synchronisiertem, scrollendem Partitur-Display und erklärenden Analyse-Karten.

Was ist score-sync-guide?

Dieses Skill bündelt einen vollständigen Workflow zur Erstellung von „Score-Following“-Videos unter nativen Windows-Bedingungen (ohne WSL, Node oder Playwright). Es verarbeitet eine MusicXML-Partitur und eine Audioaufnahme eines Orchesterwerks und generiert ein Video, das links die horizontal scrollende Einzelstimmen-Partitur zeigt – mit fixiertem Cursor, rot eingefärbten aktuell klingenden Noten und nur der gerade aktiven Stimme – sowie rechts Analyse-Karten mit Form- und Satzstruktur. Der gesamte Ablauf umfasst Analyse der Partitur, Korrektur von Importfehlern, schrittweises Alignment (DTW gefolgt von note-by-note Feinalignment), Erstellung von Hörprüf-Listen, Abgleich von Analyse-Karten mit der Partitur sowie das Rendering des fertigen Videos mit headless Edge und ffmpeg. Der Workflow ist für praxisnahe Produktionen optimiert (z. B. 83 Minuten Mahlers 6. Sinfonie) und legt großen Wert auf Qualitätssicherung durch Querverweise und wiederholtes Hörtesten. Es unterstützt insbesondere die Arbeit mit großen Orchesterpartituren und langen Aufnahmen.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Qiushuii/score-sync-guide/tree/HEAD/skills/score-sync-guide

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Mit der Partitur hören (score-sync-guide)

Aus einer MusicXML-Partitur + einer Aufnahme ein Video erstellen: Links die horizontal scrollende Einzelstimmen-Partitur mit fixiertem Cursor, aktuell klingende Noten in Rot, nur die gerade aktive Stimme sichtbar; rechts Analyse-Karten und die Formstruktur des Satzes. Der gesamte Ablauf läuft unter nativen Windows – kein WSL, Node oder Playwright nötig.

Dieser Ansatz stammt aus der praktischen Produktion von Mahlers 6. Sinfonie (vier Sätze, 83 Minuten). Der note-by-note-Alignment-Algorithmus wurde von tofucurd/score-sync-video (MIT) portiert, ebenso mehrere Design-Ideen des Players (fixierter Cursor, stabile Stimmenaggregation, zweistufige Formstruktur, blockweise Fortsetzung); dieses Skill ist die lokalisierte und erweiterte Windows-Version (Analysekarten, Aufnahme-Alignment, Querverweis-Werkzeuge).

Diese Regeln zuerst lesen

  1. Originaldateien bleiben unberührt. Partitur und Aufnahme liegen schreibgeschützt im Projektstamm; Änderungen an der Partitur werden ausschließlich in scores_fixed/corrections.json festgehalten, von tools/fix_mxl.py als Kopie umgesetzt, mit Begründung (Seitenzahl in der Originalpartitur, Screenshot).
  2. Vor dem Ändern von Noten den Benutzer fragen. Community-MusicXML und gedruckte Partitur sind oft unterschiedliche Versionen – "Inkonsistenz" bedeutet nicht zwingend einen Fehler. Es werden nur offensichtliche Importfehler korrigiert.
  3. Kommerzielle Aufnahmen werden nicht auf Dienste Dritter hochgeladen und kommen nicht ins Repository.
  4. Neue Python-Pakete installiert der Benutzer selbst: Paketnamen und Befehl angeben, nicht selbst pip install ausführen.
  5. Jede faktische Behauptung in einer Karte benötigt eine Quelle: Partiturdaten (mit Takzahl) oder überprüfbare Literatur (references.json + Fußnote). Wenn nicht auffindbar, weglassen oder als "nicht verifiziert" kennzeichnen. Automatische harmonische Analyse ist bei großen Orchesterbesetzungen unzuverlässig – nur als Hinweis verwenden.
  6. Wenn der Benutzer keine Noten lesen kann, erfolgt die Abnahme durch Hören gegen die Partitur (Sammlung strittiger Stellen) – zuverlässiger als das Hören von "Tick"-Geräuschen.
  7. Zuerst das note-by-note-Feinalignment durchführen, dann den Benutzer hören lassen, dann Pins setzen. Der umgekehrte Weg (Benutzer gibt nacheinander Zeitpunkte an) würde viel Aufwand in taktinterne Abweichungen stecken, die das Feinalignment ohnehin automatisch löst.
  8. Persönliche Meinungen des Benutzers dienen als Beiwerk – keine erfundenen oder übertriebenen Aussagen.

Ablaufübersicht

SchrittWas wird gemachtHauptdateienDetails
0Projekt anlegen: template/ in das Projektstammverzeichnis kopieren, manifest.json schreibentemplate/, examples/mahler6/manifest.jsonworkflow
1Partitur-Check: Stimmen, Wiederholungen, Tempo, Probeziffern, Platzhalteranalyze.py, check_all.pyworkflow
2Korrigierte Kopie, chinesische Stimmennamen und Zusammenführungtools/fix_mxl.py, tools/build_labels.py, labels.jsonworkflow
3Taktweises DTW → sofort note-by-note-Feinalignmentalign/align.py, align/ssv_align.pyalignment
4Hörtest: Sammlung strittiger Stellen; nur bei Fehlern nach dem Feinalignment Pins setzen, lokal neu ausrichten, dann Feinalignment erneut ausführendemo/make_disputes.py, align/manual_regions.json, align/refine_local.pyalignment
5Form, Motive, Analyse-Kartenform/, motifs.json, cards/cards
6Querverweis zwischen Karten und Partitur, Prüfung der Verweildauertools/cards_xcheck.py, tools/cards_review.pycards
7Partitur-Setup, Player-Seite, Testclipdemo/build_score.py, demo/player.html, demo/render_frames.pyrendering
8Vollständiges Rendern und Zusammenfügendemo/render_film.pyrendering

Stolperfallen unter Windows (Kodierung, Prozesse, Ports, Batch-Umbruch, ffmpeg-Samplerate usw.) sind in windows-notes zusammengefasst – vor dem Start durchlesen.

Kürzester Pfad (ein Satz)

# System-Python (mit verovio, music21, librosa, numba)
$py = "python"
& $py -X utf8 analyze.py                                   # Check: out/<Partitur>_structure.json, report.txt
& $py -X utf8 align/align.py --movement 1                  # ① Taktweises DTW → align/m1_measures.json (Anfangsanker in align/anchors.json)
& $py -X utf8 align/ssv_align.py 1                         # ② Direkt danach note-by-note-Feinalignment → align/m1_ssv_chain.json
& $py -X utf8 align/make_checklist.py                      # Hörtest-Checkliste
& $py -X utf8 demo/make_disputes.py                        # ③ Sammlung strittiger Stellen: gegen die Partitur hören
# ④ Nur an noch falschen Stellen Pins/Beats in align/manual_regions.json eintragen, falls nötig:
& $py -X utf8 align/refine_local.py --movement 1
& $py -X utf8 align/ssv_align.py 1                         # ⑤ Nach Änderungen an Pins oder Taktliste Feinalignment erneut ausführen
& $py -X utf8 demo/build_score.py --movement 1 --range 1-40 --out demo/build   # Partitur-Setup (Positionen ab 1)
& $py -X utf8 demo/render_frames.py --data build/data.js --out demo/test.mp4  # Testclip

Gesamtes Video:

& $py -X utf8 demo/render_film.py plan --res 1920x1080 --fps 60 --name 样片 --single 4
& $py -X utf8 demo/render_film.py worker 1 --only 4        # Mehrere Worker gleichzeitig startbar (Nummer bestimmt Debug-Port)
& $py -X utf8 demo/render_film.py worker 2
& $py -X utf8 demo/render_film.py status
& $py -X utf8 demo/render_film.py assemble

Für lange Renderings den Prozess vom aktuellen Terminal entkoppelt starten (siehe WMI-Abschnitt in windows-notes), sonst wird er beim Schließen des Terminals oder der Sitzung abgebrochen.

Selbstprüfung vor Abgabe

  • Zeitachse strikt aufsteigend, keine fehlenden Takte; Anzahl Takte nach Wiederholungen deckt sich mit play_order.
  • Alle Stimmennamen sind chinesisch, kein "nicht kategorisiert".
  • Verdachtsfälle aus cards_xcheck.py wurden einzeln bewertet; cards_review.py vollständig bestanden; nach Änderungen an Karten build_refs.py erneut ausführen.
  • Nach Änderungen an der Taktliste oder Pins ssv_align.py erneut ausführen (build_score.py blockt veraltetes Feinalignment per Fingerprint).
  • Fertiges Video abschnittsweise auf korrekte Frames prüfen; stichprobenartige Sichtkontrolle.

Verwandte Skills