Erschließung von Saraswati für den Betrieb auf einem Industrie PC, mit Upload per SSH+rsync auf Synology NAS

Einleitung

Bei System für kontinuierliche Audio-Aufzeichnung (BOB Projekt, Phase 1) wurde bereits allerhand geplant. Hier geht es nun in medias res bzgl. der Evaluierung von Saraswati.

@MKO interessiert sich für Saraswati. Im Gegensatz zur Installation von Saraswati auf einem BeagleBone Green Wireless will er einen Industrie-PC nutzen, wie bei #63 und #66 beschrieben.

bsoering@Bienenstand:~$ sudo apt-get install gstreamer1.0 gstreamer1.0-tools gstreamer1.0-alsa gstreamer1.0-plugins-base gstreamer1.0-plugins-good
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.       
Statusinformationen werden eingelesen.... Fertig
Hinweis: »gstreamer1.0-python-dbg-plugin-loader« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-plugins-ugly-amr« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-videosink« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-alsa« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-plugins-ugly-dbg« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-plugins-ugly-doc« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-plugins-base-apps« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-rtsp-dbg« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »libgstreamer1.0-dev« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-tools« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-python3-dbg-plugin-loader« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-plugins-good« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-qapt« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »libgstreamer1.0-0-dbg« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-espeak« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-nice« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-opencv« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-crystalizer-pulseeffects« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-qt5« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-videosource« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-crystalhd« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-fluendo-mp3« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-rtsp« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-plugins-bad« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-convolver-pulseeffects« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-plugins-base« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-audiosource« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-pipewire« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-plugins-bad-videoparsers« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-plugins-really-bad« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-pulseaudio« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-pocketsphinx« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-plugins-bad-dbg« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-plugins-bad-doc« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-gtk3« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-adapter-pulseeffects« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-visualization« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-plugins-bad-faad« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-omx-generic« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-lame« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-x« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-python-plugin-loader« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-plugins-rtp« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-vaapi-doc« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-omx-generic-config« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-libav« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-plugins-base-dbg« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-plugins-good-dbg« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-plugins-base-doc« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-plugins-good-doc« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-clutter-3.0« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-vaapi« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-libav-dbg« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-packagekit« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-python3-plugin-loader« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »libgstreamer1.0-0« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-omx-bellagio-config« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-gl« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-plugins-ugly« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-doc« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-autogain-pulseeffects« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-audiosink« wird für regulären Ausdruck »gstreamer1.0« gewählt.
Hinweis: »gstreamer1.0-plugins-bad« wird an Stelle von »gstreamer1.0-plugins-bad-faad« gewählt.
Hinweis: »gstreamer1.0-plugins-bad« wird an Stelle von »gstreamer1.0-plugins-bad-videoparsers« gewählt.
Hinweis: »gstreamer1.0-plugins-ugly« wird an Stelle von »gstreamer1.0-plugins-ugly-amr« gewählt.
gstreamer1.0-clutter-3.0 ist schon die neueste Version (3.0.27-1).
gstreamer1.0-tools ist schon die neueste Version (1.16.2-2).
libgstreamer1.0-0 ist schon die neueste Version (1.16.2-2).
gstreamer1.0-libav ist schon die neueste Version (1.16.2-2).
gstreamer1.0-libav wurde als manuell installiert festgelegt.
gstreamer1.0-plugins-bad ist schon die neueste Version (1.16.2-2.1ubuntu1).
gstreamer1.0-plugins-bad wurde als manuell installiert festgelegt.
gstreamer1.0-plugins-ugly ist schon die neueste Version (1.16.2-2build1).
gstreamer1.0-plugins-ugly wurde als manuell installiert festgelegt.
gstreamer1.0-vaapi ist schon die neueste Version (1.16.2-2).
gstreamer1.0-vaapi wurde als manuell installiert festgelegt.
gstreamer1.0-alsa ist schon die neueste Version (1.16.2-4ubuntu0.1).
gstreamer1.0-gl ist schon die neueste Version (1.16.2-4ubuntu0.1).
gstreamer1.0-packagekit ist schon die neueste Version (1.1.13-2ubuntu1.1).
gstreamer1.0-plugins-base ist schon die neueste Version (1.16.2-4ubuntu0.1).
gstreamer1.0-plugins-base-apps ist schon die neueste Version (1.16.2-4ubuntu0.1).
gstreamer1.0-plugins-good ist schon die neueste Version (1.16.2-1ubuntu2.1).
gstreamer1.0-pulseaudio ist schon die neueste Version (1.16.2-1ubuntu2.1).
gstreamer1.0-x ist schon die neueste Version (1.16.2-4ubuntu0.1).
Einige Pakete konnten nicht installiert werden. Das kann bedeuten, dass
Sie eine unmögliche Situation angefordert haben oder, wenn Sie die
Unstable-Distribution verwenden, dass einige erforderliche Pakete noch
nicht erstellt wurden oder Incoming noch nicht verlassen haben.
Die folgenden Informationen helfen Ihnen vielleicht, die Situation zu lösen:

