Как вернуть качественный звук в Windows 7 — побитовый вывод, аппаратные эффекты

Дата обновления: 08 Мая 2011
2011-05-08T14:41
Audiophile's Software

Примечание: оригинальная версия этой статьи была опубликована мной на сайте habrahabr.ru под названием «Как вернуть качественный звук в Windows 7 — побитовый вывод, аппаратные эффекты (EAX и пр.)».

О звуковых подсистемах

Windows XP

Тут схема звуковой подсистемы примерно следующая:

XP Audio

В данном случае через интерфейс DirectSound ПО имело прямой доступ к аппаратным ресурсам звуковой карты - микширование, преобразование частоты дискретизации, различные эффекты (включая 3D позиционирование) - в общем, всё, что было необходимо, как для музыки/фильмов, так и для игр.
Конечно, были свои проблемы, в частности с микшером Windows (неточная регулировка громкости, принудительная некачественная передискретизация всего и вся до 48 кГц), но они вполне легко обходились с помощью Kernel Streaming (тот самый поток, идущий мимо kmixer), а иногда даже с помощью хороших драйверов (у Creative например таковые появись только в линейке X-Fi. На аудиокартах Audigy микшер ведет себя не вполне адекватно, но, при желании, справиться с этим не сложно).

Vista, Seven

И вот, жили наши энтузиасты-звукари, горя не знали, но тут подоспела новая ОС от Microsoft, которая конечно же обязана была содержать кардинальные изменения (и не так уж важно, в какую сторону).
Таким образом, в рамках новой концепции абстракции от оборудования, Windows Vista, кроме всего прочего, получила полностью переработанную подсистему ввода/вывода звука. И конечно же, переработали её не самым лучшим образом.
Вот, какой вид она приняла в этот раз:

Vista-7 Audio
API — Application Programming Interface
APO — Audio Processing Object
CPT — Cross Process Transport
KST — Kernel Streaming Transport

Теперь поясню. Суть такова: все программы, заточенные под вывод на DirectSound и ничего не знающие о новом интерфейсе, подключаются к WASAPI в общем режиме (WASAPI Shared), далее происходит следующее:
Составляющие WASAPI (используя только ресурсы центрального процессора), выполняют все нужные (и не очень) преобразования:


  1. Приведение звуковых потоков от разных приложений к одному виду (указанному в настройках Windows) - т.е. к одному количеству каналов, частоте дискретизации, глубине квантования.

  2. Микширование потоков.


Плюс к этому надо добавить возможность наложения в процессе обработки программных эффектов (алгоритмы которых заложены в драйверах звуковой карты). Например, для звуковых карт Creative X-Fi есть убогая эмуляция эффекта CMSS-3D.
Качество всех этих обработчиков, само собой, не самое высокое.
Далее всё это отправляется через Kernel Transport на звуковую карту.
Теперь давайте попытаемся объективно оценить преимущества и недостатки новой системы:

+ базовые возможности обработки для звуковых карт не умеющих обрабатывать звук "своими силами"
+ поддержка на входе практически любого формата аудио - многоканальное аудио с частотой дискретизации до 192 кГц и глубиной квантования до 32-bit float
+ повышенная стабильность (спорное утверждение, в принципе)

- принудительный ресемплинг сомнительного качества
- микширование каналов без эффектов окружения (или же они очень примитивны)
- сужение динамического диапазона (особенно в режиме 16 бит)
- отсутствие доступа к аппаратному DSP, т.е. потеря всего его функционала, включая эффекты EAX в играх (в т.ч. и на картах, где EAX эмулировался программно - так как в WASAPI такого понятия даже нет нет)
- щелчки, хрипы и прочие последствия связанные с использованием ресурсов ЦП.

