Анализ на WASAPI и PlayPcmWin

Предговор

Както знаете, пускането на Windows Vista беше белязано от смъртта на аудио подсистемата DirectSound и появата на нова подсистема Windows Audio Session Application Programming Interface (WASAPI). Вече съм писал за това много пъти - в статията Организиране на висококачествен звук и Как да възстановите висококачествен звук в Windows 7.

За мен лично този обрат на събитията беше пълна изненада. Както вече писах, в резултат на това Windows почти напълно загуби достъп до хардуерните възможности на звуковите карти и битовият аудио изход стана много по-сложен. Разбира се, трябва да се отбележи гъвкавостта, простотата и удобството на новата подсистема - обратна съвместимост със стари приложения, използващи Wave Out, DS), поддръжка за всяка честота на дискретизация до 192 kHz, контрол на силата на звука за всяко приложение. Но въпреки че напредъкът в ИТ се движи в посока на опростяване, „по-просто“ не винаги означава „по-добро“. Да речем, първоначално беше напълно неизвестно как работи повторната семплиране на WASAPI. В допълнение, в 16-битов режим, миксерът въвежда някои странни шумове, които намаляват динамичния диапазон с десет децибела.

Но не всичко е толкова лошо. Оказа се, че WASAPI има много интересни функции, които ви позволяват да прецизирате изхода, включително качеството на повторно семплиране, латентност и т.н. За щастие сега разработчиците на софтуер са се заели сериозно с прилагането на тези функции.

Хардуер и софтуер

200?'200px':''+(this.scrollHeight+5)+'px');"> Intel Core i3 2.93GHz, ASUS P7H55-V, 4GB DDR3, Creative X-Fi Xtreme Gamer

Microsoft Windows 7 Ultimate SP1 x64

PlayPcmWin x64 4.0.62 RightMark Audio Analyzer 6.3.0 Adobe Audition CS6 Sony Sound Forge 10.0c

Възпроизвеждане на PcmWin

И така, наскоро публикувах на сайта аудиофилския плейър PlayPcmWin, който е предназначен за изход чрез WASAPI и в резултат на това най-пълно изпълнява всички функции на този API. Така че нека започнем нашето запознаване със системата, използвайки този плейър.

Програмата има две версии - 32-битова и 64-битова. 64-битовата версия ви позволява да намалите натоварването на процесора, както и да използвате повече RAM. Ние, както вече разбрахте, ще използваме PlayPcmWin x64.

Нека да стартираме програмата и да разгледаме елементите на основния й прозорец.

playpcmwin

Програмата има прост и удобен интерфейс. Отляво има плейлист с плъзгане и пускане, отдолу са плейлисти и контроли за възпроизвеждане. Вдясно виждаме основните настройки, избора на звуково устройство, както и информационни елементи - дневник и бутон за получаване на списък с формати, поддържани от устройството.

Първо, нека поговорим за настройките (Настройки на WASAPI). НастройкатаРежим на работаотговаря за избора на режим на възпроизвеждане - нормален (споделен) или изключителен (изключителен). Вторият режим е наличен само ако настройките на звуковото устройство на Windows позволяват използването му. В нормален режим, в който работят повечето програми, написани за Windows Vista и по-нови, Windows Audio Service може да използва всички свои манипулатори, показани в блок-схемата вляво:

00000000

API- Интерфейс за програмиране на приложения

APO—Обект за аудио обработка

CPT- Междупроцесен транспорт

KST- Поточно предаване на ядрото

Този режим има някои опции за персонализиране, но повече за това по-късно. Що се отнася до изключителния режим, всички тези манипулатори са деактивирани в него и звукът отива директно към ядротострийминг транспорт. Тъй като този транспорт има само един входен и един изходен поток (смесването на потоци от различни приложения се извършва в Mixer APO), свързването директно към KST води до блокиране на всички други звуци.

НастройкатаРежим на подаване на данниотговаря за режима на пренос на данни или по-скоро за режима на софтуерния буфер. Режимът, управляван от събития, е технически по-напреднал от управлявания от таймер (понякога наричан Push), има по-ниско натоварване на процесора и в резултат на това кликванията (и други артефакти) в този режим са по-малко вероятни. Въпреки това има устройства, които отказват да работят в режим, управляван от събития, тогава трябва да използвате режима на таймера. Струва си да се отбележи, че и двата режима ви позволяват да получавате битово възпроизвеждане и това няма нищо общо с качеството на звука.

