Audio-Dateien mittels ffmpeg normalisieren

Für einen Audio-Workflow wollte ich unter anderem Audio-Dateien normalisieren, damit diese mit einer identischen Lautheit verfügbar sind. Dazu kann das freie ffmpeg genutzt werden:

ffmpeg -i local.flac -filter:a loudnorm local.wav

Allerdings wird bei der Normalisierung eine 2-Pass-Lösung empfohlen. Dabei wird im ersten Durchlauf die Datei analysiert, um die entsprechenden Werte für die qualitativ hochwertige Normalisierung zu ermitteln:

ffmpeg -i local.flac -filter:a loudnorm=print_format=json -f null NULL

Für die entsprechende Datei wird dann eine Ausgabe erzeugt:

{
	"input_i" : "-33.65",
	"input_tp" : "-8.11",
	"input_lra" : "7.10",
	"input_thresh" : "-44.96",
	"output_i" : "-25.28",
	"output_tp" : "-2.00",
	"output_lra" : "4.50",
	"output_thresh" : "-36.36",
	"normalization_type" : "dynamic",
	"target_offset" : "1.28"
}

Mithilfe dieser Informationen kann dann der zweite Durchlauf gestartet werden:

ffmpeg -i local.flac -filter:a loudnorm=linear=true:i=-16:lra=7.0:tp=-2.0:offset=0.50:measured_I=-33.65:measured_tp=-8.11:measured_LRA=7.10:measured_thresh=-44.96 -ar 44100 local.wav

Da die Lösung mittels ffmpeg etwas umständlich ist, wurde ffmpeg-normalize entwickelt. Dieses Python-Tool kann über den Python-Paketmanager installiert werden:

pip3 install ffmpeg-normalize

Anschließend kann die Normalisierung und Konvertierung vorgenommen werden:

ffmpeg-normalize local.flac -o local.wav -ar 44100

In diesem Fall wird die FLAC-Datei normalisiert und in eine Wave-Datei konvertiert und die entsprechende Samplerate auf 44100 gestellt. Um das Kommando einfacher zugänglich zu machen, kann eine Bash-Funktion definiert werden. Unter macOS muss diese in der entsprechenden Konfigurationsdatei der Z shell angelegt werden:

nano ~/.zshrc

Anschließend kann die entsprechende Funktion in der Datei definiert werden:

normalize ()
{
  ffmpeg-normalize "$1" -o "$1".wav -ar 44100
}

Nachdem das Terminal neu gestartet wurde, kann das Kommando wie folgt benutzt werden:

normalize local.flac

Klingelton für Snom-Telefone erstellen

Snom ist ein Hersteller von VoIP-Telefonen. Diese Telefone können mit einem benutzerdefinierten Klingelton ausgestattet werden. Der Klingelton muss allerdings in einem speziellen Format vorliegen. Um eine Datei in das passende Format zu konvertieren kann SoX genutzt werden. Dabei handelt es sich um einen universellen Audiokonverter, welcher meist unter Linux genutzt wird. Zur Umwandlung muss folgender Befehl auf der Konsole eingegeben werden:

sox source.wav -b 16 -r 8000 -c 1 target.wav

Damit wird eine Datei mit einem Kanal (Mono), einer Abtastrate von 8000 Hertz und 16 Bit-Kodierung erzeugt. Die erzeugte Datei darf eine Größe von 250 KiB nicht überschreiten, sonst kann sie vom Gerät nicht wiedergegeben werden. Als grobe Richtschnur sollte sich die maximale Länge der Datei zwischen zehn und fünfzehn Sekunden bewegen.

Audio-Rekorder-Software für iOS

Für einige Aufnahmen, welche ich mit einem externen Mikrofon über das iPhone aufnehmen wollte, war ich auf der Suche nach einer passenden Recording-Software. Fündig wurde ich mit dem Auphonic Recorder von Auphonic.

‎Auphonic Recorder
Price: Free

Die App besitzt ein klar strukturiertes Interface, so dass man sich schnell zurechtfindet und mit der Nutzung beginnen kann. Als eine von wenigen Apps kann das Mikrofon, welches für die Aufnahme genutzt werden soll, unkompliziert festgelegt werden. Auch das Format, die Sampling Rate und Monitoring-Optionen können umfangreich eingestellt werden, so das keine Wünsche offen bleiben.

Neben der Recording-Funktionalität, verfügt die App über eine Schnittstelle zu Auphonic, so das Aufnahmen, problemlos an den Dienst übertragen werden können. Mit dem entsprechenden Mikrofon, verfügt man damit über eine Lösung um eine Aufnahme ohne weitere zusätzliche Hardware vorzunehmen.

libwave.net

Möchte man eine Wave-Datei unter .NET oder Mono öffnen, so wird man feststellen das es hierfür wenige sinnvolle Möglichkeiten gibt. Viele der vorgeschlagenen Lösungen nutzen spezielle APIs, welche die Platzformunabhängigkeit zerstören. Aus diesem Grund habe ich mir wieder mal NAudio vorgenommen und aus dieser Bibliothek eine Bibliothek namens libwave.net abgeleitet.

Eine geöffnete Wave-Datei

Eine geöffnete Wave-Datei

Dank der freien Lizenz (NAudio ist unter der Ms-Pl lizenziert) stellte dies kein Problem dar. Mit der Bibliothek ist es möglich Wave-Dateien zu schreiben und zu lesen. Das Interface wurde dabei auf das notwendigste reduziert. Die Möglichkeiten werden dabei in den beiliegenden Beispielen aufgezeigt. Lauffähig ist die Bibliothek unter .NET und Mono. Zu finden ist das Projekt unter github.com/seeseekey/libwave.net.