6 апреля 2013 6.04.13 12 70K

Звук на все устройства в windows 7

+30

Доброго времени суток друзья!
Сегодня я бы хотел поделиться своим решением проблемы отсутствия в Windows 7 возможности подавать звук на все аппаратные устройства в системе.
Начну с описания проблемы:
Имеется компьютер, использующийся как средство развлечения на выходных и, иногда, по вечерам.
К компьютеру подключены 3 аппаратных устройства вывода звука:
1. Встроенная звуковая карта Realtek, которая выводит звук через аналоговый выход на монитор
2. ЖК телевизор TOSHIBA, подключенный к видеокарте HD7970 через DP-->HDMI кабель, и получающий цифровой звук от AMD HD AUDIO codec видеокарты.
3. Наушники ASUS HS-1000W, имеющие собственный USB свисток, и также являются отдельным аппаратным устройством.

Итак, когда я сижу/лежу на диване, звук переключен на AMD HD Audio codec (Телевизор). Возникает необходимость уйти с дивана и сесть за монитор (к примеру мелкий текст на сайте, написанном на флеше, который масштабированием не регулирует размер шрифта). И тут появляется геморрой ввиду необходимости лезть в настройки звука и переключать устройство по умолчанию на монитор, ибо не хочется пропустить ни слова из включенной аудиокниги, а прислушиваться к телевизору не совсем удобно, так же как не сподручно искать пульт от телевизора и прибавлять громкость на 2 минуты, что бы потом опять убавить. Ну ладно, человек не ленивый залез- поменял. Прошло 2 минуты, статью прочитал, место дислокации снова меняется на диван, опять лезть в настройки менять… При всем при этом, существует ПО, в котором не меняется внутрипрограммно устройство вывода звука. К примеру, если играть в игры, то ужасно не удобно, когда приходиться переключиться на наушники (ночь настала, соседи спят), то приходиться выйти из игры (именно выключить её), поменять устройство вывода по умолчанию, и снова включать.

Суть моей проблемы я думаю понятна.

Рысканье по просторам интернета, не привело меня ни к чему, народ что то пытается выдумать на вроде кнопок переключения устройства звука по умолчанию, даже пишет скрипты на VBS. Более того, существует даже софт, позволяющий забиндить устройства на определенные горячие клавиши. Но все это не то по одной простой причине: при замене устройства на лету-в играх пропадет звук.

Думки привели меня как всегда к вопросу: а кому помимо меня (все же задача не тривиальная) может понадобиться что то подобное. Долго думать не пришлось, помогла музыкальная школа… DJ… У них столько аппаратных устройств в системе бывает, что уму не постижимо, ещё и сверху виртуальных до горла!!!

Гугл сказал, что все диджеи используют виртуальное устройство «Virtual Audio Cable» изготовленную Евгением Музыченко.

Скачал триальную версию, поставил.
В состав программы входит: Панель управления виртуальными аудио кабелями, и 2 вида репитеров!!!
Один позволяет стримить с одного аудио устройства на другое на уровне ядра, что нам не подходит, потому что нам надо не на одно устройство стримить, а второе на программном уровне позволяет стримить тоже на одно, но с возможностью запуска нескольких копий!!!
Ограничения триальной версии: не более 3-х виртуальных кабелей (да и бог с ними, нам всего один нужен), и, что самое печальное, периодически женский голос портит нам звук, напоминая, что у нас триальная версия… Не суть, все получиться-заплатим.
Итак:
Идем в Пуск-->Панель управления-->Звук, выбираем вкладку «Воспроизведение». Находим устройство «Line1 (Virtual Audio Cable)» Кликаем по нему правой кнопкой мыши и выбираем в контекстном меню пункт «Использовать по умолчанию». На устройстве появится зелена галочка как на картинке ниже.