Как видно, больше всего не повезло компьютерным меломанам-аудиофилам (надеюсь, никто не обидится) и геймерам.
Люди же, не особо интересующиеся тем, что происходит со звуком на пути к звуковой карте - возможно даже получат определенное улучшение (хотя, опять же, им скорее всего всё равно - лишь бы работало)
А теперь, о том как преодолеть большинство из вышеперечисленных проблем, ибо, к великому несчастью, с выходом так любимой многими Windows 7, Microsoft никакой революции в плане звука нам не устроила.

Меломанам: точный вывод звука


1. Как я писал выше, большинство приложений для вывода звука в Windows 7 (хотят они того, или нет) используют режим WASAPI Shared. Но есть и другой режим - WASAPI Exclusive. Если руководствоваться блок-схемой, то в этом режиме отбрасывается всё, что лежит между Application Programming Interface и Kernel Streaming Transport - грубо говоря, звук идет непосредственно от приложения через интерфейс WASAPI на звуковую карту.
Но надо сделать замечание: так как в этом режиме отключен микшер WASAPI, а к микшеру звуковой карты доступа всё равно нет (ибо нет DirectSound), при использовании приложением эксклюзивного режима, воспроизведение любого другого источника через WASAPI становится невозможным.
Но, так или иначе, мы получаем побитовый вывод аудио на звуковую карту.

2. Есть и другой способ. Если ваша звуковая карта имеет родной драйвер ASIO - вам крупно повезло. ASIO функционирует совершенно отдельно от WASAPI, так что, при прослушивании музыки системные звуки не будут отключаться - потоки ASIO и WASAPI будут микшироваться самой звуковой картой.
Вывод: если ваш драйвер ASIO не вызывает сомнений, используйте его.
Да, чуть не забыл - ASIO4ALL использовать нежелательно - как и Kernel Streaming, в этой ОС он работает очень нестабильно (судя по всему, из-за того, что другие звуки, идущие через WASAPI, периодически блокируют Kernel Transport).

Теперь непосредственно к делу.

Конечно же, для прослушивания музыки я рекомендую foobar2000 с плагином ASIO Output или WASAPI output support - ни за что другое ручаться я не могу. Подробная настройка вывода звука через foobar2000 описана здесь.

Любителей AIMP я разочарую - WASAPI Exclusive не предполагается даже в AIMP3 beta (только Shared), а ASIO в нем пока что сильно хромает (не умеет выставлять правильное количество каналов вывода, что приводит к нехорошим результатам).

Пользователям Winamp могу предложить плагины ASIO output Plugin или даже такое: OpenAL Output - кстати, еще один способ обхода WASAPI (видно из блок-схемы).

Для кинолюбителей: о видеоплеерах

C видеоплеерами ситуация практически аналогичная. Нам необходимо вывести звук на карту в первозданном виде. Особенно это важно, если вы хотите выполнить преобразование многоканального звука в стерео с использованием аппаратных эффектов вроде CMSS-3D в Creative X-Fi (объемное звучание в наушниках или стерео колонках). Для этого звук должен поступить на звуковую карту в многоканальном виде. Но вот беда: WASAPI в общем режиме преобразовывает каналы до кол-ва указанного в настройках Windows. Но даже если вы укажите там, скажем, 5.1, - этот параметр синхронизируется с настройками драйвера звуковой карты, и DSP не будет преобразовывать звук - так как сигнал на входе соответствует по кол-ву каналов настройкам. Т.е. тут принцип таков: в настройках драйвера звуковой карты должна стоять реальная конфигурация подключенного устройства воспроизведения (наушники, АС), а звук на карту должен поступать не измененным.
И так, тут нам опять понадобится WASAPI Exclusive. Я бы посоветовал использовать Media Player Classic HomeCinema в связке с DirectShow фильтром ReClock (только для 32-битного MPC), который, кроме всего прочего, умеет выводить звук на WASAPI Exclusive.

Геймерам: трехмерное позиционирование, EAX

