Wie kann ich Sound in eine FIFO-Datei umleiten?

708
BlandCorporation

Ich habe ein Programm, das FIFO-Dateien für die Interaktion mit dem Benutzer verwendet. Es kann ein Audioanruf erfolgen, der die Ausgabe arecordan eine der FIFO-Dateien des Programms richtet :

arecord -r 48000 -c 1 -f S16_LE > call_in 

Ein Audioanruf kann beantwortet werden, indem die Ausgabe einer der FIFO-Dateien des Programms an Folgendes gerichtet wird aplay:

aplay -r 48000 -c 1 -f S16_LE - < call_out 

Wie kann eine Audiodatei anstelle des ersten Befehls verwendet werden, mit dem ein Anruf getätigt wurde? Nehmen wir an, ich möchte "sound.wav" in diese call_inDatei einspielen. Wie könnte das gemacht werden?

3
Beachten Sie, dass das WAV-Format einen Header mit der Gesamtgröße der Datei enthält, sodass dieses Format nicht für Streaming oder Piping geeignet ist (es sei denn, beide Seiten erklären sich damit einverstanden, dass `arecord` dies nicht tut - es wird versucht, den Header auszufüllen beim Schließen, und die Suche wird fehlschlagen). Verwenden Sie also "-t raw" (dann müssen Sie Parameter angeben) oder "-t au" (Sun-Soundformat). dirkt vor 6 Jahren 1
@dirkt Hey, danke für den Vorschlag. Ich habe versucht, einen Befehl wie "aplay -c 1 -f S16_LE -t au sound.wav> call_in" zu verwenden, aber das Arbeiten endete mit "ffmpeg -i sound.wav -ar 48000 -f s16le -acodec pcm_s16le pipe: 1> call_in `. Danke für Ihre Hilfe. BlandCorporation vor 6 Jahren 0
Ähm, `sound.wav` ist offensichtlich eine WAV-Datei und kein Au-Format, also kann das nicht funktionieren ... Sie müssen * beide * im selben Format aufnehmen und abspielen. Die Verwendung von `ffmpeg` ist dieselbe wie bei der Verwendung des Rohformats. Aber wenn es funktioniert, dann funktioniert es ... dirkt vor 6 Jahren 0

2 Antworten auf die Frage

1
Louis

Wenn arecordIhre Eingabe Ihre Soundkarte ist, schlage ich vor:aplay sound.wav & arecord call_in

aplaysollte deine Nachricht abspielen. Mit &können Sie den nächsten Befehl arecordsofort ausführen, wodurch das Aufzeichnen der aplaySendung auf Ihre Soundkarte beginnt .

Eigentlich arecord call_in & aplay sound.wavwäre es wahrscheinlich besser, Sie können also sicher sein, dass Sie aufnehmen, bevor die Nachricht abgespielt wird.

0
muru

Angenommen, die Ausgabe von arecordfunktioniert funktional wie der Inhalt der WAV-Datei (dh, sie haben dasselbe Medienformat), Sie könnten Folgendes tun:

cat sound.wav > call_in