Устанавливаем Virtual Audio Cable
Идем Пуск-->Все программы-->Virtual Audio Cable-->Audio Repeater (MME)
Control Panel можно даже не запускать, ибо по умолчанию создается один аудио кабель, а больше нам не надо.
В поле «wave in» выбираем «Line1 (Virtual Audio Cable)»
В поле «wave out» выбираем одно из устройств, на которое хотим подать звук. На картинке ниже я выбрал телевизор.
В поле приоритет ставим Realtime, что бы исключить всевозможные и невозможные задержки.
Нажимаем старт, и звук полился из выбранного устройства!!!

Нажимаем свернуть и программка, что приятно, прячется в системный лоток.
Далее запускаем ещё один экземплярAudio Repeater (MME) и повторяем процедуру, только в качестве Wave out выбираем наушники:

а потом и динамики монитора(встроенныую звуковуху):

Замечательно, теперь у нас звук идет из всех устройств одновременно, без задержек и вообще все супер…
Один экземпляр репитера, поддерживает дублирование потока только на одно устройство, из-за чего приходиться запускать несколько экземпляров репитера (в моем случае 3).

К счастью, в документации (спасибо автору программы который оперативно отозвался на вопрос и ткнул меня носом в help), я нашёл параметры командной строки, благодаря чему, мы можем написать скрипты например для командного интерпретатора windows или VBS.

Нюансы:
длина строки для параметров «input» и «output» не должна превышать 31 символ…
Названия устройств для «input» и «output необходимо буква в букву переписывать из меню репитера, даже если оно не дописано и обрывается на полуслове.

Так как репитер учтиво сворачивается в трей, используем команду start с параметром /min, что бы приложение запускалось в свернутом виде. Пишем скриптик для командного интерпретатора windows, со следующим содержимым (ВНИМАНИЕ!!! скрипт только для ознакомления, у вас он работать не будет, пока не поменяете устройства ввода/вывода на ваши):

audio_split.bat

Запихиваем его в автозагрузку, и, вуаля!!! Теперь при запуске систему, у нас звук сразу идет на все устройства!

Если кому лень рыться в help-е, прикрепляю

/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


Лучшие комментарии

Нужен ПервыйКоммент.
А так вещь полезная может кому и пригодиться.
Мало что понял, ну да ладно. Народ, объясните мне как сделать звук на телевизор подключённый к ПК отдельно. То есть запускаю фильм и перекидываю его на экран ТВ. В это же время запускаю игру на основном мониторе. И вот как сделать что бы на ТВ был только звук фильма, а в наушниках/колонках звук игры?
в видео плеере поменять устройство вывода звука.
Добавил ремарку, что бы после копи-паста поменяли кодировку.

Можно просто создать Ярлык (несколько) для audiorepeater.exe или лучше audiorepeater_ks.exe. В его свойствах добавить нужные параметры  вида:

/Input: «Line 2 (Virtual Audio Cable)» /Output: «Динамики (Realtek High Definition) /Autostart

И указав — «запускать от имени Администратора», поместить их в «Автозагрузку»  — C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp. Но в этом случае, при старте будет «вылезать» окно программы (параметра /min не хватает).

Я подобные  задачи решаю при помощи AutoHotKey. Скрипт будет выглядеть примерно так:

SetTitleMatchMode, 2; Заголовок окна должен содержать контекст.

DetectHiddenWindows, On; Разрешить поиск в скрытых окнах

WinGet, AudioRepters, List, Audio Repeater

If AudioRepters1

WinKill, ahk_id %AudioRepters1%

If AudioRepters2

WinKill, ahk_id %AudioRepters2%
Run, «C:\Program Files\Virtual Audio Cable\audiorepeater_ks.exe» /Input: «Virtual Cable 1» /Output: «NVIDIA High Definition Audio» /Autostart

,C:\Program Files\Virtual Audio Cable, Hide
Run, «C:\Program Files\Virtual Audio Cable\audiorepeater_ks.exe» /Input: «Virtual Cable 1» /Output: «Realtek HD Audio output» /Autostart

,C:\Program Files\Virtual Audio Cable, Hide