Параметърът латентност ви позволява да зададете размера на изходния буфер на WASAPI. Освен това няма нищо общо с качеството на възпроизвеждане и засяга само реакцията (скоростта на реакция) на промени в параметрите на възпроизвеждане. Твърде ниският размер на буфера обаче неизбежно ще доведе до щраквания по време на възпроизвеждане.

Освен това има много интересна функция Списък на поддържаните формати. При щракване върху бутона в полето за дневник се появява текстова таблица със следната форма:

200?'200px':''+(this.scrollHeight+5)+'px');"> PlayPcmWin 4.0.62.0 64bit

DeviceFriendlyName=Високоговорители (Creative SB X-Fi)

44kHz i16V16 48kHz i16V16 88kHz i16V16 96kHz i16V16176kHz i16V16192kHz i16V16352kHz i16V16384kHz i16V16

OK 00000000 OK 00000000 OK 00000000 OK 00000000 OK 00000000 OK 00000000 NA 88890008 NA 88890008

44kHz i24V24 48kHz i24V24 88kHz i24V24 96kHz i24V24176kHz i24V24192kHz i24V24352kHz i24V24384kHz i24V24

NA 88890008 NA 88890008 NA 88890008 NA 88890008NA 88890008 NA 88890008 NA 88890008 NA 88890008

44kHz i32V24 48kHz i32V24 88kHz i32V24 96kHz i32V24176kHz i32V24192kHz i32V24352kHz i32V24384kHz i32V24

OK 00000000 OK 00000000 OK 00000000 OK 00000000 OK 00000000 OK 00000000 NA 88890008 NA 88890008

44kHz i32V32 48kHz i32V32 88kHz i32V32 96kHz i32V32176kHz i32V32192kHz i32V32352kHz i32V32384kHz i32V32

OK 00000000 OK 00000000 OK 00000000 OK 00000000 OK 00000000 OK 00000000 NA 88890008 NA 88890008

44kHz f32V32 48kHz f32V32 88kHz f32V32 96kHz f32V32176kHz f32V32192kHz f32V32352kHz f32V32384kHz f32V32

NA 88890008 NA 88890008 NA 88890008 NA 88890008 NA 88890008 NA 88890008 NA 88890008 NA 88890008

Това е информация за форматите на аудио данни, поддържани от драйвера на звуковата карта, т.е. всъщност това са форматите, които могат да бъдат подавани към Kernel Streaming Transport. Както се вижда от таблицата, устройството поддържа стандартни честоти на дискретизация от 44,1 до 192 kHz. Що се отнася до битовата дълбочина, конвенциите тук са както следва: ixxVyy означава "xx бита с фиксирана запетая (цяло число), от които yy бита са значими." Тези. i16V16 е обичайният 16-битов формат с фиксирана запетая, f32V32 е 32-битов формат с плаваща запетая. i32V24 означава, че 8 празни бита са добавени към 24-битови данни и имаме 32-битови. Тази техника се използва, когато картата не поддържа 24-битово въвеждане на данни, като нашата X-Fi карта.

По този начин картата поддържа стандартни формати с фиксирана запетая, различни от 24-битови.

Разширени настройки

С натискане на бутонаПодробни настройкивлизаме в разширените настройки на програмата.

анализ

Първата група настройки се отнася за изключителния режим. Тук можете да изберете формата на даннитекойто ще бъде изведен звукът. Тук трябва или да настроите параметъра на режим на автоматичен избор, или да изберете поддържания режим с най-висока битова дълбочина (вижте таблицата). Тук можете също да активирате дитъринг (очевидно с оформяне на шума), който ще се извърши, когато битовата дълбочина е намалена (например, ако източникът е 24-битов и изходът е 16-битов). Между другото, нека да разгледаме качеството на дизеринга.

анализ
NS на

playpcmwin
NS изключен

