Організація якісного виведення звуку на комп'ютері (foobar2000 1.3.x, Windows XP, Vista / 7/8/10)

  1. 2.1 Декодер
  2. 2.2 Постпроцесор
  3. 2.3 Обробники
  4. 2.3.1 ReplayGain
  5. 2.3.2 DSP
  6. 2.3.3 Регулятор гучності (Volume Сontrol)
  7. 2.3.4 Конвертор глибини біт
  8. 2.4 Висновок
  9. 2.4.1 Windows XP
  10. 2.4.2 Windows Vista / 7/8/10

Тепер розглянемо докладніше все, що стосується foobar2000. Одним з достоїнств цього плеєра є дуже продуманий і прозорий тракт. Щоб наочно це продемонструвати я намалював блок-схему (натисніть для перегляду):

Примітки:
1. Як видно зі схеми, присутність всіх компонентів необов'язково - деякі можна відключати, а деякі включаються тільки при необхідності. Так, наприклад, декодер потрібен тільки для стислих форматів, а конвертер глибини біт включається при невідповідності формату вхідних даних налаштувань виведення (output data format).
2. Для Windows 7 + можливий висновок в форматі з плаваючою точкою (32-bit висновок через DS).

2.1 Декодер

Декодує вхідні дані, в результаті чого отримуємо нестислий звуковий потік у вигляді імпульсно-кодової модуляції. Більшість lossy декодерів працюють в режимі з плаваючою точкою (32-біт). На виході декодерів lossless виходять дані з параметрами аналогічними вихідного аудіо (яке стискалося). Зверніть увагу, що потік DSD (якщо SACD / DSD декодер працює в режимі DSD) слід на висновок, минаючи всі ланки, через які проходить PCM.

2.2 Постпроцесор

Цей елемент був включений розробником в тракт порівняно недавно. Виконує роль декодера форматів HDCD і DTS (Тільки lossless джерела - поки тільки CDDA, WAV, FLAC, ALAC і WV). Так як для успішного декодування цих форматів дані зі звичайного декодера повинні передаватися біт-в-біт, постпроцесор знаходиться в тракті відразу після нього.

2.3 Обробники

Здійснюють цифрову обробку звукового потоку. Треба відзначити, що використовувати їх треба тільки при необхідності, тому що практично будь-яка обробка звуку - будь то навіть зміна гучності - неодмінно вносить певні спотворення. Все обробники за замовчуванням працюють в режимі з плаваючою точкою. До цифровим обробникам foobar2000 відносяться:

2.3.1 ReplayGain

Перш за все потрібно відзначити, що будь-який lossy аудіо файл не містить цифрового аудиопотока як такого. Він містить його опис за допомогою різних функцій і т.д., за якими можна відновити приблизну форму вихідної хвилі (що і роблять декодери lossy форматів). І ось, під час декодування виникає один нюанс: тому що кодування відбувається з втратами (повторюся: дані в lossy аудіо-файлі дозволяють відновити тільки приблизну форму вихідної хвилі), семпли на виході мають рівень відмінний від того що був на вході.

Чим же це загрожує? Декодер foobar2000 працює в форматі з плаваючою точкою, що дозволяє йому обробляти і описувати хвилю не тільки в межах якогось діапазону. Наприклад, для 16 біт з фіксованою точкою (16-bit signed integer): 2 ^ 16 = 65536 можливих значень рівня, а саме, числа від -32768 до 32767. Але справа в тому, що після того як сигнал передається плеєром на висновок, він автоматично перетворюється в формат з фіксованою точкою.

Розглянемо приклад. Якщо ми будемо перетворювати семпл з рівнем 1.000000 (плаваюча точка) в формат 16 біт з фіксованою точкою, то отримаємо число 32767 - це максимальний рівень для 16-bit integer. Але не будемо забувати, що при декодуванні lossy вихідний сигнал відновлюється приблизно, і ми можемо отримати семпли з більш високими рівнями, наприклад 1.124325. І правильно описати це значення в режимі фіксованої точки вже не вийде, тобто рівень цього семпли він автоматично прирівняється до максимального - 32767.

