Исследование звукового тракта Winamp

Дата обновления: 08 Августа 2013
2013-08-08T02:00
Audiophile's Software

Продолжая поиски альтернатив foobar2000, я перехожу к самому популярному (не считая Windows Media Player) плееру под Windows.

Напомню: моё предыдущее исследование AIMP3 закончилось безоговорочной победой foobar2000. Посмотрим, сможет ли потягаться с foobar'ом Winamp.

Используемое оборудование и ПО

Microsoft Windows 7 Ultimate SP1 x64

Winamp 5.65 Full

foobar2000 core 1.2.9 + SoX Resampler 0.8.3
RightMark Audio Analyzer 6.3.0
Adobe Audition CS6
Sony Sound Forge 10.0c

Creative X-Fi XtremeGamer

Winamp устанавливаем со всеми компонентами, кроме агента и детектора.

Хоть это и не принципиально, но, шагая в ногу со временем, будем использовать современную обложку Big Bento.

First sight

Итак, пока в плеере у нас играет Френк Синатра (MP3 320 kbps), мы переходим в настройки и сразу смотрим, каким образом выводится звук.

Здесь мы видим, что по умолчанию используется вывод DirectSound. Откроем его настройки.

Здесь уже включено аппаратное ускорение. Хотя известно, что на Windows Vista/7/8 оно уже не работает (и это видно из строки «Аппаратное микширование: не поддерживается»). Конфигурацию динамиков плеер определяет как стерео. Если изменить конфигурацию в настройках звукового устройства, поменяется информация и в данной строке.

На вкладке состояния мы видим очень полезную информацию. Как уже было сказано, аппаратное микширование не работает, потому используется программное. Данные выводятся в формате 16 бит 44.1 кГц, стерео. Если установить конфигурацию динамиков 5.1, плеер всё равно будет выводить в стерео, что весьма странно. Но с этим мы, возможно, разберемся позже.

Если на странице «Воспроизведение» установить галочку «Разрешить 24-битный вывод», плеер будет выводить данные в 24-bit PCM, что действительно лучше, т.к. lossy аудио может быть получено из 24-битных источников и иметь динамический диапазон шире, чем позволяет получить 16-битный формат. Но мы пока что не знаем, в каком формате поток поступает от декодера...

Давайте проверим, что будет делать Winamp, если попытаться воспроизвести в нем 24-битное lossless (галочку поддержки 24-бит пока снимем).

Генерируем Райтмарком тестовый сигнал 24/96 и открываем его в Winamp.

Winamp выводит аудио в 16-битном формате. Очевидно, данная разрядность установлена по умолчанию для максимальной совместимости (в т.ч. с картами, драйвер которых не принимает 24 бита). Но каким образом выполняется понижение разрядности? Если вы посморите на скриншот страницы настроек воспроизведения, то увидите там галочку «Включить размывание», которая установлена по умолчанию. В английской локализации она называется «Use dither», т.е. это тот самый пресловутый дизеринг. Давайте проверим, работает ли он.

Сгенерируем синусоиду с частотой 1 кГц и уровнем -90 dBFS в формате 24 бит.

Воспроизведем её в Winamp и снимем сигнал со звуковой карты.

Очень странно, но дизерингом здесь и не пахнет. Для примера давайте посмотрим, как правится с задачей foobar2000 (вывод в формате 16 бит, dither on).

Вот это уже другое дело, прекрасный дизеринг, да еще и с нойз шейпингом.

В самом деле очень странно: включение или отключение дизеринга в Winamp'е никак не влияет на результат. Но давайте обратимся к справке Winamp. Справка гласит: Use Dither: Enables dither for supporting formats (currently, .ogg and .flac only).

Т.е. дизеринг работает только при воспроизведении FLAC и OGG. Это крайне странно. Похоже, будто дизеринг выполняется декодером, а не отдельным обработчиком. И это неправильно. Но всё же давайте его опробуем. Для этого закодируем тестовый сигнал во FLAC и повторим эксперимент.

Потрясающе. Уровень сигнала понизился на 6 дБ и картина стала еще более плачевной. В самом деле, пикметр отображает для WAV файла уровень воспроизведения -84.5 dBFS, а для FLAC — -90.5 dBFS. Совершенно неадекватное поведение. И снова никакого дизеринга нет.

Хорошо, пойдем до конца. Испробуем формат OGG — для этого закодируем аудио в Vorbis -q10 и снова повторим эксперимент.

И наконец-то мы его увидели. Судя по всему, дизеринг работает только для OGG Vorbis. Это довольно странно, т.к. 24-битные рипы намного чаще встречаются в формате lossless, особенно FLAC. Но для FLAC, не смотря на заявление разработчиков, эта функция работать отказалась...

Благо, сейчас большинство карт поддерживает 24-битный вывод и опция поддержки 24-бит должна от потери качеств спасти. Давайте проверим, правда ли декодер работает в 24-битном формате. Проверим для FLAC, MP3 и OGG Vorbis.

Действительно, декодеры работают в 24-битном формате. На графике вы можете видеть спектр для декодированного MP3 сигнала — динамический диапазон сохранился, и это не может не радовать.

