4

I have a program which uses FIFO files for interacting with the user. An audio call can be made directing the output of arecord to one of the program's FIFO files:

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

An audio call can be answered by directing the output of one of the program's FIFO files to aplay:

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

How could an audio file be used in place of the first command, the one used to make a call? Let's say I want to play "sound.wav" into that call_in file, how could it be done?

  • 1
    Note that the WAV format contains a header with the total size of the file, so this format is not suitable for streaming or piping (unless both sides agree to ignore it, which `arecord` doesn't - it will attempt to fill the header on closing, and the seek will fail). So use `-t raw` (then you must specify parameters) or `-t au` (Sun sound format). – dirkt Feb 17 '18 at 06:48
  • @dirkt Hey, thanks for the suggestion. I tried using a command like `aplay -c 1 -f S16_LE -t au sound.wav > call_in`, but what ended working was `ffmpeg -i sound.wav -ar 48000 -f s16le -acodec pcm_s16le pipe:1 > call_in`. Thanks for your help. – BlandCorporation Feb 26 '18 at 22:30
  • Um, `sound.wav` is obviously a wav file, and not `au` format, so that can't work ... you'll have to *both* record and play in the same format. Using `ffmpeg` this way is the same as using raw format. But if it works, it works ... – dirkt Feb 27 '18 at 09:38

2 Answers2

1

If arecord's input is your sound card, then I suggest: aplay sound.wav & arecord call_in

aplay should play your message. The & allows the next command, arecord, to immediately execute, which should start recording what aplay is sending to your sound card.

Actually, arecord call_in & aplay sound.wav would probably be better, so you can be sure you're recording before the message plays.

Louis Waweru
  • 23,945
  • 39
  • 132
  • 198
0

Assuming the output of arecord is functionally like the contents of the wav file (i.e., they're the same media format), you could just do:

cat sound.wav > call_in
muru
  • 1,195
  • 9
  • 33