spvd.ru
spvd.ru
Павел Селиванов. Статьи, обзоры, заметки

Winamp и foobar2000, влияние программной регулировки громкости

Звук изначально имеет аналоговую природу, но мы сознательно идем на компромисс и придаем звуковому сигналу промежуточное, цифровое, состояние, поскольку оцифрованная информация обладает огромными преимуществами для хранения и передачи. Дополнительно появляется возможность применить к оцифрованному сигналу цифровую же обработку. Регулировка громкости в проигрывателе по сути является одной из таких обработок, пожалуй, самой простой по реализации.

 

Немного теории

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

Сторонники аналоговой регулировки громкости (и, соответственно, противники цифровой) обычно основным аргументом приводят следующее утверждение: цифровая регулировка громкости уменьшает динамический диапазон. Утверждение, в целом, верное, но на самом деле только уменьшение динамического диапазона от цифровой регулировки громкости в программном проигрывателе в небольших пределах не так уж критично. Во-первых, в плеерах в подавляющем большинстве случаев доступно только уменьшение громкости относительно исходного сигнала, а во-вторых, не вдаваясь глубоко в технические подробности, поясню на простом примере: уменьшая громкость любым способом, вы же наверняка готовы к тому, что самые тихие звуки фонограммы могут перестать быть слышимыми?

Более заметное влияние может оказать то, что в результате пересчета к сигналу добавятся искажения. Применение в промежуточных вычислениях повышенной разрядности не избавляет от необходимости округления полученного результата. Округлять можно разными способами, например к большему, к меньшему, к ближайшему допустимому или в сторону ближнего по значению соседнего отсчета. Округление к меньшему (оно же отбрасывание, самый быстрый алгоритм) или к большему добавит к сигналу постоянную составляющую, к ближайшему или в сторону ближнего соседнего отсчета (пожалуй, наилучшее, хотя и самое медленное) – низкочастотную. При этом округление к ближайшему приведет к росту в спектре нечётных гармоник.

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

Если вывод в программном проигрывателе реализован правильно (именно вывод, входное декодирование в данной статье не рассматривается), то разницу в звучании проигрывателей можно ожидать только в одном случае – если задействована регулировка громкости, а алгоритмы пересчёта применяются разные.

 

Методика тестирования

В тестировании будут участвовать два популярных программных плеера, foobar2000 версии 0.9.6.6 и Winamp версии 5.552 на компьютере под управлением Windows XP SP3. Плееры будут тестироваться с плагинами вывода, входящими в комплект поставки, для Winamp это Nullsoft DirectSound Output v2.49(d) и WaveOut Output v2.12(d), для foobar2000 – стандартный вывод через DirectSound.

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

Winamp WaveOut, включение Alt. setting method

Дело в том, что с настройками по умолчанию плагин WaveOut для регулировки громкости на самом деле использует канал Wave системного микшера. Поэтому в настройках регулятора громкости плагина была включена опция Alt. setting method, позволяющая избежать участия в регулировке громкости системного микшера.

Кроме того, в обоих проигрывателях вместо Primary Sound Driver в качестве устройства воспроизведения было явно задано виртуальное устройство Juli@ Ch1234.

foobar2000, выбор Juli@ Ch1234 устройством вывода

Громкость в системном микшере, по очевидным из предыдущего материала причинам, установлена на максимум.

Поскольку тестируются не звуковые карты, а проигрыватели, весь путь от воспроизведения до записи в файл для анализа сигнал пройдет в цифровом виде. Поможет в этом звуковая карта ESI Juli@ и реализованная в её драйвере функция DirectWIRE.

DirectWIRE

Измерения выполнялись с помощью тестового пакета RightMark Audio Analyzer 6.2.3 PRO на тестовом WAV-файле 16 bit 44,1 kHz.

Окно RMAA

Запись в RMAA производилась через интерфейс ASIO, 32 bit 44,1 kHz.

Всего будет проведено три серии тестов, на максимальном уровне громкости и с уменьшением приблизительно на три и семь децибелов. Подстройка уровня для второго и третьего тестов проводилась по индикатору из RMAA.

RMAA, окно для подстройки уровня