І що ж ми отримуємо? Таким чином всі ділянки хвилі (що складається з точок-семплів), що виходять за максимальний рівень, «обрізаються», внаслідок чого замість синусоїди наприклад ми отримаємо щось схоже на прямокутні імпульси (якщо «верхівки» синусоїди виявляться вище максимуму, вони будуть «зрізані »), а це означає що ми маємо додаткові нелінійні спотворення (рівень спотворень залежить від того, яка частина звукової хвилі виходить за максимум). Щось схоже можна почути при «замиканні» колонок - коли подаєш на колонки сигнал з потужністю перевищує максимальну допустиму - дифузори не можуть рухатися далі максимального рівня відхилення, виходять такі ж спотворення як і в нашому випадку. Перше явище (з цифровим аудіопотоків) - це Софтова кліппінг (Англ. Clipping - обрізання), друге (з дифузорами) - апаратний кліппінг (в деяких інших випадках це явище називають «перевантаженням»).

Для чого ж в нашому випадку потрібен ReplayGain?

а) Щоб визначити, чи виходить рівень декодованого сигналу за допустимі межі, а саме визначити піковий рівень запису - це робить ReplayGain Scanner.

б) Знизити рівень треку так, щоб він вписувався в рамки допустимого - після того як сканер справив сканування, він записує ReplayGain теги (з інформацією про піковому рівні), а плеєр при програванні зчитує ці теги і занижує рівень гучності всього запису (саме всій - щоб не міняти баланс гучності між окремими ділянками) так, що пік виявляється на максимальному рівні (0 dB на пікметре), а все інше - звичайно ж, не вище цього рівня.

Налаштування:
Налаштування:

Source mode: track, якщо ви хочете зберігати баланс гучності тільки в межах одного треку, album - якщо вам важливий баланс гучності між треками всього альбому.

Processing: Prevent clipping according to peak - кращий в більшості випадків варіант, при якому буде тільки запобігати clipping (рівень, на який занижуватиметься гучність, буде розраховуватися за допомогою тега track peak або album peak - в залежності від обраного source mode).

Apply gain - в цьому режимі ReplayGain допоможе вирівняти сприйняту гучність прослуховує Вами треків (часто сприймається гучність не пов'язана з піковими рівнями, тому що вона визначається методом психоакустичного аналізу); даний варіант не рекомендується, тому що при цьому може сильно змінюватися гучність треків, що тільки погіршує становище в плані якості.

Apply gain and prevent clipping according to peak. в результаті аналізу треку утиліта ReplayGain може порахувати його занадто тихим і прописати в тегах позитивне значення посилення, гучність при відтворенні такого трек завищуватиметься, в слідстві чого піки результуючого сигналу можуть виявитися вище максимального рівня. Цей режим дозволяє утиліті при відтворенні аналізувати не тільки тег track (або album - в залежності від source mode) gain, але і track (album) peak і розраховувати максимальне допустиме посилення, щоб запобігти клиппинг.
Pre-amp: Додаткове посилення на вибір користувача. Працює тільки при включеному Apply gain (або apply gain and prevent clipping), підсумовується з посиленням з тега Track (Album) gain. Цю функцію не рекомендується, тому що, знову ж таки, може негативно вплинути на якість.
With RG Info - для треків з тегами ReplayGain
Without RG info - для треків без тегів Replay Gain.

Примітка: якщо ви з якоїсь причини не хочете або не можете використовувати ReplayGain, є інший варіант - Advanced Limiter DSP (дивіться нижче).

Більш детальну інформацію по цій темі можна знайти в моїй статті «Про поняття гучності в цифровому поданні звуку і про методи її підвищення» .

2.3.2 DSP

Це цифрові обробники звуку, необхідні для виконання різних перетворень звукового потоку в режимі реального часу.

В ідеалі будь-яка обробка звуку, звичайно ж, має бути відсутня, але в деяких випадках для досягнення більш високої якості доводиться використовувати деякі обробники. Зокрема, DSP під назвою Resampler просто необхідний при відсутності апаратної підтримки звуковою картою частоти дискретизації відтвореного сигналу (найчастіше це матеріал з звукових компакт-дисків з частотою дискретизації 44.1 кГц) для виконання попереднього перетворення звукового потоку в вид відповідний апаратних можливостей звукової карти (частіше за все це перетворення 44.1-> 48/96/192 кГц).

Примітка: для вбудованих візуалізацій потік знімається відразу після проходження через ланцюжок DSP.

Виявлення неякісної передискретизации

На цей випадок існує спеціальний семпл:

udial.flac
[ЗАВАНТАЖИТИ] (0.18 MБ)

Цей семпл складається з послідовності тональних сигналів з накладеним на неї синусоїдальним сигналом, частота якого плаває в межах 19-20 кГц:

У разі неякісного софтового Ресемплінг при відтворенні цього семпли ви почуєте скрегіт, шум, або інші спотворення.

Примітка: для точної перевірки Ресемплінг спочатку слід встановити правильні налаштування виводу (див. П. 2.4.1 / 2.4.2).

Налаштування

Розглянемо два варіанти для відтворення матеріалів з частотою дискретизації 44.1кГц:

a) Ваша карта апаратно підтримує дану частоту дискретизації. В цьому випадку для досягнення максимальної якості на вкладці DSP мають бути відсутні будь-які включені обробники (перший список, зліва).

