Create virtual device in .asoundrc file
I have been trying to create a virtual device to record the internal audio of my sound card using pure ALSA. After googling a lot, I found a .asoundrc file¹ that is very near of what I am looking for:
pcm.mycard < type hw card 0 >ctl.mycard < type hw card 0 >pcm.myconvert < type plug slave < pcm "myrecord" format S16_LE >> pcm.myrecord < type file format "raw" slave.pcm "mycard" file "| oggenc -Q -q6 -r -B %b -C %c -R %r -o /tmp/record-$(date +%%Y-%%m-%%d_%%H%%M%%S).ogg -" >pcm.!default
This configuration makes possible to record a ogg file with all audio played in my computer. What I would like to do now, is to modify the pcm.myrecord part of the configuration, so that the audio is «streamed» in a virtual card that I could capture later with let’s say, arecord . I would be glad if someone could help me with this. I tried this: How do I create virtual ALSA device from which I can record everything that is played? but that did not work for me. Below, the output from arecord -L :
muammar@zarathustra /tmp % arecord -L !10015 null Discard all samples (playback) or generate zero samples (capture) default:CARD=PCH HDA Intel PCH, CS4208 Analog Default Audio Device sysdefault:CARD=PCH HDA Intel PCH, CS4208 Analog Default Audio Device front:CARD=PCH,DEV=0 HDA Intel PCH, CS4208 Analog Front speakers dmix:CARD=PCH,DEV=0 HDA Intel PCH, CS4208 Analog Direct sample mixing device dsnoop:CARD=PCH,DEV=0 HDA Intel PCH, CS4208 Analog Direct sample snooping device hw:CARD=PCH,DEV=0 HDA Intel PCH, CS4208 Analog Direct hardware device without any conversions plughw:CARD=PCH,DEV=0 HDA Intel PCH, CS4208 Analog Hardware device with all software conversions default:CARD=Loopback Loopback, Loopback PCM Default Audio Device sysdefault:CARD=Loopback Loopback, Loopback PCM Default Audio Device front:CARD=Loopback,DEV=0 Loopback, Loopback PCM Front speakers surround21:CARD=Loopback,DEV=0 Loopback, Loopback PCM 2.1 Surround output to Front and Subwoofer speakers surround40:CARD=Loopback,DEV=0 Loopback, Loopback PCM 4.0 Surround output to Front and Rear speakers surround41:CARD=Loopback,DEV=0 Loopback, Loopback PCM 4.1 Surround output to Front, Rear and Subwoofer speakers surround50:CARD=Loopback,DEV=0 Loopback, Loopback PCM 5.0 Surround output to Front, Center and Rear speakers surround51:CARD=Loopback,DEV=0 Loopback, Loopback PCM 5.1 Surround output to Front, Center, Rear and Subwoofer speakers surround71:CARD=Loopback,DEV=0 Loopback, Loopback PCM 7.1 Surround output to Front, Center, Side, Rear and Woofer speakers dmix:CARD=Loopback,DEV=0 Loopback, Loopback PCM Direct sample mixing device dmix:CARD=Loopback,DEV=1 Loopback, Loopback PCM Direct sample mixing device dsnoop:CARD=Loopback,DEV=0 Loopback, Loopback PCM Direct sample snooping device dsnoop:CARD=Loopback,DEV=1 Loopback, Loopback PCM Direct sample snooping device hw:CARD=Loopback,DEV=0 Loopback, Loopback PCM Direct hardware device without any conversions hw:CARD=Loopback,DEV=1 Loopback, Loopback PCM Direct hardware device without any conversions plughw:CARD=Loopback,DEV=0 Loopback, Loopback PCM Hardware device with all software conversions plughw:CARD=Loopback,DEV=1 Loopback, Loopback PCM Hardware device with all software conversions
Виртуальная звуковая карта / разделение звуковых каналов
Интересует такой вопрос: как при наличии одной 6-и канальной (5.1) звуковой карты, сделать 2 виртуальных стерео (2.0) карты. К примеру, 2.0 (L Front + R Front) воспроизводит один плеер Бетховена, а 2-й 2.0 (L Rear + R Rear) играет Моцарта. Нужно это, чтоб 2 плеера играли музыку в разные колонки в разных комнатах с одного ПК.
Покупать 2-ю звуковую не хочу. Денег не жалко, просто как-то не рационально получается. Занимает отдельный PCI или USB, а поскольку все звуковые сейчас минимум 5.1, то получится в системе будет 12 звуковых каналов, из которых будет использоваться 4. Да и зачем, если это можно сделать на одной звуковой?
Под Linux знаю частичное решение с помощью Jack: http://kubuntu.ru/node/6862 Но оно не подходит, т.к. используется GUI QJackctl и всё это делаться ручным перетаскиванием каналов, а нужно чтоб всё делалось автоматом при загрузке.
Ещё нашёл интересную информацию, как сделать виртуальное звуковое устройство из двух звуковых (противоположность того, что нужно мне): http://www.alsa-project.org/main/index.php/Asoundrc#Virtual_multi_channel_dev.
Думаю можно с помощью Asoundrc и конфигурации на подобии той, что указана в последней ссылке, создать в ALSA два виртуальных звуковых устройства, а управлять ими с PulseAudio. Такой вариант был бы идеален.
В принципе, вариант с Jack`ом тоже подойдёт, если научить его делать это каким-то скриптом во время загрузки, без использования QJackctl.
Я в Linux не силён. Буду очень благодарен за любую помощь!
Делаем вывод звука на два устройства (Linux,Windows, Mac OS X)
Итак, друзья, как видно из названия статьи, в ней будет описано как можно пустить звук на два и более устройства с одного компьютера. Это может пригодиться например если вы маньяк, как и я, и вам вдруг понадобилось посмотреть фильм с выводом звука и на hdmi монитора и на колонках компьютера.
Linux
Работа со звуком в Linux может стать нестерпимой головной болью. Pulseaudio сделал неоднозначную работу, с одной стороны он привнёс в жизнь линукс много хорошего, с другой стороны много плохого. Безусловно некоторые вещи работают лучше, чем раньше, другие вещи стали более сложными. Обработка аудиовыхода — одна из возникших сложностей.
Итак если вы хотите включить несколько аудиовыходов с вашего ПК под управлением Linux, вы можете использовать простую утилиту для включения других звуковых устройств в виртуальный интерфейс. Не пугайтесь, сделать это намного проще, чем кажется из описания. Самый простой способ включить воспроизведение звука из нескольких источников — использовать простую графическую утилиту под названием «paprefs». Это сокращение от PulseAudio Preferences.
В дистрибутивах базируемых на Archlinux установка командой:
В операционных cиcтемах основанных на Ubuntu установка командой:
Если вы используете не приведи господи Fedora, то придётся выполнить целых две команды:
su -c 'yum install pulseaudio-module-zeroconf' su -c 'yum install paprefs'
Ну и если в вашей жизни всё вообще пошло не так и вы пользуетесь openSUSE, то для установки в один клик нажмите на эту ссылку, либо введите в терминале по очереди эти чудесные строки:
zypper addrepo https://download.opensuse.org/repositories/openSUSE:Factory/standard/openSUSE:Factory.repo zypper refresh zypper install paprefs
Буду считать, что с установкой paprefs вы справились, приступаем к непосредственному объединению выходов. Несмотря на то, что утилита является графической, ее, вероятно, проще запустить, набрав paprefs в командной строке от обычного пользователя. Если же словосочетание «командная строка», вызывает в вас те же чувства, что у меня «большой адронный коллайдер», то найдите «PulseAudio Preferences» у себя и запустите.
Откроется окно вот такого вида:
Нам нужна последняя вкладка «Simultaneous Output»
Как видно из скриншота, ошибиться на этой вкладке крайне сложно, так как присутствует всего один пункт включающий функционал, ради которого мы здесь и собрались. Ставим галочку рядом с «Add virtual output device for simultaneous output on all sound cards»
Затем открываем штатные настройки звука вашего рабочего окружения, на скринах будет Gnome, так же этого можно достичь в замечательной утилите pavucontrol
В настройках звука переходим на вкладку с выходными устройствами «Output» выбираем «Simultaneous Output».
Собственно это всё, теперь ваш звук «льётся» из всех физических устройств одновременно. Сразу хотел бы обратить ваше внимание, что после включения данной функции, у вас будет только один общий регулятор громкости.
Windows
Хотя Windows 10, по моему скромному мнению, очень достойный представитель семейства Microsoft, я не нашёл более подобающего способа чем использование триальной утилиты написанной Евгением Музыченко, но вполне себе умеющую выполнять возложенный на неё функционал. Пусть не так легко и просто как это делается в Linux, но всё же. Эта утилита называется Virtual Audio Cable, скачать её можно здесь. Те у кого нет денег и совести могут найти её бесплатно по названию на rutracker.
Будем считать, что вы уже украли купили приложение и установили его на компьютер, переходим в меню Пуск > Все программы > Virtual Audio Cable > Audio Repeater (MME)
В поле «wave in» выбираем «Line1 (Virtual Audio Cable)»
В поле «wave out» выбираем одно из устройств, на которое хотим подать звук. На картинке ниже я выбрал телевизор.
В поле приоритет ставим Realtime, что бы исключить задержки звука.
Нажимаем «Start», и слышим звук из выбранного устройства.
Сворачиваем окошко и запускаем ещё один экземпляр «Audio Repeater (MME)», в котором повторяем процедуру, только в качестве Wave out выбираем другое выходное устройство, в моём случае это hdmi монитора.
Недостаток этого способа в том, что каждый раз при включении компьютера нужно будет провести ритуал по включению репитера.
Mac OS X
Надо отдать должное яблочной компании, у них эта функция реализована великолепно, причем что называется «из коробки».
Открываем встроенное приложение Audio MIDI Setup, в нём внизу нажимаем на плюсик и создаём устройство с несколькими выходами как на картинке.
Вот собственно и всё, я не претендую на исключительность и на то, что это самые лучшие способы, если знаете другие варианты, прошу поделиться в комментариях. Спасибо за внимание. Я желаю Вам счастья.
Гик, хакинтошник, линуксоид, считаю себя flutter разработчиком. Завёл канал, в котором изначально хотел показывать как я с нуля и до бесконечности погрузился в дорвей тематику, а в итоге просто рассказываю о себе, своих успехах и неудачах в сайтах, приложениях, офлайн проектах. Добро пожаловать в https://www.youtube.com/channel/UCbrTUrElICx4pewX0NbolmQ
5 thoughts on “ Делаем вывод звука на два устройства (Linux,Windows, Mac OS X) ”
Для Windows (к примеру). audio_split.bat c:
cd «C:\Program Files\Virtual Audio Cable» start /min audiorepeater.exe /input:»Line 1 (Virtual Audio Cable)» /output:»Динамики (6- Asus Wireless Audi» /SamplingRate:44100 /BitsPerSample:16 /Channels:2 /Priority:High /autostart start /min audiorepeater.exe /input:»Line 1 (Virtual Audio Cable)» /output:»Динамики (Устройство с поддержк» /SamplingRate:44100 /BitsPerSample:16 /Channels:2 /Priority:High /autostart start /min audiorepeater.exe /input:»Line 1 (Virtual Audio Cable)» /output:»1 — TOSHIBA-TV (5- AMD High Def» /SamplingRate:44100 /BitsPerSample:16 /Channels:2 /Priority:High /autostart Не знаю, рабочий «батник» или нет, но смысл понятен, думаю.
Сохранить все это из Блокнота, с расширением ,bat, и подставив
свои имена устройств вывода (нужно скопировать в точности но вроде целиком не обязательно).
Затем — «засунуть» созданный файл в Автозагрузку при старте Windows,
любым способом: через реестр, добавив в планировщик, в папку запуска — файл или ярлык — «C:\Users\%User%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\ (вроде тут должна быть). Параметры
/Input:Input (capture, recording) device name
/Output:Output (playback, rendering) device name
/SamplingRate:Sampling rate (samples per second)
/BitsPerSample:Bits per sample
/Channels:Number of channels
/ChanCfg:Channel configuration
/BufferMs:Total buffering length in milliseconds
/Buffers:Number of buffers (parts of buffering space)
/Priority:Process priority
/WindowName:Name of application instance window
/AutoStart Start audio transfer automatically
/CloseInstance:Close a specified Audio Repeater instance by its window name
Спасибо. А есть способ как-то разделить звук на 2 устройства например с разных вкладок в браузере? Обычно я в vlc плеере выбираю нужное мне звуковое устройство для вывода звука при просмотре фильма, а ютуб для ребенка в браузере открыт на втором мониторе(телевизоре) и туда же выводит звук — удобно и ни кто ни кому не мешает. Но вот если мне тоже нужно в браузере что-то посмотреть/послушать на своем монике, в то время как ребенок смотрит ютуб на втором — я не могу найти способ, как разделить вывод звука. Ума не приложу, почему разработчики винды не задумались и не сделали такую возможностью, рас разделение вывода изображения прекрасно работает автоматически и востребовано, то в качестве опции наверняка очень востребованно было бы и автоматическое разделение звука при перетаскивании окна на другой монитор.
Гуглить и решать)) я не профи пишу только то что делал сам, очень много полезной инфы на apple-life.ru