Для справки в результатах тестов в скобках приведены значения уровня понижения громкости по показателям проигрывателей.

Вне конкурса будет проведён четвертый тест с проигрывателем foobar2000, позволяющим задавать повышенную разрядность для выходного сигнала. Предыдущее исследование показало, что при максимальной громкости на 16-битном источнике смена Output data format с 16-bit на 24-bit ничего не даёт. Посмотрим, что изменится при понижении громкости в проигрывателе. Тест будет проведён со стандартным DS output и дополнительно установленным плагином Kernel Streaming.

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

Обратите внимание, что тестируются проигрыватели с различными плагинами для вывода и на WAV-файле, записанном с разрешением, принятым для AudioCD. Таким образом, результаты тестов будут справедливы только для воспроизведения аудиоматериалов в том же разрешении, несжатых, либо сжатых с применением lossless кодеков.

Примерять полученные результаты к воспроизведению lossy форматов (например, mp3) будет неправильно. Искажения от сжатия с потерями с применением психоакустических моделей наверняка превысят показатели искажений, полученные в данной серии тестов. Когда в дело вмешивается психоакустика, субъективное восприятие становится зависимо от очень многих факторов, в том числе от характера исходного сигнала, подвергнутого сжатию с потерями и особенностей пары кодер-декодер. Применение в этом случае сугубо инструментальных методов оценки качества бессмысленно.

 

Тестирование

Проводить все доступные в RMAA тесты для достижения поставленной цели не требуется. Остановимся только на тестах динамического диапазона, нелинейных и интермодуляционных искажений.

 

Тест первый. Winamp DirectSound и WaveOut, foobar2000 DS 16-bit, максимальная громкость.

ТестWinamp DirectSound (100%)Winamp WaveOut (100%)foobar2000 DS 16-bit (0dB)
Динамический диапазон, дБ (А): 97.8 97.8 97.8
Гармонические искажения, %: 0.0004 0.0004 0.0004
Интермодуляционные искажения + шум, %: 0.0035 0.0035 0.0035

 

Динамический диапазонДинамический диапазон, Winamp DirectSound и WaveOut, foobar2000 DS 16-bit, максимальная громкость

 

Нелинейные искажения + шумНелинейные искажения + шум, Winamp DirectSound и WaveOut, foobar2000 DS 16-bit, максимальная громкость

 

Интермодуляционные искаженияИнтермодуляционные искажения, Winamp DirectSound и WaveOut, foobar2000 DS 16-bit, максимальная громкость

 

Как и следовало ожидать, результаты полностью совпали. На максимальной громкости никакой разницы в воспроизведении между Winamp и foobar2000 нет. Посмотрим, что произойдёт, когда в дело вмешается регулятор громкости проигрывателя.

 

Тест второй. Winamp DirectSound и WaveOut, foobar2000 DS 16-bit, -3 дБ.

ТестWinamp DirectSound (66%)Winamp WaveOut (70%)foobar2000 DS 16-bit (-3.50dB)
Динамический диапазон, дБ (А): 95.6 96.0 95.6
Гармонические искажения, %: 0.0008 0.0007 0.0008
Интермодуляционные искажения + шум, %: 0.0047 0.0045 0.0047

 

Динамический диапазонДинамический диапазон, Winamp DirectSound и WaveOut, foobar2000 DS 16-bit, -3 дБ

 

Нелинейные искажения + шумНелинейные искажения + шум, Winamp DirectSound и WaveOut, foobar2000 DS 16-bit, -3 дБ

 

Интермодуляционные искаженияИнтермодуляционные искажения, Winamp DirectSound и WaveOut, foobar2000 DS 16-bit, -3 дБ

 

Сиреневый график это результат первого теста, приведён для сравнения. Результаты foobar2000 и Winamp для DirectSound (белый и голубой графики) совпали. Winamp c WaveOut демонстрирует некоторые отличия. Отчасти отличия вызваны тем, что из-за дискретности регулировки, для WaveOut наверняка не удалось получить точно такого же понижения уровня, как и для DirectSound, хотя RMAA и показал одинаковые значения. Просто разница оказалась менее 0,1 дБ, то есть ниже точности индикатора RMAA. Посмотрим, что покажет третий тест, где и понижение по абсолютному значению больше, а потому относительные отличия уровней меньше.

 