б) Ваша карта апаратно НЕ підтримує дану частоту дискретизації. Для досягнення максимальної якості встановіть плагін SoX Resampler і виставте в його настройках максимальну частоту дискретизації, яку апаратно підтримує ваша звукова карта. Після плагіна SoX resampler в список активних плагінів обов'язково додайте Advanced Limiter - цей плагін дозволить запобігти кліппінг, «на льоту» занижуючи рівні ділянок звукового потоку, які в результаті Ресемплінг сигналу (або іншої обробки) можуть надаватися вище максимального рівня.

Якщо у вас другий випадок і ви виставили рекомендовані настройки, то тепер з'явиться можливість максимально якісно (для цієї звукової карти) відтворювати не тільки записи 44.1 кГц, а й записи з будь-якою іншою частотою дискретизації. У разі, якщо частота відтвореного матеріалу співпаде з максимальною підтримуваної вашою карткою, ресемплер просто відключиться (за непотрібністю).

Є і ще один варіант настройки, який підійде для дорогих високотехнологічних звукових карт / ЦАП. Справа в тому, що в деяких випадках (а саме, при виведенні через WASAPI Exclusive або ASIO - про них читайте далі) такі пристрої вміють автоматично підлаштовувати свою опорну частоту під частоту дискретизації відтвореного потоку (т. Н. Автомат частоти). У цих випадках використання ресемплера для тих частот, з якими пристрій може працювати на апаратному рівні, зайве, і ідеальним рішенням буде використання SoX Resampler mod:

У цих випадках використання ресемплера для тих частот, з якими пристрій може працювати на апаратному рівні, зайве, і ідеальним рішенням буде використання SoX Resampler mod:

Тут я вказав всі частоти, які підтримує підключений зараз у мене ЦАП iFi nano iDSD. Тепер при подачі потоку з будь-якої з зазначених частот ресемплер включатися не буде, а ЦАП буде сам визначати і підлаштовувати свою частоту:

Тепер при подачі потоку з будь-якої з зазначених частот ресемплер включатися не буде, а ЦАП буде сам визначати і підлаштовувати свою частоту:

У разі нестандартної частоти джерела (наприклад, 32000 Гц) вона буде перетворюватися в 384 кГц. Звичайно, не кожна звукова карта може похвалитися такою підтримкою частот (в даному випадку SoX Resampler можна навіть не включати - записи з іншими частотами дискретизації практично не зустрічаються), для лінійки Creative X-Fi 2004 року, наприклад, автомат частоти працює тільки при виведенні через ASIO в режимі Audio Creation і тільки з частотами 44.1 / 48 / 88.2 / 96 кГц. Користуватися описаним методом можна тільки якщо ви впевнені в «рідній» підтримки зазначених частот і можете перевірити поточну опорну частоту в панелі пристрою або на цифровому індикаторі.