Теперь посмотрим, как у нас обстоит дело с ресемплингом...

А никак оно у нас не обстоит.

В стандартном комплекте поставки плеера возможность выполнения ресемплинга отсутствует — плеер выводит аудио с оригинальной частотой дискретизации. И, в принципе, это чем-то даже лучше, чем фиксированная частота вывода в AIMP3 (в сочетании с некачественным ресемплером). В Windows Vista/7/8, как уже было показано, имеется довольно качественный resampler MFT, так что процесс передискретизации можно спокойно поручить ему.

Кстати, давайте еще раз проверим, как справится с ресемплингом WASAPI (звуковая подсистема в последних версиях Windows). Установим в свойствах звукового устройства формат 24 бит/96 кГц и запустим на воспроизведение тестовый сигнал 24 бит/44.1 кГц. Сигнал с карты будем снимать Райтмарком.

Смотрим отчет.

Вполне приличный ресемплинг, искажения на очень низком уровне.

Вывод: на Windows Vista/7/8 можно использовать DirectSound для качественного воспроизведения. Для этого необходимо установить в настройках звукового устройства Windows частоту равную опорной частоте карты (лучше поставить опорную на максимум) и разрядность 24 бита.

В Windows XP всё несколько сложнее. Можно поручить ресемплинг звуковой карте — для этого в настройках DirectSound надо включить аппаратное ускорение. Но делать это можно только в том случае, если вы уверены в алгоритме ресемплирования своей звуковой карты. Скажем, доверить этот процесс можно чипу Creative X-Fi (карты Creative XtremeMusic/Gamer/ и выше). В остальных же случаях придется что-то выдумывать.

Во-первых, если у карты имеется драйвер ASIO 2.0 с поддержкой автоматического переключения опорной частоты, можно установить для Winamp плагин ASIO Output и выводить звук через ASIO.

Во-вторых, можно поискать ресемплер для Winamp. Чем мы сейчас и займемся.

FFSoX

Итак, я сразу же наткнулся на интересный плагин FFSoX Player. Это декодер, содержащий в себе также все необходимые обработчики.

Здесь вам и ReplayGain, и ресемплер, и дизеринг с нойз шейпингом. Этот плагин заменяет собой декодеры и, как следствие, некоторые обработчики Winamp'а. Так что если в нем установить 24-битный формат, даже при снятой галочке поддержки 24 бит в настройках Winamp, плеер будет выводить в этом формате. Это же касается и дизеринга с ReplayGain.

Давайте проверим качество ресемплинга в режиме установленном на скриншоте.



Идеальный ресемплинг. В общем-то, алгоритм SoX всегда был одним из лучших, так что вряд ли стоило сомневаться. Давайте еще посмотрим на дизеринг (включим в плагине dither и noise shaping).

Прекрасная формовка шума, что еще сказать.

Но не будем на этом останавливаться, давайте рассмотрим альтернативы.

DirecrSound SSRC

Есть более простой способ — ресемплирование плагином вывода. Для этого есть специальный плагин DirecrSound SSRC (out_ds_ssrc.dll) v2.2.6. Кстати, плагин очень старый — 2002 года (найти в интернете последнюю версию в интернете было невероятно сложно). И самое интересное — создан он Петером Павловски, разработчиком foobar2000.

Значительный интерес представляют результаты тестирования данного плагина в режиме 44.1->96 кГц.

Интересны различия графиков при отключенной и включенной опции поддержки 24 бит (дизеринг также отключен). Это объясняется тем, что в данном случае у нас используются оригинальные плагины декодирования. Похоже, что если поддержка 24 бит и дизеринга отключена, декодирование выполняется сразу в формате 16 бит. Так что при использовании альтернативных плагинов вывода её следует держать включенной. Если же вам необходимо понижать разрядность с 24 бит до 16, следует воспользоваться дезерингом в плагине вывода.

В общем же, плагин даёт хорошее качество передискретизации и вполне пригоден к использованию. Как уже было сказано, этот вариант подходит для Windows XP, где , кстати, DirectSound с включенным аппаратным микшированием способен дать побитово точный вывод.

Также стоит упомянуть наличие для Winamp плагина Kernel Streaming.

Его также можно использовать в Windows XP для обхода микшера ОС. Хотя всё равно ресемплинг делать как-то надо (если карта не умеет выполнять качественную передискретизацию), так что его можно использовать в паре с FFSoX — сразу выполняя ресемплинг и пуская звук непосредственно на звуковую карту.

Maiko WASAPI

Ну а для совсем уж гиков, сидящих на Windows Vista/7/8 есть плагин Maiko WASAPI.



На самом деле плагин очень толковый. Он позволяет получить доступ к современным режимам WASAPI Shared и Exclusive. В режиме Shared возможно автоматическое ресемплирование до частоты установленной в свойствах звукового устройства, а также доступен вывод в формате 32 бит с плавающей точкой. Регулятор громкости Winamp синхронизируется с микшером Windows, но его можно и отключить.