Однако, для варианта «ks» не предусмотрено передать через параметры на какое именно устройство транслировать, если их несколько с одинаковым именем. В моем случае — «NVIDIA High Definition Audio». Но в окне их можно выбрать. Или подключать через «MME» вариант, где они названы по разному.

Можно еще указать устройства ввода/вывода для конкретных приложений — Параметры-> Система->Звук->Дополнительные параметры звука.

Статейка для тех, кого забанили в гугле? К тому же VAC уже обсуждался неоднократно в статьях о стриминге.
Вообще просто выложил скрипт)))) Так ещё проще)
Автоматизация Virtual Audio Cable

Скрипт ниже написан для автоматического включения трёх виртуальных кабелей, необходимых для объединения микрофона и Skype в единый поток, чтобы вещать его, например, на радио. Если вы ранее не использовали Virtual Audio Cable, сначала прочитайте эту статью с ручной настройкой. Теперь попробуем сделать всё в ней описанное мгновенно включаемым.

Автоматический запуск кабелей
Прежде, чем написать скрипт, необходимо узнать названия всех каналов и кабелей так, как они называются в программе Virtual Audio Cable -> Audiorepeater (MME). Найдите и запишите в списках Wave in и Wave out точные названия ваших динамиков и микрофона, а также названия трёх кабелей — в скрипте их нужно будет повторить точно так, как они написаны. Например, у меня:

Динамики (Realtek High Definiti
Микрофон (Realtek High Definiti
Line 1 (Virtual Audio Cable)
Line 2 (Virtual Audio Cable)
Line 3 (Virtual Audio Cable)


Открываем блокнот и вставляем, заменив микрофон и динамики на ваши, а также Line 1, Line 2 и Line 3, если они у вас называются по-другому.

@chcp 1251
start /min «audiorepeater» "%programfiles%\Virtual Audio Cable\audiorepeater.exe" /Input: «Микрофон (Realtek High Definiti» /Output: «Line 1 (Virtual Audio Cable)» /Autostart
start /min «audiorepeater» "%programfiles%\Virtual Audio Cable\audiorepeater.exe" /Input: «Line 2 (Virtual Audio Cable)» /Output: «Динамики (Realtek High Definiti» /Autostart
start /min «audiorepeater» "%programfiles%\Virtual Audio Cable\audiorepeater.exe" /Input: «Line 1 (Virtual Audio Cable)» /Output: «Line 3 (Virtual Audio Cable)» /Autostart
start /min «audiorepeater» "%programfiles%\Virtual Audio Cable\audiorepeater.exe" /Input: «Line 2 (Virtual Audio Cable)» /Output: «Line 3 (Virtual Audio Cable)» /Autostart
Сохраняем как запускаемый файл с разрешением .bat, например StartVAC.bat (с названиями устройств как выше качаем start.rar [285 b] (cкачиваний: 126))

Запускаем файл. Если выдает ошибки, посмотрите, правильно ли вы проставили названия. Также кодировка текстового документа должна быть стандартная ANSI, а не UTF.

Автоматическая остановка кабелей
Тут всё проще: открываем блокнот, пишем:

taskkill /im «audiorepeater.exe»
Сохраняем как файл автозапуска с разрешением .bat, например StopVAC.bat

После запуска скрипта все виртуальные кабели автоматически отключатся.

P.S. Ведущего может быть слышно тише остальных участников. Проследите, чтобы микрофон в Skype был проставлен на максимум и не стояла его автоматическая настройка. Также зайдите в Панель управления -> Звук -> Связь и отключите автоматическое уменьшение громкости.
Дружище, скрипт под спойлером не рабочий (вернее он не будет ни за что работать, даже если вставить реальные данные ;), можно даже не проверять. Залей его лучше на какой-нибудь пастбин (dpaste.org к примеру) и дай ссылку на него.
Всё бы ничего, но только время от времени кто-то из ниоткуда говорит что-то типа «Try L», это с ума сводит. Это нормально или это надо где-то выключить?
Читай также