thomaskekeisen.de

Aus dem Leben eines Bildschirmarbyters

Viel zu kompensieren

Wer mich kennt weiß, dass ich viel im Schlaf rede. Meistens spreche ich irgendwelche Begriffe aus der Informatik vor mich her, manchmal ganze Sätze. Seltener auch solche, die auch sinnvoll zusammenhängen. Aus Interesse und zur eigenen Belustigung habe ich das eine ganze Zeit lang aufgenommen. Mit Apps wie Sleep Talk Recorder war das relativ einfach: Die App ist geöffnet und wartet auf Geräusche. Sobald etwas gesagt wird und damit die Lautstärke im Raum zu hoch ist, beginnt die Aufnahme.

Irgendwann kam ich dann auf die Idee, das Gesprochene mit Untertiteln zu versehen und als witziges Video zu veröffentlichen. Das Problem nur: Das Erstellen eines solchen Videos ist sehr aufwendig. Mit dem Exportieren der Daten vom iPhone, Setzen der Texte und dem analysieren/verstehen des Gesprochenen stecken schon mal vier bis acht Stunden Zeit in einem Video. Das war lange Zeit in Ordnung, da ich einfach auf langen Reisen als Beifahrer an diesen Videos gearbeitet habe. Irgendwann hat mich aber der Reiz gepackt, eine saubere Lösung zu entwickeln, die in mein "Smart Home" passt - mich hatte es ohnehin genervt, dass ich jede Nacht daran denken musste, die Aufnahme-App zu starten.

RaspberryPi als Schlaflabor

Nein, das geht nicht. Haha. Thomas Kekeisen im Schlaf vor sich her geredet ( Video)
Dass ich ein RaspberryPi mit USB-Mikrofon verwende war schnell klar, nicht aber, auf welche Softwarekomponenten ich setze. Eigentlich wollte ich Ruby oder Python verwenden, bin dann aber nach einigen Tests bei klassischem Bash-Script und alteingesessenen Programmen wie ffmpeg, sox und ImageMagick gelandet. Ton-be- und -verarbeitung ist mit diesen Linux-Tools wirklich ein Kinderspiel - wenn man sich auskennt.

Da ich wirklich den gesamten "Video-Prozess" von aufgenommener Sprache bis zum fertigen Video möglichst automatisieren wollte, musste mein Programm natürlich auch ein Web-Interface für das Schneiden der Audiodateien her. Letztlich habe ich mich für node.js als Server, Jade als Template-Engine und Bootstrap sowie wavesurfer.js für das Frontend entschieden. An dieser Stelle auch einen Dank an Michael Malura, der mir anfangs bei Fragen zu node.js beratend zur Seite stand.

Das Frontend von PiSleepTalk

"Well, that escalated quickly"

Ich habe mich von Dezember 2015 bis ungefähr April 2016 intensiv mit dem Thema beschäftigt, viel über die für mich neuen Komponenten gelernt und eine grobfunktionale Version meiner Idee entwickelt. Dann hatte mich allerdings die Lust verlassen und ich habe das Projekt erst im September 2016 und nach ungefähr 400 Commits für mich zufriedenstellend fertiggestellt. Neben sauberem Code und einer ordentlichen Struktur habe ich auch versucht, eine einfache Installation zu implementieren, damit unerfahrene Linux-Nutzer auch die Chance haben, PiSleepTalk zu benutzen. Auf einem frischen RaspberryPi ist das komplette System mit einem 39 Zeichen langen Befehl und etwas Zeit - etwa zwei bis 4 Stunden - erledigt.

Lauter oder lauter, du hast die Wahl! Thomas Kekeisen im Schlaf vor sich her geredet ( Video)
Neben dem Aufnehmen und Bewerten von Audiodateien kann das System auch Videos rendern, Störgeräusche aus den Aufnahmen entfernen und erlaubt natürlich, das "framegenaue" Schneiden der Aufnahmen über das Web-Interface. Außerdem können Audio-Dateien, die beispielsweise mit einem anderen Gerät aufgenommen wurden, zur Bearbeitung importiert werden. Auch importierte ZIP-Dateien werden automatisch entpackt. Und damit ich nicht mehr aktiv daran denken muss, die Aufnahme zu starten, passiert das automatisch durch Nutzung von Daten, die ich sowieso tagtäglich generiere. So starten eine Aufnahme nur, wenn es zwischen ein und sechs Uhr in der Nacht ist und ich auf Swarm zuhause eingecheckt bin. Und um das Szenario abzufangen, falls ich Zuhause, wach und am Musikhören bin, startet eine Aufnahme auch nur, wenn in den letzten 30 Minuten kein Lied auf last.fm gescrobbelt wurde.

Debugging-Hazzle

Gegen Ende der Entwicklung war das Debuggen die größte Herausforderung. Denn wie prüft man Code, der einen selbst im Schlaf aufnimmt, während man schläft? Die besten Mikrofon-Einstellungen musste ich wirklich Nacht für Nacht erproben und am Morgen die Qualität der Aufnahmen überprüfen. Für die restlichen Probleme - und da stößt man bei der Verwendung von sox und ffmpeg auf so einige - habe ich dann gelöst indem ich Teile der Dateibearbeitung ausgeschalten habe, um das entstandene Dateisystem zu sichern. So konnte ich die Aufnahmen immer wieder einspielen und die Verarbeitung auf dem RaspberryPi erneut starten. Um zu prüfen, wann und aus welchen Gründen mein RaspberryPi manchmal die Aufnahme stoppt oder startet, habe ich mir schlichtweg Info-Push-Nachrichten eingerichtet. Somit hatte ich direkt morgens beim Griff zum iPhone das Protokoll der Nacht zur Hand. Die Push-Nachrichten selbst waren natürlich lautlos.

PiSleepTalk

Das fertige PiSleepTalk gibt es auf GitHub. Neben der kompletten Dokumentation sowie Installationsanleitung finden sich im Issues-Bereich noch Dinge, die ich in Zukunft implementieren könnte. Ich freue mich natürlich sehr über Mitstreiter.

Mittlerweile nutze ich meine Installation seit drei Monaten und habe mit ihr mit relativ geringem Aufwand drei Videos erzeugt. Manchmal kommt es noch vor, dass die SD-Karte meines Raspberry zu voll ist - ein noch offenes Problem. Ich vermute, dass durch den Umstieg von meinem günstigen USB-Mikrofon auf ein professionelles Studio-Mikrofon auch die aufgenommen Aufnahmen um ein Vielfaches größer geworden sind.

Schlafgesäusel 6

YouTube 23. Oktober 2016 Video öffnen

Schlafgesäusel 5

YouTube 23. Oktober 2016 Video öffnen

Schlafgesäusel 4

YouTube 9. Oktober 2016 Video öffnen

Teilen

Kommentare