В режиме Exclusive отключаются все программные эффекты, а также блокируются посторонние звуки. Этот режим необходим для побитово точного вывода. Что интересно — в режиме Exclusive, в отличие от foobar2000, всё еще доступна регулировка громкости средствами микшера Windows.





Как видно из графиков, ресемплинг плагин выполняет идеально (но алгоритм нигде не указан). Единственное, что странно — в режиме Finest sample rate conversion качество ресемплирования почему-то малость хуже, чем в обычно режиме. Причем режим Finest порой серьезно вешает плеер. Ну, версия плагина тестовая, так что скорее всего это баг. Просто не будем трогать эту опцию.

Также плагин Maiko позволяет выполнять ресемплирование до заданной частоты, устанавливать условия ресемплирования, микшировать каналы и выполнять регулировку баланса. А с помощью установки соответствующих галочек вы можете включить сохранение исходной разрядности/семплрейта/количества каналов.

Галочка «Genuine latency mode» включает неправильный режим расчета задержки, однако при таком режиме исправно работает визуализация и звук в видео.

Вопрос клиппинга

Как мы помним, по результатам предыдущего теста AIMP3 разочаровал нас декодированием lossy форматов, выполняемом в режиме с фиксированной точкой. Это приводило к неминуемому клиппингу для файлов, в которых содержится сигнал, превышающий допустимый уровень. Давайте теперь проверим, как дела обстоят у Winamp.

Я загрузил в Winamp OGG файл, содержащий клиппинг глубиной 6 дБ, и попробовал вывести аудио в режиме WASAPI shared, 32-bit float. В foobar2000 весь сигнал от декодера и до вывода шел в формате с плавающей точкой, и подобные действия приводили к срабатыванию limiter APO. В Winamp же клиппинг всё равно наблюдался, а плагин Maiko докладывал о поступлении данных с декодера в формате 24 бит:

Input stream:
24 bit PCM encoding in 2.0 (Stereo) setup. 44100Hz rate
MAIKO buffer/latency: 7616 samples (172699 µs)

Output stream:
32 bit float PCM encoding in 2.0 (Stereo) setup. 96000Hz rate
Client buffer: 32768 samples (341334 µs)
Client latency: 10667 µs
Mixer scheduling period (latency): 10000 µs
Minimum device period (latency): 3000 µs

Shared mode renderer

Plugin latency reported to Winamp: 183 ms
Peak output loudness detected: — db

То есть изначально плеер не располагает возможностью борьбы с клиппингом в lossy с помощью лимитера. Давайте теперь задействуем декодер FFSoX.

Но это ничего не меняет. Этот декодер также работает в режиме с фиксированной точкой. А ReplayGain с OGG Vorbis работать отказался — ни в самом Winamp, ни в FFSoX. Но с MP3 RG работает. Кстати, давайте посмотрим, как справляется плеер хотя бы с клиппингом в MP3.

Для проверки я создал специальный MP3 файл, к которому применил усиление +6 дБ (путем ручной установки усиления RG и его применения к MP3 данным в foobar2000).

Итак, новости на этот раз хорошие — Winamp сумел предотвратить клиппинг средствами встроенного обработчика ReplayGain. Также ReplayGain в Winamp работает с AAC (контейнер MP4/M4A).

В данном режиме Winamp выполнил нормализацию аудио до 0 dBFS. Всё это говорит о том, что декодеры lossy в плеере всё-таки работают в режиме с плавающей точкой (или он включается при включении ReplayGain). А преобразование в фиксированную точку происходит на одной и последующих этапов тракта (за выбор 16 или 24 бит, видимо, и отвечает галочка поддержки 24 бит).

Для тех, кто не знает: сканировать файлы для расчета информации ReplayGain в Winamp можно через контекстное меню->Отправить->Выравнивание громкости.

Вердикт

Итак, скажу честно: Winamp меня порадовал куда больше, чем AIMP. Несмотря на всю громоздкость, сложность настройки и сомнительную прозрачность тракта, у него имеется практически полный инструментарий для качественного воспроизведения как lossless, так и lossy. А чего нет — добавляется с помощью плагинов. Конечно удивило отсутствие поддержки ReplayGain для Vorbis, но возможно, это исправляется альтернативным декодером (у меня на его поиски уже не осталось времени).

А так — есть всё необходимое, и даже более (например, я забыл упомянуть плагин вывода через OpenAL). И внимательно прочитав этот обзор, вы cможете успешно настроить качественное воспроизведение звука через Winamp.

Так что звуковому движку Winamp я ставлю твердую четверку.

[Обсудить на форуме]


Информация от спонсора

Cisco Parts: сетевое оборудование Cisco. На сайте интернет-магазина Вы можете приобрести сетевые коммутаторы нового поколения Cisco Catalyst 2960 — это современные высокотехнологичные устройства, позволяющие подключать компьютеры к сети как по проводной, так и по беспроводной связи.

 
   
Категория: Авторские статьи | Автор: | Добавил: Audiophile
Просмотров: 24445| Рейтинг: 5.0/5, голосов: 2
Комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи. [ Регистрация | Вход ]