Тест третий. Winamp DirectSound и WaveOut, foobar2000 DS 16-bit, -7 дБ.

ТестWinamp DirectSound (43%)Winamp WaveOut (45%)foobar2000 DS 16-bit (-7.50dB)
Динамический диапазон, дБ (А): 94.1 93.4 94.1
Гармонические искажения, %: 0.0012 0.0010 0.0012
Интермодуляционные искажения + шум, %: 0.0057 0.0058 0.0057

 

Динамический диапазонДинамический диапазон, Winamp DirectSound и WaveOut, foobar2000 DS 16-bit, -7 дБ

 

Нелинейные искажения + шумНелинейные искажения + шум, Winamp DirectSound и WaveOut, foobar2000 DS 16-bit, -7 дБ

 

Интермодуляционные искаженияИнтермодуляционные искажения, Winamp DirectSound и WaveOut, foobar2000 DS 16-bit, -7 дБ

 

Результаты в DirectSound обоих плееров вновь совпали. А Winamp WaveOut показал ещё большее отличие. Теперь уже можно утверждать, что, похоже, Питер Павловски (Peter Pawlowski), отделившись в 2002-м году от команды разработчиков Winamp и начав работу по созданию проигрывателя foobar2000, не стал изобретать велосипед, а применил для регулировки громкости при выводе через DirectSound тот же алгоритм. Что касается WaveOut в Winamp, для него, судя по всему, применяется несколько иной алгоритм расчётов, но в целом дающий качественно близкий результат.

 

Тест четвёртый, вне конкурса. foobar2000 DS 16 и 24-bit, KS 16 и 32-bit, -7 дБ.

При подготовке к этому тесту обнаружился сюрприз. При выводе через DirectSound в предыдущих тестах, показания понижения уровня сигнала самим foobar2000 и индикатором RMAA имели расхождение в 0,5 дб, то есть RMAA показывал -7,0 дБ при установке в foobar громкости -7,50 дБ. Но с плагином для Kernel Streaming ситуация изменилась, -7,0 дБ в RMAA получались при -7,00 дБ в foobar. Пришлось опять подстраивать громкость в проигрывателе.

Тестfoobar2000 DS 16-bit (-7.50dB)foobar2000 DS 24-bit (-7.50dB)foobar2000 KS 16-bit (-7.00dB)foobar2000 KS 32-bit (-7.00dB)
Динамический диапазон, дБ (А): 94.1 97.8 93.5 97.8
Гармонические искажения, %: 0.0012 0.0004 0.0012 0.0004
Интермодуляционные искажения + шум, %: 0.0057 0.0035 0.0057 0.0035

 

Динамический диапазонДинамический диапазон, foobar2000 DS 16 и 24-bit, KS 16 и 32-bit, -7 дБ

 

Нелинейные искажения + шумНелинейные искажения + шум, foobar2000 DS 16 и 24-bit, KS 16 и 32-bit, -7 дБ

 

Интермодуляционные искаженияИнтермодуляционные искажения, foobar2000 DS 16 и 24-bit, KS 16 и 32-bit, -7 дБ

 

Зелёный и сиреневый графики практически совпали. Предыдущее исследование, foobar2000: Kernel Streaming против DirectSound, показало, что на максимальной громкости в проигрывателе и системном микшере включение 24-bit output на 16-битном источнике, а так же задействование Kernel Streaming ничего не даёт. Данный тест, где был задействован регулятор громкости проигрывателя, демонстрирует, что от вывода через Kernel Streaming по-прежнему мало что меняется (напомню, громкость в системном микшере была выставлена на максимум), а вот повышение разрядности оказалось очень даже кстати.

 

Выводы

Ну что ж, господа маньяки-аудиофилы и просто интересующиеся, пришло время подвести некоторые итоги. Выводы оформим в виде рекомендаций.

Если позволяет остальной звуковой тракт без особых потерь в удобстве – пользуйтесь аналоговой регулировкой громкости, выставив уровень в проигрывателе (и в системе) на максимум.

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

