Как вернуть качественный звук в Windows 7, 10, 11 — побитовый вывод, аппаратные эффекты (EAX и пр.)
Хочу поділитися досвідом по темі звуку в Windows 7.
Насправді все не так погано, як спочатку здається, і я вам зараз це продемонструю.
Почну спочатку.
Про звукові підсистеми
Windows XP
Тут схема звукової підсистеми приблизно така:
В даному випадку через інтерфейс DirectSound ПЗ мало прямий доступ до апаратних ресурсів звукової карти — мікшування, перетворення частоти дискретизації, різних ефектів (включаючи 3D позиціонування) — загалом всього, що було необхідно, як для музики/фільмів, так і для ігор.
Звичайно, були свої проблеми, зокрема з мікшером Windows (неточне регулювання гучності, примусова неякісна передискретизація всього і вся до 48 кГц), але вони цілком легко обходилися за допомогою Kernel Streaming (той самий потік, що йде повз kmixer), а іноді навіть з допомогою хороших драйверів (у Creative наприклад з'явись тільки в лінійці X-Fi. На аудіокартах Audigy мікшер поводиться не цілком адекватно, але, за бажання, впоратися з цим не складно).
Vista+
І ось, жили наші ентузіасти-звукори, горя не знали, але тут настала нова ОС від Microsoft, яка звичайно повинна була містити кардинальні зміни (і не так вже й важливо, в який бік).
Таким чином, в рамках нової концепції абстракції від обладнання, Windows Vista, окрім іншого, отримала повністю перероблену підсистему введення/виведення звуку. І звичайно ж, переробили її не найкращим чином.
Ось, який вигляд вона набула цього разу:
API — Application Programming Interface
APO — Audio Processing Object
CPT — Cross Process Transport
KST — Kernel Streaming Transport
Тепер поясню. Суть така: всі програми, заточені під вивід на DirectSound і нічого не знають про новий інтерфейс, підключаються до WASAPI у загальному режимі (WASAPI Shared), далі відбувається таке:
Складові WASAPI (використовуючи лише ресурси центрального процесора), виконують всі необхідні (і не дуже) перетворення:
- Приведення звукових потоків від різних додатків до одного виду (зазначеному в налаштуваннях Windows) — тобто. до однієї кількості каналів, частоти дискретизації, глибини квантування.
- Мікшування потоків.
Плюс до цього треба додати можливість накладання у процесі обробки програмних ефектів (алгоритми яких закладено у драйверах звукової карти). Наприклад, для звукових карт 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).
Тепер негайно до справи.
Звичайно ж, для прослуховування музики я рекомендую з плагіном ASIO Output або WASAPI output support — нізащо інше ручатися я не можу. Детальна настройка виведення звуку через foobar2000 описана тут.
Любителів AIMP я розчарую — WASAPI Exclusive не передбачається навіть у AIMP3 beta (тільки Shared), а ASIO у ньому поки що сильно шкутильгає (не вміє виставляти правильну кількість каналів висновку, що призводить до поганих результатів).
Користувачам Winamp можу запропонувати плагіни ASIO output Plugin або навіть таке: OpenAL Output — до речі, ще один спосіб обходу WASAPI (видно з блоксхеми).
Для кінолюбителів: про відеоплеєри
З відеоплеєрами ситуація практично аналогічна. Нам необхідно вивести звук на карту у первозданному вигляді. Особливо це важливо, якщо ви хочете виконати перетворення багатоканального звуку на стерео з використанням апаратних ефектів на кшталт 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.
Дякую за увагу.