Не так давно я проводил исследование звукового тракта AIMP3 (v3.50), в ходе которого были выявлены некоторые значимые недостатки. На днях вышла новая версия плеера, содержащая в себе несколько улучшений звукового движка, которые должны разрешить те самые обнаруженные мною проблемы с качеством обработки и воспроизведения.
В этой статье я проведу исследование новой версии движка и подытожу, какие из проблем были решены.
Напомню, мною были обнаружены следующие недостатки: 1. Декодирование lossy в формате 16 бит с фиксированной точкой исключало возможность избежания клиппинга, а также сужало динамический диапазон hi-res записей.
2. Ресемплинг низкого качества, который трудно обойти (выходная частота задаётся для всего материала, вывод с исходной частотой дискретизации невозможен).
3. Отсутствие дезеринга при понижении разрядности исключает качественное воспроизведение hi-res материала на 16-битных картах.
4. Примитивный неконфигурируемый алгоритм апмикса.
5. Вывод в режиме WASAPI Shared с фиксированной точкой исключает возможность использования limiter APO.
А теперь последовательно проверим наличие этих проблем в новой версии.
Для начала зайдем в настройки воспроизведения:
Здесь мы установим вывод через ASIO с частотой 44100 Гц. Разрядность автоматически устанавливается драйвером в 32 бит (фикс. точка).
Здесь мы уже видим новые настройки — дезеринг и антиклиппинг. Пока мы их включать не будем.
Декодирование lossy
Для проверки предотвращения клиппинга я пользуюсь специальным MP3 файлом, специально усиленным до + 6 dBFS, благодаря чему наличие клиппинга можно определять на слух. Так как сейчас у нас все обработчики отключены и вывод происходит в формате с фиксированной точкой, при его воспроизведении наблюдается глубокий клиппинг — так и должно быть.
Теперь давайте включим вывод WASAPI. Клиппинг остался. Это говорит, что аудио продолжает выводиться с фиксированной точкой. Кстати, в обзоре AIMP я упоминал, что в foobar2000 существует вывод WASAPI Shared, автоматически выбирающий формат 32-bit float. Это не так, на самом деле DS — это всё тот же DirectSound вывод, просто для Windows Vista и более новых ОС разработчик прописал фиксированный формат вывода с плавающей точкой (т.к. Windows Audio Session его поддерживает вне зависимости от звуковой карты). Насколько реально сделать вывод с плавающей точкой при использовании WASAPI, мне выяснить так и не удалось, но смысл использовать этот вывод в AIMP всё же есть. При использовании WWASAPI Shared плеер запрашивает значение выходной частоты из параметров устройства, и затем конвертирует в неё звук с помощью своего ресемплера. Это помогает избежать двойного ресемлпирования — плеером и resampler MFT. С другой стороны, если всё же нужен вывод с плавающей точкой, можно воспользоваться режимом DirectSound и установить разрядность вручную. Что мы сейчас и сделаем
Теперь отчетливо слышно, что клиппинг пропал — всё благодаря ограничителю Windows Audio Session (limiter APO). Кроме того, этот факт также говорит, что декодирование MP3 выполняется теперь с плавающей точкой. Также с плавающей точкой работают и все эффекты, например эквалайзер.
Этот же формат используется и другими декодерами.
Теперь проверим другие способы предотвращения клиппинга. Например, ReplayGain.
ReplayGain также прекрасно справился с клиппингом, однако огорчает отсутствие настройки apply gain/prevent clipping according to peak, как в foobar2000. Т.е. плеер просто выполняет усиление/ослабление до стандартного уровня громкости, причем в результате пики обычно оказываются намного ниже максимума, что приводит к потере SNR (соотношения сигнал/шум).
И еще у нас появилась интересная опция «антиклиппинг», Давайте её исследуем.
Действительно, при включении этой опции клиппинг мгновенно пропадает. Прослушав записи с широким динамическим диапазоном, я выяснил, что эта опция представляет себе ограничитель наподобие Advanced Limiter в foobar2000. Чтобы определить качество лимитера, я воспользуюсь специальным сигналом. Для его создания я генерирую сигнал с частотой 60 Гц, затем модулирую его сигналом с частотой 1 Гц и фильтрую НЧ фильтром все высшие гармоники. На выходе получается что-то вроде 60-герцовых биений с периодом в 1 с. Затем уровень сигнала завышается до + 6 dBFS и всё это сохраняется в формате с плавающей точкой.
Итак, если воспроизвести этот сигнал в foobar2000 с включенным Advaned Limiter'ом, мы услышим искажения. Их спектр располагается в области высоких частот и состоит из кратных нечетных гармоник. Для сравнения — вот спектр исходного тестового сигнала:
А вот прошедшего через Advanced Limiter:
Теперь смотрим на спектр, который даёт нам limiter APO:
И, наконец, антиклиппинг AIMP3:
В итоге мы имеем значительные слышимые искажения у Advanced Limiter, чуть меньшие искажения у антиклиппинга, и хорошую прозрачную компрессию у limiter APO. Скорее всего искажения для лимитеров foobar2000 и AIMP обусловлены не совсем правильно выбранным временем атаки/затухания. Впрочем, вероятность клиппинга глубиной 6 dBFS в реальности стремится к нулю, а для клиппинга возникающего в том же MP3 эти DSP можно спокойно использовать. С другой стороны, если вы погорячитесь с уровнем эквалайзера, этот лимитер не сможет в полной мере спасти звук от искажения.
Да, и еще одна хорошая новость связанная с введением формата 32-bit float. Теперь клиппинг можно устранить простым снижением громкости в плеере.
И напоследок в этой части обзора я хотел бы произвести сравнение MP3 декодеров AIMP3 и foobar2000:
Оба плеера дали одинаково качественный результат, с сохранением 24-битного динамического диапазона.
Ресемплинг
Мне не удалось выяснить, какой алгоритм ресемплинга был использован в предыдущих версиях (в наборе библиотек BASS я его не нашел), но теперь автор перешел на SoX, являющийся одним из современных качественных и в то же время быстрых алгоритмов.
По умолчанию регулятор качества ресемплинга установлен на положение «выше среднего». Давайте проверим, что у нас получится в результате преобразования 44.1->96 kHz.
Спектрограмма достойная. Давайте посмотрим на график искажений:
Качество более чем достойное. Вне всяких сомнений. Вопрос снимается.
Дезеринг
Вопрос дезеринга не такой животрепещущий, как вопрос декодирования, но всё же важный. Кстати говоря, куда важнее наличие дезеринга в конвертере — он может пригодиться например при записи hi-res записей на Audio CD (т.е. при подготовке материала для записи). Однако в конвертере данной опции пока не предусмотрено. Ну что ж, давайте посмотрим, как работает дезеринг при воспроизведении. Для этого установим режим WASAPI Exclusive и разрядность 16 бит. Затем включим дезеринг и воспроизведем 24-битный тестовый сигнал.
foobar2000 dithering
AIMP 3.55 dithering
Факт наличия дезеринга у AIMP зафиксирован. Конечно такой «красивый» нойз шейпинг, как у foobar2000, не используется, но 2 дБ/октаву — (да и простого дезеринга) вполне достаточно, это уж точно лучше, чем ничего.
Итог
Итак, автору AIMP определенно удалось исправить наиболее значительные недочеты предыдущих версий. Декодирование lossy теперь выполняется с надлежащим качеством, весь звуковой тракт плеера работает в формате с плавающей точкой, а ресемплинг выполняется с использованием высококачественного алгоритма SoX.
Таким образом AIMP3 уверенно догоняет по возможностям звуковоспроизведения foobar2000. Конечно, есть отдельные моменты — отсутствие тщательного нойз шейпинга, ограниченные возможности преобразования каналов. Но это всё мелочи, да и скорее всего эти недочеты будут исправлены в дальнейшем. В любом случае, уже сейчас я могу рекомендовать этот плеер для качественного воспроизведения как lossless, так и lossy источников.
[Обсудить на форуме]
Информация от спонсора
TermoStok: оборудования для отопления и водоснабжения. Здесь Вы можете по умеренным ценам приобрести качественные полипропиленовые трубы SPK (Стамбульский район Шишли) производства Турции. Покупая трубы SPK (СПК) полипропиленовые армированные, Вы не только приобретаете качественную продукцию, но также и хорошо экономите средства.
|