Да, введение новой звуковой подсистемы, несомненно, вызвало негодование у многих геймеров, в т.ч. у счастливых обладателей высокотехнологичных звуковых карт от Creative.
И так, для тех, кто, может быть, еще не в курсе: выход найден - OpenAL. Эта библиотека имеет доступ ко всему, что касается аппаратных эффектов трехмерного позиционирования источников звука и т.н. Environmental Audio Extension - вплоть до версии 5.0.
Кроме того, что продвинутые разработчики таких игр, как например S.T.A.L.K.E.R: Call of Pripyat построили движки своих игр на OpenAL, для остальных игр, рассчитанных на DirectSound, было разработано две программы, преобразующих вызовы DirectSound в OpenAL:

  • Creative ALchemy (последняя на момент написания статьи версия) для карт Audigy и X-Fi от Creative

  • и даже 3D SoundBack для карт Realtek HDA, которые, кстати говоря, поддерживают EAX 2.0 (хоть и программно)

Выводы

И так, вот вроде бы мы имеем всё, чего нам так не хватало сразу после перехода с Windows XP на Windows 7. Конечно, не без лишней мороки, но, что делать - такие уж задачки подкинула нам фирма Microsoft.
 
   
Категория: Авторские статьи | Автор: | Добавил: Audiophile
Просмотров: 72345| Рейтинг: 5.0/5, голосов: 1
Комментариев: 18
Добавлять комментарии могут только зарегистрированные пользователи. [ Регистрация | Вход ]
1 2 »
0   Спам
[18] anta777 (28 Декабря 2017 17:11)
Почему происходит сужение динамического диапазона в windows 7 (особенно при 16-битном выводе) ?
0   Спам
[17] andrey7070 (26 Октября 2014 11:55)
andrey7070
Здравствуйте.
Подскажите, может ли заменить интегрированную в недорогой ноут карту вот эта китайская поделка?
http://www.ebay.com/itm....ea5562 
Просто гнездо наушников вышло из строя, ремонт будет дороже. А сам ноут (ASUS F3KE) уже старый, и в него вкладывать даже небольшие деньги жалко...
Тем более, Mini PCM2704 USB Sound Card DAC Decoder Board, уже вроде как выполняет обсуждаемую в статъе выше задачу - проброс звукового сигнала, минуя компьютерные "улучшения".
Хватит ли "Support 16bit 32KHz/44.1KHz/48KHz" для прослушивания музыки через наушники или АС?
Ответ: О качественном звучании с такой картой можете забыть. Не в килогерцах счастье. А в нормальном ЦАП и операционных усилителях. А это дешевка. Которая еще и работает через раз (половина таких карточек оказывается вообще недееспособна).
0   Спам
[14] andrey7070 (13 Сентября 2014 19:42)
andrey7070
Media Player Classic HomeCinema в связке с DirectShow фильтром ReClock

Привет.