Много странно - тук не се вижда дизеринг и още повече оформяне на шума. Програмата просто добавя странен допълнителен шум. Това вероятно е грешка - вече докладвах за тази странност на разработчика.

Добавено: Според разработчика обработката все още е в ход и се нарича оформяне на шум от първи ред. Тези. допълнителен шум не се въвежда в записа, а вече съществуващият шум от квантуване се измества във високочестотната област с помощта на специален алгоритъм, който включва обратна връзка. Разработчикът също така твърди, че естественият шум от микрофона, който присъства в повечето записи, може лесно да действа като трептене. Тези. този алгоритъм дава предимно по-добри резултати при живи, несинтетични записи.

Добавено: Във версия 4.0.63 е добавена възможността за използване на комбинации от трептене и оформяне на шум.

След това имаме настройките на общия режим на WASAPI. Тук можем да контролираме качеството на resampler (resampler MFT или Audio resampler DSP), включен в Windows Audio Service. Както е написано в документацията на Microsoft, ако програмата не контролира качеството на ресемплера, стойността по подразбиране е зададена на 30. Нека сравним качеството на 44,1- > 96 kHz ресемплиране с качество 1, 30 и 60 (максимум).

анализ
Q=1

00000000
Q=30

wasapi
Q=60

На ухо минималното качество има значително изкривяване, режимите на качество 30 и 60 са почти еднакво приемливи на ухо. Между другото, интересно е, че контролът на качеството на повторно вземане на проби беше въведен само в Windows 7.

Има и настройка за автоматично мащабиране на сигнала по амплитуда до 98% от максимума, което предпазва Windows ограничителя от намеса (в противен случай ще компресира сигнала).

Що се отнася до споделения режим, можете да се запознаете с характеристиките на неговата работа в прегледа на Windows Media Player.

И последната група от настройки, които ни интересуват, са настройките на нишка за възпроизвеждане, т.е. настройки на потока за възпроизвеждане. Тук сме изправени пред иновация, наречена MMCSS (Multimedia Class Scheduler Service). Тази услуга се занимава с разпределението на ресурсите на процесора между процесите, отговорни за изпълнението на задачата в реално време - запис, възпроизвеждане (рендиране). Като активираме тази функция (DwmEnableMMCSS(True) и зададем типа на задачата на Pro Audio, ние ще зададем максималния приоритет на достъп до процесора за възпроизвеждане, което допълнително ще намали латентността (размера на буфера). По този начин настройката на режим Pro Audio намалява вероятността от недостиг на буфер (което е причината за щракванията), но този режим е по-малко ефективен по отношение на консумацията на енергия.

Като цяло, това е всичко, настройки, свързани с качеството на възпроизвеждане. Трябва също да се добави, че преди възпроизвеждане на плейлиста, програмата извършва декодиране и необходимата обработка (например дитъринг или мащабиране на амплитудата), като поставя резултата в RAM на компютъра в избрания формат (за изключителния режим, режимътизбран в настройките, за общия - оригиналния формат). Ето пример за дневник след стартиране и включване на пистата:

Продължителността на парчето е около 6 минути. След стартиране програмата консумира 70 MB RAM, след включване на пистата - 212 MB.

анализ

Както можете да видите на екранната снимка. Успях да изведа аудио във формат i32V24 със закъснение от само 3ms. Не са наблюдавани звукови артефакти.

Най-интересното е, че в споделения режим програмата извършва повторно семплиране с помощта на алгоритъма resampler MFT и след това получава потока обратно, поставяйки вече повторно семплирането в RAM (т.е. повторното семплиране не се извършва в движение). Ето дневника:

След началото на работата програмата консумира около 340 MB RAM.

PlayPcmWin поддържа WAV, AIFF, FLAC формати и също така има поддръжка на CUEsheet.

Тази програма, без съмнение, представлява интерес само за ентусиасти. PlayPcmWin ясно ни демонстрира всички възможности на Windows Audio Service, които се оказаха доста широки. Въпреки липсата на пълен достъп до хардуерни ресурси (както в DirectSound), WASAPI има обширни възможности за софтуерна обработка на звука и също така ви позволява да организирате извеждане на звук с ниска латентност.