Audio aufnehmen

» home «

Natürlich ist der Raspberry Pi zu mehr in der Lage als nur Schaltzentrale für Lampen zu spielen, er kann auch Sounds verarbeiten, WAV- und MP3-Files abspielen.

Audio aufnehmen

Um die Aufnahme-Funktionen des USB-Mikrofon in Linux zu testen, gibt es eine Reihe von netten Programmen. Da jedoch nicht alle Programme speziell für USB-Adapter geeignet sind, nehmen Sie eine nicht ganz so schicke, aber brauchbare Aufnahme-Software, die auf der Kommandozeile arbeitet. Das Tool arecord verfügt über eine Vielzahl an Optionen, siehe Manpage. Die Syntax für die Aufzeichnung lautet:

arecord -f [Format] -D [Hardware] -d [Dauer]

Wenn man beispielsweise in CD-Qualität für 20 Sekunden mit dem USB-Mikrofon erfassen will gibt man ein:

arecord -f cd -D plughw:0,0 -d 10 test.wav

Hiermit wird der Aufnahmekanal des USB-Adapters im Format einer Audio-CD mit 44.1 KHz und 16-Bit-Auflösung (Little Endian) in Stereo als wav-Datei gespeichert. Setzt man den Parameter bei -d auf Null (-d 0), wird so lange aufgenommen, bis das Programm mit STRG-C gekillt wird. In der Regel reicht die Angabe der Kartennummer alleine auch schon aus:

arecord -f cd -D plughw:0 -d 10 test.wav

Ich bleibe aber bei den folgenden Beispielen bei der "Langfassung".

Das Ergebnis kann mit aplay abgespielt werden:

aplay -f cd -D front test.wav

Wenn es funktioniert, dann können Sie das Mikrofon in jeder Umgebung zu verwenden. Nun noch zwei Beispiele:

arecord -t wav --max-file-time=60 -D plughw:0,0 mon.wav

Nimmt von der Standard-Audioquelle in Mono, 8000 Samples pro Sekunde, 8 Bit pro Probe auf. Startet eine neue Datei alle 60 Sekunden. Die Dateinamen lauten "mon-nn.wav", wobei "nn" bei "01" beginnt und dann stetig hochgezählt wird.

arecord -f cd -t wav -max-file_time 900 -D plughw:0,0 mon.wav

Das gleiche wie oben, nur dass die Aufnahme in Stereo mit CD-Qualität erfolgt und alle Viertelstunde eine neue Dateri erzeugt wird.

8 Gigabyte Speicher auf dem USB-Stick reichen für ca. 10 Stunden Stereo-Tonaufnahmen im WAV-Format. Mit weniger Qualität kann man im AU-Format (Mono, 8000 Samples/Sekunde, 8 Bit) auf demselben Speicher fast 300 Stunden aufzeichnen. Zum Schneiden von Tonaufnahmen verwenden Sie z. B. die Software "Audacity" mit GUI. Zur Installation genügt der Befehl sudo apt-get install audacity.

Audiodaten verarbeiten

Wenn Sie für Tests mithören wollen, was gerade über das Mikrofon aufgenommen wird, können Sie den Sound von arecord direkt per Pipe an aplay übergeben. Es tritt dabei aber eine leichte Verzögerung zwischen Aufnahme und Wiedergabe auf:

arecord -t wav -D plughw:0,0 | aplay -D plughw:0,0

Man kann den Output von aplay auch auf die Standardausgabe leiten und so auch per Pipe in ein Programm leiten, dass die Audidaten auswertet oder konzentriert (z. B. Minima/Maxima der Amplitude bestimmt oder per FFT das Frequensspektrum ermittelt. Für das Standardformat 8 Bit Mono, 8000 Samples/Sekunde reicht das folgende Kommando. Der Parameter -q unterdrückt alle sonstigen Ausgaben:

arecord -q -D plughw:0,0 | auswerteprogramm

Audio-Signale über das Netzwerk streamen

Die beiden oben genannten Programme erlauben es, Audio-Signale über das Netzwerk zu schicken, z. B. an irgendeinen Server. Dazu wird das Audiosignal vom Mikrofon über eine SSH-Verbindung auf den Zielcomputer "gepipt". Das ist ganz einfach:

arecord -D plughw:0,0 -f dat | ssh -C user@server aplay -f dat

Nun schalten Sie die Lautsprecher am Ziel-PC ein und hören Sie, was der Raspberry Pi aufnimmt.

Für solche Fälle ist es günstig, einen SSH-Login ohne Passwort einzurichten. Dafür muss auf dem internen Rechner ein Zertifikat erstellt und auf den externen Computer übertragen werden, was mit Hilfe der beiden Kommandos ssh-keygen und ssh-copy-id erledigt werden kann. Zuerst wird ein Schlüssel-Paar (Public- und Private-Key) erstellt und dann der öffentliche Schüssel zum Webserver übertragen.

Der Private-Key ist dann dem normalen Passwort gleichgestellt. Im Gegensatz zum Passwort existiert er aber als Datei, die vor fremdem Zugriff zu schützen ist. Deswegen besteht die Möglichkeit, den Private-Key mit einer Passphrase zu schützen. Die Passphrase muss in unserem Fall leer bleiben, da sonst bei Verbindungsaufnahme diese Passphrase abgefragt würde und so kein automatischer Audiotransfer möglich wäre.

Das folgende Shellscript erzeugt die Schlüssel und übertägt sie dann (den Account "user@MCUnit.de" gibt es natürlich nicht, er dient nur als Beispiel):

#!/bin/bash
# Generiert Public/Private-Keys und kopiert sie zu MCUnit
# damit ein Login bzw. Aufbau eines SSH-Tunnels dorthin ohne
# Passwort-Eingabe moeglich ist
#
# zuerst werden die Keys generiert
ssh-keygen -t dsa

# nun befinden sich im Verzeichnis ~/.ssh zwei Dateien:
# id_dsa  id_dsa.pub
#
# nun wird der public key zu MCUnit kopiert und dort
# an die Datei ~/.ssh/authorized_keys angehaengt
ssh-copy-id -i ~/.ssh/id_dsa.pub user@mcunit.de

# ab jetzt kann sich der User vom internen System als
# "user@mcunit.de" ohne Passworteingabe auf
# MCUnit einloggen

Oliver Lohse   •  13.Jun.2020

Navigation


home
Omega 2
ESP32 NodeMCU
Arduino
Raspberry Pi
Python
PHP

Es geht um den heißem Scheiß über den alle reden - IoT (das Internet der Dinge). Doch zunächst der rechtliche Teil auf dieser rein privat betriebenen Webseite.

Die Webseite verwendet keine Cookies oder sonstigen Tracking-Tools, um das Leserverhalten zu speichern.

Firmware flashen


Einen anderen Weg zum flashen der ESP32-Firmware möchte ich Ihnen in diesem Beitrag vorstellen, denn das Internet ist bisweilen voll von interessanten Anleitungen wie dies zu bewerkstelligen wäre. Für mich hat sich jedoch ein anderer Weg etabliert.

bluetoothctl


Das Programm bluetoothctl ist ein Werkzeug mit dem Sie eine BT-Verbindung an der Kommandozeile und anderen BT-Geraeten herstellen koennen.


© by O.Lohse • Impressumhome