63 lines
3.8 KiB
Text
63 lines
3.8 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 ein einziges Null-Sample gefunden, das einen ansonsten
|
|
glatt aussehenden Kurvenverlauf unterbricht. Dieser Null-Wert tritt offensichtlich auf allen Spuren
|
|
synchron auf. 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 traten
|
|
immer wieder auf.
|
|
|
|
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 _ein einziges_ Null-Wort umgeben von normalen Sample-Werten auf einer
|
|
Seite (positiv oder negativ), so daß es sich wahrscheinlich nicht um einen Null-Durchgang des Signales
|
|
handelt.
|
|
- die Korrektur besteht darin, das Null-Wort durch den Mittelwert der Nachbar-Samples zu ersetzen.
|
|
|
|
Es könnte zu ``false positives'' kommen, speziell bei leisem Rauschen. Die Kombination mehrerer
|
|
Kanäle senkt jedoch die Wahrscheinlichkeit solcher Fehl-Korrekturen. Auch ist die Korrektur als Solche
|
|
nicht gefährlich, denn ein Mittelwert ist in den meisten Fällen ungefähr richtig; ich vermute daß
|
|
die verbleibende Störung meist nicht wahrnehmbar ist. Obwohl ich nicht untersucht habe, ob diese
|
|
Null-Samples nun _ausgefallene_ Samples oder _zusätzlich eingeschobene_ Samples sind, entscheide
|
|
ich mich für eine Ersetzung durch einen besser eingepaßten Sample-Wert, und nicht für eine
|
|
Verkürzung der Aufnahme -- einfach um den Eingriff möglichst unproblematisch zu halten.
|
|
|
|
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`
|
|
|