2.3.3 Регулятор гучності (Volume Сontrol)

Власний регулятор гучності плеєра. У разі необхідності програмного регулювання гучності рекомендується використовувати саме його (а не регулятори в налаштуваннях звукової карти / мікшері Windows). При виведенні через WASAPI shared ( "DS: <звукова карта>" в Windows Vista +) синхронізується з регулятором програми в мікшері Windows.

2.3.4 Конвертор глибини біт

Використовується для перетворення даних в формат, який здатна сприйняти звукова карта (зазвичай це 16 або 24-бітове аудіо в форматі PCM з фіксованою точкою). Можливості вибору формату залежать від використовуваного плагіна виведення (дивіться наступний пункт).

2.4 Висновок

Плагін виведення необхідний як сполучна ланка між плеєром і Windows / драйвером звукової карти. Плагін визначає яким чином і через який інтерфейс буде проводитися висновок отриманого (в результаті роботи всіх попередніх ланок) аудиопотока з плеєра на звукову карту. Часто ця ланка відіграє вирішальну роль, тому що використання альтернативних інтерфейсів дозволяє обійти деякі неякісні ділянки тракту. Треба відзначити, що на етапі виведення потік найчастіше перетворюється в формат з фіксованою точкою (глибина біт від 8 до 32 біт - в залежності від вибраної опції), до чого це може привести - вже розглядалося в розділі про ReplayGain. На даний момент в foobar2000 існують такі способи виведення звуку: DirectSound, Kernel Streaming, ASIO, WASAPI Shared і WASAPI Exclusive (тільки для Vista / 7/8).

З огляду на принципових відмінностей між архітектурою Windows XP і Windows Vista + розглянемо настройку виведення для них окремо.

2.4.1 Windows XP

Ось приблизна схема звукової підсистеми Windows XP:

Як видно, при виведенні через DirectSound або MME звук проходить через мікшер Windows (Kmixer). Головна відмінність DirectSound полягає в широких можливостях використання апаратних ресурсів звукового пристрою, в т.ч. апаратного мікшування і низькою затримки. Але справа в тому, що ці можливості безпосередньо залежать від використовуваних драйверів. Таким чином, через неякісні драйверів звукової карти (це зараз не рідкість, особливо застарілі драйвера) в аудіо можуть вноситися спотворення. Виникати вони можуть як в результаті роботи регулятора Wave (входить в Kmixer), так і в результаті неякісної програмної передискретизации або іншої небажаної обробки.

Вирішити проблему допоможуть два інших виведення, які здатні обійти Kmixer - ASIO і Kernel Straming. Kernel Streaming - це засіб по-бітового виводу звуку від Microsoft, що входить в DirectSound (на схемі - потік оминає Kmixer). ASIO (Audio Stream Input / Output) дає підстави є професійним стандартом введення / виведення, покликаними мінімізувати затримки (значення затримок для простого відтворення музики абсолютно не критично і на якість не впливає), і також дозволяє обійти Kmixer.

ЗВЕРНІТЬ УВАГУ: для багатьох сучасних звукових карт з нормальними драйверами, результати для всіх висновків (в foobar2000) при регуляторі Wave на максимум (має значення тільки для DirectSound) збігаються. А за підтримки 24-бітного (і вище) виведення взагалі можна обійтися одним DirectSound, навіть в разі коли рівень Wave можна виставити на максимум - якість буде таким же, як і при виведенні через KS. Щоб остаточно розвіяти Ваші сумніви, рекомендую до прочитання статтю foobar2000: Kernel Streaming проти DirectSound .

Налаштування:

