Developing Saraswati: A robust, multi-channel audio recording, transmission and storage system

Introduction

For the “Bee Observer” (BOB) project, a joint endeavour initiated by the Cognitive neuroinformatics group at the University of Bremen, we are developing a system for continuous audio recording.

This topic will be used as a main thread for the whole development process and might spin off further topics.

Specifications

Placeholder.

We have been able to make some progress, ultimately decided to use GStreamer, made some experiments using the GStreamer Rust bindings and finally settled the prototype implementation on the GStreamer Python bindings.

The working example flac-timestamp-chunked.py has been tested successfully with Python 2.x, Python 3.x, GStreamer 1.10.4 and GStreamer 1.14.4, on Linux and macOS.

If you want to try this at home, please follow up at the setup documentation, read about how to run the example and have fun.


The Linux machine we use for testing is a BeagleBone Black running Debian GNU/Linux 9 (stretch) on ARM. Thanks, @einsiedlerkrebs!

@weef just suggested to add support for WavPack (see also Lossless Audio Compression Codecs) which doesn’t sound bad, thanks!

As the Debian system conveniently covers many ARM targets, you should be able to run the software on other RaspberryPi- and BeagleBone-variants like the BeagleBone Green and the Raspberry Pi Zero W without many deviations to the setup procedure.

We will be happy about any reports if you manage to get this working on different hardware. Especially, we are looking at other Linux targets like OpenWRT on MIPS ;].

1 Like

I asked @weef about reasonable USB 2.0 hubs the other day. It should be suitable to accept a bunch of cheap audio interfaces like the VT1630A (see below) which just don’t fit well into regular USB hubs as the physical dimensions (their width) is too large to be able to operate them in a multi-device mode, i.e. to plug more than one audio interface dongle side-by-side.

This one seems to fit the requirements well, as the sockets are arranged on edge. Exactly what I was asking for, so thanks again @weef!

Please recognize that this is mainly for workbench operations, in the field we are about to use real more professional devices we are discussing at Audio hardware for BeagleBone.

EX-1177HMV

7 Port USB 2.0 Metall HUB für Trägerschiene, verschraubbar-EX-1177HMV

– Via: USB 2.0 Hubs mit vertikal angeordneten Ports

VIA VT1630A USB audio interface

image

VIA VT1630A USB audio interface from Uwe Greggers, Aron Dür and @BenB of http://www.honeybee.neurobiologie.fu-berlin.de/ fame - thanks!

Hallo,

ich weiß nicht ob das hier noch die richtige Stelle für meine Fragen ist. Ich hab mich jetzt auch mal in das Thema eingearbeitet.

Die erste grundlegende Feststellung nach Schreiben eines kleinen Bash-Skriptes ist, dass der BeagleBone ganz gut damit klar zu kommen scheint 4 Kanäle gleichzeitig über USB-Soundkarten aufzunehmen. Vielleicht ist das doch die einfache Alternative zu Cape4All.

Dann hab ich Saraswati ausprobiert und es auch geschafft darüber etwas aufzunehmen.

Ich habe dazu folgende Fragen:

  • Habt ihr eine Liste von GStreamer Plugins, die auf jeden Fall installiert werden müssen?

Wenn man die Plugins so wie in der Saraswati-Anleitung installiert, ist der Beaglebone schon bis zu 99% oder 100% belegt.

  • Um mit Saraswati mehrkanälig aufzunehmen, könnte man theoretisch die Pipeline 4 mal starten, oder hat GStreamer da irgendwelche Begrenzungen?

  • Ich hing ganz schön lange an der GStreamer-Installation, einerseits weil ich herausfinden wollte, welche Plugins wirklich notwendig sind, anderseits, weil immer noch irgendwas fehlte. Z.B. hat zuletzt splitmuxsink nicht funktioniert. Irgendwelche Tipps, wie GStreamer vernünftig installiert werden kann?

  • Mein Plan ist, die Dateien zunächst (damit es auf jeden Fall noch vor dem Winter klappt) über einen Rsync-Daemon mit dem Server zu synchronisieren. Natürlich muss man die Rechte auf dem Server für den Beaglebone Nutzer einschränken, und ggf. den Key verschlüsseln, aber ich halte das erst mal für eine simple und brauchbare Lösung. Habt ihr Gedanken dazu?

Vielen Dank,
Diren

3 Likes

rsync via ssh mit key ist quasi ‘industriestandard’ ;) das wird viel benutzt und funktioniert gut.

hier ein kleines/r cheatsheet/primer:

rsync -avz --bwlimit=80 --rsh=ssh . foo.bar.de:/space/backups/foo/bar/fnord

mal als beispiel… das wuerde das lokale verzeichnis (man bemerke den . ) auf den server foo.bar.de syncen mit maximal 80kbyte bandbreitenlimit. a ist archive mode, z steht fuer compression (bringt bei compressed audio nix, aber bei den filelistings), v ist verbose -> alles anzeigen was passiert.
archive mode heisst alle permissions, symlinks etc bleiben erhalten.

damit das ganze auch einfach so tut musst du natuerlich einen ssh key in .ssh/config fuer foo.bar.de eingetragen haben:

Host foo.bar.de
IdentityFile ~/.ssh/bienenfookey
Protocol 2
User upload

damit das nicht mit first-connect-fragen nervt… einfach am anfang mal ssh foo.bar.de machen. will man eh testen.

das impliziert natuerlich das man das immer als der user unter dem dann der kram laeuft testet/installiert/configuriert.

spiel einfach mal damit, das sieht nur kompliziert aus, tut aber sehr zuverlaessig und ist eigentl. recht simpel.
du kannst z.b. auch fuer jeden stock einen frischen key und user auf dem server benutzten… wegen der security.

2 Likes

Hier mein aktueller Stand. Es läuft für 4-Kanäle und es gibt einen Servertransfer mit Rsync: GitHub - DieDiren/saraswati: Saraswati is a robust, multi-channel audio recording, transmission and storage system
(Sorry, ich komme gerade nicht dazu, hier mehr zu schreiben und die Doku im Repo ist auch schlecht formatiert)
Den Drift will ich mir unbedingt als nächstes anschauen, da werde ich dann auch noch mal in Ruhe alles durchlesen, was ihr hier schon gepostet habt.

2 Likes