AC3Filter - это DirectShow фильтр для декодирования AC3.
Возможность воспроизведения .AVI с аудио-треками в формате AC3 и MPEG2
(DVD). Распространяется абсолютно бесплатно, то есть - даром (FREEWARE).
Основные особенности:
Полная поддержка стандарта AC3.
Декодирование MPEG2 PES потоков.
Поддержка многоканального вывода (Win2k/XP).
Поддержка LFE.
Поддержка сжатия динамического диапазона (Dynamic
Range Compression, DRC).
Контроль переполнения и автоматическая регулировка усиления.
Управление уровнями усиления каналов.
Информация о потоке (формат каналов, битрейт,
сэмпл-рейт, частота объединения и максимальная частота).
Ничего не требуется - только зарегистрировать. Из коммандной
строки: x:\somedir\> regsvr32 ac3filter.ax
Для особо ленивых (вроде меня :) - коммандный файл установки
install.bat. Он скопирует фильтр в директорию System32
(System для Win9x) и зарегистрирует его.
Удаление.
Если фильтр был зарегистрирован вручную, то дерегистрировать
из коммандной строки: x:\somedir\> regsvr32 ac3filter.ax /u
Для особо ленивых (вроде меня :) - коммандный файл для деинсталляции
uninstall.bat - дерегистрирует и удаляет фильтр из директории
System32 (System для Win9x).
Настройка.
При запуске фильтр сначала определяет конфигурацию
колонок, для корректного даунмикса. Используются настройки из
Control Panel->Sounds and Multimedia->Audio->Sound Playback->Advanced->Speaker
Setup. (Для владельцев SB Live! - при изменении конфигурации
колонок в Surround Mixer'е изменения не всегда производятся в панели
управления - поэтому в настройки панели управления всегда полезно
посмотреть). Для Win9x и WinNT необходимо установить двухканальную
конфигурацию.
Использование.
Фильтр декодирует потоки ac3 полученные из .avi или
mpeg2 файлов. Если все нормально, то при открытии файла фильтр
должен появиться в списке используемых фильтров. Так, для Windows
Media Player 6.4 он вызывается через меню File->Properties->Advanced:
Первым в этом списке фильтров и находится ac3filter.
Выбрав его можно открыть окно свойств:
* Информация о потоке (Bitstream information).
Слева сверху - информация о потоке (bitstream information,
BSI).
Сhannels - конфигурация каналов в потоке в виде
передние_каналы/тыловые_каналы + индикация наличия низкочастотного
канала (канала низкочастотных эффектов, Low-Frequency Effects, LFE). В данном
примере - 3 передних, 2 тыловых канала и низкочастотный присутствует,
т.е. конфигурация 5.1.
Sample rate - частота дискретизации, кГц.
Bitrate - битрейт, bps.
Freq (coupl/high) - кГц, частота объединения
(coupling) и наивысшая частота. В ac3 начиная с определенной частоты
некоторые каналы (в большинстве случаев - все) объединяются в один
групповой канал и в таком виде сохраняются в потоке. Т.о. действительно
независимы каналы только в определенном частотном диапазоне - до частоты
объединения. Наивысшая частота - максимальная кодируемая частота, т.е.
частотный диапазон.
Frames/errors - количество декодированных пакетов,
количество ошибок в пакетах.
Слева снизу - настройка выходной конфигурации колонок.
Это - реально присутствующие колонки, куда будут микшироваться.
каналы ac3-потока. Чек-бокс Subwoofer - означает наличие отдельного
сабвуфера (канала .1). При его наличии на него направляется канал LFE,
при отсутствии - LFE микшируется в каждый канал. (В будущем планируется
сделать поддержку перенаправления низких частот всех каналов на сабвуфер).
Выходная конфигурация по умолчанию устанавливается
из настроек Windows (см. Настройки). Поменять
выходную конфигурацию 'на месте' можно только при выполнении определенных
условий. Во-первых проигрывание файла должно быть остановлено (не
пауза!). Во-вторых все промежуточные аудио фильтры должны поддерживать
динамическое реконфигурирование (изменение формата без полной перестройки
графа). То есть если конфигурация колонок в самом фильтре не работает
то необходимо менять ее в настройках Windows.
Чаще всего проблемы возникают из-за наличия фильтра
mmswitch (тот, который позволяет смотреть .avi (и DVD) с
несколькими аудио-треками и переключать их (в основном для мультиязычных
фильмов). Если Вы в основном смотрите DVD, то лучше использовать
mpeg2 парсер, который сам умеет переключать аудио-потоки (например, стандартный
MPEG2 Splitter) а mmswitsh дерегистрировать - кроме всего
прочего спадет нагрузка на процессор. Дело в том, что если mpeg2 парсер
не поддерживает переключения потоков (Elecard, например) то
для каждого аудио-потока создается по собственной цепочке декодирования,
все они будут работать паралельно и нагружать процессор, несмотря на
то, что на слышен будет только один.
Если же наличие mmswitch необходимо, то
возможны следующие варианты:
Все аудио потоки - ac3. mmswitch можно
использовать при любой конфигурации колонок. Переключение на лету
работать не будет - необходимо установить конфигурацию заранее.
Первый поток - ac3, второй - mp3 (к примеру,
в принципе любой немногоканальный). Если нужен ac3 - то все нормально
- заранее устанавливаем нужное количество колонок и слушаем. Если
нужен mp3, то при переключении на mp3 звук будет полностью испорчен
- mmswitch не меняет формата и двухканальный звук будет востпроизводиться
как многоканальный. Поэтому если нужен именно mp3 то в этом случае
необходимо установить стерео-режим перед просмотром.
Первый поток - mp3, второй - ac3. В этом случае
проблем не будет с mp3, а ac3 придется слушать только в стерео (конфигурацию
колонок необходимо выставить заранее!).
ac3 потоков нет - проблем нет тоже :).
* Уровни усиления (Gains).
Снизу посередине находятся уровни усиления.
Master и Gain отвечают за общий уровень усиления. Master задает желаемый
уровень. Если текущий уровень звука слишком высок и происходит переполнение
то реальный уровень усиления в этом случае автоматически снижается. Если
уровень звука впоследствии понижается, то уровень усиления постепенно возврящается
к прежнему значению. Скорость изменения подобрана так, чтобы не происходило
резкого и неприятного на слух изменения громкости. Текущий уровень усиления
отображается индикатором Gain. Устанавливая уровень Master текущий уровень
Gain немедленно устанавливается равным Master.
Уровни каналов:
LFE - уровень канала низкочастотных эффектов.
Voice - уровень центрального канала (канала диалогов). При даунмиксе
- уровень микширования (берется из BSI).
Surround - уровень тыловых каналов. При даунмиксе - уровень микширования
(берется из BSI).
BSI Lock - устанавливает уровень на значение, заданное стандартом.
Normalize - нормализация уровней при микшировании. В этом случае при
повышении уровня одного из каналов уровни других могут понижаться. Однако
гарантировано, что при микшировании не произойдет переполнения.
Большинство фильмов уже нормализованы так, что дополнительное усиление
не требуется. Поэтому по умолчанию устанавиливается режим, наиболее соответствующий
стандартному - Master = 0dB, Normalize = да, LFE = 0dB, значения уровнией
Voice и Surround - берутся из потока.
* Сжатие динамического диапазона (DRC).
По сути, ac3 - логарифмический формат, сэмплы хранятся
в формате экспоненты и мантиссы. В пересчете на нормальную
битность один сэмпл может занимать до 40бит (чисто теоретически)
или до 24бит (норма), что обеспечивает огромный динамический диапазон
(хотя, как любил говорить великий дедушка Эйнштейн - все хорошее в этом
мире относительно :-). Это означает, что тихая запись с низким уровнем
при воспроизведении на 16-битной звуковой карте будет совершенно
не слышна или воспроизводиться с очень низким абсолютным уровнем сигнала
(=> большими искажениями). Для решения этой проблемы в ac3 существует
понятие сжатия динамического диапазона. Идея заключается в том, чтобы
при воспроизведении тихого звука с низким уровнем поднимать уровень до
преобразования сэмпла в 16-битную форму (для громких звуков - соответственно,
наоборот). В ac3 потоке передаются специальные маркеры, насколько изменять
текущий уровень. Эти маркеры записываются режисером на стадии мастеринга,
потому гарантируют достаточно высокое качество. Индикатор DRC level (Dynamic
Range Compression level) отображает этот уровень. При помощи чекбокса
Use DRC можно включать и выключать использование сжатия динамического
диапазона. (конечно, все вышесказанное только приблизительное и грубое
описание проблемы).
Уровень DRC Power отвечает за то, насколько уровень сжатия динамического
диапазона влияет на выходную громкость. При увеличении этого параметра тихие
звуки будут подчеркиваться еще больше, а громкие - еще более затеняться. При
уменьшении DRC Power влияние сжатия динамического диапазона будет уменьшаться.
Нулевое значение DRC Power означает нормальное применение сжатия динамического
диапазона.
* Загрузка процессора (CPU usage).
Индикатор показывает загрузку процессора декодером.
В эту нагрузку также включается вся последующая обработка (если
есть) до непосредственного воспроизведения.
* Индикаторы уровней (Levels).
Правая часть - индикация уровней. Необходимо отметить,
что уровни здесь - логарифмические. По входным уровням хорошо видна
реальная конфигурация каналов в потоке. Так, в приведенном
примере хорошо видно, что формат потока выставлен как 5.1, однако
фактически низкочастотный канал отсутствует.
Разное.
Все написанное в данном документе является личным мнением
автора. Который вполне может честно заблуждаться. Посему возможны
очепятки, баги и фактические несоответствия. Обо всем этом просьба незамедлительно
сообщать.
Хочется отдельно поблагодарить Марселло Мота (Marcello Mota)
за моральную поддержку и огромную помощь в тяжком деле тестирования и отладки.
Фильтр был основан на OpenSource библиотеке LibA/52 (http://liba52.sourceforge.net)
и во многом наследует его свойства. Многое было переписано, но
основные положительные свойства я старался сохранить. Можно отметить
очень высокое качество этой библиотеки, и весьма последовательное
следование стандарту (http://www.atsc.org/standards/a_52a.pdf).
Для воспроизведения многоканальных форматов в соответствии
с рекоммендациями Microsoft (http://www.microsoft.com/hwdev/tech/audio/multichaudP.asp)
используется формат WAVE_FORMAT_EXTENSIBLE. Теоретически возможна
работа с любой версией Windows, но мне так и не удалось заставить работать
Win98/SB Live! больше чем в стерео режиме.
Условия распространения.
Даный программный продукт распространяется совершенно
свободно. Строжайше разрешено устанавливать на произвольное количество
машин, записывать неограниченное количество копий на CD и другие носители
информации, а также всячески способствовать распространению сего опуса.
Разрешается декомпилировать и проводить реверс-инжиниринг (хотя, наверное,
проще связаться со мной и попросить исходники).
Даный программный продукт распространяется исключительно
в надежде, что он будет полезен, однако безо
всяких гарантий работы на конкретном оборудовании, соответствия
каким-либо условиям, стандартам или нуждам. Я не обязуюсь обеспечивать круглосуточную
(и вообще, какую либо) поддержку, исправление ошибок, восстановление
потерянных из-за работы программы данных, отвечать за испорченное железо,
а также за потерянное рабочее вермя. Я не
несу ответственности за легальность воспроизводимой при помощи данной
программы мультимедиа-продукции.
Написать автору гневное послание
... можно здесь. Только, желательно,
подкреплять свой праведный гнев фактическим материалом:
Железо (желательно, как минимум, мат.плата, процессор
и звуковая карта)
Версия Windows
Установленные драйвера звуковой карты
Версия DirectX.
Как я уже говорил, гарантировать
немедленный ответ и исправление всего сразу я не могу (я все-таки
иногда люблю поспать по ночам), однако буду благодарен за любую помощь
в выковыривании багов, ценные предложения, и просто выражение благодарности
:).
Если Вы - программист и у Вас есть множество гениальных
идей по развитию сего творения (или другого, но не менее гениального
:-) - обращайтесь ко мне за исходниками.
+ Исправлен баг, приводящий к зависанию на испорченных PES-потоках.
+ Увеличена громкость.
+ Добавлен контроль переполнения и автоматическая регулировка усиления.
+ Добавлено управление уровнем усиления.
+ Добавлено управление мощностью сжатия динамического диапазона.
0.51b - 18.07.2002
+ Исправлен баг приводящий к краху на некоторых ac3.
v0.5b - 07.07.2002
* Полностью переписан код декодера, а заодно и самого
фильтра.
+ Добавлена поддержка PES.
+ Уровни LFE, Surround и Voice по умолчанию беруться
из BSI.
+ Индикатор загрузки процессора.
+ Индикаторы входных и выходных уровней.
+ Индикатор уровня DRC.
+ Добавлены несколько полей с информацией о потоке.
+ Исправлена куча всякой мелочи.
v0.4a - 23.06.2002
+ Добавлена поддержка LFE и регулятор усиления LFE.
+ Добавлены кнопки сброса регуляторов до значений заданных
в BSI
+ Формат стерео теперь передается в стандартном формате,
т.о. возможна
работа фильтра с системами не поддерживающими многоколоночный
формат (Win9x/WinNT).
+ Добавлена поддержка декодирования DVD
+ Исправлена проблема с синхронизацией
+ Добавлена опция отлючения сжатия динамического диапазона
и индикатор
текущего уровня.
v0.3a - 03.04.2002
+ Сделаны регулировки балансов громкости Voice (центральный
канал) и
Surround (задние колонки).
+ Сделано изменение конфигурации колонок. Работает только
если
промежуточными фильтрами поддерживается динамическое
реконфигурирование
и только в режиме остановки (не паузы!).
v0.2a - 01.04.2002
* Код библиотеки LibA52 переписан для многопоточного
исполнения,
соответственно появилась возможность создавать несколько
экзкмпляров
фильтра для многоязычных фильмов.
+ Добавлено окно информации (настройки пока не работают)