Что касается аудио (настроил по инструкции Foobar2000) - звук действительно изменился в лучшую сторону. Огромное спасибо.
А вот с видео то связка (  Media Player Classic HomeCinema в связке с DirectShow фильтром ReClock )  не клеится. При настройках с этой страницы (https://audiophilesoft.com/publ/my/realtek_hda_setup/11-1-0-93) у меня при запуске видеофайла выдает ошибку:
.
Распишите пожплуйста, как там и что настроить
+1  
[15] Audiophile (13 Сентября 2014 20:08)
Audiophile
В левом окне Format поставьте 24 бита. А вообще, настройка видео здесь: https://audiophilesoft.com/publ/my/video_setup/11-1-0-78
0   Спам
[16] andrey7070 (14 Сентября 2014 20:27)
andrey7070
Огромное спасибо!

Настроил. Звук - конфетка!
Правда ffdshow использовал по инструкции, а вот  AviSynth и Smooth Video Pack не задействовал. При их использовании видео конечно становится качественней, но часто крашится MPC, или при перетягивании ползунка прокрутки видео просто виснет.
(система: Intel® Xeon® CPU E5450 @ 3.4GHz, MB Asus iP35 P5K/EPU, DDR II 2x2048MB PC2-6400, NVIDIA GeForce GTX 670  2048 МБ, SSD 128GB Plextor(PX-128M5Pro),  HDD Samsund 640 GB, DVD+-RW, б.п. 600W)
Так что мой выбор - улучшенный звук и стандартное видео. Тем более на мониторе в 22" это не принципиально.
0   Спам
[13] Edius (31 Марта 2013 21:34)
>Любителей AIMP я разочарую - WASAPI Exclusive не предполагается даже в AIMP3 beta (только Shared), а ASIO в нем пока что сильно хромает (не умеет выставлять правильное количество каналов вывода, что приводит к нехорошим результатам).<
Не совсем так на сегодняшней день. В версии AIMP v3.20 Build 1165 точно есть 
WASAPI Exclusive. 

0   Спам
[12] albaranov (21 Декабря 2011 02:33)
Спасибо за ответ! Теперь понятно, что альтернатива - звуковая карта с поддержкой ASIO.
У меня компьютер (Acer Aspire Revo R3610) не принимает никаких внутренних карт - слишком маленький. Поэтому я использую внешнее устройство - Musical Fidelity V-DAC Mkii между компьютером и ресивером (Onkyo SR6-8). В Windows 7 Home Premium установлен драйвер ASIO4ALL. В Foobar использую KS DAC 24/96. При воспроизведении 24-битных файлов (Direct mode в ресивере) не слышу заметного улучшения качества против 16-битного звука. Отсюда и вопрос про ASIO4ALL, когда прочитал в статье, что этот драйвер не стабилен. Пытаюсь проанализировать все элементы системы, может где-то что-то не так. Заранее спасибо, Алекс
0   Спам
[11] albaranov (21 Декабря 2011 01:56)
"Извиняюсь, а следующий абзац где: в коментариях? Алекс
Ответ: Вы цитату откуда взяли? Вот там прочитайте следующий абзац."

Еще раз доброго дня суток!
Всю статью прочитал перед тем как послал комментарий, когда получил Ваш ответ, прочитал ее еще раз.
Следующий абзац скопировал ниже, но никак не пойму где тут говориться о драйвере Windows, который может заменить драйвер ASIO4ALL. Спасибо за терпение, Алекс

"Теперь непосредственно к делу.
Конечно же, для прослушивания музыки я рекомендую foobar2000 с плагином ASIO Output или WASAPI output support - ни за что другое ручаться я не могу. Подробная настройка вывода звука через foobar2000 описана здесь."
Ответ: а что тут собственно заменять?? Других методов кроме используемого ASIO4ALL - нету. Покупайте карту со встроенной поддержкой ASIO
0   Спам
[10] albaranov (21 Декабря 2011 00:39)
Извиняюсь, а следующий абзац где: в коментариях? Алекс
Ответ: Вы цитату откуда взяли? Вот там прочитайте следующий абзац.
0   Спам
[9] albaranov (20 Декабря 2011 23:50)
Добрый день,

"Да, чуть не забыл - ASIO4ALL использовать нежелательно - как и Kernel Streaming, в этой ОС он работает очень нестабильно."

Что порекомендуете вместо ASIO4ALL и Kernel Streaming?

Заранее спасибо. Алекс
Ответ: Порекомендую всё-таки прочитать следующий абзац.
0   Спам
[8] Egi (26 Ноября 2011 22:34)
Ответ: я про ту самую настройку басов вообще-то (Сегодня 06:07)
http://s1.ipicture.ru/uploads/20111126/TTsjtU33.jpg

ну вот этим ползунком и пользуюсь .50 гц- максимальный басс,250 гц- его нет вообще.Мне очень удобно постоянно менять.
А через эквалайзер чёрти что выходит со звуком.

Наверно для прослушивания асио нужно только внешняя звуковая карта с рычажками регулеровок на корпусе.А у меня pci-e ,и все настройки походу делаются только через виндовс.Хотя WASAPI же нормально работает а АСИО не хочет.
Напомню ещё раз какие две проблемы вызывает АСИО в отличии от WAsapi:
1 звук становиться очень громким
2 отключаются все функции на панели управления звуковой карты.(панель на скрине)
0   Спам
[7] Egi (26 Ноября 2011 07:07)
Ответ: можно скриншот настройки? (Вчера 22:36)

вроде бы все )только сразу говорю громкость микшера привязана к регулятору громкости звуковой карты.
http://s2.ipicture.ru/uploads/20111126/E6OrMUxO.jpg
http://s2.ipicture.ru/uploads/20111126/eMSlKTes.jpg
http://ipicture.ru/Gallery/View/7034440.html
Ответ: я про ту самую настройку басов вообще-то
0   Спам
[6] Egi (25 Ноября 2011 23:36)
Частота разделения - это для сабвуфера. Всё что выше заданной частоты идет на сателиты, ниже - на сабвуфер.