Отже, якщо Ваша звукова карта підтримує ASIO, скачайте і встановіть з сторінки плагінів foobar2000 ASIO Output. Якщо ж підтримки немає, встановіть Kernel Streaming. Далі запустіть foobar2000 і на сторінці виведення виберіть в Output device драйвер ASIO виробника Вашої картки (наприклад: ASIO: Creative ASIO, ASIO: Xonar Essence STX ASIO) або ж KS: <ваша звукова карта>:

Buffer Length - це регулювання буфера плеєра. Чим менше значення - тим швидше (рахуючи від моменту включення / зміни) будуть вступати в силу зміни гучності, включення плагінів і т. Д. На якість виведення дана опція не впливає, змінювати стандартне значення не рекомендується (т. К. При високому навантаженні можуть з'явиться клацання і тріск).

Output format / Postprocessing

Output data format: встановіть максимальну розрядність, підтримувану вашої звуковою картою. Формати 8 і 16 біт є повноцінними форматами з фіксованою точкою. Формат 24 біт відповідає або i24v24 ( «integer 24 valid 24», 24 біта з фіксованою точкою, 24 значущих біта) або i32v24 (32 біта, фіксована точка, 24 значущих біта) - в залежності від підтримки драйвером звукової карти. Формат 32 біта відповідає або 32 бітам з плаваючою точкою (f32v32), або, в разі відсутності підтримки драйвером плаваючою точки - 32 бітам з фіксованою точкою (i32v32). У деяких випадках (для виведення ASIO і в більш нових ОС) розрядність виведення плеєр вибирає сам, на основі отриманих від драйвера даних.

Dither: включення dithering + noise shaping (детальніше читайте в статті «Системи зниження розрядності в мастерингу» . Ця функція може бути корисна тільки при виконанні одного з наступних умов:

а) Якщо ваша звукова карта апаратно НЕ підтримує розрядність звуку вище 16 біт і ви використовуєте одну з функцій: ReplayGain, DSP, Volume Control (регулятор гучності в foobar2000).

б) ваша звукова карта апаратно НЕ підтримує розрядність звуку вище 16 біт і ви відтворюйте в foobar2000 матеріал з розрядністю більше 16 біт.

У всіх інших випадках (наприклад, якщо все обробники вимкнені і ви відтворюйте матеріал з розрядністю 16 біт) включення даної функції тільки погіршить якість.

Якщо ви використовуєте висновок ASIO, його також необхідно налаштувати:

Якщо ви використовуєте висновок ASIO, його також необхідно налаштувати:

Use 64-bit ASIO drivers - якщо у вас 64-бітна ОС і є 64-бітний драйвер ASIO, дуже бажано включити цей параметр для підвищення продуктивності.

Run with high process priority - запускає обробник ASIO (процес ASIOHOst [64] .exe) з високим пріоритетом. Також дозволяє поліпшити продуктивність.

Крім того, якщо клікнути два рази за назвою ASIO драйвера в ASIO drivers, з'явиться вікно налаштування ASIO драйвера:

Крім того, якщо клікнути два рази за назвою ASIO драйвера в ASIO drivers, з'явиться вікно налаштування ASIO драйвера:

Розрядність (если вона налаштовується в Вашому драйвері) рекомендується Встановити в 24 біта, оптимальні значення буфера ASIO зазвічай 20-40 мс. Зверніть увагу на те, що буфер ASIO впливає на частоту оновлення візуалізацій плеєра (чим менше - тим вище частота), при цьому мінімальне значення може привести до явних спотворень, клацань і зависань.

2.4.2 Windows Vista / 7/8/10

У цих ОС звукова підсистема має зовсім іншу структуру. Нижче представлена ​​її спрощена блок-схема:

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

Як видно зі схеми, ніякого DirectSound тут немає (є тільки його видимість для сумісності зі старими програмами). За замовчуванням всі звуки виводяться через інтерфейс WASAPI (Windows Audio Session API) в т. Н. Загалом (shared) режимі, який включає в себе різні служби, софтові обробники і мікшер. Також очевидно, що звук передається драйверу пристрою тільки пройшовши всі вищевказані складові. Таким чином, всі звуки приводяться до однієї частоті і битности, змішуються, (вся обробка йде з використанням обчислювальних ресурсів ЦП), а на звукову карту потік надходить уже в готовому вигляді.