Die folgenden Pakete haben unerfüllte Abhängigkeiten:
 gstreamer1.0-python3-dbg-plugin-loader : Kollidiert mit: gstreamer1.0-python3-plugin-loader aber 1.16.2-2 soll installiert werden
 gstreamer1.0-python3-plugin-loader : Kollidiert mit: gstreamer1.0-python3-dbg-plugin-loader aber 1.16.2-2 soll installiert werden
E: Probleme können nicht korrigiert werden, Sie haben zurückgehaltene defekte Pakete.
bsoering@Bienenstand:~$ 

Merci. Welches Ubuntu nochmal genau? Oder Mint? Aber welches Debian-Basisrelease - stretch, buster oder noch was Neueres? Ich brauche vermutlich alle Infos, die ich kriegen kann ;].

P.S.: Ich hatte den Fehler beim ersten Testen in nem Debian Docker Container auch. Die Chancen sind also nicht schlecht, dass wir ihn bei Dir auch wegbekommen.

bsoering@Bienenstand:~$ lsb_release -a No LSB modules are available. Distributor ID: Linuxmint Description: Linux Mint 20.2 Release: 20.2 Codename: uma

Based on Ubuntu 20.04.2 LTS · Linux Kernel 5.4.0 · Cinnamon Desktop 5.0.2 · Xfce Desktop 4.16 · MATE Desktop 1.24 · Python 3.8.5 · Firefox 89.0 …

hab noch ein paar mehr von den Kisten mache mal einen weiteren mit Ubuntu fertig

All right. Danke.

So klappte es gerade in der Testumgebung:

docker run -it --rm linuxmintd/mint20-amd64 bash
apt-get update
apt-get install --yes libgstreamer1.0 gstreamer1.0-tools gstreamer1.0-alsa gstreamer1.0-plugins-base gstreamer1.0-plugins-good
apt-get install --yes python3 python3-pip python3-gst-1.0 python3-gi python3-tz
apt-get install --yes alsa-utils mkvtoolnix
pip3 install saraswati --upgrade
saraswati record --channel="testdrive source=autoaudiosrc"

fast:

