👉 Lies die ausführliche Installationsanleitung in INSTALL.md (inkl. Problemlösung und Setup-Hinweisen).
👉 Für den Access/XML-Austausch siehe Zusammenarbeit Access-HTML.md (aktueller Stand in der Datei).
- Projekt-Funktions-Check (Test der Umgebung)
- Digitaler Notentisch
- Aktuelle stabile Version
- Sicherheitscheck (Stand: 16.03.2026)
- Funktionen
- Start auf einem anderen Windows-System
- XML aus PDF-Verzeichnis erstellen oder ergänzen
- Card-Bilder generieren
- Bedienung
- Audio Auto (Mikrofon)
- Audio Auto Troubleshooting
- Center-/Zoom-Parameter (Basis fuer weitere Aenderungen)
- CenterAnsicht je Blatt (XML)
- Speichern
- Verzeichnisse (Ton/XML)
- Use Cases
- Dateiformat (XML)
- Projektdateien
- Test-Ordner
Um zu prüfen, ob das Projekt in deiner aktuellen Umgebung korrekt funktioniert, kannst du wie folgt vorgehen:
- Stelle sicher, dass Python 3 installiert ist und der Befehl
pythonverfügbar ist. - Starte im Projektordner einen lokalen Server:
py -3 python/local_server.py 8000- Öffne im Browser die Seite:
http://localhost:8000/board.html
-
Überprüfe, ob die Anwendung lädt und die Grundfunktionen (Karten anzeigen, PDF-Ansicht, Drag & Drop) funktionieren.
-
Optional: Führe die Tests im
test/-Ordner aus, um einzelne Funktionen automatisch zu prüfen:
cd test
node hello.test.jsWenn alle Schritte erfolgreich sind, ist das Projekt in deiner Umgebung funktionsfähig. Bei Problemen siehe Abschnitt "PROBLEMLOESUNG" in INSTALL.txt oder im README.
Interaktive Notenverwaltung mit 4 Quadranten, Drag & Drop, PDF-Viewer und XML-Import/Export.
- Release-Tag:
v2026.03.08 - Datum: 08.03.2026
- Branch:
main
Highlights dieser stabilen Version:
- Umschaltbare Center-Ausrichtung (
Links/Mitte/Rechts) mit persistenter Speicherung - Feinere Zoomschritte + kontinuierlicher Zoom bei langem Tastendruck
- Zoom-Fokus ist fest auf
links-obengesetzt (kein Fokus-Umschalter mehr) Auto Zoomals Toggle (auto anwenden beim Drop ins Center + auto speichern beim Verlassen)- 3-stufige Helligkeit fuer die Seitenanzeige (
dunkel|normal|hell) in Advanced Auto-Fullscreen beim Startals schaltbare Advanced-Option- Kein erzwungener Stack-Neuaufbau beim Zurücklegen aus dem Center
- Robustere PDF-Pfad-Fallbacks für Card-Vorschau und Center-Anzeige
- No-Cache-Header im lokalen Server gegen veraltete Browser-Stände
Aktueller Stand (04.04.2026):
- Rückkehr von
Configstellt Stapel-Reihenfolge bevorzugt aus dem vorhandenen DOM wieder her. - Spielmodus (
Spielen/Sichten) bleibt beim Rückweg erhalten. - Tonsuche-Button: Kurzdruck
Ton An -> Aus, Langdruck inTon An -> Aufnahme, inAufnahme -> Aus. - Bekannte Einschränkung: Bei einigen Browser-/Fullscreen-Kombinationen kann der Fullscreen beim Wechsel
Board -> Config -> Zurücktrotzdem verlassen werden.
Aktueller Stand (15.04.2026):
- Tonsuche-Fortschritt ist in allen Suchphasen sichtbar:
Sammeln(grau),Warten(gruen),Schwierig(braun). - In
Advancedist die Neuansatz-Pause bei Verspielern als feste Auswahl verfügbar (800,1000,1500ms). - Suchlauf-Reset nach kurzer Spielpause wurde robuster gemacht, damit neue Ansaetze nicht an alten Votes haengen.
- Rueckkehr aus
Config/Advancednutzt beim DOM-/History-Restore den vorhandenen Zustand und vermeidet unnoetigen Stack-Neuaufbau (spuerbar schneller). - Optionaler Paket-Guard fuer lokale Tests dokumentiert (
test/assert_no_extra_python_packages.ps1mit Allowlist intest/allowed-python-packages.txt).
Details siehe CHANGELOG.md.
Diese Zusammenfassung dokumentiert den durchgefuehrten Sicherheitscheck inkl. technischer Ablauftests, Ergebnisse und bereits umgesetzter Gegenmassnahmen.
- Fehlfunktion/Verfuegbarkeit: Unbeabsichtigtes Stoppen des lokalen Servers ueber den Shutdown-Endpoint.
- Systemeingriffe: Setup mit Adminrechten, Ausfuehrungspolicy und automatischem Installer-Download.
- Integritaet von Setup-Downloads: Risiko durch manipulierten oder falsch signierten Installer.
- Shutdown-Test ohne Token:
POST /__shutdown__ohne Auth-Header muss blockiert werden. - Shutdown-Test mit gueltigem Session-Token:
POST /__shutdown__mit HeaderX-Notentisch-Tokenmuss funktionieren. - Syntax-/Laufzeitcheck nach Anpassungen fuer
python/local_server.pysowie der neuen Setup-Sicherheitslogik.
- Ohne Token wird der Shutdown korrekt mit HTTP
403abgelehnt. - Mit gueltigem Token wird der Shutdown korrekt mit HTTP
200akzeptiert. - Der lokale Server bleibt auf
127.0.0.1gebunden (kein externer Netz-Zugriff auf den Endpoint).
- Token-gesicherter Shutdown-Flow:
- Neuer Session-Endpoint
/__session__liefert ein pro Serverstart neu erzeugtes Token. /__shutdown__akzeptiert nur nochPOSTmitX-Notentisch-Tokenund Bodyshutdown.GET /__shutdown__ist deaktiviert (405 Method Not Allowed).
- Neuer Session-Endpoint
- Timing-sicherer Tokenvergleich auf Serverseite, um triviale Vergleichsangriffe zu reduzieren.
- Setup-Haertung fuer Python-Download:
- Signaturpruefung (Authenticode) vor Ausfuehrung des Installers.
- Erwarteter Signierer: Python Software Foundation.
- Optional vorbereiteter SHA256-Vergleich (bei fest hinterlegtem Hash).
- Reduzierter Policy-Eingriff im Setup:
- Entfernt: zusaetzliches
Set-ExecutionPolicyim Skriptlauf. - Begruendung: Das Setup wird bereits explizit mit
-ExecutionPolicy Bypassgestartet.
- Entfernt: zusaetzliches
- CDN-Einbindung von PDF.js bleibt ein Supply-Chain-Risiko (bei kompromittiertem externen CDN).
- Admin-Setup bleibt ein bewusstes Betriebsmodell; daher Setup-Skripte nur aus vertrauenswuerdiger Quelle ausfuehren.
- Energieprofil-Aenderungen durch
Notentisch.batkoennen bei hartem Abbruch temporär bestehen bleiben, bis erneut sauber beendet oder manuell zurueckgesetzt wird.
- 4 Quadranten nach Arbeitsstatus:
- Q1: zurueckgestellt
- Q2: wiederholen
- Q3: geuebt
- Q4: gelernt
- Kartenstapel pro Quadrant mit einstellbarer Staffelzahl (
1bis12); Einstellung in Config unterStaffelung Staffelungdefiniert die Fenstergröße des Stapels (sichtbarer Bereich): wie viele Karten pro Quadrant gleichzeitig sichtbar sind- Die Quadranthöhe wird gleichmäßig auf diese sichtbaren Karten aufgeteilt; jede Karte zeigt einen proportionalen Abschnitt
- Quadranten-
▲▼zum Blättern, wenn mehr Karten vorhanden sind als sichtbar - CENTER-Bereich zeigt PDF (2 Seiten), inkl.
/-Scroll und Zoom - Drag & Drop zwischen Quadranten und CENTER
- Doppelklick im CENTER verschiebt die aktive Karte nach Q3 (weitere siehe use case)
- XML laden/speichern im Browser
- PDF-Pfad-Fallbacks fuer gemischte Pfadangaben (inkl. Windows-Pfade mit
#-Trenner) - Kartenbild-Fallback: wenn kein
Cards_Export/card_*.pngexistiert, wird ein Thumbnail aus Seite 1 der PDF erzeugt - Blatt suchen (
Suchen-Button): Suchoverlay mit Texteingabe, zeigt Treffer mit Stapelzuordnung; Bestätigung perFertiglädt das Blatt direkt in den CENTER
so gehts: .\scripts\setup_notentisch.ps1
Das Skript erledigt für dich:
Prüfung auf Python 3 und Poppler (pdfimages.exe) Anlage des „Blätter“-Ordners bzw. Erstellen einer Junction zu deinen PDFs Anlage des „Cards_Export“-Ordners Prüfung, ob der Standard-Port 8000 frei ist (ggf. Alternativport) Start des lokalen Servers und Öffnen der App im Browser (optional) Du kannst das Skript jederzeit erneut ausführen, falls du die Ordnerstruktur oder Verknüpfungen anpassen möchtest.
- Windows 10/11
- Python 3 (mit aktivierter Option "Add Python to PATH")
- Browser: Edge, Chrome oder Firefox
Ganzes Repository auf den Zielrechner kopieren (inkl. Cards_Export/ und poppler-25.12.0/ falls vorhanden).
Hinweis zur Veroeffentlichung:
- Der PDF-Bestand unter
Noten/wird aus urheberrechtlichen Gruenden nicht mitgeliefert. Blätter/ist im Regelfall nur eine Junction auf deinen lokalen PDF-Ordner.
Die App sucht PDFs bevorzugt unter Blaetter/ (typisch als Junction auf einen externen lokalen Ordner).
- Wenn
Blaetter/bereits ein echter Ordner mit PDFs ist: nichts tun. - Wenn
Blaetter/eine Junction/Symlink war und auf dem neuen Rechner leer/ungueltig ist:
cmd /c mklink /J "Blätter" "D:\Pfad\zu\deinen\PDFs"Optional: Der Basisordner fuer PDF-Aufloesung kann in der User-Config auf
BlätterNoten/BlätterNotengesetzt werden.
- Doppelklick auf
Notentisch.bat - Hinweis:
Notentisch.batsetzt fuer die laufende Session Bildschirm-Timeout und Standby aufNie(AC/DC) und stellt die vorherigen Werte beim Server-Ende automatisch wieder her. - oder im Projektordner:
py -3 python/local_server.py 8000Browser-URL:
http://localhost:8000/board.html
Neue PDFs können automatisch als Einträge in die XML übernommen werden – entweder direkt im Browser beim Laden oder offline per PowerShell-Skript.
Wenn beim Klick auf LADEN kein XML ausgewählt wird (Abbruch im Dateipicker), erscheint ein Dialog:
„Kein XML gewählt. Soll eine neue XML aus einem PDF-Ordner erstellt werden?"
- Ja → Ordner-Picker öffnet sich → alle PDFs im Ordner werden als neue Einträge angelegt (Arbeitsstatus
zurückgestellt, kein Datum) → Board wird angezeigt → XML als ungespeichert markiert (normaler Speichern-Flow) - Nein → nichts passiert
Wenn ein XML geladen wird, erscheint der Dialog nicht.
Für neue Installationen ohne bestehende XML oder für Batch-Nutzung:
# Frische XML aus Ordner erstellen:
.\scripts\create_xml_from_pdfs.ps1 -PdfDir "C:\...\Noten\Blätter" -OutputXml "Notentisch-Neu.xml"
# Bestehende XML um fehlende PDFs ergänzen (Merge):
.\scripts\create_xml_from_pdfs.ps1 -PdfDir "C:\...\Noten\Blätter" -OutputXml "Notentisch.xml" -Merge
# Abweichender Standard-Status (Default: "zurückgestellt"):
.\scripts\create_xml_from_pdfs.ps1 -PdfDir "C:\...\Noten\Blätter" -OutputXml "Notentisch.xml" -Merge -Arbeitsstatus "wiederholen"Parameter:
| Parameter | Pflicht | Beschreibung |
|---|---|---|
-PdfDir |
ja | Verzeichnis mit den PDF-Dateien |
-OutputXml |
ja | Pfad der zu erzeugenden bzw. zu ergänzenden XML |
-Merge |
nein | Bestehende XML ergänzen statt neu erstellen |
-Arbeitsstatus |
nein | Startstatus neuer Einträge (Default: zurückgestellt) |
Mit scripts/extract_cards.ps1 koennen Card-Vorschaubilder aus PDFs erzeugt werden:
.\scripts\extract_cards.ps1Das Skript nutzt automatisch:
- die lokale Poppler-Version in
poppler-25.12.0/Library/bin/pdfimages.exe(falls vorhanden), - sonst
pdfimages.exeaus demPATH.
LADEN: XML auswaehlenSPEICHERN: XML-Datei im gewaehlten Zielordner speichern (Datei wird ueberschrieben)ZOOM - / ZOOM +: PDF im CENTER zoomen in konfigurierbaren Schritten (zoomStep)ZOOM - / ZOOM +gedrueckt halten: kontinuierlicher Zoom (steuerbar uebercenterZoomHoldEnabled,centerZoomHoldDelayMs,centerZoomHoldIntervalMs)- Zoom-Grenzen: werden ueber
centerMinZoomundcenterMaxZoombegrenzt - Zoom-Render-Verzoegerung: ueber
centerZoomDebounceMs Breite: skaliert so, dass sichtbare Seiten in die aktuelle CENTER-Breite passen (inkl.centerCanvasExtraWidth,centerFitMonitorPages)Höhe: setzt den Zoom auf den konfigurierten Startwert (centerDefaultZoom)WIDE / NORMAL: vergroessert CENTER nach links; rechter Rand bleibt fix- CENTER-Ausrichtung:
Links/Mitte/Rechtsper Button, persistent uebercenterAlign - CENTER-Scroll: Schrittweite ueber
scrollStep, Scroll-Verhalten uebercenterSmoothScroll Auto Zoom: Toggle fuer blattbezogene Center-Werte (blau = aus, gruen = aktiv); Zustand wird persistent gespeichert und beim nächsten Start wiederhergestellt- aktiv: Beim Drop ins CENTER werden gespeicherte
CenterAnsicht-Werte angewendet - aktiv: Beim Verlassen des CENTER (Drop/Klick nach Q1-Q4) werden aktuelle Center-Werte automatisch in XML gespeichert
- aus: Keine automatische Anwendung und keine automatische Speicherung von
CenterAnsicht
- aktiv: Beim Drop ins CENTER werden gespeicherte
Textsuche: öffnet ein Suchoverlay zur Volltextsuche über alle Blatttitel- Treffer zeigen Titel und Stapelzuordnung
- Treffer anklicken → Bestätigungsmeldung erscheint
Fertig→ Blatt wird in den CENTER geladen (wie Drag & Drop)Abbrechen/ Escape → Overlay schließt sich ohne Aktion
Tonsuche: Mikrofon-gestützte Automatik für Suche und Aufnahme- Kurzdruck aus
Tonsuche(aus) schaltet aufTon An→ nur hören/suchen; Button ist grün - weiterer Kurzdruck schaltet auf
Ton Rec→ Aufnahme-Modus; Button ist orange - ab dann toggelt Kurzdruck nur noch zwischen
Ton AnundTon Rec(1 ↔ 2) - Langdruck in
Ton An(>= 650 ms) schaltet auf aus (0) - weißer Rahmen am Tonsuche-Button: während
Ton Recwird gerade musikalisches Signal aufgenommen - im Aufnahme-Modus mit Blatt im CENTER: kurze Referenzaufnahme wird automatisch beendet, sobald genug Material für
AudioReferenzgesammelt wurde - optional in
Advanced: alte Sequenz pro Titel löschen (Löschen) oder Historie behalten (Beibehalten) Loeschenlöscht/verwirft eine laufende Aufnahme; nach automatischem Stopp wird derselbe Button zuNochmalfür sofortige Neuaufnahme derselben Center-Karte- ohne Blatt im CENTER: Live-Matching gegen gespeicherte Audio-Fingerprints; bei stabilem Treffer wird das Blatt automatisch ins CENTER geladen
- Kurzdruck aus
- Karten mit vorhandener Audio-Referenz zeigen optional einen gelben Marker oben rechts (Config:
Spielton-Marker) - Config-Vorschau: nutzt zuerst lokalen PNG-Cache, dann XML/PDF-Fund (Ausschnitt) und sonst Bild-Fallback
Staffelung(Config): Fenstergröße des Stapels, also Anzahl der sichtbaren Karten pro Quadrant (1bis12)Stapel-Überlappung je Batch(Advanced): gemeinsamer Anteil zwischen altem und neuem Fenster beim Blättern- Quadranten-
▲▼: Schrittweite =Fenstergröße - Überlappung(mindestens1) Ende: beendet den lokalen Server und schliesst die Ansicht- Karte ins CENTER ziehen: PDF anzeigen
- Karte aus CENTER in Quadrant verschieben (Drop oder Klick auf Q1-Q4):
Arbeitsstatusaktualisieren - Beim Ablegen in einen Quadranten landet das Blatt immer oben im Stapel (Top-Insert) und der Kartenrahmen glüht kurz nach
- Rücksprung von Config ins Board: Stapel + Center werden aus Session-Snapshot direkt wiederhergestellt
- Modus
Spielen: beim Ablegen wirdzuletztgespieltgesetzt - Modus
Sichten: beim Ablegen wird keinzuletztgespieltgesetzt - Beim Ablegen auf
Q1bisQ4wird die XML automatisch gespeichert
Die Funktion ist für lokales Arbeiten gedacht: Audio wird nur über den lokalen Server (127.0.0.1) in den Projektordner mysounds/ geschrieben.
Übersicht des State-Diagramms:
Ein visueller Überblick über den Kurz-/Langdruck-Flow ist im Diagramm Dokumentation/Tonsuche_Kurz-Langdruck.drawio zu finden (mit Draw.io zu öffnen).
Stand der Implementierung: 26.03.2026 (Kurz-/Langdruck-Modus)
- Drei Zustände über den Button
Tonsuche:AusTon An(nur Matching)Ton Rec(Aufnahme + automatisches Speichern)
- Nicht-blockierende Host-Meldungen (Toast statt Browser-Alert):
- schließen Vollbild nicht
- verschwinden automatisch nach ca. 4 Sekunden
- Referenzaufnahme wird im Modus
Ton Recautomatisch beendet, sobald genug verwertbare Musik-Frames gesammelt wurden. - Matching nutzt Mel-skalierte Frequenzbänder und Delta-Features (Ableitungen), um ähnliche Klangfarben besser zu trennen.
- In
Advancedist die Erkennungs-Strenge steuerbar (Locker | Normal | Streng). - In
Advancedkann eine Verzögerung vor dem Aufnahme-Start eingestellt werden (0bis3000ms).
- Browser mit
MediaRecorder+ Mikrofonfreigabe (Edge/Chrome/Firefox aktuell) - laufender lokaler Server (
python/local_server.py) - geladene XML
- mindestens eine gespeicherte
AudioReferenzfür die zu suchenden Titel
board.htmlöffnen und XML laden.- Kurzdruck auf
Tonsuche→Ton An(grün). - Weiterer Kurzdruck →
Ton Rec(orange). - Einen Titel in den CENTER ziehen.
- Mikrofon erlauben und nach der konfigurierten Startverzögerung (
0bis3000ms) 3-5 Sekunden das Referenzmotiv spielen/summen, bis die Aufnahme automatisch stoppt. - Kurzdruck auf
Ton Recum zuTon Anzu wechseln. - In ruhiger Umgebung erneut das Motiv spielen/summen.
- Erwartung: Nach kurzer stabiler Erkennung wird das passende Blatt automatisch in den CENTER gezogen.
Hinweis zur Strenge:
Advanced > Erkennungs-Strenge = Normalist der empfohlene Startwert.- Bei zu wenigen Treffern:
Locker. - Bei Fehlzuordnungen:
Streng.
BTN1 = Tonsuche / Hauptschalter
- Startzustand:
- Titel:
Tonsuche - Farbe: Basisfarbe des Boards (bei Standard blau)
- Funktion: Audio aus (
0)
- Kurzdruck auf BTN1:
- Titel:
Ton An - Farbe: grün
- Funktion: nur hören / suchen (
1)
- Noch ein Kurzdruck auf BTN1:
- Wechsel in
Ton Rec(2) - ab hier sind zwei Zwischenzustände möglich:
- Wenn in
Advancedeine Verzögerung >0 msgesetzt ist:
- Titel:
Startet... - Farbe: blau
- Funktion: Aufnahme ist geplant, läuft aber noch nicht
- Sobald die echte Aufnahme beginnt:
- Titel:
Aufnahme - Farbe: orange
- Funktion: Referenzaufnahme läuft
- bei erkanntem verwertbarem Musiksignal bekommt BTN1 zusätzlich einen weißen Rahmen
- Wenn genug Material gesammelt wurde:
- Titel:
Bereit - Farbe: orange
- Funktion: Aufnahme ist abgeschlossen, Fingerprint wurde erzeugt und Auto-Speichern wurde angestoßen
- Kurzdruck in
Ton Rec:
- zurück zu
Ton An - Titel:
Ton An - Farbe: grün
- Ab diesem Punkt toggelt jeder weitere Kurzdruck zwischen:
Ton An(grün)Startet...(blau, falls Startverzögerung aktiv)Aufnahme/Bereit(orange)
- Langdruck in
Ton An(>=650 ms):
- zurück auf
Tonsuche - Farbe wieder Basisfarbe des Boards
BTN2 = Speicher-/Bereitschaftsstatus
- BTN2 ist nur sichtbar, wenn
Ton Recaktiv ist. - Vor einer fertigen Speicherung:
- Titel:
SpeichernoderSpeichern (Karten-ID) - Farbe: blau
- Direkt nach erfolgreichem Auto-Speichern, solange die Wartezeit läuft:
- Titel:
Gespeichert - Farbe: grün
- Nach Ablauf der Wartezeit: zurück zu
Speichern/Speichern (Karten-ID), blau
Typische Folgeaktionen:
- Neuaufnahme derselben Karte: erneut in
Ton Recbleiben oder dorthin zurückschalten; die Aufnahme startet sofort oder nach der eingestellten Verzögerung. - Zu Tonhören wechseln: Kurzdruck auf BTN1 wechselt zurück zu
Ton An. - Komplett ausschalten: Langdruck aus
Ton Anschaltet zurück aufTonsuche. - Neue Karte im CENTER: eine neue CENTER-Karte startet die nächste Aufnahme wieder mit derselben Logik inklusive optionaler Verzögerung.
Wichtig:
- Wenn
Alte Sequenz bei Neuaufnahme = Löschen, bleibt pro Titel nur die neueste Referenz erhalten. - Wenn
Beibehalten, werden mehrere Referenzen pro Titel gespeichert und beim Matching berücksichtigt.
Im jeweiligen <NotenTisch>-Eintrag wird ein optionaler Block ergänzt:
<AudioReferenz>
<Datei>mysounds/sound_....webm</Datei>
<MimeType>audio/webm;codecs=opus</MimeType>
<Fingerprint>0.12,0.34,...</Fingerprint>
<ErfasstAm>2026-03-17T12:00:00.000Z</ErfasstAm>
</AudioReferenz>Zusätzlich:
- Mehrere
<AudioReferenz>-Blöcke pro Titel sind möglich (abhängig vonAdvanced > Alte Sequenz bei Neuaufnahme). - Karten mit Referenz können optional einen gelben Audio-Marker zeigen (
showAudioBadge).
- Fingerprint ist ein einfacher Frequenzband-Vergleich, kein robustes Audio-ML-Modell.
- Ähnliche Motive, starkes Rauschen oder andere Lautstärke können Fehl- oder Nichttreffer verursachen.
- Nur Modus
Ton Recüberschreibt bzw. erzeugt Referenzaufnahmen;Ton Ansucht nur. - Im Modus
Ton Recstoppt die Aufnahme automatisch nach genug erkanntem Musiksignal; die Dauer ist inAdvancedeinstellbar. Advanced > Verzögerung vor Aufnahme-Start: steuert den Aufnahmestart zwischen0und3000ms nach Eintritt inTon Recmit Karte im CENTER.Advanced > Alte Sequenz bei Neuaufnahme:Löschenhält pro Titel nur eine aktuelle Sequenz (alte Datei + alte XML-Referenzen werden entfernt),Beibehaltenspeichert zusätzliche Sequenzen.Advanced > Erkennungs-Strengebeeinflusst die Trigger-Schwellen nach dem Voting:Locker: reagiert früher (mehr Treffer, höheres Fehltreffer-Risiko)Normal: ausgewogen (Standard)Streng: reagiert später (weniger Fehltreffer, kann leise Treffer verpassen)
- Das Matching startet nur, wenn kein PDF im CENTER offen ist.
- Upload-Härtung im Server: nur Audio-Endungen (
.webm,.ogg,.wav,.m4a,.mp3), Dateigröße max. 25 MB.
- Laufzeit-Diagnosen werden in
mysounds/musicprint_diagnostics.jsonlgeschrieben. - Zusammenfassung kann in
mysounds/musicprint_diag_report.txtlanden. - Typische Diagnose-Events:
fingerprint_preparedfingerprint_savedmatching_scoredmatching_pending_votesmatching_blocked_low_confidencematching_triggered_drop
- Problem: Mikrofon wird nicht abgefragt.
- Lösung: Browser-Berechtigung für Mikrofon prüfen (Website-Einstellungen), Seite neu laden,
Tonsucheerneut aktivieren.
- Lösung: Browser-Berechtigung für Mikrofon prüfen (Website-Einstellungen), Seite neu laden,
- Problem: Keine Erkennung in
Ton An.- Lösung: Zuerst mit
Ton Receine Referenz im CENTER aufnehmen (3-5 Sekunden), dann außerhalb des CENTER inTon Antesten. - Lösung:
Advanced > Erkennungs-Strengetestweise aufLockerstellen.
- Lösung: Zuerst mit
- Problem: Falsches Blatt wird erkannt.
- Lösung: Referenz in ruhiger Umgebung neu aufnehmen, näher am Mikrofon spielen/summen, ähnliche Titel separat neu referenzieren.
- Praxis-Regel: Zuerst das eigentlich gemeinte Blatt im
Ton Rec-Modus neu aufnehmen.Ton Anverbessert keine Prints, sondern sucht nur. - Praxis-Regel: Wenn immer wieder dasselbe falsche Blatt erscheint, beide Titel neu aufnehmen (zuerst das richtige, dann das falsch getroffene Blatt).
- Lösung:
Advanced > Erkennungs-StrengeaufStrengstellen.
- Problem: Treffer erscheint im Log, aber kein Blatt wird geladen.
- Lösung: Prüfen, ob im Diagnose-Log
matching_blocked_low_confidencesteht; dann Strenge reduzieren (Normal/Locker) oder Referenz neu aufnehmen.
- Lösung: Prüfen, ob im Diagnose-Log
- Problem: Audio kann nicht gespeichert werden.
- Lösung: Prüfen, ob
python/local_server.pyläuft und der Ordnermysounds/beschreibbar ist.
- Lösung: Prüfen, ob
- Die zentralen Defaults und Grenzen liegen in
center-config.js. - Persistiert wird in
localStorageunternotentischUserConfig. - Bearbeitung erfolgt in
config.html(inkl. Advanced-Felder fuer Center/Zoom). - Laufzeitnutzung erfolgt in
center-view.jsundfunctions.js. useZoomSettingsOnDrop(bool): XML-CenterAnsichtbeim Drop ins CENTER anwenden (true/false, Defaulttrue).dropGlowDurationMs(integer): Dauer des Nachglüh-Rahmens nach Ablage in Quadrant (Millisekunden, Default1400).pageInfoTone(dunkel|normal|hell): Helligkeitsstufe fuer die Seitenanzeige in der Leiste (Advanced).autoFullscreenOnStart(bool): Fordert beim Start automatisch Vollbild an (Advanced, Defaulttrue).centerZoomFocus: ist systemseitig fest aufleft-topnormalisiert (kein Umschalter in Advanced).stackBatchOverlapCount(integer): Überlappung zwischen zwei Stapel-Batches in den Quadranten (0..9, Default2).audioReferenceTargetMs(integer): Ziel-Dauer der Audio-Referenzaufnahme in Millisekunden (1500..12000, Default5000).replaceAudioByTitle(bool): Verhalten bei Neuaufnahme pro Titel (true= alte Sequenz löschen,false= alte Sequenz beibehalten).showAudioBadge(bool): Zeigt/versteckt den gelben Spielton-Marker auf Karten mit Audio-Referenz.
Auto Zoom(wenn aktiv) schreibt pro Blatt in<CenterAnsicht>beim Verlassen des CENTER:<Zoom>(decimal)<Align>(left|middle|right)<ZoomFokus>(left-top, fest)<PosRelX>(decimal 0..1)<PosRelY>(decimal 0..1)
- Zusätzlich wird
<CenterAnsichtChanged>1</CenterAnsichtChanged>gesetzt für Access-Übernahmefilter.
- Aenderungen an
Arbeitsstatusund (im ModusSpielen)zuletztgespieltwerden beim Ablegen einer Karte aufQ1bisQ4automatisch in die XML-Datei geschrieben. - Beim ersten Schreibzugriff waehlt der User die XML-Datei; danach wird der gespeicherte Datei-Handle wiederverwendet.
- Tonaufnahmen: werden lokal im Projektordner unter
mysounds/gespeichert. - XML-Datei: wird beim Laden zuerst per Dateiauswahl (
LADEN) abgefragt. - XML-Speicherziel: wird beim ersten Schreibzugriff zuvor abgefragt; danach wird der Datei-/Ordner-Handle wiederverwendet.
- PDF-Import ohne XML: der PDF-Quellordner wird zuvor per Ordnerauswahl abgefragt.
- Start: User laedt die XML mit Noten-Metadaten (
LADEN). Dabei wird der Speicherort der Exportdatei gefragt, die zuvor mit MS Access erstellt wurde. - User schaut sich Blaetter an, indem Karten ins CENTER gezogen werden.
- Karte wird aus dem CENTER auf einen Quadranten abgelegt.
- Dabei wird:
- der neue Arbeitsstatus im XML aktualisiert
- im Modus Spielen automatisch
zuletztgespieltgesetzt - im Modus Sichten kein
zuletztgespieltgesetzt - die XML-Datei automatisch gespeichert
- Abschluss: Weitere Karten koennen direkt weiter einsortiert werden; jede Ablage auf
Q1bisQ4wird sofort gespeichert.
Hinweis zu 2: Beim Ansehen weiterer Blaetter wird das aktuelle Blatt dorthin zurueckgeschoben, wo es herkam.
- User schaltet
TonsucheaufTon Recund legt das Zielblatt in den CENTER. - User spielt das Motiv 3-6 Sekunden ein; die Referenzaufnahme stoppt automatisch nach genug erkanntem Musiksignal.
- Optional kann der User mit
Nochmalsofort eine neue Referenz für dieselbe Center-Karte einspielen. - Danach schaltet der User auf
Ton Anund spielt das Motiv erneut. - Die App vergleicht den Live-Ton mit gespeicherten Fingerprints und zieht bei stabilem Treffer das passende Blatt automatisch in den CENTER.
Eine XML Datei muss vorliegen, die z.B mit Access exportiert wurde und einen Satz an Notenblättern enthält.
Erwartete Haupteintraege:
<NotenTisch>(unterstuetzt zusaetzlich<Notentisch>)- Unterfelder je Eintrag:
<Titel><Speicherort><Arbeitsstatus><zuletztgespielt>(optional, wird bei Bedarf erstellt)<CenterAnsicht>(optional mit<Zoom>,<Align>,<ZoomFokus=left-top>,<PosRelX>,<PosRelY>)<CenterAnsichtChanged>(optional,1= geänderte Center-Werte für Access-Übernahme)
Status-Mapping der Quadranten: die Blätter werden auf vier Felder rund um das Center verteilt ("Quadranten") enstpr. Status:
zurueckgestellt-> Q1wiederholen-> Q2geuebt-> Q3gelernt-> Q4
board.html- UI, Layout, Stylesfunctions.js- PDF-Anzeige, Zoom, Seiten-/Scroll-Navigation, Pfadaufloesungrender.js- Karten-Rendering, Stack-/Offset-Logik, Vorschau-Bildaufbau, Render-API (window.NotentischRender)filehandling.js- XML I/O, Drag & Drop, Suche, Statusspeicherung, Board-/Center-Workflowaudio_core.js- Audio Auto: Zustand, UI, Timing, Button-/Toast-Logikaudio_data.js- Audio Auto: XML-FelderAudioReferenz, Fingerprint-Helfer, Kandidatenaufbauaudio_runtime.js- Audio Auto: Aufnahme, Matching, Tick-Loop, Mode-Steuerungscripts/extract_cards.ps1- Card-Bilder aus PDFs generieren (Poppler)Notentisch.bat- Batch-Launcher fuer Windows (startetpython/local_server.py+ Browser; setzt waehrend der Session Energiespar-Timeouts aufNieund restauriert danach)notentisch.vbs- VB-Wrapper fuer unsichtbaren Startpython/local_server.py- lokaler HTTP-Server mit Shutdown-Endpoint (/__shutdown__) sowie Audio-Upload/-Delete (/__audio_upload__,/__audio_delete__)Cards_Export/- Ordner fuer statische Card-Bilder (card_*.png)
test/enthält automatisierte Tests für das Projekt (z.B. mit Mocha/Node.js).- Beispiel:
hello.test.jsprüft einfache Funktionen mitassert. - E2E-Smoketest für Config/Board-Rückkehr:
e2e_config_return_check.ps1 - Zum Ausführen der Tests im Projektordner:
cd test
node hello.test.jsAutomatischer Smoke-Check:
./test/e2e_config_return_check.ps1Der Check prüft:
- Erreichbarkeit von
board.html,config.html,advanced_config.html(HTTP 200) - Vorhandene Restore-Hooks in
functions.jsundcenter-view.js - Vorhandene Navigationselemente in
config.html
Manueller Kurztest (4 Schritte):
board.htmlöffnen und ein Blatt ins CENTER ziehen.- Zoom/Ausrichtung ändern (z.B. Mitte + Zoom +).
- Config über
Cöffnen, dannZurück zum Board. - Prüfen: gleiches Blatt, gleicher Zoom, gleiche Ausrichtung, gleicher CENTER-Modus.
Du kannst eigene Tests ergänzen, um Funktionen und Module automatisch zu überprüfen. Für größere Test-Suiten empfiehlt sich ein Framework wie Mocha oder Jest.
Eingabe: Mikrofon-Stream (Web Audio API, FFT-Größe 2048)
1. Bass-Energie messen (alle 20 ms) Aus dem FFT werden nur die Bins 1–12 (≈ 0–280 Hz) ausgewertet – dort liegt der Kick/Bass, der den Takt dominiert.
2. Onset-Erkennung (Spectral Flux)
Differenz zur vorherigen Messung (half-wave rectifiziert). Liegt der Wert über Mittelwert × 1,5 → Onset erkannt = ein Schlag.
3. BPM-Berechnung Abstände zwischen aufeinanderfolgenden Onsets werden gesammelt. Nach 4 Schlägen wird der Median der Intervalle gebildet → BPM = 60.000 / Intervall ms. Nur Werte im Bereich 40–210 BPM werden akzeptiert.
4. Beat-Lock & Metronom
Sobald BPM stabil ist, startet ein setInterval im erkannten Takt-Intervall. Jeder Tick ruft flashBeatButton() auf.
5. Abweichungsanzeige
Bei jedem neuen Onset wird verglichen: liegt er innerhalb des erwarteten Fensters (nextExpectedBeatAt ± Schwelle)? → grün. Außerhalb → rot.
Konfiguration: Schwellwert in % (Standard 5 %) → Advanced Settings (beatDeviationThresholdPct).
Stopp: Beim Verlassen des Centers oder Deaktivieren des Toggle-Buttons wird der Stream geschlossen und alles zurückgesetzt.