sox (bzw. rec als Alias) wäre schon ein passendes Tool, hat genau die gewünschte Funktion um auf ein Signal zu warten, dann aufzunehmen und dann bei längerer Stille die Aufnahme zu stoppen.
Problem mit den "Störsounds" könnte evtl. von pulseaudio oder pipewire und dessen Alsa-Gerät-Simulation mit mehrfacher Samplerate-Konvertierung 16k -> 48k -> 44.1k herrühren.
Versuch:
1 |
AUDIODRIVER=alsa rec -t alsa hw:1,0 -r 16000 aufnahme.wav silence 1 0.1 3% 1 2.0 3%
|
(*)
das "hw:1,0" kannst du dir aus "arecord -l" ziehen, damit du das richtige Mikrophon findest (hw:<karte>,<gerät>).
Die Samplerate "-r 16000" muss zum Mic passen, da jetzt kein pipewire und auch kein alsa_dmix mehr an der rumdreht.
grep Rates: /proc/asound/card*/stream*
zeigt für meine beiden Mikrophone:
1 |
/proc/asound/card0/stream0: Rates: 8000, 11025, 16000, 22050, 32000, 44100, 48000
|
2 |
/proc/asound/card1/stream0: Rates: 16000
|
3 |
/proc/asound/card1/stream0: Rates: 24000
|
4 |
/proc/asound/card1/stream0: Rates: 32000
|
5 |
/proc/asound/card1/stream0: Rates: 48000
|
(Beide USB, eins hat nur ein Interface mit mehreren Rates, das andere mehrere Interfaces mit je einer Samplerate. Das kann kein 44.1kHz)
Wenn es direkt über alsa ohne Störgeräusche geht könnten wir weiterschauen, was an deiner Pipewire-Config verbessert werden kann. (Erste Idee: min-quantum hochstellen)
*) PS: Kontrolliere ob das auch wirklich an Pipewire/Pulseaudio vorbei auf das Device zugreift (pw-mon u.Ä.).
Notfalls den Audio-Daemon für den Test ganz stoppen.