bsoering@Bienenstand:~$ sudo apt-get install --yes gstreamer1.0-tools gstreamer1.0-alsa gstreamer1.0-plugins-base gstreamer1.0-plugins-good
[sudo] Passwort für bsoering:         
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.       
Statusinformationen werden eingelesen.... Fertig
gstreamer1.0-tools ist schon die neueste Version (1.16.2-2).
gstreamer1.0-alsa ist schon die neueste Version (1.16.2-4ubuntu0.1).
gstreamer1.0-plugins-base ist schon die neueste Version (1.16.2-4ubuntu0.1).
gstreamer1.0-plugins-good ist schon die neueste Version (1.16.2-1ubuntu2.1).
0 aktualisiert, 0 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.
bsoering@Bienenstand:~$ sudo apt-get install --yes python3 python3-pip python3-gst-1.0 python3-gi python3-tz
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.       
Statusinformationen werden eingelesen.... Fertig
python3 ist schon die neueste Version (3.8.2-0ubuntu2).
python3-gi ist schon die neueste Version (3.36.0-1).
python3-tz ist schon die neueste Version (2019.3-1).
python3-gst-1.0 ist schon die neueste Version (1.16.2-2).
python3-pip ist schon die neueste Version (20.0.2-5ubuntu1.5).
0 aktualisiert, 0 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.
bsoering@Bienenstand:~$ sudo apt-get install --yes alsa-utils mkvtoolnix
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.       
Statusinformationen werden eingelesen.... Fertig
mkvtoolnix ist schon die neueste Version (45.0.0-2).
alsa-utils ist schon die neueste Version (1.2.2-1ubuntu2.1).
0 aktualisiert, 0 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.
bsoering@Bienenstand:~$ pip install saraswati --upgrade
Requirement already up-to-date: saraswati in ./.local/lib/python3.8/site-packages (0.1.0)
Requirement already satisfied, skipping upgrade: cloup<0.9,>=0.8.0 in ./.local/lib/python3.8/site-packages (from saraswati) (0.8.2)
Requirement already satisfied, skipping upgrade: click<8,>=7.1.2 in ./.local/lib/python3.8/site-packages (from saraswati) (7.1.2)
Requirement already satisfied, skipping upgrade: PyGObject-stubs==0.0.2 in ./.local/lib/python3.8/site-packages (from saraswati) (0.0.2)
Requirement already satisfied, skipping upgrade: appdirs<2,>=1.3 in ./.local/lib/python3.8/site-packages (from saraswati) (1.4.4)
Requirement already satisfied, skipping upgrade: PyGObject in /usr/lib/python3/dist-packages (from PyGObject-stubs==0.0.2->saraswati) (3.36.0)
Requirement already satisfied, skipping upgrade: pycairo>=1.11.1 in /usr/lib/python3/dist-packages (from PyGObject->PyGObject-stubs==0.0.2->saraswati) (1.16.2)
bsoering@Bienenstand:~$ saraswati record --channel="testdrive source=autoaudiosrc"
saraswati: Befehl nicht gefunden.
bsoering@Bienenstand:~$ 

Tippe mal uch muß noch einen Pfad zu saraswati einstellen?

Da Du pip nicht per sudo ausgeführt hast, ist saraswati vermutlich unter ~/.local/bin gelandet, was standardmäßig nicht im Pfad ist.

Habe auch gerade die Installationsanleitung bei https://github.com/hiveeyes/saraswati#setup auf Vordermann gebracht.

Da Du pip nicht per sudo ausgeführt hast, ist saraswati vermutlich unter ~/.local/bin gelandet, was standardmäßig nicht im Pfad ist.

stimmt muß jetzt den PATH in die .bashrc schreiben Mint verwehrt mir aber den zugriff.

in der bash geht es aber zur not auch.

PATH=$PATH:/home/appli/bin
export PATH

