- Rust 82.1%
- Slint 16.2%
- Shell 1.4%
- NSIS 0.2%
Das schwebende Vorschlags-Fenster hing an der Position des fokussierten Feldes, zeigte aber den Rechtschreib-Zustand desjenigen Feldes, für das zuletzt eine Prüfung fertig wurde. Beim Tabulieren in ein Feld, in das nichts getippt wurde, lief nie eine neue Prüfung und nichts wurde geleert – das Fenster wanderte mit dem Fokus mit und zeigte weiter das Wort des vorigen Feldes. - Die vier Bedingungen des Overlays beziehen sich jetzt darauf, ob der aktive Rechtschreib-Zustand zum verankerten Feld (sug-field) gehört, statt nur darauf, ob überhaupt einer aktiv ist. - Beim Fokussieren eines Titelteils bzw. des Album-Feldes wird einmal geprüft (neuer Callback spellcheck-part). Damit erscheinen Fehlerwörter und Vorschläge des Feldes, ohne dass getippt werden muss. - Der Aufräum-Zweig in spell_async leert auch dann, wenn das fehlerfreie Ergebnis das verankerte Feld betrifft – sonst bliebe beim Wechsel in ein sauberes Feld der alte Zustand im Speicher stehen. Zusätzlich: Wird ein Vorschlag mit Enter übernommen, steht der Textcursor danach hinter dem eingesetzten Wort statt dort, wo er vorher war. replace_first_word_at liefert dafür den Byte-Offset; das Feld setzt ihn in `changed model-value`, also erst nach der Textübernahme. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|---|---|---|
| .forgejo/workflows | ||
| .vscode | ||
| docs | ||
| install | ||
| ngen_audio_base | ||
| ngen_audio_linux | ||
| ngen_audio_windows | ||
| ngen_capture | ||
| ngen_editor | ||
| ngen_rec_main | ||
| packaging | ||
| scripts | ||
| ui | ||
| .editorconfig | ||
| .gitattributes | ||
| .gitignore | ||
| about.hbs | ||
| about.toml | ||
| ARCHITEKTUR_ANALYSE.md | ||
| ASIO.md | ||
| Benennung.md | ||
| build_common.rs | ||
| Cargo.lock | ||
| Cargo.toml | ||
| CLAUDE.md | ||
| Crash-Vollbild-AMD-OpenGL.md | ||
| LICENSE | ||
| LICENSE-ASIO.txt | ||
| OFFEN.md | ||
| PLAN_BLOCK_ERKENNUNG.md | ||
| PLAN_HUELLKURVEN.md | ||
| PLAN_NGEN_EDITOR.md | ||
| PLAN_STILLE_ERKENNEN.md | ||
| README.md | ||
| renovate.json | ||
| RISIKO_ANALYSE.md | ||
| TODO.md | ||
ngenRecorder
Durchgehender Audio-Rekorder mit marker-basiertem Zerschneiden in benannte Titel und Export als WAV/MP3. Besteht aus drei zusammenspielenden Programmen:
- ngen_capture – nimmt dauerhaft im System-Tray auf.
- ngen_rec_main – Bearbeitung, Titel-Verwaltung und Export.
- ngen_editor – destruktiver Wave-Editor für exportierte Titel (Undo/Redo, Fades, Normalisierung, MP3-Speichern).
Native Rust-Anwendungen mit Slint-Oberfläche, für Linux und Windows.
Wofür ist die Software geeignet
Für das Aufnehmen langer, durchgehender Audio-Sessions und das anschließende Aufteilen in einzelne, benannte und getaggte Titel – z. B.:
- Gottesdienste, Vorträge, Predigten (mit Bibelstellen-Bezug),
- Konzerte und Musik-Mitschnitte,
- Sendungen, Interviews, Konferenzen.
Statt eine Aufnahme nachträglich mühsam zu schneiden, läuft die Aufnahme zuverlässig im Hintergrund, während parallel Marker gesetzt und Titel benannt werden. Am Ende werden die Titel sauber getrennt exportiert.
Was ist besonders
- Dauerhafte Hintergrund-Aufnahme:
ngen_capturestartet die Aufnahme sofort beim Programmstart und läuft, bis es beendet wird – es geht nichts verloren. - Getrennte Prozesse, Live-Kopplung: Rekorder und Editor sind eigenständige Programme und teilen die laufenden Audiodaten über Shared Memory. Man kann schneiden und beschriften, während weiter aufgenommen wird.
- Wave-Editor für exportierte Titel:
ngen_editorbietet destruktive Bearbeitung (Schnitt, Fades, Gain, Normalisierung, DC-Offset) mit voller Undo/Redo-Historie, Auto-Sicherung und ID3-Tag-Erhalt bei MP3-Dateien. - Nicht-destruktives Zerschneiden über Marker: Titelgrenzen sind Marker (Anfang/Ende/Pause/Stille/Benutzerdefiniert). Die Originaldatei bleibt unangetastet.
- Automatische Stille-Erkennung: setzt Marker anhand einer einstellbaren dB-Schwelle; ein Ende-Marker wird automatisch dem offenen Titel zugeordnet.
- Komfortable Titel-Benennung: konfigurierbares Titel-Schema aus Bausteinen, wiederverwendbare Vorschlagslisten, Bibelbuch-Vorschläge (66 Bücher, Luther-Tradition) und Rechtschreibprüfung.
- Vorlagen für Pfade/Dateinamen mit Platzhaltern (Datum, Uhrzeit, Tageszeit) und Live-Vorschau.
- Export: WAV und MP3 (via ffmpeg/LAME), optionale Lautheits-Normalisierung, ID3-Tags, Auslassen von Pausen-/Stille-Regionen, Marker-Sidecar-Dateien (Audacity/JSON/XML/WaveLab).
- Plattformübergreifend: Linux (ALSA/PulseAudio), Windows (WASAPI und ASIO für geringe Latenz).
- Getrenntes Abhörgerät: Das Vorhören in
ngen_rec_mainläuft über ein eigenes Ausgabegerät (WASAPI oder ASIO), unabhängig vom Aufnahmegerät vonngen_capture– man kann also über ein anderes ASIO-Interface abhören, als aufgenommen wird. - Installation im Benutzerordner ohne Admin-Rechte und automatisches Selbst-Update aus den Releases des Projekt-Servers.
Wie funktioniert es
- Aufnehmen –
ngen_capture(Tray): Aufnahme startet sofort, schreibt eine Session-Datei (RAW f32-PCM oder WAV64) und streamt die Live-Daten per Shared Memory. Wählbar sind u. a. Eingabe-Kanäle und ein signalgesteuerter Start (Aufnahme beginnt ab einer Pegel-Schwelle). - Ansehen –
ngen_rec_mainliest dieselbe Session (session.json) und zeigt Peak-Wellenform, Übersichts-Minimap und Spektrogramm, mit Zoom und Wiedergabe (Audition) zum Vorhören. Das Abhören nutzt ein eigenes Ausgabegerät (WASAPI/ASIO), unabhängig vom Aufnahmegerät. - Markieren – Marker werden von Hand oder automatisch (Stille-Erkennung) gesetzt. Ein Anfang- und ein Ende-Marker bilden einen Titel.
- Benennen – im Tab Titel: je Titel die Bausteine (Schema), Interpret, Album, Titelnummer – unterstützt durch Vorschlagslisten, Bibelstellen und Rechtschreibprüfung. Weitere Tabs: Marker, Einstellungen, Listenverwaltung.
- Exportieren – jeder Titel wird an seinen Markern geschnitten (Pausen/Stille werden ausgelassen) und als WAV bzw. MP3 mit Tags in die per Vorlage gebildeten Ordner geschrieben.
- Nachbearbeiten – mit
ngen_editorlassen sich exportierte WAV-/MP3-Titel nachträglich bearbeiten: schneiden, Fades, Gain/Normalisierung, DC-Offset-Korrektur, Dithering, Resampling und MP3-Export mit ID3-Tags.
Konfiguration und Session werden über JSON-Dateien zwischen Capture und Main geteilt, sodass beide Programme denselben Aufnahmeordner und dieselben Einstellungen sehen.
Ausführliche Bedienungsanleitungen: docs/hilfe_rec_main.md (Hauptfenster) und docs/hilfe_editor.md (Wave-Editor) — in den Programmen auch über F1 bzw. den Hilfe-Knopf erreichbar.
Marker automatisch erstellen (Stille & Blöcke)
ngen_rec_main kann die Markerarbeit weitgehend übernehmen:
- Stille erkennen setzt Stille-Marker über Regionen unter der Stille-Schwelle (Einstellungen → Marker-Erstellung). Diese Regionen werden beim Export übersprungen und dienen der Blockerstellung als bevorzugte Schnittstellen.
- Blöcke erkennen segmentiert die Aufnahme in Abschnitte ähnlicher
Lautheit (ITU-R BS.1770) und setzt an den Übergängen
Blockgrenzen-Marker (türkis). Jede Grenze trägt ein Label wie
Block 3 · −18,3 LUFS · Sprache— Lautheit und erkannte Beitragsart (Sprache/Lied/Musik, ohne KI). Ein?am Ende heißt: unsichere Grenze, zuerst prüfen. Abschnitte gleicher Lautheit, aber verschiedener Art (z. B. Predigt → Orgel) werden über Klangmerkmale getrennt. - Grenze aus Pause (zweite Quelle, Label
Pause): lösen sich zwei gleich laute Sprecher ab, gibt es keine Lautheitsstufe — wohl aber eine hörbare Pause. Jede Pause, die lang genug ist und weit genug unter die Umgebung fällt, wird deshalb für sich allein zur Blockgrenze. Einstellbar über Tiefe (Standard 30 dB unter der Umgebung) und Mindestlänge (1,2 s) unter Einstellungen → Marker-Erstellung. - Live (Haken neben dem Knopf): schlägt Grenzen schon während der Aufnahme vor — nur im bereits stabilen Teil, spätere Daten verschieben nichts mehr. Nach Aufnahmeende ergänzt „Blöcke erkennen" den Rest.
- Grenzen prüfen (Zeile darunter): mit ◀/▶ durch die Vorschläge springen, Anhören spielt den Übergang mit 3 s Vorlauf, An Pause ausrichten rückt einen Marker auf die nächstliegende Sprechpause (nochmal drücken = nächster Kandidat). Typ ändern mit den Tasten 1–4, Löschen mit Entf.
- → Titelgrenze / Alle → Titel: baut Blockgrenzen in Titelende + Titelanfang um. Jeder Titel beginnt und endet dabei mit einstellbarer Randstille (Standard 1 s) vor dem ersten bzw. nach dem letzten Signal (Einstellungen → Marker-Erstellung → „Titel-Randstille"). Die Titel erscheinen wie von Hand gesetzt im Titel-Tab.
Alle Automatik-Schritte sind Vorschläge: ein „Rückgängig" macht den jeweils letzten Lauf komplett rückgängig, von Hand gesetzte Marker werden nie überschrieben.
Typische Abläufe
- Veranstaltung mit Live-Vorschlägen: „Live" anhaken → aufnehmen → während der Aufnahme erscheinen Blockgrenzen → nach dem Ende „Blöcke erkennen" für den Rest → „Grenzen prüfen" (anhören, verschieben, löschen) → „Alle → Titel" → Titel benennen → Export.
- Fertige Aufnahme nachträglich teilen: Session öffnen → „Stille erkennen" → „Blöcke erkennen" → prüfen → „Alle → Titel".
- Session aus vorhandener Audio-Datei: „Session öffnen… → Audio-Datei…" (WAV, MP3, FLAC, OGG, Opus …) — danach wie Ablauf 2.
- Feinschnitt einzelner Titel: im Titel-Tab „Extern bearbeiten" öffnet
den Titel im
ngen_editor(schneiden, Fades, Normalisierung, Export in alle Formate).
Wie wird installiert
Alle drei Programme werden pro Benutzer installiert (ohne Admin-Rechte) und aktualisieren sich anschließend selbst.
Windows
Das Setup vom neuesten Release herunterladen und ausführen:
ngenAudioRecord-setup.exe unter
Releases.
- Installiert nach
%LOCALAPPDATA%\Programs\ngenAudioRecord, legt Startmenü- Einträge und einen Uninstaller an (Windows „Apps & Features"). - ASIO ist fest enthalten (geringe Latenz); eine separate WASAPI-Download- Variante gibt es nicht mehr. WASAPI bleibt voll nutzbar – es lässt sich weiterhin als Eingabe- und Ausgabegerät in den Einstellungen wählen; ASIO kommt nur zusätzlich hinzu. Weil das Steinberg „ASIO SDK Open" unter der GPLv3 steht (siehe LICENSE-ASIO.txt), gilt diese für die Windows-Version.
Linux
curl -fsSL https://git.bg-ak.de/leonhard.suckau/ngenAudioRecord/raw/branch/main/install/install.sh | bash
Installiert alle drei Programme nach ~/.local/bin und legt .desktop-Einträge +
Icons an. Liegt ~/.local/bin nicht im PATH, weist das Skript darauf hin.
RPM (openSUSE, Fedora)
Für openSUSE und Fedora gibt es Pakete in der Forgejo-RPM-Registry. Sie
installieren systemweit nach /usr/bin und aktualisieren sich über die
Paketverwaltung (das eingebaute Selbst-Update bleibt dann besser ungenutzt —
/usr/bin ist für normale Benutzer nicht schreibbar).
Beide Distributionen haben eine eigene Registry-Gruppe. Das ist Absicht: in
einer gemeinsamen Registry gälte das Fedora-Paket (Release-Suffix .fcNN) auch
unter openSUSE als neuere Version und ließe sich dort nicht auflösen.
openSUSE:
sudo zypper --gpg-auto-import-keys addrepo --refresh \
https://git.bg-ak.de/api/packages/leonhard.suckau/rpm/opensuse.repo
sudo zypper install ngenaudiorecord
Fedora:
sudo dnf config-manager addrepo --from-repofile=https://git.bg-ak.de/api/packages/leonhard.suckau/rpm/fedora.repo
sudo dnf install ngenaudiorecord
Sind die RPMs signiert (CI-Secret GPG_PRIVATE_KEY gesetzt), zusätzlich den
Maintainer-Schlüssel importieren — die .repo-Datei aktiviert gpgcheck:
sudo rpm --import https://git.bg-ak.de/leonhard.suckau/ngenAudioRecord/raw/branch/main/packaging/RPM-GPG-KEY-ngenaudiorecord
DEB (Debian, Ubuntu, Ubuntu Studio)
Für Debian- und Ubuntu-basierte Systeme (auch Ubuntu Studio) gibt es ein
.deb in der Forgejo-Debian-Registry. Es enthält alle drei Programme und
installiert systemweit nach /usr/bin. Gebaut wird auf Debian 12 (bookworm);
damit installiert es sich auf Debian 12+ und Ubuntu 22.04+ (dort erfüllen die
t64-Pakete die Bibliotheksnamen automatisch). Es ist damit das am breitesten
kompatible Paket — noch vor AppImage/tar.gz, die auf Debian 13 (trixie, glibc
2.41) gebaut werden und erst ab Ubuntu 25.04 / 26.04 LTS laufen (s. u.). Auf
Ubuntu Studio 24.04/22.04 LTS ist das .deb daher der richtige Weg.
sudo install -d /etc/apt/keyrings
sudo curl -fsSL -o /etc/apt/keyrings/ngenaudiorecord.asc \
https://git.bg-ak.de/api/packages/leonhard.suckau/debian/repository.key
echo 'deb [signed-by=/etc/apt/keyrings/ngenaudiorecord.asc] https://git.bg-ak.de/api/packages/leonhard.suckau/debian bookworm main' \
| sudo tee /etc/apt/sources.list.d/ngenaudiorecord.list
sudo apt update
sudo apt install ngenaudiorecord
Alternativ ein einzelnes .deb als Release-Asset herunterladen und mit
sudo apt install ./ngenaudiorecord_*.deb einspielen (löst die Abhängigkeiten mit auf).
AppImage (distributionsunabhängig)
Das AppImage bündelt alle drei Programme in einer portablen Datei — kein
Installieren, keine Paketabhängigkeiten (nur den Grafik-/GL-Stack liefert das
System). Es liegt als Asset am Release. Gebaut wird auf Debian 13 (trixie);
die glibc-Untergrenze ist damit 2.41 — es läuft ab Ubuntu 25.04 / 26.04 LTS
bzw. Debian 13. Für ältere Systeme (Ubuntu 24.04/22.04 LTS) das .deb nehmen.
chmod +x ngenAudioRecord-*-x86_64.AppImage
./ngenAudioRecord-*-x86_64.AppImage
Gestartet wird das Hauptfenster; den Wave-Editor und den Capture-Dienst startet es bei Bedarf aus demselben Image mit.
Aktualisierung
- Automatisch beim Start: alle drei Programme prüfen im Hintergrund auf Updates.
- Manuell: in der GUI unter Einstellungen → Aktualisierung, im Tray über den Menüpunkt „Nach Updates suchen" / „Update installieren".
- Nach dem Installieren ist ein Neustart des Programms nötig.
ffmpeg (für MP3-Export)
Der MP3-Export benötigt ffmpeg (mit libmp3lame). WAV-Export und alle übrigen Funktionen laufen ohne ffmpeg.
- Windows: unter Einstellungen → Export → „ffmpeg installieren" lädt das
Programm einen passenden statischen ffmpeg-Build herunter und legt ihn nach
~/.ngenRecorder/ffmpeg/. Alternativ ffmpeg selbst bereitstellen: auf denPATHlegen, neben das Programm kopieren oder die UmgebungsvariableNGEN_FFMPEGauf die ffmpeg-Datei setzen. - Linux: ffmpeg über die Paketverwaltung installieren, z. B.
sudo apt install ffmpeg.
Für Maintainer: Release erstellen
Version in Cargo.toml ([workspace.package] version) setzen und einen Tag
pushen:
git tag v0.2.0 && git push origin v0.2.0
Der Forgejo-Actions-Workflow
.forgejo/workflows/release.yml baut auf dem
docker-Runner Linux nativ und Windows per Docker-Cross-Build (cargo-xwin,
WASAPI + ASIO), erzeugt den NSIS-Installer und veröffentlicht das Release.
Einmalig nötig: ein Secret PACKAGES_TOKEN mit write:repository. Die
Steinberg-„ASIO SDK Open"-URL ist im Workflow fest hinterlegt und via Variable
ASIO_SDK_URL überschreibbar.
RPM-Pakete (openSUSE, Fedora)
Derselbe Tag startet zusätzlich die Jobs rpm-opensuse und rpm-fedora. Sie
bauen im jeweiligen Distributions-Container aus
packaging/ und laden das Ergebnis in die Forgejo-RPM-Registry
(Gruppen rpm/opensuse bzw. rpm/fedora). Die Jobs laufen unabhängig vom
Release-Job — ein Paketierungsfehler hält die Archive nicht auf.
Secrets/Variablen:
| Name | Zweck |
|---|---|
PACKAGES_TOKEN |
Pflicht für den Upload; Token mit Scope write:package |
GPG_PRIVATE_KEY |
Optional; gesetzt ⇒ RPMs werden signiert |
GPG_NAME |
Key-ID/E-Mail des Signierschlüssels (bei Signatur Pflicht) |
GPG_PASSPHRASE |
Optional (leer = passphrasenloser Key) |
Beide Token-Secrets vertreten sich gegenseitig: Für Checkout und Release wird PACKAGES_TOKEN benutzt; beide
Scopes — write:repository und write:package. Der Upload authentifiziert
sich als Repository-Owner (= Eigentümer der Registry-URL), das Token muss also
diesem Benutzer gehören.
Weil Slint 1.17 Rust ≥ 1.92 verlangt (neuer als die Distributions-Pakete),
installieren die Jobs rustup und stellen die aktuelle stable-Toolchain voran.
Lokal testen (braucht podman, baut und installiert testweise im Container):
scripts/build-rpm-local.sh opensuse
scripts/build-rpm-local.sh fedora
DEB- und AppImage-Pakete (Debian/Ubuntu)
Derselbe Tag startet den Job deb: er baut im debian:bookworm-Container aus
packaging/deb/ ein .deb mit allen drei Programmen und lädt es
in die Forgejo-Debian-Registry (debian bookworm main). Das AppImage baut
der Release-Job selbst aus packaging/appimage/ (über
scripts/build-appimage.sh mit linuxdeploy + appimagetool, ohne Neubau der
Binaries) und hängt es als Download-Asset ans Release. Beide nutzen
PACKAGES_TOKEN wie bei den RPMs.
Bookworm ist bewusst gewählt: Es hat die Bibliotheksnamen vor der
t64-Umstellung, die neuere Debian-/Ubuntu-Versionen per Provides weiterhin
erfüllen — ein auf Trixie gebautes Paket verlangte dagegen …t64-Namen, die auf
älteren Systemen fehlen.
Lokal testen (braucht podman, baut und installiert testweise im Container):
scripts/build-deb-local.sh
scripts/build-appimage-local.sh
Blockerstellung messen und tunen
Die Schwellen der automatischen Blockerstellung (Pausen-Tiefe, Klassifikation usw.) lassen sich gegen echte Aufnahmen messen statt schätzen:
cargo run --release -p ngen_audio_base --example block_eval -- aufnahme.wav
Ohne weitere Dateien druckt der Lauf die gefundenen Grenzen (Methode +
Konfidenz); mit einer aufnahme.truth.csv daneben meldet er p50/p95-Abweichung
in ms, verpasste und überzählige Grenzen sowie die Klassen-Trefferquote.
Schritt-für-Schritt-Anleitung inkl. truth.csv-Format und Deutung der
Ergebnisse: docs/blockerstellung_messen.md.
Lizenz
GPL-3.0 (siehe LICENSE). Die ASIO-Variante zusätzlich: LICENSE-ASIO.txt.