Як показала практика, в деяких випадках обробники підсистеми WASAPI можуть звужувати динамічний діапазон запису, привносячи в нього деякий шум. Це залежить від обраної розрядності в налаштуваннях пристрою, однак, так чи інакше, отримати побітовий висновок при використанні WASAPI shared вдається не завжди.

В даних ОС також присутній Kernel Streaming (KST), але на практиці він далеко не завжди працює - часом пристрій з незрозумілих причин виявляється «зайнято».

Якщо подивитися на схему, то можна помітити, що прямий доступ до драйвера є через ASIO. Звідси висновок: якщо ваша карта апаратно підтримує ASIO (і має нормальний драйвер ASIO 2.0) - використовуйте цей інтерфейс. Не забувайте, що для цього потрібен додаток ASIO Output .

Але що ж робити якщо у карти немає підтримки ASIO? Відразу скажу, що ASIO4ALL тут навряд чи допоможе, так як працює через той же нестабільний Kernel Streaming.

На щастя, вихід з цієї неприємної ситуації все ж існує. Розробники залишили нам лазівку, і називається вона WASAPI Exclusive. У цьому режимі можна обійти всі небажані складові WASAPI. Правда, в ексклюзивному режимі діють жорсткі обмеження - при використанні додатком цього режиму звуки всіх інших додатків відключаються.

налаштування

Примітка: опис налаштувань виведення можна знайти в попередньому розділі. Тут висвітлені лише специфічні для нових ОС моменти.

Як я вже сказав, якщо у вашої картки є підтримка ASIO - використовуйте його (опис налаштувань можна знайти вище). В іншому випадку скачайте з сторінки плагінів foobar2000 і встановіть плагін WASAPI Output, після чого виберіть його для виведення:

В іншому випадку скачайте з   сторінки плагінів foobar2000   і встановіть плагін WASAPI Output, після чого виберіть його для виведення:

Зверніть увагу: у WASAPI exclusive існує два режими буферизації - Event і Push. Перший режим є технічно досконалішим і краще сумісний з USB пристроями. Однак, режим event підтримується не всіма звуковими картами. Таким чином, кращим є режим event. Якщо ж відтворення в ньому працювати відмовляється, необхідно переключитися на режим push.

У зв'язку з частими проблемами клацань і тріску під час відтворення звуку в Windows Vista і новіших тут важливо згадати додаткові налаштування відтворення, які знаходяться в File-> Preferences-> Advanced-> Playback:

Hardware buffer in MS - апаратний буфер виведення для кожного з режимів WASAPI Exclusive. Якщо спостерігаються hgj, ktvs з клацанням, спробуйте збільшити значення для використовуваного виведення.
High worker process priority - цей параметр встановлює високий пріоритет виконання обробника WASAPI Exclusive, який запускається в окремому процесі WASAPIHost [64] .exe (аналогічно ASIO Host). Для досягнення максимального ефекту можна встановити і цьому процесу, і процесу foobar2000.exe в диспетчері завдань Windows пріоритет реального часу.

Thread priority - встановлює пріоритет для потоку, що відповідає за відтворення. Бажано встановити в максимум.
Use MMCSS - включає взаємодію зі службою Multimedia Class Scheduler Service, яка займається розподілом процесорних ресурсів. Цю функцію розглядається в статті по розбору звукової підсистеми WASAPI .
MMCSS mode - вибір режиму MMCSS. Для оптимальної роботи та стабільності рекомендується значення Pro Audio.

За допомогу в «пошуках істини» величезне спасибі учасникам форумів foobar2000.org, websound.ru, hydrogenaudio.org

Чим же це загрожує?
Для чого ж в нашому випадку потрібен ReplayGain?
Але що ж робити якщо у карти немає підтримки ASIO?