у меня активные мониторы 2.0 правда слишком мощные для комнаты оказались
я этой частотой разделения пользуюсь для частичного снижения или выкл на них басса -отлично все регулирует и без порчи звука , если делать это настройками эквалайзера. .Сааба отдельно нет .
То есть моя звуковая лишний басс направляет вникуда?)
Ответ: можно скриншот настройки?
0   Спам
[5] Egi (25 Ноября 2011 05:00)
эквалайзер Xgeq
сылочку можно на эту штуку .не нашел в гугле pardon
Ответ: Ну так здесь же, на странице плеера.
https://audiophilesoft.com/load/audiophilesoftware/foobar2000/3-1-0-5
0   Спам
[4] Egi (25 Ноября 2011 04:34)
твет: Запросто. Ставьте плагины к foobar2000 - например, loudspeaker equalizer, если для басов. Есть также отличный эквалайзер Xgeq. В этих плагинах по крайней мере можно быть уверенны - они работают в 32--битном режиме с плавающей точкой, да и выход можно контролировать, чтобы не было искажений. А что там делает звуковая карта (или её драйвер) - одному Богу известно

1. loudspeaker equalizer -поставил я его а где он регулируется?

2.вот прилагаю скрин -это не эквалайзер у меня на карте .но отлично управляет басами.
Написано "частота разделения каналов LFE " т.е если ползунок сдвинуть на 50 герц то бассов вообще нет и наоборот 250 герц максимальный бас.
Вот он то и отключается.Есть такой же плагин для фубара?
http://ipicture.ru/Gallery/View/7014343.html
Ответ: Все обработчики включаются и настраиваются на странице Preferences->Playback->DSP Manager

Частота разделения - это для сабвуфера. Всё что выше заданной частоты идет на сателиты, ниже - на сабвуфер.
0   Спам
[3] Egi (13 Ноября 2011 14:29)
А ASIO изначально нужен для минимизации задержек. А чем меньше составлющих в цепочке - тем меньше задержки ("побочный" эффект - отсутствие обработки)

Но как же быть с невозможностью отрегулировать мощность басов?
Ответ: Запросто. Ставьте плагины к foobar2000 - например, loudspeaker equalizer, если для басов. Есть также отличный эквалайзер Xgeq. В этих плагинах по крайней мере можно быть уверенны - они работают в 32--битном режиме с плавающей точкой, да и выход можно контролировать, чтобы не было искажений. А что там делает звуковая карта (или её драйвер) - одному Богу известно.
0   Спам
[2] Egi (13 Ноября 2011 12:30)
расскажите мне про сам асио .Вот включил я его и : у звуковой сразу все функции отключились и как же через асио слушать -то?
Васапи то не отключает эквалайзер и т.д. а аисо отключил dont_know
Ответ: https://audiophilesoft.com/publ/software/hq_pc_sound/4-1-0-24
первый абзац.

А ASIO изначально нужен для минимизации задержек. А чем меньше составлющих в цепочке - тем меньше задержки ("побочный" эффект - отсутствие обработки).
1-15 16-16