Ich schreibe ein Skript, das Sox verwendet, um mich aufzuzeichnen. Jetzt brauche ich sox, um zu warten, bis es Geräusche erkennt, bevor es mit der Aufnahme beginnt, und ich habe das herausgefunden. Aber ich muss auch SOX Ausgang einmal Stille war für mindestens 3 Sekunden. So wie es jetzt ist, muss ich Sox manuell töten, wenn ich fertig bin, sonst wartet Sox einfach wieder, bis ich etwas mehr spreche und an die Ausgabedatei anhänge (das ist nicht das, was ich will). Hier ist der Befehl für die Aufnahme, den ich gerade verwende:
rec /tmp/recording.flac rate 32k silence 1 0.1 3% -1 3.0 3%
Nochmals, nur um klar zu sein, sollte Sox warten, bis ich anfange zu sprechen, und dann aufnehmen, bis ich aufhöre zu sprechen, dann sollte das Sox-Programm beendet werden.
Ich fand eine Art wackeligen Weg, der dieses Problem löst.
Mir ist aufgefallen, dass sox beim Erkennen von Stille erst dann mehr an die Datei anfügt, wenn es mehr Töne hört. Also beschloss ich, diese Tatsache auszunutzen.
Zunächst starte ich im Hintergrund den Soundrekorder von sox:
Als nächstes erhalte ich die PID des Aufnahmeprozesses mit:
p=$!
Dann gebe ich dem Aufnahmeprozess eine Sekunde Zeit, um den Startvorgang abzuschließen, und warte dann, bis die Datei zu wachsen beginnt.
Wenn diese Schleife unterbrochen wird, wurde der Ton erkannt. Jetzt erstelle ich eine weitere Schleife, um zu warten, bis keine Daten mehr an die Datei angehängt werden (dies geschieht, sobald sox wieder Stille erkennt).
Jetzt muss ich nur noch aufhören
rec
:Und das ist es. Hier ist das fertige Skript:
Jetzt würde ich einen besseren, stabileren Weg vorziehen, aber das muss erst einmal funktionieren.
quelle
Ich habe die oben genannten Ideen noch weiter verfeinert. Es zeichnet für immer auf, zeichnet alle Geräusche auf, bis (ungefähr) eine Sekunde Stille eintritt. Dann:
(Für einen sehr handlichen kleinen UHF / 2-Meter-Echo-Repeater)
quelle
Dies hört für immer zu, zeichnet nur die letzten Töne auf, bis es eine Sekunde Stille hört, schreibt dann die Datei, versieht sie mit einem Zeitstempel und startet neu:
quelle
while true
Schleifen