Как я могу перенаправить звук в файл FIFO?

703
BlandCorporation

У меня есть программа, которая использует FIFO файлы для взаимодействия с пользователем. Можно выполнить звуковой вызов, направив вывод arecordодного из файлов программы FIFO:

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

На звуковой вызов можно ответить, направив вывод одного из файлов FIFO программы на aplay:

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

Как можно использовать аудиофайл вместо первой команды, которая использовалась для вызова? Допустим, я хочу воспроизвести в этом call_inфайле «sound.wav», как это можно сделать?

3
Обратите внимание, что формат WAV содержит заголовок с общим размером файла, поэтому этот формат не подходит для потоковой передачи или передачи по конвейеру (если обе стороны не согласятся игнорировать его, чего не делает arereord - он попытается заполнить заголовок на закрытие, и поиск не удастся). Поэтому используйте `-t raw` (тогда вы должны указать параметры) или` -t au` (формат звука Sun). dirkt 6 лет назад 1
@dirkt Привет, спасибо за предложение. Я пытался использовать команду типа `aplay -c 1 -f S16_LE -t au sound.wav> call_in`, но работа закончилась:` ffmpeg -i sound.wav -ar 48000 -f s16le -acodec pcm_s16le pipe: 1> call_in `. Спасибо за вашу помощь. BlandCorporation 6 лет назад 0
Гм, `sound.wav` - это, очевидно, файл wav, а не формат` au`, поэтому он не может работать ... вам придется * и * записывать и воспроизводить в одном и том же формате. Использование `ffmpeg` таким же образом, как и в необработанном формате. Но если это работает, это работает ... dirkt 6 лет назад 0

2 ответа на вопрос

1
Louis

Если arecordвход - ваша звуковая карта, то я предлагаю:aplay sound.wav & arecord call_in

aplayдолжен воспроизвести ваше сообщение. &Позволяет следующая команда, arecord, немедленно выполнить, который должен начать запись, что aplayпосылает к звуковой карте.

На самом деле, arecord call_in & aplay sound.wavвозможно, будет лучше, поэтому вы можете быть уверены, что записываете до того, как сообщение будет воспроизведено.

0
muru

Предполагая, что выходные данные arecordфункционально аналогичны содержимому wav-файла (т. Е. Они имеют одинаковый формат мультимедиа), вы можете просто сделать:

cat sound.wav > call_in