[/bsoering@Bienenstand:~$ saraswati record --channel="testdrive source=autoaudiosrc"
2021-06-20 23:04:35,858 [saraswati.recorder] INFO   : Setting up audio recorder
2021-06-20 23:04:41,340 [saraswati.recorder] INFO   : Spool location: /home/bsoering/.local/share/saraswati/spool/recording_{channel}_{timestamp}_{fragment:04d}.mka
2021-06-20 23:04:41,341 [saraswati.recorder] INFO   : Chunk duration: 60 seconds
2021-06-20 23:04:41,341 [saraswati.recorder] INFO   : Maximum number of file fragments: 9999
2021-06-20 23:04:41,342 [saraswati.recorder] INFO   : Adding channel "testdrive" on audio source "autoaudiosrc"
2021-06-20 23:04:41,385 [saraswati.recorder] INFO   : Detected GStreamer>=1.14.4, using 'format-location-full'
2021-06-20 23:04:41,386 [saraswati.recorder] INFO   : Starting audio recorder
2021-06-20 23:04:41,386 [saraswati.recorder] INFO   : Starting pipeline: Pipeline(expression='autoaudiosrc ! audioconvert ! queue ! flacenc ! flactag ! flacparse ! muxer.audio_0 splitmuxsink name=muxer muxer=matroskamux max-size-time=60000000000 max-files=9999', gst=<Gst.Pipeline object at 0x7f382a8342c0 (GstPipeline at 0x18c8160)>)
2021-06-20 23:04:41,571 [saraswati.recorder] INFO   : Saving next audio fragment to "recording_testdrive_20210620T210441+0000_0000.mka"
2021-06-20 23:05:41,767 [saraswati.recorder] INFO   : Saving next audio fragment to "recording_testdrive_20210620T210541+0000_0001.mka"
2021-06-20 23:06:41,737 [saraswati.recorder] INFO   : Saving next audio fragment to "recording_testdrive_20210620T210641+0000_0002.mka"
2021-06-20 23:07:41,713 [saraswati.recorder] INFO   : Saving next audio fragment to "recording_testdrive_20210620T210741+0000_0003.mka"
2021-06-20 23:08:41,691 [saraswati.recorder] INFO   : Saving next audio fragment to "recording_testdrive_20210620T210841+0000_0004.mka"
2021-06-20 23:09:41,660 [saraswati.recorder] INFO   : Saving next audio fragment to "recording_testdrive_20210620T210941+0000_0005.mka"
2021-06-20 23:10:41,636 [saraswati.recorder] INFO   : Saving next audio fragment to "recording_testdrive_20210620T211041+0000_0006.mka"
2021-06-20 23:11:41,612 [saraswati.recorder] INFO   : Saving next audio fragment to "recording_testdrive_20210620T211141+0000_0007.mka"
2021-06-20 23:12:41,606 [saraswati.recorder] INFO   : Saving next audio fragment to "recording_testdrive_20210620T211241+0000_0008.mka"

schaut auf alle fälle schon mal gut aus.
morgen oder übermorgen bekomme ich die 2 Mikrofone die ich verwenden möchte, bin mal gespannt wie das mit 2 Stück wird. Momentan habe ich eine USB Soundblaster mit Mikrofon dran.

Den FTP Server richte ich morgen ein. Hatte die alte Fritzbox (7490 gebrandet) gegen eine 7590 getauscht, da die andere mir nicht genug Leistung und Einstellungen hatte.

Dieser Rechner kann zwar auch eine interne Festplatte beherbergen, aber da bin ich mir wegen der zur erwarteten innen Temperaturen nicht sicher wie lange die halten.

1 Like

Hi Michael,

Wunderbar. Ja, genau so soll das im störungsfreien Betrieb aussehen.

Ich habe noch ein paar weitere Verbesserungen und Bugfixes hinzugefügt, mittlerweile gibt es Saraswati in der Version 0.3.2. Was noch ansteht, ist, das Gerät sinnvoll per "systemd" unit file flugfähig zu bekommen. Damit müsstest Du es dann vollständig autonom im Feld laufen lassen können.

Auch wenn es bestimmt noch Bugs geben wird, glaube ich, dass die Infrastruktur nun auch schon im aktuellen 0.3er Release ausgereift genug ist, um robust und resilient im Feld betrieben werden zu können. Ich habe das Programm die letzten beiden Tage während der Entwicklung immer mal wieder längere Strecken laufen lassen und dabei auch “kein Netzwerk” und andere absichtlich herbeigeführte Fehlerszenarien berücksichtigt.

Viele Grüße,
Andreas.

Moin Andreas,
Bin jetzt dabei auch rsync zu testen. Nutze dafür eine Synology Diskstation DS212j ([en]) mit 2x 4TB Platten.

Hab da ein paar Probleme die wahrscheinlich auf de Einstellungen der Diskstation zurückzuführen sind.

  1. hab ich noch nicht rausgefunden, wie ich die Dateien die über rsync kommen in ein anderen Ordner als homes/benutzer/port/angegebenesVerzeichnis bekomme. Ja Port ist richtig, da schiebt er den Port der Verbindung mit rein. wenn ich den Port nicht mit angebe kommt keine Verbindung zu Stande.

  2. verlangt meine Diskstation ein Passwort welches ich nicht in den Optionen unter bekomme.

--upload="rsync://Benutzer@serveradresse:port" verlangt bei mir bei der ersten Verbindungsaufnahme nach einer manuellen Angabe des Passwortes mit einem Timeout nach 16 Sekunden. Bei verbindungsproblemen verlangt er dieses später dann wieder.
wenn ich jetzt --upload="rsync://Benutzer:Passwort@serveradresse:port" verwende bricht er mit einer Fehlermeldung ab.
.
Dateien Live, gibt es aber auch ohne FTP über eine Freigabe Connecting...
(dieser link ist nur ein Test. Werde Link und Text später wieder Ändern.)
Eine Info über die Downloadgeschwindigkeit wär aber evtl.
nicht schlecht.

Bei Connect with Synology Diskstation for uploading audio files using rsync over SSH · Issue #10 · hiveeyes/saraswati · GitHub habe ich ein paar Links herausgesucht, wie man SSH key-based Authentifizierung im DiskStation Manager (DSM), dem Betriebssystem für die NAS Boxen, konfiguriert. Schließlich ist die Basis “auch nur ein Linux”.

Da Du die NAS selber verwaltest und u.U. leicht entsprechend konfigurieren könntest, wäre das auf jeden Fall die bevorzugte Variante, die auch keine Änderungen an Saraswati erfordern würde.

Nein, das klappt nicht. Weder Passwort noch Portnummer lassen sich so an dieser Stelle bestimmen, denke ich. Nach dem :, das nach dem Hostnamen kommt, geht die Pfadadresse los, da hat keine Portnummer mehr Platz.

Für die Angabe der Portnummer bleiben also nur diese beiden Optionen:

  1. rsync Befehl modifizieren à la -e 'ssh -p <port> -i <path-to-key>', wie von @Diren vorgemacht und bei Developing Saraswati: A robust, multi-channel audio recording, transmission and storage system - #30 by Andreas diskutiert.

  2. Einstellungen in der .ssh/config Datei vornehmen (Port), wie von @roh bei Developing Saraswati: A robust, multi-channel audio recording, transmission and storage system - #23 by roh beschrieben.

Variante 1 bräuchte jedoch eine Änderung am Code, daher würde ich Variante 2 bevorzugen.

Du meinst beim Upload aus Sicht von Saraswati? Es gäbe da noch die Optionen --progress und --progress2 für rsync. Diese könnte man u.U. noch mit dazu nehmen, wenn sich dann die Ausgabe nicht mit den anderen Meldungen im Log von Saraswati in die Quere kommt.

Meine [diesen Link](http://gofile.me/6R2B4/7c8uKTV4x ). Das ist eine Freigabe auf den Speicherort auf dem Nas. Wenn ich hier von meinem Rechner runterlade läd er bei mir im lokalem Netz runter. Die Dateien sind zwar Müll, da das Micro defekt ist, aber die neuen kommen erst morgen an.

Achso. An dieser Stelle kann ich wahrscheinlich nicht weiterhelfen? Über diesen Link jedenfalls finde ich keinerlei verwertbaren HTTP Direktlinks, die man z.B. an wget weitergeben könnte. Diese Art des Dateizugriffs scheint also ausschließlich im Browser zu funktionieren?

Ja stimmt, deswegen wollte ich wissen, man da einigermaßen zügig runterladen kann.
Werde morgen Abend mal deine Tipps mit dem ssh Schlüsseln durcharbeiten. Ist mir momentan zu hoch und ich muss wieder früh raus. Danke nochmal schaut werde den Rechner morgen auf alle fälle schon mal an den Bienenstand schrauben, wenn die Micros da sind. Die restlichen Sachen bekomme ich denke ich auch ohne physischen zugriff hin.

Danke nochmal für die tolle Arbeit.

1 Like

Doch, geht gut, finde ich.

Das wäre toll, wenn das klappt.

Exzellent. Hauptsache das Gerät ist reboot-safe und kommt von selbst wieder ins Netz. Viel Erfolg dabei!

3 posts were merged into an existing topic: Developing Saraswati: A robust, multi-channel audio recording, transmission and storage system

It comes at just the right time.
My new microphones have just arrived.
I ordered 2 different ones to see if there were any differences.
hw:1 + hw:2
I was already wondering how to assign the individual microphones to the channels.

gst-device-monitor-1.0

Probing devices...


Device found:

	name  : Monitor of Eingebautes Tongerät Analog Stereo
	class : Audio/Source
	caps  : audio/x-raw, format=(string){ S16LE, S16BE, F32LE, F32BE, S32LE, S32BE, S24LE, S24BE, S24_32LE, S24_32BE, U8 }, layout=(string)interleaved, rate=(int)[ 1, 384000 ], channels=(int)[ 1, 32 ];
	        audio/x-alaw, rate=(int)[ 1, 384000 ], channels=(int)[ 1, 32 ];
	        audio/x-mulaw, rate=(int)[ 1, 384000 ], channels=(int)[ 1, 32 ];
	properties:
		device.description = "Monitor\ of\ Eingebautes\ Tonger\303\244t\ Analog\ Stereo"
		device.class = monitor
		alsa.card = 0
		alsa.card_name = "HDA\ Intel"
		alsa.long_card_name = "HDA\ Intel\ at\ 0xfeaf8000\ irq\ 27"
		alsa.driver_name = snd_hda_intel
		device.bus_path = pci-0000:00:1b.0
		sysfs.path = /devices/pci0000:00/0000:00:1b.0/sound/card0
		device.bus = pci
		device.vendor.id = 8086
		device.vendor.name = "Intel\ Corporation"
		device.product.id = 284b
		device.product.name = "82801H\ \(ICH8\ Family\)\ HD\ Audio\ Controller"
		device.form_factor = internal
		device.string = 0
		module-udev-detect.discovered = 1
		device.icon_name = audio-card-pci
		is-default = false
	gst-launch-1.0 pulsesrc device=alsa_output.pci-0000_00_1b.0.analog-stereo.monitor ! ...


Device found:

	name  : USB Microphone Mehrkanal
	class : Audio/Source
	caps  : audio/x-raw, format=(string){ S16LE, S16BE, F32LE, F32BE, S32LE, S32BE, S24LE, S24BE, S24_32LE, S24_32BE, U8 }, layout=(string)interleaved, rate=(int)[ 1, 384000 ], channels=(int)[ 1, 32 ];
	        audio/x-alaw, rate=(int)[ 1, 384000 ], channels=(int)[ 1, 32 ];
	        audio/x-mulaw, rate=(int)[ 1, 384000 ], channels=(int)[ 1, 32 ];
	properties:
		alsa.resolution_bits = 16
		device.api = alsa
		device.class = sound
		alsa.class = generic
		alsa.subclass = generic-mix
		alsa.name = "USB\ Audio"
		alsa.id = "USB\ Audio"
		alsa.subdevice = 0
		alsa.subdevice_name = "subdevice\ \#0"
		alsa.device = 0
		alsa.card = 1
		alsa.card_name = "USB\ Microphone"
		alsa.long_card_name = "MUSIC-BOOST\ USB\ Microphone\ at\ usb-0000:00:1d.0-2\,\ full\ speed"
		alsa.driver_name = snd_usb_audio
		device.bus_path = pci-0000:00:1d.0-usb-0:2:1.0
		sysfs.path = /devices/pci0000:00/0000:00:1d.0/usb2/2-2/2-2:1.0/sound/card1
		udev.id = usb-MUSIC-BOOST_USB_Microphone_MB-306-00
		device.bus = usb
		device.vendor.id = 1b3f
		device.vendor.name = "Generalplus\ Technology\ Inc."
		device.product.id = 2019
		device.product.name = "USB\ Microphone"
		device.serial = MUSIC-BOOST_USB_Microphone_MB-306
		device.form_factor = microphone
		device.string = hw:1
		device.buffering.buffer_size = 176400
		device.buffering.fragment_size = 88200
		device.access_mode = mmap+timer
		device.profile.name = multichannel-input
		device.profile.description = Mehrkanal
		device.description = "USB\ Microphone\ Mehrkanal"
		module-udev-detect.discovered = 1
		device.icon_name = audio-input-microphone-usb
		is-default = false
	gst-launch-1.0 pulsesrc device=alsa_input.usb-MUSIC-BOOST_USB_Microphone_MB-306-00.multichannel-input ! ...


Device found:

	name  : USB Audio Device Mono
	class : Audio/Source
	caps  : audio/x-raw, format=(string){ S16LE, S16BE, F32LE, F32BE, S32LE, S32BE, S24LE, S24BE, S24_32LE, S24_32BE, U8 }, layout=(string)interleaved, rate=(int)[ 1, 384000 ], channels=(int)[ 1, 32 ];
	        audio/x-alaw, rate=(int)[ 1, 384000 ], channels=(int)[ 1, 32 ];
	        audio/x-mulaw, rate=(int)[ 1, 384000 ], channels=(int)[ 1, 32 ];
	properties:
		alsa.resolution_bits = 16
		device.api = alsa
		device.class = sound
		alsa.class = generic
		alsa.subclass = generic-mix
		alsa.name = "USB\ Audio"
		alsa.id = "USB\ Audio"
		alsa.subdevice = 0
		alsa.subdevice_name = "subdevice\ \#0"
		alsa.device = 0
		alsa.card = 2
		alsa.card_name = "USB\ Audio\ Device"
		alsa.long_card_name = "USB\ Audio\ Device\ at\ usb-0000:00:1d.1-2\,\ full\ speed"
		alsa.driver_name = snd_usb_audio
		device.bus_path = pci-0000:00:1d.1-usb-0:2:1.0
		sysfs.path = /devices/pci0000:00/0000:00:1d.1/usb3/3-2/3-2:1.0/sound/card2
		udev.id = usb-0c76_USB_Audio_Device-00
		device.bus = usb
		device.vendor.id = 0c76
		device.vendor.name = "JMTek\,\ LLC."
		device.product.id = 160a
		device.product.name = "USB\ Audio\ Device"
		device.serial = 0c76_USB_Audio_Device
		device.string = hw:2
		device.buffering.buffer_size = 176400
		device.buffering.fragment_size = 88200
		device.access_mode = mmap+timer
		device.profile.name = mono-fallback
		device.profile.description = Mono
		device.description = "USB\ Audio\ Device\ Mono"
		module-udev-detect.discovered = 1
		device.icon_name = audio-card-usb
		is-default = true
	gst-launch-1.0 pulsesrc device=alsa_input.usb-0c76_USB_Audio_Device-00.mono-fallback ! ...


Device found:

	name  : Eingebautes Tongerät Analog Stereo
	class : Audio/Sink
	caps  : audio/x-raw, format=(string){ S16LE, S16BE, F32LE, F32BE, S32LE, S32BE, S24LE, S24BE, S24_32LE, S24_32BE, U8 }, layout=(string)interleaved, rate=(int)[ 1, 384000 ], channels=(int)[ 1, 32 ];
	        audio/x-alaw, rate=(int)[ 1, 384000 ], channels=(int)[ 1, 32 ];
	        audio/x-mulaw, rate=(int)[ 1, 384000 ], channels=(int)[ 1, 32 ];
	properties:
		alsa.resolution_bits = 16
		device.api = alsa
		device.class = sound
		alsa.class = generic
		alsa.subclass = generic-mix
		alsa.name = "ALC272\ Analog"
		alsa.id = "ALC272\ Analog"
		alsa.subdevice = 0
		alsa.subdevice_name = "subdevice\ \#0"
		alsa.device = 0
		alsa.card = 0
		alsa.card_name = "HDA\ Intel"
		alsa.long_card_name = "HDA\ Intel\ at\ 0xfeaf8000\ irq\ 27"
		alsa.driver_name = snd_hda_intel
		device.bus_path = pci-0000:00:1b.0
		sysfs.path = /devices/pci0000:00/0000:00:1b.0/sound/card0
		device.bus = pci
		device.vendor.id = 8086
		device.vendor.name = "Intel\ Corporation"
		device.product.id = 284b
		device.product.name = "82801H\ \(ICH8\ Family\)\ HD\ Audio\ Controller"
		device.form_factor = internal
		device.string = front:0
		device.buffering.buffer_size = 65536
		device.buffering.fragment_size = 32768
		device.access_mode = mmap+timer
		device.profile.name = analog-stereo
		device.profile.description = "Analog\ Stereo"
		device.description = "Eingebautes\ Tonger\303\244t\ Analog\ Stereo"
		module-udev-detect.discovered = 1
		device.icon_name = audio-card-pci
		is-default = true
	gst-launch-1.0 ... ! pulsesink device=alsa_output.pci-0000_00_1b.0.analog-stereo

I think the device.string = is the value i must seek.

The systemd service i will test, afterwards.

1 Like

I don’t know whether they will work. Look at this gst-launch-1.0 example:

Following that, I think you will have to use a Saraswati channel definition like this in /etc/default/saraswati:

SARASWATI_CHANNEL_1="channel1 source=pulsesrc device=alsa_input.usb-0c76_USB_Audio_Device-00.mono-fallback"

You can play around with the hardware by invoking pipelines interactively using gst-launch-1.0 before configuring Saraswati. For example:

gst-launch-1.0 pulsesrc device=alsa_input.usb-0c76_USB_Audio_Device-00.mono-fallback ! wavenc ! filesink location=test.wav

The other pulsesrc devices I am seeing from your output are:

pulsesrc device=alsa_output.pci-0000_00_1b.0.analog-stereo.monitor
pulsesrc device=alsa_input.usb-MUSIC-BOOST_USB_Microphone_MB-306-00.multichannel-input
pulsesrc device=alsa_input.usb-0c76_USB_Audio_Device-00.mono-fallback