Включение в foobar2000 повышения разрядности вкупе с задействованием регулятора громкости позволило ему обойти Winamp. Так что если аналоговая регулировка не подходит, но хочется выжать максимум – ищите проигрыватель (или плагин) с аналогичной функцией.

Оцените материал: 
twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru rutvit.ru myspace.com blogger.com liveinternet.ru livejournal.ru memori.ru google.com yandex.ru
Комментариев: 7
  1. Все очень просто: ни один из протестированных плееров не делает положенный в данном случае дизеринг. При его наличии никаких нелинейных искажений бы не возникло.

  2. Алексей, если так, то есть повод продолжить тему. В этой статье сравнивались только два плеера в ограниченных условиях. У меня предложение: с Вас наводка на предположительно правильный плеер, с меня - продолжение.

    Кстати, для тех, кто не в курсе - Алексей принимал участие в разработке инструмента, с помощью которого выполнялись измерения для этой статьи, программы RightMark Audio Analyzer.

  3. На форуме сайта www.vegalab.ru пользователь Shim прокомментировал эту статью. Мой расширенный ответ здесь.

  4. Отличнейшая статья, позволяющая при прочтении задуматься, насколько ты болен....... )

  5. DirectSound SSRC - данный плагин прекратил мои поиски идеального проигрывателя :)

    Звуковуха старая, но еще может. Creative Audigy LS, 24bit, 192kHz, драйвера какие-то тюнинговые, превращают её в Creative X-Fi, в настройках драйвера используется 24-х битный конвертер вместо 16-ти битного. На мой слух всё звучит более чем.

  6. При попытках регулировать громкость в фуубаре,

    - при использовании настоящего аппаратно-программного asio для отправки на внешний 32битный usb-аудио интерфейс -

    звук превращается в треск-искажения.

    В режиме принудительных 24 бит вывода - периодически пропадает то в правом, то в левом канале.

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

    Мерять всё это бессмысленно. Эффект налицо.

    Такая регулировка громкости - уничтожение звука в корне.

    А сама статья не учитывает и имеет множество пробелов по условиям эксперимента - как аппаратным и драйверным, так и программным.

    _

    DS вывод звука - это вывод с микшера windows в той битности и частоте, которые заданы в настройках аудио-устройства по-умолчанию и с теми эффектами, которые там активированы. если там задано 16-48, то и на выходе будет 16-48. Сделано это по объективной причине. Аудио-устройства не способны физически одновременно обрабатывать разные потоки данных.

    Обходят микшер и блокируют его совершенно точно - Asio и Wasapi. Притом asio это аппаратно-программный интерфейс, а wasapi это примерно то же, что asio4all - программный интерфейс, работающий с драйвером, а не с железом. И потому wasapi звучит хуже. KS вывод оставляет много вопросов, и находится где-то посередине между asio и wasapi.

    Asio разумеется ближе всех к железу, потому что реализован не только на программном, но и на аппаратном уровне, и настройки asio это именно настройки интерфейсов, реализованных аппаратно. Исключение - звуковые карты, где asio реализован часто программно.

    В чем ошибка фуубара: не изобретали бы велосипед, а прикрутили регулировку громкости к уже имеющейся или в драйвере, или в микшере, как это делают в других проигрывателях и не имеют никаких проблем.

  7. Alexye, всё-таки статья старая и решала конкретную задачу. Я поспорил тогда (больше шести лет назад уже) на форуме 3DNews в разделе Мультимедия с одним человеком, и сделал этот эксперимент. Не думаю, что сейчас вообще есть смысл её комментировать, "концепция поменялась". :)

Оставить комментарий

Отправка комментария без регистрации. Комментарий публикуется после проверки.

Имя и сайт используются только при регистрации

Комментарий с авторизацией. Также можно сразу зарегистрироваться одновременно с первым комментарием. Для регистрации потребуется указать адрес электронной почты и придумать пароль, на электронную почту придет письмо с дальнейшей инструкцией по завершению регистрации. Комментарий публикуется после проверки.

(обязательно)