Ответ 1
РЕДАКТИРОВАТЬ: после прочтения первого комментария к BMitch о необходимости не проигрывать на локальном компьютере
Im, рекомендующий использовать pulseaudio, так как его код пользовательского пространства и модули ядра не нужны. Мне было бы маловероятно, что alsa будет работать на докеров (хотя я могу ошибаться)
Если я это сделаю:
apt-get update
apt-get install pulseaudio socat
apt-get install alsa-utils
apt-get install ffmpeg
# Start the pulseaudio server
pulseaudio -D --exit-idle-time=-1
# Load the virtual sink and set it as default
pacmd load-module module-virtual-sink sink_name=v1
pacmd set-default-sink v1
# set the monitor of v1 sink to be the default source
pacmd set-default-source v1.monitor
# Start the ffmpeg capture to an audio file
ffmpeg -f pulse -i default out.mp3
затем в отдельном терминале
paplay /usr/share/sounds/alsa/Front_Center.wav
Звук WAV файла захватывается ffmpeg и появляется в out.mp3
Я действительно не знаю, как выглядит ваша настройка X, но если вы можете получить звук, идущий на пульсаудио, тогда ffmpeg будет захватывать звук без необходимости реальной звуковой карты
Исходный ответ: если вы хотите, чтобы звук попал на звуковую карту Mac OS
Я изначально попал на эту страницу, потому что пытался воспроизвести аудио из VM на Mac OS. Но если вы не заботитесь о том, чтобы получить эту виртуальную машину, то это слишком сложно. Я оставляю его здесь, хотя, поскольку эта идея была причиной, почему я оказался здесь
Можно использовать pulseaudio в виртуальной машине для воспроизведения WAV файла на физическую звуковую карту. Я использовал докер 17.03.1-ce на Mac OS Sierra и использовал brew для установки sox. Эта настройка также требует, чтобы на виртуальной машине был установлен socat, но кто-то, у кого больше знаний о пульсаудио (или если я получаю больше времени), должен уметь удалить эту часть, я думаю,
Стратегия состоит в том, чтобы использовать paplay для воспроизведения wav файла через pulseaudio, и pulaudio отправляет аудио через сеть на порт, который вы опубликовали при запуске виртуальной машины. На стороне Mac вы подключаетесь к этому опубликованному порту и отправляете данные через sox на Mac.
1. MAC: вытащить и запустить изображение с опубликованным портом
docker pull ubuntu
docker run -it --rm -p 127.0.0.1:3000:3000 ubuntu
2. VM: обновите и установите требуемые пакеты
apt-get update
apt-get install pulseaudio socat
apt-get install alsa-utils
Im только установка alsa-utils для wav файла, поэтому вы можете удалить этот
3. VM: запуск сервера pulseaudio
pulseaudio -D --exit-idle-time=-1
Это указывает серверу на fork на задний план и не выходить из режима бездействия
4. VM: создайте "приемник" для pulseaudio
Раковина - это то, где pulseaudio отправит аудиоданные в определенном формате:
pacmd load-module module-pipe-sink file=/dev/audio format=s16 rate=44100 channels=2
Это отправит звук в файл /dev/audio в 16-битном 2-канальном формате с частотой 44100 Гц.
5. VM: Прикрепить файл к сети
Этот файл теперь должен быть "прикреплен" к сети, socat используется для создания прослушивающего сокета по опубликованному адресу (ПРИМЕЧАНИЕ: здесь нет аутентификации), который готов отправить аудио, когда Mac-сторона подключается
socat file:/dev/audio tcp-listen:3000
6. MAC: чтение данных из сети в sox
На стороне Mac нам теперь нужно подключиться к этому порту и отправить деталь через sox в звуковой драйвер:
nc 127.0.0.1 3000 | sox -traw -r44100 -b16 -c2 -e signed-integer - -d
у mac есть netcat (nc) по умолчанию, поэтому я использую это здесь, чтобы подключиться к опубликованному порту, а затем передать данные в sox с флагами sox, чтобы они соответствовали значениям, указанным выше в инструкции "load-module".
7. VM: Играть!
Наконец, используя paplay из пакета pulseaudio, можно воспроизводить WAV файл:
paplay /usr/share/sounds/alsa/Front_Center.wav
8. MAC: Слушайте! На стороне mac вы должны теперь здесь аудио и сможете видеть выход из sox, который включает в себя небольшой измеритель уровня, и это должно двигаться:
$ nc 127.0.0.1 3000 | sox -traw -r44100 -b16 -c2 -e signed-integer - -d
-: (raw)
File Size: 0
Encoding: Signed PCM
Channels: 2 @ 16-bit
Samplerate: 44100Hz
Replaygain: off
Duration: unknown
In:0.00% 00:00:06.78 [00:00:00.00] Out:299k [ | ] Clip:0
Выполнение обратного (т.е. отправка звука Mac в пульсаудио на виртуальной машине) также должно быть возможно с помощью аналогичной, хотя и обратной настройки (module-pipe-source?)
Я не тестировал это против команд на странице ffmpeg, поскольку у меня нет X-сервера.