wegen/sauSynKlick/SynKlick.txt
Ichthyostega f018ca9371 Problem genauer untersucht: es ist leider schwieriger als vermutet
...wir haben es tatsächlich mit kurzen Skips zu tun; es müssen also
Sprünge im Wellenverlauf gefunden werden; und für den Ausgleich
versuchen wir eine kurze Kreuzblende mit künstlich fortgesetztem
Wellenverlauf. Daher wird auch die Verarbeitungsschleife komplexer,
denn wir brauchen stets einen Suchpuffer von 200 Samples Länge.
2014-08-30 23:43:36 +02:00

81 lines
5.2 KiB
Text

SynKlick: Aufnahme reparieren
=============================
:Date: Sept.2014
_Reparieren einer Rohaufnahme mit synchronen 1-Sample-drop-outs auf allen Spuren_
Im Sommer 2014 habe ich die Serie der *Mycel-Performances* von Benedikt Brachtel aufgezeichnet.
In einigen dieser Sitzungen habe ich aus noch ungeklärtem Grund einen regelmäßigen Defekt in der Aufnahme:
Es findet sich ein Null-Sample synchron auf allen Spuren. Diese sehr spezifische Struktur ermöglicht eine
rein mechanische Reparatur, für die ich hier ein dediziertes Hilfsprogramm schreibe.
Lösungsansatz
-------------
An allen untersuchten Defekt-Stellen habe ich einen Sprung in der Wellenform gefunden, welcher
offensichtlich auf allen Spuren synchron auftritt. Den untersuchten Wellenformen nach zu urteilen
fehlen jeweils ca. 50 bis 100 Sampleworte. Da ich keinen XRun von Jack bekommen habe, vermute ich
einen Defekt in Ardour beim Wegschreiben der Puffer -- möglicherweise als Wechselwirkung mit dem
re-Draw der Wellenformen; ich hatte nämlich während der Aufnahme das Editorfenster in Anzeige,
bei relativ hoher Auflösung, so daß ich zur Kontrolle die Wellenform permanent sehen konnte.
Wackelkontakte an den 3.5-Miniklinken waren immer wieder aufgetreten.
Es geht also darum, einen Satz von Rohdateien Wort für Wort synchron zu prüfen; wenn ein bestimmtes
Muster auf allen Spuren auftritt, muß die Korrektur ausgelöst werden
- das Muster definiere ich als _einen Sprung in den Deltas_ zwischen benachbarten Samples. Hierfür
muß ich noch eine passende Triggerschwelle herausfinden.
- die Korrektur besteht darin, die Kurvenverläufe beidseits des Sprunges künstlich fortzusetzen
und dann zwischen diesen beiden synthetisierten Verläufen zu überblenden, mit einer Überblendedauer
von 200 Samples. Als künstliche Fortsetzung wähle ich den invertierten und rückwärts abgespielten
Ablauf des existierenden Materials.
Es könnte zu ``false positives'' kommen, speziell bei leisem Rauschen. Die Kombination mehrerer
Kanäle senkt jedoch die Wahrscheinlichkeit solcher Fehl-Korrekturen. Leider ist die Korrektur selber
durchaus gefährlich; jedoch stellen die Defekte eine so deutlich hörbare Tonstörung dar, daß jede,
auch nur graduelle Verbesserung wünschenswert ist. Die Methode der künstlichen Fortsetzung wähle
ich, weil es der einfachste Ansatz ist, der direkt an der Sprungstelle stetig und einigermaßen
kohärent, sowie zur Sprungstelle symmetrisch ist. Typischerweise wird es zu einer partiellen
Auslöschung kommen, also einer kurzen, geräuschhaften Störung. Um den Eingriff möglichst
unproblematisch zu halten, entscheide ich mich, keine Änderung der Sample-Längen
zu machen. Es geht hier um Schadensbegrenzung (denn egal, was meine Auftraggeber
sagen, letztlich bleibt doch ein Eindruck der Unprofessionalität)
Anmerkungen zur Implementierung
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Ich verwende die http://www.mega-nerd.com/libsndfile[libsndfile], welche auf Linux-Systemen inzwischen
zur Standard-Lösung für den Zugriff auf Sound-Dateien geworden ist. Sie bietet ein sauberes API und
ein brauchbares Programmier-Modell, und sie unterstützt viele Datenformate. Hier konkret geht es
um Wave-64 mit floating-point-Samples.
Das Korrektur-Programm bekommt die Namen aller Quell-Spuren und ein Zielverzeichnis, wo es die korrigierten
Ströme in identisch zur Quelle benannte Sample-Dateien schreibt. In der eigentlichen Verarbeitung verwenden
wir nur die erste Quellspur zur Suche; ein erkanntes Muster muß dann auf allen anderen Spuren bestätigt werden.
Dies erfordert, von einer gegebenen Position auch stets auf das _Vorgänger-_ und __Nachfolger-__Sample zugreifen
zu können, was besondere Vorsicht an den Puffergrenzen bedingt. Dies werde ich durch entsprechende Abstraktion
und Trennung des Lese- vom Verarbeitungsvorgang lösen.
Arbeitsnotizen
--------------
.Juli 2014
Nach Abschluß der Aufnahmen stelle ich in mindestens zwei der Sitzungen einen regelmäßigen Defekt fest.
Nach Analyse beschließe ich, eine Reparatur zu versuchen. Dies ist auch ein Anlaß, mich einmal mit der
*`libsndfile`* zu beschäftigen.
.28.8.2014
Nach Rückkehr von meiner üblichen Ende-August-FrOSCon-Reise wird diese Aufgabe nun dringend. +
Lege einen Projektrahmen an und implementiere des Öffnen der Dateien via `libsndfile`
.30.8.2014
_Leider_ ist die Aufgabe nicht so einfach wie vermutet. Habe mir nun die Wellenformen im Detail angeschaut
und drei Probe-Schnipsel zur Entwicklung und für Tests extrahiert. Es handelt sich nicht wie anfangs vermutet,
um punktuell auf allen Spuren auftretende Null-Werte. Sondern vielmehr um einen ganz gewöhnlichen *Verlust von
Samples*. Das heißt, es fehlt -- synchron auf allen Spuren -- ein Stück Tonaufzeichnung unbekannter Länge, so
daß an der betreffenden Stelle ein Sprung in allen Wellenformen auftritt. +
Damit ändert sich das Konzept. Ich muß wohl einen Sprung in den Deltas zwischen benachbarten Samples erkennen,
und dies, zur Sicherheit, auf mehreren Spuren parallel. Und die Korrektur ist wesentlich mühsamer, wenn nicht
sogar unmöglich. In Anlehnung an mein altes `streckDich`-Skript mache ich eine kurze Kreuzblende, mit der damals
als optimal ausgeknobelten Länge von 4.5ms (200 Samples). Das große Problem ist bloß: _woher bekomme ich das
zusätzliche Material für die Kreuzblende?_