ГОСТ Р 54713-2011
НАЦИОНАЛЬНЫЙ СТАНДАРТ РОССИЙСКОЙ ФЕДЕРАЦИИ
Звуковое вещание цифровое
КОДИРОВАНИЕ СИГНАЛОВ ЗВУКОВОГО ВЕЩАНИЯ С СОКРАЩЕНИЕМ ИЗБЫТОЧНОСТИ ДЛЯ ПЕРЕДАЧИ ПО ЦИФРОВЫМ КАНАЛАМ СВЯЗИ.
MPEG-2, ЧАСТЬ VII: УСОВЕРШЕНСТВОВАННОЕ КОДИРОВАНИЕ ЗВУКА (MPEG-2 AAC)
Sound broadcasting digital. Coding of signals of a sound broadcasting with reduction of redundancy for transfer on digital communication channels. MPEG-2, part VII: Advanced Audio Coding (MPEG-2 AAC)
ОКС 33.170
Дата введения 2012-12-01
Предисловие
Цели и принципы стандартизации в Российской Федерации установлены Федеральным законом от 27 декабря 2002 г. N 184-ФЗ "О техническом регулировании", а правила применения национальных стандартов Российской Федерации - ГОСТ Р 1.0-2004 "Стандартизация в Российской Федерации. Основные положения"
Сведения о стандарте
1 РАЗРАБОТАН Санкт-Петербургским филиалом Центрального научно-исследовательского института связи "Ленинградское отделение" (ФГУП ЛО ЦНИИС)
2 ВНЕСЕН Техническим комитетом по стандартизации ТК 480 "Связь"
3 УТВЕРЖДЕН И ВВЕДЕН В ДЕЙСТВИЕ Приказом Федерального агентства по техническому регулированию и метрологии от 13 декабря 2011 г. N 874-ст
4 Настоящий стандарт разработан с учетом основных нормативных положений международного стандарта ИСО/МЭК 13818-7:2006* Информационные технологии -Универсальное кодирование движущихся изображений и сопутствующего звука - Часть 7: Усовершенствованное кодирование звука (ААС) (ISO/IEC 13818-7:2006 Information technology - Generic coding of moving pictures and associated audio information - Part 7: Advanced Audio Coding (AAC) [1]
5 ВВЕДЕН ВПЕРВЫЕ
Информация об изменениях к настоящему стандарту публикуется в ежегодно издаваемом информационном указателе "Национальные стандарты", а текст изменений и поправок - в ежемесячно издаваемых информационных указателях "Национальные стандарты". В случае пересмотра (замены) или отмены настоящего стандарта соответствующее уведомление будет опубликовано в ежемесячно издаваемом информационном указателе "Национальные стандарты". Соответствующая информация, уведомление и тексты размещаются также в информационной системе общего пользования - на официальном сайте Федерального агентства по техническому регулированию и метрологии в сети Интернет
1 Область применения
1.1 Цель разработки стандарта
Настоящий стандарт позволяет получить более высокое качество многоканального звучания. С его помощью достигается "неразличимое" с оригиналом качество по шкале ITU-R согласно [2] на скоростях передачи данных 320 Кбит/с для пяти звуковых сигналов с полной пропускной способностью.
Действие настоящего стандарта распространяется на услуги местной, внутризоновой, междугородной и международной сети звукового вещания, независимо от используемой сетевой технологии, что способствует обеспечению целостности сетей звукового вещания, устойчивости работы сети, выполнению норм на основные электрические параметры при разработке и проектированию каналообразующей аппаратуры звукового вещания (ГОСТ Р 52742 и ГОСТ Р 53537).
Показатели, определенные настоящим стандартом, являются базовыми для профессиональной и бытовой аппаратуры - проигрывателей компакт-дисков, усилителей сигналов звуковой частоты и другого оборудования класса Hi-Fi.
Универсальная и совместимая многоканальная аудиосистема применима для спутникового и наземного телевизионного вещания, цифрового звукового вещания (наземного и спутникового), так же как и для других носителей, например:
CATV - кабельное телевидение;
CDAD - кабельное цифровое звуковое вещание;
DAB - широковещательная передача цифрового звукового сигнала;
DVD - цифровой универсальный диск;
ENG - электронные новости (включая новости по спутнику);
HDTV - телевидение высокой четкости;
IPC - межличностное общение (видеоконференция, видеотелефон и т.д.);
ISM - интерактивные носители (оптические диски и т.д.).
Вход кодера и выход декодера совместимы со стандартами импульснокодовой модуляции (ИКМ), такими как ГОСТ 28376, ГОСТ 27667 и др.
1.2 Условия применения стандарта
1.2.1 Спецификация инструментов MPEG-2 ААС
В процессе декодирования ААС используется ряд необходимых и опциональных инструментов. В таблице 1 перечислены инструменты и их статус (необходимые или опциональные). Необходимые инструменты обязательны в любом возможном профиле. Опциональные инструменты могут не использоваться в некоторых профилях.
Таблица 1 - Перечень инструментов декодера ААС
Предназначение | Статус |
Средство форматирования потока битов | Необходимый |
Прозрачное декодирование | Необходимый |
Обратное квантование | Необходимый |
Перемасштабирование | Необходимый |
M/S | Опциональный |
Предсказание | Опциональный |
Интенсивность | Опциональный |
Зависимое спаривание каналов | Опциональный |
TNS | Опциональный |
Банк фильтров/переключение окон | Необходимый |
Регулирование усиления | Опциональный |
Независимое спаривание каналов | Опциональный |
1.2.2 Назначение инструментов декодирования
Общая структура системы MPEG-2 ААС приведена на рисунках 1 и 2. В соответствии с таблицей 1 структура декодера состоит из необходимых и опциональных инструментов. Направление потока данных в этой схеме слева направо, сверху вниз. В задачи декодера входят обнаружение описания квантованных спектральных значений в потоке битов, декодирование квантованных значений и другой информации для восстановления, восстановление квантованных спектральных значений, обработка восстановленных спектральных значений соответствующими инструментами, активными для данного потока битов, с целью достигнуть исходного спектра входного звукового сигнала, и, наконец, преобразование спектральных значений во временные отсчеты, с (или без) дополнительного инструмента регулирования усиления. После начального восстановления и масштабирования восстановленных спектральных значений может применяться множество дополнительных инструментов, используемых для обеспечения более эффективного кодирования. Для каждого из дополнительных инструментов, которые работают в спектральном пространстве, предусмотрена опция отключения, и во всех случаях, когда обработка в спектральном пространстве не используется, входные спектральные значения поступают непосредственно на выход инструмента без изменений.
Рисунок 1 - Блок-схема кодера MPEG-2 ААС
Рисунок 2 - Блок-схема декодера MPEG-2 ААС
1.2.3 Вход и выход инструментов демультиплексирования
На вход инструмента демультиплексирования поступает поток битов MPEG-2 ААС. Демультиплексор разделяет поток данных MPEG-AAC на части, предзначенные для каждого инструмента, и предоставляет для каждого из инструментов информацию о потоке битов, относящуюся к этому инструменту.
На выходе инструмента демультиплексирования потока битов содержится:
- информация о разделении для прозрачного кодирования;
- прозрачно-кодированные спектральные значения;
- информация о M/S (опционально);
- информация о состоянии предсказывающего устройства (опционально);
- информация для управления intensity stereo и информация для управления спаренным каналом (опциональные);
- информация о временном формировании шума (TNS) (опционально);
- информация для управления банком фильтров;
- информация о регулировании усиления (опционально).
1.2.4 Инструмент прозрачного декодирования
Информация потока битов с демультиплексора поступает на инструмент прозрачного декодирования, который анализирует ее, декодирует коды Хаффмана и восстанавливает квантованные спектральные значения, а также кодированные с помощью кодов Хаффмана и ДИКМ масштабные коэффициенты.
На вход инструмента прозрачного декодирования поступают информация о разделении для прозрачного кодирования и прозрачно-кодированные спектральные значения.
Выход инструмента прозрачного декодирования содержит декодированное целочисленное представление масштабных коэффициентов и квантованные спектральные значения.
1.2.5 Инструмент деквантования
Квантованные спектральные сигналы поступают на вход инструмента деквантования, который преобразует целочисленные значения в восстановленные деквантованные спектральные значения. Этот деквантователь является неоднородным.
1.2.6 Инструмент перемасштабирования
Инструмент перемасштабирования преобразует целочисленное представление масштабных коэффициентов в их фактические значения и умножает восстановленные, деквантованные спектральные значения на соответствующие масштабные коэффициенты.
На вход инструмента перемасштабирования поступает декодированное целочисленное представление масштабных коэффициентов и восстановленные, деквантованные спектральные значения.
На выходе инструмента перемасштабирования содержатся масштабированные, деквантованные спектральные значения.
1.2.7 Инструмент M/S
На вход инструмента поступает информация о M/S (середина/сторона) и масштабированные, деквантованные спектральные значения, относящиеся к парам каналов. Инструмент M/S преобразует пары спектральных значений из M/S в L/R под управлением информации о M/S с целью улучшения кодирования.
На выходе инструмента M/S присутствуют масштабированные, деквантованные спектральные значения сигналов, относящиеся к парам каналов после декодирования M/S.
Следует учитывать, что масштабированные, деквантованные спектральные значения индивидуально кодированных каналов не обрабатываются блоком M/S и передаются непосредственно на выход инструмента M/S без изменений. Если инструмент M/S не является активным, все спектральные значения проходят через этот блок без изменений.
1.2.8 Инструмент предсказания
Этот инструмент обращает процесс предсказания, выполненный в кодере. Обратный процесс предсказания добавляет избыточность, которая была устранена инструментом предсказания в кодере, под управлением информации о состоянии предсказывающего устройства. Данный инструмент представляет собой обратное адаптивное предсказывающее устройство второго порядка. На вход инструмента предсказания поступают информация о состоянии предсказывающего устройства и масштабированные, деквантованные спектральные значения. На выходе инструмента предсказания - масштабированные, деквантованные спектральные значения после предсказания.
Если предсказание не используется, масштабированные, деквантованные спектральные значения поступают непосредственно на выход блока без изменений.
1.2.9 Инструмент intensity stereo
Данный инструмент реализует декодирование intensity stereo спектральных пар. На вход инструмента intensity stereo поступают деквантованные спектральные значения и управляющая информация intensity stereo.
На выходе инструмента intensity stereo - деквантованные спектральные значения после декодирования канала интенсивности.
Масштабированные, деквантованные спектральные значения индивидуально кодированных каналов поступают непосредственно на выход этого инструмента без изменений, если intensity stereo не используется. Инструмент intensity stereo и инструмент M/S располагаются так, чтобы работа M/S и intensity stereo была взаимоисключающей для любой полосы масштабных коэффициентов и группы одной пары спектральных значений.
1.2.10 Инструмент спаривания для зависимо коммутируемых каналов
Инструмент добавляет соответствующие данные от зависимо коммутируемых каналов к спектральным значениям в соответствии с информацией для управления спариванием каналов. На входе инструмента спаривания - деквантованные спектральные значения и информация для управления спариванием каналов. На выходе инструмента - деквантованные спектральные значения вместе с зависимо коммутируемыми каналами.
Масштабированные, деквантованные спектральные значения поступают непосредственно на выход этого инструмента без изменений, если спаривание каналов не применяется. В зависимости от информации для управления спариванием каналов, зависимо коммутируемые каналы могут быть спарены до или после обработки TNS.
1.2.11 Инструмент спаривания для независимо коммутируемых каналов
Инструмент добавляет соответствующие данные от независимо коммутируемых каналов к временному сигналу в соответствии с информацией для управления спариванием каналов. На вход инструмента спаривания поступает временной сигнал, аналогичный сигналу на выходе набора фильтров и информация для управления спариванием каналов.
На выходе инструмента - временной сигнал вместе с независимо коммутируемыми каналами.
Временной сигнал поступает непосредственно на выход этого инструмента без изменений, если спаривание каналов не используется.
1.2.12 Инструмент временного формирования шума (TNS)
С помощью данного инструмента реализуется управление точной временной структурой шума кодирования. В кодере в результате процесса TNS сглаживается временная огибающая сигнала, к которому это было применено. В декодере происходит обратный процесс для восстановения фактической временной огибащей (их) под управлением информации о TNS. Это выполняется фильтрацией частей спектральных данных. На входе инструмента TNS присутствуют деквантованные спектральные значения и информация о TNS, на выходе - деквантованные спектральные значения.
Если этот блок отключен, деквантованные спектральные значения поступают на его выход без изменений.
1.2.13 Банк фильтров/инструмент переключения окон
Банк фильтров реализует обратное спектральное преобразование. Обратное дискретное косинусное преобразование (ОДКП) используется в качестве банка фильтров. ОДКП может поддерживать либо один набор из 128 или 1024, или четыре набора из 32 или 256 спектральных коэффициентов.
На вход банка фильтров поступают деквантованные спектральные значения и информация для управления банком фильтров, на выход(ы) банка фильтров - восстановленные временные отсчеты звукового сигнала(ов).
1.2.14 Инструмент регулирования усиления
При использовании данного инструмента осуществляется отдельное регулирование усиления временных отсчетов в каждой из четырех частотных полос, которые были получены регулированием усиления PQF-банка фильтров кодера. Далее инструмент собирает четыре частотных полосы и восстанавливает форму временного сигнала с помощью банка фильтров инструмента регулирования усиления. При этом на вход инструмента регулирования усиления поступают восстановленные временные отсчеты звукового сигнала(ов) и информация о регулировании усиления, а на выход(ы) инструмента регулирования усиления - восстановленные временные остчеты звукового сигнала(ов).
Если инструмент регулирования усиления не используется, восстановленные временные отсчеты звукового сигнала(ов) поступают непосредственно из банка фильтров на выходе декодера. Этот инструмент используется в профиле масштабируемой частоты дискретизации (SSR).
2 Нормативные ссылки
В настоящем стандарте использованы нормативные ссылки на следующие стандарты:
ГОСТ Р 52742-2007 Каналы и тракты звукового вещания. Типовые структуры. Основные параметры качества. Методы измерений
ГОСТ Р 53537-2009 Звуковое вещание. Основные электрические параметры каналов и трактов студийного качества (с полосой частот 20...20000 Гц)
ГОСТ 27667-88 Система цифровая звуковая "Компакт-диск". Параметры
ГОСТ 28376-89 Компакт-диск. Параметры и размеры.
Примечание - При пользовании настоящим стандартом целесообразно проверить действие ссылочных стандартов в информационной системе общего пользования - на официальном сайте Федерального агентства по техническому регулированию и метрологии в сети Интернет или по ежегодно издаваемому информационному указателю "Национальные стандарты", который опубликован по состоянию на 1 января текущего года, и по соответствующим ежемесячно издаваемым информационным указателям, опубликованным в текущем году. Если ссылочный стандарт заменен (изменен), то при пользовании настоящим стандартом следует руководствоваться заменяющим (измененным) стандартом. Если ссылочный стандарт отменен без замены, то положение, в котором дана ссылка на него, применяется в части, не затрагивающей эту ссылку.
3 Термины, определения, символы и сокращения
3.1 Термины и определения
основные звуковые каналы: Все каналы, представленные либо single_channel_element() (см. 6.2.1), либо channel_pair_element() (см. 6.2.1).
программа: Набор основных звуковых каналов, coupling_channel_element() (см. 6.2.1), lfe_channel_element() (см. 6.2.1) и сопутствующих потоков данных, требующих одновременного декодирования и воспроизведения.
Примечание - Программа может быть определена по умолчанию (см. 6.5.3.1 и 6.5.3.3) или указана program_config_element() (см. 6.5.3.2). Данные single_channel_element() (см. 6.2.1), channel_pair_element() (см. 6.2.1), coupling_channel_element(), lfe_channel_element() или канал передачи данных могут сопровождать одну или несколько программ в любом потоке битов.
синтаксический анализатор: Функциональный элемент декодера, который извлекает из кодированного потока битов серию битов, представляющих кодированные элементы.
спектральные коэффициенты: Дискретные значения в частотном пространстве на выходе набора фильтров анализа.
стерео избыточность: Часть стереофонического звукового сигнала обладает стерео избыточностью, если она не способствует пространственному восприятию сигнала.
число учитываемых каналов; NCC: Число каналов, представленных SCE элементами, независимо переключаемых ССЕ и СРЕ, т.е. единожды взятое количество SCE плюс единожды взятое количество независимо коммутируемых ССЕ плюс дважды взятое число СРЕ, в соответствии с соглашением о присвоении имен в декодерах и потоках битов MPEG-AAC, NCC = A+I.
Примечание - Число учитываемых каналов используется для получения требуемого размера входного буфера декодера (см. 6.2.2).
3.2 Символы и сокращения
Математические операторы, используемые в этом стандарте, аналогичны используемым в языке программирования С. Однако целочисленное деление с усечением и округление определены особым образом. Побитные операторы определяются с учетом представления чисел в дополнительном коде. Нумерация и счетчики циклов обычно начинаются с нуля.
3.2.1 Арифметические операторы
+ - Сложение.
- - Вычитание (как бинарный оператор) или отрицание (как унарный оператор).
++ - Инкремент.
- - Декремент.
* - Умножение.
/ - Целочисленное деление с округлением к меньшему по модулю целому. Например, 7/4 и -7/4 округляются до 1, а -7/4 и 7/-4 округляются до -1.
// - Целочисленное деление с округлением к ближайшему целому числу. Полуцелые числа округляются в сторону ближайшего большего по модулю числа, если не указано другое. Например, 3//2 округляется до 2, а -3//2 округляется до -2.
| | - Абсолютное значение. | | х | = х, когда х> 0 |
| | х | = 0, когда х == 0 |
| | х | = -х, когда х <0 |
% - Деление с остатком. Операция определена только для положительных чисел.
Sign ( ) - Sign (х) = 1, когда х> 0
| |
| Sign (х) = 0, когда х == 0 |
| Sign (х) = -1, когда х <0 |
NINT ( ) - Округление до ближайшего целого. Возвращает самое близкое к вещественному аргументу целочисленное значение. Полуцелые числа округляются в сторону от нуля.
sin - Синус.
cos - Косинус.
ехр - Экспонента.
3.2.2 Логические операторы
|| - Логическое ИЛИ.
&& - Логическое И.
! -Логическое НЕТ.
3.2.3 Операторы сравнения
> - Больше
> = - Больше или равно
< - Меньше
<= - Меньше или равно
== - Равно
! = - Не равно
max [,...,] - максимальное значение.
min [,...,] - минимальное значение.
3.2.4 Побитные операторы
Использование побитных операций подразумевает представление чисел в дополнительном коде.
& - Побитное И.
| - Побитное ИЛИ.
>> - Сдвиг вправо со знаком.
<< - Сдвиг влево с нулевым заполнением.
3.2.5 Присвоение
= - Оператор присвоения.
3.2.6 Мнемоники
Следующие мнемоники подлежат определению для описания различных типов данных, используемых в кодированном потоке битов.
bslbf | - | Битовая строка, младший бит слева. Битовые строки пишутся как строка единиц и нулей внутри одинарных кавычек, например ’1000 0001’. Пробелы внутри битовой строки вводятся для удобства чтения и не имеют никакого значения. |
L, С, R, LS, RS - Аудиосигналы: левый, центральный, правый, левый окружения, правый окружения. | ||
M/S - Середина/сторона и . | ||
rpchof | - | Коэффициенты остатка от деления на порождающий полином, сначала следует коэффициент высшего порядка. (Аудио). |
uimsbf | - | Целое число без знака, старший бит первый. |
vlclbf | - | Код с переменной длиной слова, левый бит первый, где левый относится к порядку, в котором пишутся коды с переменной длиной. |
window | - | Номер фактического временного слота в случае block_type == 2, 0 <= window <= 2. (Аудио). |
В многобайтовых словах старший байт является первым.
3.2.7 Константы
e - 2,71828182845...
3.3 Метод описания синтаксиса потока битов
Поток битов на входе декодера описывается в разделе 4. Каждый элемент данных выделен жирным.
При описании элемента указываются
- его имя;
- мнемоника для его типа и порядок передачи.
Действие, вызванное декодируемым элементом данных в потоке битов, зависит от значения того элемента данных и на элементах данных, ранее декодируемых. Декодирование элементов данных и определение параметров состояния, используемых в их декодировании, описываются в пунктах, следующих за описанием синтаксиса. Следующие конструкции используются, чтобы выразить условия, когда элементы данных присутствуют, и указаны обычным шрифтом.
Следует обратить внимание, что в этом синтаксисе используется принятое в языке С соглашение о том, что переменная или выражение, возвращающие ненулевое значение, эквивалентны результату "истина":
while ( condition ) { data_element . . . } | Если "истина", то группа элементов данных появляется в потоке данных. Это повторяется, пока условие не "ложь". |
do { data_element . . . } while ( condition ) | Элемент данных всегда появляется, по крайней мере, однажды.
Элемент данных повторяется, пока условие не "ложь". |
if ( condition) { { data_element . . . } | Если условие является "истина", то первая группа элементов данных появляется в потоке данных. |
else { data_element . . . } | Если условие не является "истиной", то вторая группа элементов данных появляется в потоке данных. |
for (expr1; expr2; expr3) { data_element . . . } | Expr1 является инициализирующим выражением цикла. Обычно оно определяет начальное состояние счетчика. Ехрr2 является условием, определяющим проверку перед каждой итерацией цикла. Цикл завершается, когда условие не является "истиной". ExprЗ является выражением, которое выполняется в конце каждой итерации цикла, обычно оно инкрементирует счетчик. |
Следует обратить внимание на следующие наиболее распространенные варианты использования этой конструкции: | |
for ( i = 0; i < n; i++) { data_element . . . } | Группа элементов данных появляется n раз. Условия в пределах группы элементов данных могут зависеть от значения переменной управления циклом i, которая обнуляется при первом появлении, увеличивается на 1 при втором появлении и т.д. |
Как отмечено, группа элементов данных может содержать вложенные условные конструкции. Для компактности может быть опущен, когда следует только один элемент данных: | |
data_element [] | data_element является массивом данных. Количество элементов массива зависит от контекста. |
data_element [n] | data_element [n] является (n+1)-ым элементом массива данных. |
data_element [m] [n] | data_element [m] [n] является элементом (m+1)-ой строки (n+1)-го столбца двухмерного массива данных. |
data_element [l] [m] [n] | data_element [l] [m] [n] является (l+1), (m+1), (n+1)-ым элементом трехмерного массива данных. |
data_element [m...n] | data_element [m...n] содержит биты массива data_element с m по n включительно. |
Знание самого синтаксиса потока битов в разделе 4 не следует считать достаточным для декодирования. В частности, это лишь определяет корректный и свободный от ошибок входной поток битов. Реальные декодеры для того, чтобы правильно начать декодирование, должны иметь средства обнаружения стартовых последовательностей.
Определение функции nextbits
Функция nextbits() реализует сравнение строки битов со строкой битов на входе декодера.
4 Синтаксис
Описание синтаксиса потока битов представлено в таблицах 2-30.
4.1 Формат обмена аудиоданными, ADIF
Таблица 2 - Синтаксис adif_sequence ()
Синтаксис | Количество битов | Мнемоника |
adif_sequence() |
|
|
{ |
|
|
adif_header(); |
|
|
byte_alignment(); |
|
|
raw_data_stream(); |
|
|
} |
|
|
Таблица 3 - Синтаксис adif_header ()
Синтаксис | Количество битов | Мнемоника |
adif_header() { |
|
|
adif_id; | 32 | bslbf |
copyright_id_present; | 1 | bslbf |
if (copyright_id_ipresent) { |
|
|
copyright_id; } | 72 | bslbf |
original_copy; | 1 | bslbf |
home; | 1 | bslbf |
bitstream_type; | 1 | bslbf |
bitrate; | 23 | uimsbf |
num_program_config_elements; | 4 | bslbf |
if (bitstream_type == ’0’) { |
|
|
adif_buffer_fullness; | 20 | uimsbf |
} for (i = 0; i < num_program_config_elements + 1; i++) { |
|
|
program_config_element(); } } |
|
|
4.2 Транспортный поток аудиоданных, ADTS
Таблица 4 - Синтаксис adts_sequence ()
Синтаксис | Количество битов | Мнемоника |
adts_seguence() |
|
|
{ |
|
|
while (nextbits() == syncword) { |
|
|
adts_frame(); |
|
|
} |
|
|
} |
|
|
Таблица 5 - Синтаксис adts_frame ()
Синтаксис | Количество битов | Мнемоника |
adts_frame() |
|
|
{ |
|
|
adts_fixed_header(); |
|
|
adts_variable_header(); |
|
|
if (number_of_raw_data_blocks_in_frame == 0) { |
|
|
adts_error_check(); |
|
|
raw_data_block(); |
|
|
} |
|
|
else{ |
|
|
adts_header_error_check(); |
|
|
for (i = 0; i <= number_of_raw_data_blocks_in_frame; |
|
|
i++) { |
|
|
raw_data_block(); |
|
|
adts_raw_data_block_error_check(); |
|
|
} |
|
|
} |
|
|
} |
|
|
Таблица 6 - Синтаксис adts_header_error_check ()
Синтаксис | Количество битов | Мнемоника |
adts header error check () |
|
|
{ |
|
|
if (protection_absent == ’0’) { |
|
|
for (i = 1; i <= number of raw data blocks in frame; i++) { |
|
|
raw data block position[i]; | 16 | Uimsfb |
} |
|
|
crc check; | 16 | rpchof |
} |
|
|
} |
|
|
Таблица 7 - Синтаксис of adts_raw_data_block_error_check()
Синтаксис | Количество битов | Мнемоника |
adts raw data block error check() |
|
|
{ |
|
|
if (protection absent == ’0’) |
|
|
crc check; | 16 | rpchof |
} |
|
|
4.2.1 Фиксированный заголовок ADTS
Таблица 8 - Синтаксис adts_fixed_header()
Синтаксис | Количество битов | Мнемоника |
adts_fixed_header() |
|
|
{ |
|
|
syncword; | 12 | bs/bf |
ID; | 1 | bs/bf |
layer; | 2 | uimsbf |
protection_absent; | 1 | bslbf |
profile; | 2 | uimsbf |
sampling_frequency_index; | 4 | uimsbf |
private_bit; | 1 | bslbf |
channel_configuration; | 3 | uimsbf |
original_copy; | 1 | bslbf |
home; | 1 | bslbf |
} |
|
|
4.2.2 Переменный заголовок ADTS
Таблица 9 - Синтаксис adts_variable_header ()
Синтаксис | Количество битов | Мнемоника |
adts_variable_header() |
|
|
{ |
|
|
copyright_identification_bit; | 1 | bslbf |
copyright_identification_start; | 1 | bslbf |
aac_frame_length; | 13 | bslbf |
adts_buffer_fullness; | 11 | bslbf |
number_of_raw_data_blocks_in_frame; | 2 | uimsfb |
} |
|
|
4.2.3 Обнаружение ошибок
Таблица 10 - Синтаксис adts_error_check ()
Синтаксис | Количество битов | Мнемоника |
adts_error_check() |
|
|
{ |
|
|
if (protection absent == ’0’) |
|
|
crc check; | 16 | rpchof |
} |
|
|
4.3 Необработанные данные
Таблица 11 - Синтаксис raw_data_stream ()
Синтаксис | Количество битов | Мнемоника |
raw_data_stream () |
|
|
{ |
|
|
while (data available()) { |
|
|
raw data block(); |
|
|
} |
|
|
} |
|
|
Таблица 12 - Синтаксис raw_data_block()
Синтаксис | Количество битов | Мнемоника |
raw_data_block() |
|
|
{ |
|
|
while ((id = id_syn_ele) != ID_END) { | 3 | uimsbf |
switch (id) { |
|
|
case ID_SCE: single_channel_element (); |
|
|
break; |
|
|
case ID_CPE: channel_pair_element(); |
|
|
break; |
|
|
case ID_CCE: coupling_channel_element (); |
|
|
break; |
|
|
case ID_LFE: lfe_channel_element(); |
|
|
break; |
|
|
case ID_DSE: data_stream_element(); |
|
|
break; |
|
|
case ID_PCE: program_config_element (); |
|
|
break; |
|
|
case ID FIL: } fill_element(); |
|
|
} byte _alignment(); |
|
|
} |
|
|
Таблица 13 - Синтаксис single_channel_element()
Синтаксис | Количество битов | Мнемоника |
single_channel_element() |
|
|
{ |
|
|
element_instance_tag; | 4 | uimsbf |
individual_channel_stream(0); |
|
|
} |
|
|
Таблица 14 - Синтаксис channel_pair_element ()
Синтаксис | Количество битов | Мнемоника |
channel_pair_element() |
|
|
{ |
|
|
element_instance_tag; | 4 | uimsbf |
common_window; | 1 | uimsbf |
if (common_window) { |
|
|
ics_info(); |
|
|
ms_mask_present; | 2 | uimsbf |
if (ms_mask_present == 1) { |
|
|
for (g = 0; g < num_window_groups; g++) { |
|
|
for (sfb = 0; sfb < max_sfb; sfb++) { |
|
|
ms_used[g][sfb]; | 1 | uimsbf |
} |
|
|
} |
|
|
} |
|
|
} |
|
|
individual_channel_stream(common_window); |
|
|
individual_channel stream(common_window); |
|
|
} |
|
|
Таблица 15 - Синтаксис ics_info ()
Синтаксис | Количество битов | Мнемоника |
ics_info() |
|
|
{ |
|
|
ics_reserved_bit; | 1 | bslbf |
window_sequence; | 2 | uimsbf |
window shape; | 1 | uimsbf |
if (window sequence == EIGHT SHORT SEQUENCE) { |
|
|
max sfb; |
|
|
scale factor grouping; | 4 | uimsbf |
} | 7 | uimsbf |
else { |
|
|
max sfb; | 6 | uimsbf |
predictor data present; | 1 | uimsbf |
if (predictor data present) { |
|
|
predictor reset; | 1 | uimsbf |
if (predictor reset) { |
|
|
predictor reset group number; | 5 | uimsbf |
} |
|
|
for (sfb = 0; sfb< min(max sfb, |
|
|
PRED SFB MAX); sfb++) { |
|
|
prediction used[sfb]; | 1 | uimsbf |
} |
|
|
} |
|
|
} |
|
|
} |
|
|
Таблица 16 - Синтаксис individual_channel_stream ()
Синтаксис | Количество битов | Мнемоника |
individual_channel_stream(common_window) |
|
|
{ |
|
|
global_gain; | 8 | uimsbf |
if (!common_window) |
|
|
ics_info(); |
|
|
section_data(); | 1 | uismbf |
scale_factor_data(); |
|
|
pulse_data_present; |
|
|
if (pulse_data_present) { |
|
|
pulse data(); | 1 | uimsbf |
} |
|
|
tns_data_present; |
|
|
if (tns_data_present) { |
|
|
tns data(); | 1 | uimsbf |
} |
|
|
gain_control_data_present; |
|
|
if (gain_control_data_present) { |
|
|
gain control data(); |
|
|
} |
|
|
spectral data(); |
|
|
} |
|
|
Таблица 17 - Синтаксис section_data()
Синтаксис | Количество битов | Мнемоника |
section_data() |
|
|
{ |
|
|
if (window_sequence == EIGHT_SHORT_SEQUENCE) |
|
|
sect_esc_val = (1<<3) -1; |
|
|
else sect_esc_val = (1<<5) -1; |
|
|
for (g = 0; g < num window groups; g++) { |
|
|
k = 0; |
|
|
i = 0; |
|
|
while (k < max_sfb) { |
|
|
sect_cb[g][i]; |
|
|
sect_len = 0; |
|
|
while (sect_len _incr == sect_esc_val) { | 4 | uimsbf |
sect_len += sect_esc_val; |
|
|
} | {3; 5} | uismbf |
sect_len += sect_len_incr; |
|
|
sect_start[g][i] = k; |
|
|
sect_end[g][i] = k+sect_len; |
|
|
for (sfb = k; sfb < k+sect_len; sfb++) |
|
|
sfb_cb[g][sfb] = sect_cb[g][i]; |
|
|
к += sect_len; |
|
|
/++; |
|
|
} |
|
|
num_sec[g] = i; |
|
|
} |
|
|
} |
|
|
Таблица 18 - Синтаксис scale_factor_data ()
Синтаксис | Количество битов | Мнемоника |
scale_factor_data() |
|
|
{ |
|
|
for (g = 0; g < num_window_groups; g++) { |
|
|
for (sfb = 0; sfb < max sfb; sfb++) { |
|
|
if (sfb_cb[g][sfb] != ZERO_HCB) { |
|
|
if (is_intensity(g,sfb)) |
|
|
hcod_sf[dpcm_is_position[g][sfb]]; | 1..19 | vlclbf |
else |
|
|
hcod_sf [dpcm_sf [g] [sfb]]; | 1..19 | vlclbf |
} |
|
|
} |
|
|
} |
|
|
} |
|
|
Таблица 19 - Синтаксис tns_data ()
Синтаксис | Количество битов | Мнемоника |
tns_data() |
|
|
{ |
|
|
for (w = 0; w < num windows; w++) { | 1..2 | uimsbf |
n filt[w]; |
|
|
if (n_filt[w]) |
|
|
coef res[w]; | 1 | uimsbf |
for (filt = 0; filt < n filtfw]; filt++) { |
|
|
length[w][filt]; | {4;6} | uimsbf |
order[w][filt]; | {3;5} | uimsbf |
if (order[w][filt]) { |
|
|
direction[w][filt]; |
|
|
coef_compress[w][filt]; | 1 | uimsbf |
for (i = 0; i < order[w][filt]; i++) | 1 | uimsbf |
coef[w][filt][i]; | 2..4 | uimsbf |
} |
|
|
} |
|
|
} |
|
|
} |
|
|
Таблица 20 - Синтаксис spectral_data ()
Синтаксис | Количество битов | Мнемоника |
spectral_data() |
|
|
{ |
|
|
for (g = 0; g < num window groups; g++) { |
|
|
for (i = 0; i < num sec[g]; i++) { |
|
|
if (sect cb[g][i] != ZERO HCB && |
|
|
sect_cb[g][i] <= ESC_HCB) { |
|
|
for (k = sect_sfb_offset[g][sect_start[g][i]]; |
|
|
к < sect sfb offset[g][sect end[g][i]];) { |
|
|
if (sect cb[g][i]<FIRST PAIR HCB){ |
|
|
hcod[sect_cb[g][i]][w][x][y][z]; | 1..16 | vlclbf |
if (unsigned_cb[sect_cb[g][i]]) |
|
|
quad_sign_bits; | 0..4 | bslbf |
к += QUAD_LEN; |
|
|
} else { |
|
|
hcod[sect_cb[g][i]][y][z]; |
|
|
if (unsigned_cb[sect_cb[g][i]]) | 1..15 | vlclbf |
pair_sign_bits; |
|
|
к += PAIR_LEN; | 0..2 | bslbf |
if (sect cb[g][i] == ESC_HCB) { |
|
|
if (y == ESC_FLAG) |
|
|
hcod_esc_y; |
|
|
if (z == ESC_FLAG) | 5..21 | vlclbf |
hcod_esc_z; |
|
|
} | 5..21 | vlclbf |
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
Таблица 21 - Синтаксис pulse_data ()
Синтаксис | Количество битов | Мнемоника |
pulse_data() |
|
|
{ |
|
|
number_pulse; | 2 | uimsbf |
pulse_start_sfb; | 6 | uimsbf |
for (i = 0; i < number_pulse+1; i++) { |
|
|
pulse_offset[i]; | 5 | uimsbf |
pulse_amp[i]; | 4 | uimsbf |
} |
|
|
} |
|
|
Таблица 22 - Синтаксис coupling_channel_element()
Синтаксис | Количество битов | Мнемоника |
coupling_channel_element() |
|
|
{ |
|
|
element_instance_tag; | 4 | uimsbf |
ind_sw_cce_f l ag; | 1 | uimsbf |
num_coupled_elements; | 3 | uimsbf |
num_gain_element_lists = 0; |
|
|
for (c = 0; c < num_coupled_elements+1; c++) { |
|
|
num_gain_element_lists++; |
|
|
cc_target_is_cpe[c]; | 1 | uimsbf |
cc_target_tag_select[c]; | 4 | uimsbf |
if (cc target is cpe[c]) { |
|
|
cc_l[c]; | 1 | uimsbf |
cc_r[c]; |
|
|
if (cc_l[c] && cc_r[c]) | 1 | uimsbf |
num gain element lists++; | 1 | uimsbf |
} |
|
|
} |
|
|
cc_domain; |
|
|
gain_element_sign; | 1 | uimsbf |
gain_element_scale; | 2 | uimsbf |
individual_channel_stream(0); | 1 | uimsbf |
for (c = 1; c < num_gain_element_lists; c++) { |
|
|
if (ind_sw_cce_flag) { |
|
|
cge = 1; |
|
|
} else { |
|
|
common_gain_element_presen[c]; | 1..19 | vlclbf |
cge = common_gain_element_present[c]; |
|
|
} |
|
|
if (cge) |
|
|
hcod_sf[common_gain_element[c]]; | 1..19 | vlclbf |
else{ |
|
|
for (g = 0; g < num_window_groups; g++) { |
|
|
for (sfb = 0; sfb < max_sfb; sfb++) { |
|
|
if (sfb_cb[g][sfb] != ZERO_HCB); |
|
|
hcod sf[dpcm_gain_element[c][g][sfb]]; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
Таблица 23 - Синтаксис lfe_channel_element()
Синтаксис | Количество битов | Мнемоника |
Ife_channel_element() |
|
|
{ |
|
|
element_instance_tag; | 4 | uimsbf |
individual_channel_stream(0); |
|
|
} |
|
|
Таблица 24 - Синтаксис data_stream_element ()
Синтаксис | Количество битов | Мнемоника |
data_stream_element() |
|
|
{ |
|
|
element_instance_tag; | 4 | uimsbf |
data_byte_align_flag; | 1 | uimsbf |
cnt = count; | 8 | uimsbf |
if (cnt == 255) { |
|
|
cnt += esc_count; | 8 | uimsbf |
if (data_byte_align_flag) { |
|
|
byte_alignment(); |
|
|
for (i = 0; i < cnt; i++) { |
|
|
data_stream_byte[element_instance_tag][i]; | 8 | uimsbf |
} |
|
|
} |
|
|
Таблица 25 - Синтаксис program_config_element ()
Синтаксис | Количество битов | Мнемоника |
program_config_element() |
|
|
{ |
|
|
element_instance_tag; | 4 | uimsbf |
profile; | 2 | uimsbf |
sampling_frequency_index; | 4 | uimsbf |
num_front_channel_elements; | 4 | uimsbf |
num_side_channel_elements; | 4 | uimsbf |
num_back_channel_elements; | 4 | uimsbf |
num_Ife_channel_elements; | 2 | uimsbf |
num_assoc_data_elements; | 3 | uimsbf |
num_valid_cc_elements; | 4 | uimsbf |
mono_mixdown_present; | 1 | uimsbf |
if (mono_mixdown_present ==1) |
|
|
mono_mixdown_element_number; | 4 | uimsbf |
stereo_mixdown_present; | 1 | uimsbf |
if (stereo_mixdown_present ==1) |
|
|
stereo_mixdown_element_number; | 4 | uimsbf |
matrix_mixdown_idx_present; | 1 | uimsbf |
if (matrix_mixdown_idx_present == 1) { |
|
|
matrix_mixdown_idx; | 2 | uimsbf |
pseudo_surround_enable; | 1 | uimsbf |
} |
|
|
for (i = 0; i < num_front_channel_elements; i++) { | 1 | bslbf |
front_element_is_cpe[i]; | 4 | uimsbf |
front_element_tag_select[i]; |
|
|
} | 1 | bslbf |
for (i = 0; i < num_side_channel_elements; i++) { | 4 | uimsbf |
side_element_is_cpe[i]; |
|
|
side_element_tag_select[i]; | 1 | bslbf |
} | 4 | uimsbf |
for (i = 0; i < num_back_channel_elements; i++) { |
|
|
back_element_is_cpe[i]; | 4 | uimsbf |
back_element_tag_select[i]; |
|
|
} | 4 | uimsbf |
for (i = 0; i < num_lfe_channel_elements; i++) |
|
|
If e_element_tag_select[i]; | 1 | uimsbf |
for (i = 0; i < num_assoc_data_elements; i++) |
|
|
assoc_data_element_tag_select[i]; | 4 | uimsbf |
for (i = 0; i < num_valid_cc_elements; i++) { | 8 | uimsbf |
cc_element_is_ind_sw[i]; |
|
|
valid_cc_element_tag_select[i]; | 8 | uimsbf |
} |
|
|
byte_alignment(); |
|
|
comment_field_bytes; |
|
|
for (i = 0; i < comment_field_bytes; i++) |
|
|
comment_field_data[i]; |
|
|
} |
|
|
Таблица 26 - Синтаксис fill_element()
Синтаксис | Количество битов | Мнемоника |
fill_element() |
|
|
{ |
|
|
cnt = count; | 4 | uimsbf |
if (cnt== 15) |
|
|
cnt += esc count -1; | 8 | uimsbf |
while (cnt > 0) { |
|
|
cnt -= extension_payload(cnt); |
|
|
} |
|
|
} |
|
|
Таблица 27 - Синтаксис gain_control_data()
Синтаксис | Количество битов | Мнемоника |
gain_control_data() |
|
|
{ |
|
|
max_band; | 2 | uimsbf |
if (window_sequence == ONLY_LONG_SEQUENCE) { |
|
|
for (bd = 1; bd <= max_band; bd++) { |
|
|
for (wd = 0; wd < 1; wd++) { |
|
|
adjust_num[bd][wd]; | 3 | uimsbf |
for (ad = 0; ad < adjust_num[bd][wd]; ad++) { |
|
|
alevcode[bd][wd][ad]; | 4 | uimsbf |
aloccode[bd][wd][ad]; | 5 | uimsbf |
} |
|
|
} |
|
|
} |
|
|
} | 3 | uimsbf |
else if (window_sequence == LONG_START_SEQUENCE) |
|
|
{ | 4 | uimsbf |
for (bd = 1; bd <= max_band; bd++) { |
|
|
for (wd = 0; wd < 2; wd++) { | 4 | uimsbf |
adjust_num[bd][wd]; |
|
|
for (ad = 0; ad < adjust_num[bd][wd]; ad++) { | 2 | uimsbf |
alevcode[bd] [wd] [ad]; |
|
|
if (wd == 0) |
|
|
aloccode[bd] [wd] [ad]; |
|
|
else |
|
|
aloccode[bd][wd][ad]; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
else if (window sequence == |
|
|
EIGHT_SHORT_SEQUENCE) { |
|
|
for (bd = 1; bd <= max_band; bd++) { |
|
|
for (wd = 0; wd < 8; wd++) { |
|
|
adjust_num[bd][wd]; | 3 | uimsbf |
for (ad = 0; ad < adjust_num[bd][wd]; ad++) { |
|
|
alevcode[bd] [wd] [ad]; | 4 | uimsbf |
aloccode[bd] [wd] [ad]; | 2 | uimsbf |
} |
|
|
} |
|
|
} |
|
|
} |
|
|
else if (window_sequence == LONG_STOP_SEQUENCE) { |
|
|
for (bd = 1; bd <= max_band; bd++) { |
|
|
for (wd = 0; wd < 2; wd++) { |
|
|
adjust_num[bd][wd]; | 3 | uimsbf |
for (ad = 0; ad < adjust_num[bd][wd]; ad++) { |
|
|
alevcode[bd][wd][ad]; | 4 | uimsbf |
if (wd == 0) |
|
|
aloccode[bd][wd][ad]; | 4 | uimsbf |
else | 5 | uimsbf |
aloccode[bd][wd][ad]; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
Таблица 28 - Синтаксис extension_payload ()
Синтаксис | Количество битов | Мнемоника | ||
extension_payload(cnt) |
| uimsbf | ||
{ |
|
| ||
extension_type; | 4 |
| ||
switch (extension type) { |
|
| ||
case EXT_DYNAMIC_RANGE: |
|
| ||
n = dynamic_range_info(); |
|
| ||
return n; |
| Note 1 | ||
case EXT_SBR_DATA: |
|
| ||
retum_sbr_extension_data(id aac, 0); |
| Note 1 | ||
case EXT SBR DATA_CRC: |
|
| ||
retum_sbr_extension_data(id aac, 1); |
| Uimsbf | ||
case EXT FILL DATA: |
|
| ||
fill_nibble; | /* равен “0000” */ | 4 | Uimsbf | |
for (i = 0; i < cnt-1; i++) |
|
| ||
fill_byte[i]; | /* равен “10100101” */ | 8 |
| |
return cnt; |
|
| ||
case default: |
| uimsbf | ||
for(i = 0; i<8*(cnt-1)+4;i++) |
|
| ||
other_bits[i]; | 1 |
| ||
return cnt; |
|
| ||
} |
|
| ||
} |
|
|
Примечание - 1. id_aac является id_syn_ele соответствующего элемента AAC (ID_SCE или ID_CPE) или SCE ID в случае ССЕ.
Таблица 29 - Синтаксис dynamic_range_info ()
Синтаксис | Количество битов | Мнемоника |
dynamic range info() |
|
|
{ |
|
|
n = 1; drc_num_bands = 1; |
|
|
pce_tag_present; if | 1 | uimsbf |
(pce_tag_present == 1) { |
|
|
pce_ instance_tag; | 4 | uimsbf |
drc_tag_reserved_bits; | 4 | uimsbf |
excluded_chns_present; | 1 | Uimsbf |
if (excluded_chns_present == 1) { |
|
|
n += excluded_channels(); |
|
|
drc_bands_present; if | 1 | Uimsbf |
(drc_bands_present == 1) { |
|
|
drc_band_incr; | 4 | uimsbf |
drc_bands_reserved_bits; | 4 | uimsbf |
drc_num_bands = drc_num_bands + drc_band_incr; |
|
|
for (i = 0; i < drc_num_bands; i++) { |
|
|
drc_band_top[i]; | 8 | uimsbf |
prog_ref_level_present; if | 1..7 | uimsbf |
(prog_ref_level_present == 1) { |
|
|
prog_ref_level; | 1 | uimsbf |
prog_ref_level_reserved_bits; | 1 | uimsbf |
for (i = 0; i < drc_num_bands; i++) |
| uimsbf |
{ dyn_rng_sgn[i]; dyn_rng_ctl[i]; | 7 | uimsbf |
return n; |
|
|
Таблица 30 - Синтаксис excluded_channels ()
Синтаксис | Количество битов | Мнемоника |
excluded_channels() |
|
|
{ |
|
|
n = 0; |
|
|
num_excl_chan = 70; |
|
|
for (i = 0; i < 7; i++) |
|
|
exclude_mask[i]; | 1 | uimsbf |
while (additional_excluded_chns[n-1] == 1) { | 1 | uimsbf |
for (i = num_excl_chan; i < num_excl_chan+7; i++) |
|
|
exclude_mask[i]; | 1 | uimsbf |
num_excl_chan += 7; |
|
|
return n; |
|
|
5 Профили и функциональная совместимость профилей
5.1 Состав профилей
Стандартом устанавливаются три профиля (таблица 31):
Основной профиль
Профиль пониженной сложности
Профиль с масштабируемой частотой дискретизации
В program_config_element() и adts_fixed_header() поле из двух битов указывает на используемый профиль:
Таблица 31 - Профили
Индекс | Профиль |
0 | Основной профиль |
1 | Профиль пониженной сложности (LC) |
2 | Профиль с масштабируемой частотой дискретизации (SSR) |
3 | (Зарезервированный) |
5.1.1 Основной профиль
Основной профиль используется тогда, когда затраты в памяти не имеют особого значения и доступны существенные вычислительные ресурсы. Для обеспечения лучшего возможного сжатия могут использоваться все инструменты, за исключением инструмента регулирования усиления. В потоке битов основного профиля должна содержаться только одна программа (program_config_element()). Программа в потоке битов основого профиля не должна содержать никаких элементов моно или стерео сведения.
5.1.2 Профиль с пониженной сложностью
Профиль с пониженной сложностью используется тогда, когда ресурс RAM, вычислительных мощностей и требования сжатия ограничены определенными рамками. В профиле с пониженной сложностью не используются предсказание и инструмент регулирования усиления, кроме того, порядок TNS ограничен. В потоке битов профиля с пониженной сложностью должна содержаться только одна программа (program_config_element ()). Программа в потоке битов профиля с пониженной сложностью не должна содержать никаких элементов моно или стерео сведения.
5.1.3 Профиль с масштабируемой частотой дискретизации
В профиле с масштабируемой частотой дискретизации требуется инструмент регулирования усиления. Предсказание и спаривание каналов не разрешены, порядок TNS и ширина канала ограничены. Для самого низкого из 4 PQF диапазонов регулирование усиления не используется. В случае сокращения полосы частот звукового сигнала профиль SSR масштабируется соответственно сложности. В потоке битов профиля с масштабируемой частотой дискретизации должна содержаться только одна программа (program_config_element ()). Программа в потоке битов профиля с масштабируемой частотой дискретизации не должна содержать никаких элементов моно или стерео сведения.
5.1.4 Соглашение о присвоении имен для декодеров и потоков битов MPEG-2 ААС
Декодер или поток битов могут быть определены как A.L.I.D <Имя профиля> MPEG-2 ААС декодер или поток битов, где А - число основных звуковых каналов, L - число каналов LFE, I - число независимо переключаемых каналов, D - число зависимо переключаемых каналов и <Имя профиля> - фактическое имя профиля. Пример: название "декодер 5.1.1.1 основого профиля MPEG-2 ААС" соответствует декодеру, способному декодировать 5 основных звуковых каналов, один канал LFE и по одному независимо и зависимо переключаемых ССЕ, используя с каждым из каналов определенный профиль. Это может быть сокращено как М.5.1.1.1, где М указывает на основной профиль декодера. Точно так же, декодер с профилем пониженного уровня сложности может быть определен как L, а профиль SSR - S.
5.1.5 Соглашение о присвоении имен для декодеров и потоков битов MPEG-2 ААС + MPEG 4 SBR
Декодер или поток битов, дополнительно соответствующий MPEG-4 АОТ SBR на определенном уровне может быть обозначен аналогично, путем добавления "+ SBR I X [HQILP]" к имени декодера, где X - уровень декодера/потока битов профиля НЕ-ААС с характеристиками, определенными в ИСО/МЭК 14496-3 [3]. Пример: декодер 5.1.1.1 основного профиля MPEG-2 ААС + SBR / 5 HQ.
5.1.6 Минимальное количество основных звуковых каналов и профилей, поддерживаемых декодером
Чтобы обеспечить определенный уровень функциональной совместимости, определяются следующие минимальные возможности декодеров для данного профиля и числа основных звуковых каналов (таблица 32).
Таблица 32 - Минимальные возможности декодера с точки зрения конфигурации каналов
Число основных звуковых каналов | Основной профиль | Профиль с пониженной сложностью | Профиль SSR |
1 | 1.0.0.0 | 1.0.0.0 | 1.0.0.0 |
2 | 2.0.0.0 | 2.0.0.0 | 2.0.0.0 |
3 | 3.0.1.0 | 3.0.0.1 | 3.0.0.0 |
4 | 4.0.1.0 | 4.0.0.1 | 4.0.0.0 |
5 | 5.1.1.1 | 5.1.0.1 | 5.1.0.0 |
7 | 7.1.1.2 | 7.1.0.2 | 7.1.0.0 |
5.1.7 Параметры инструментов, зависящие от профиля
В соответствии с используемым профилем значение константы TNS_MAX_ORDER устанавливается для длинных окон следующим образом: TNS_MAX_ORDER==20 для основного профиля, TNS_MAX_ORDER==12 для профиля с пониженной сложностью и профиля с масштабируемой частотой дискретизации. Для коротких окон константа TNS_MAX_ORDER==7 для всех профилей.
Согласно частоте дискретизации и используемому профилю значение константы TNS_MAX_BANDS устанавливается в соответствии с таблицей 33.
Таблица 33 - Значения TNS_MAX_BANDS в зависимости от профиля и частоты дискретизации
Частота дискретизации, Гц | Низкая сложность/ основной профиль (длинные окна) | Низкая сложность/ основной профиль (короткие окна) | Профиль с масштабируемой частотой дискретизации (длинные окна) | Профиль с масштабируемой частотой дискретизации (длинные окна) |
96000 | 31 | 9 | 28 | 7 |
88200 | 31 | 9 | 28 | 7 |
64000 | 34 | 10 | 27 | 7 |
48000 | 40 | 14 | 26 | 6 |
44100 | 42 | 14 | 26 | 6 |
32000 | 51 | 14 | 26 | 6 |
24000 | 46 | 14 | 29 | 7 |
22050 | 46 | 14 | 29 | 7 |
16000 | 42 | 14 | 23 | 8 |
12000 | 42 | 14 | 23 | 8 |
11025 | 42 | 14 | 23 | 8 |
8000 | 39 | 14 | 19 | 7 |
5.2 Функциональная совместимость профилей
Любой поток битов данного профиля (таблица 34), число основных звуковых каналов, каналов LFE, независимых и зависимых каналов которого меньше или равно соответствующему числу каналов, поддерживаемых декодером того же самого профиля, может быть декодирован этим декодером.
Таблица 34 и рисунок 3 описывают функциональную совместимость трех профилей.
Таблица 34 - Функциональная совместимость профилей
Профиль декодера | Профиль кодера | ||
| Основной профиль | Профиль LC | Профиль SSR |
Основной профиль | да | да | нет* |
Профиль LC | нет | да | нет* |
Профиль SSR | нет | нет** | да |
* Эти потоки могут быть декодированы, если декодер основного профиля или LC профиля будет в состоянии обнаружить, но не декодировать информацию о регулировании усиления, однако у восстановленного звука будет ограниченный частотный диапазон.
** Эти потоки могут быть декодированы, однако частотный диапазон декодируемого сигнала будет ограничен приблизительно до 5 кГц, что соответствует неискаженной части первой полосы фильтра PQMF. |
Рисунок 3 - Функциональная совместимость профилей
6 Общая структура данных
6.1 Форматы обмена ААС
6.1.1 Краткий обзор
Блок raw_data_block() содержит все данные, относящиеся к аудио (включая вспомогательные данные). Кроме того, дополнительная информация, такая как sampling_frequency, необходима, чтобы полностью описать аудио последовательность. Формат обмена аудиоданными (ADIF) содержит все элементы, которые необходимы для описания потока битов согласно этому стандарту.
В определенных приложениях некоторые или все элементы синтаксиса, подобно тем, которые определены в заголовке ADIF, например, sampling_rate, могут быть известны декодеру за счет других средств и, следовательно, не появляются в потоке битов.
Кроме того, может требоваться дополнительная информация, которая изменяется от блока до блока (например, для улучшения считывания или устойчивости к ошибкам). Поэтому транспортные потоки могут быть разработаны для определенного приложения и не определяются в этом стандарте. Однако здесь описывается один нестандартный транспортный поток под названием Транспортный поток аудиоданных (ADTS). Он может использоваться для приложений, в которых декодер может считать этот поток.
6.1.2 Формат обмена аудиоданными (ADIF)
6.1.2.1 Краткий обзор
Формат обмена аудиоданными (ADIF) содержит один заголовок в начале последовательности, сопровождаемый raw_data_stream().raw_data_stream() может не содержать дальнейших program_config_element () элементов.
ADIF применим только для систем с определенной точкой начала декодирования, не подразумевающих начало процесса декодирования с заранее неизвестной позиции потока аудиоданных. Он может использоваться в качестве формата обмена, в котором содержится вся информация, необходимая для декодирования и воспроизведения аудиоданных.
6.1.2.2 Определения
6.1.2.2.1 Функции данных
adif_sequence () | Последовательность согласно формату обмена аудиоданных (таблица 2). |
adif_header () | Заголок формата обмена аудиоданными, располагается в начале adif_sequence (таблица 3). |
byte_alignment () | Выравнивание относительно первого бита заголовка. |
raw_data_stream () | См. 6.2.1 и таблицу 11. |
program_config_element () | Содержит информацию о конфигурации для одной программы (таблица 3). См. 6.5. |
6.1.2.2.2 Элементы данных
adif_id | Идентификатор формата обмена аудиоданными. Его значение - 0x41444946 (старший бит первый), ASCII код строки "ADIF" (таблица 3). |
copyright_id_present | Указывает, присутствует ли copyright_id (таблица 3). |
copyright_id | Поле состоит из 8-битового copyright_identifier, сопровождаемого 64-битовым copyright_number (таблица 3). copyright_number - значение, которое идентифицирует защищенный авторским правом материал. |
original_copy | Определение элемента данных copyright. |
home | Определение элемента данных original/copy. |
bitstream_type | флаг, указывающий на тип потока битов (таблица 3):
’0’ - постоянный поток битов. Этот поток битов может быть передан по каналу с постоянной скоростью;
’1’ - поток битов с переменной скоростью. Этот поток битов не предназначен для передачи по каналам с постоянной скоростью. |
bitrate | беззнаковое целое число размером 23 бита, указывающее на скорость передачи потока битов в бит/с в случае постоянного потока битов или на максимальную пиковую скорость передачи (измеренную за один фрейм) в случае потоков битов с переменной скоростью. Значение 0 указывает, что скорость передачи не известна (таблица 3). |
num_program_config_element | Количество элементов program_config_element(), определенных для текущей adif_sequence (); равно num_program_config_element+1 (таблица 3). Минимальное значение 0 указывает на один элемент program_config_element(). |
adif_buffer_fullness | состояние резервуара битов после кодирования первого raw_data_block() в adif_sequence(). Передается как количество доступных битов в резервуаре битов (таблица 3). |
6.1.2.2.3 Элементы справки
data_available () | Функция, которая возвращает ’1’, если данные доступны, иначе ’0’. |
6.1.3 Транспортный поток аудиоданных (ADTS)
6.1.3.1 Краткий обзор
Транспортный поток аудиоданных (ADTS) будет распознан декодерами как "Уровень 4" потока битов.
Фиксированный заголовок ADTS содержит синхрослово плюс все части заголовка, которые необходимы для декодирования и которые не изменяются от фрейма к фрейму. Переменный заголовок ADTS содержит данные заголовка, которые изменяются от фрейма к фрейму.
6.1.3.2 Определения
6.1.3.2.1 Функции данных
adts_sequence () | Последовательность согласно транспортному потоку аудиоданных ADTS (таблица 4). |
adt_frame () | Фрейм ADTS, состоящий из фиксированного заголовка, переменного заголовка, опциональной проверки на наличие ошибок и конкретного количества блоков raw_data_block() (таблица 5). |
adts_fixed_header () | Фиксированный заголовок ADTS. Информация в этом заголовке не изменяется от фрейма к фрейму. Он повторяется в каждом фрейме, чтобы обеспечить произвольный доступ к потоку битов (таблица 8). |
adts_variable_header () | Переменный заголовок ADTS. Этот заголовок передается в каждом фрейме, так же как и фиксированный заголовок, однако содержит данные, которые изменяются от фрейма к фрейму (таблица 9). |
adts_error_check () | Следующие биты защищены и поступают в алгоритм CRC в порядке появления:
все биты adts_fixed_header()
все биты adts_variable_header()
первые 192 бита любого:
single_channel_element()
channel_pair element()
coupling_channel_element()
Ife_channel_element()
Первые 128 битов второго individual_channel_stream () в channel_pair_element () должны быть защищены.
Вся информация в любом program_config_element() или data_stream_element () должна быть защищена.
Любой элемент с фактической длиной меньше указанной продолжительности поля защиты 128 или 192 битов дополняется нулями до указанной продолжительности поля защиты для CRC расчета. Биты id_syn_ele должны быть исключены из CRC защиты. Если продолжительность СРЕ короче 192 битов, нулевые биты добавляются, чтобы достигнуть продолжительности 192 битов. Кроме того, если первый ICS из СРЕ заканчивается на N-м бите (N <192), первые (192 - N) битов второго ICS защищаются дважды, каждый раз в порядке появления. Например, если второй ICS начинается со 190 бита СРЕ, первые 3 бита второго ICS защищаются дважды. Наконец, если продолжительность второго ICS короче128 битов, нулевые биты добавляются, чтобы достигнуть продолжительности 128 битов. |
adts_header_error_check () | Следующие биты защищены и поступают в алгоритм CRC в порядке появления:
все биты adts_fixed_header ()
все биты adts_variable_header()
все биты каждого raw_data_block_position[i]. |
adts_raw_data_block_ | Относительно i-ой проверки |
error_check () | adts_raw_data_block_error_check(), биты i-го блока raw_data_block () защищены и поступают в алгоритм CRC в порядке появления, согласно тому, что определено для adts_error_check() за исключением того, что никакие биты заголовка не рассматриваются. |
raw_data_block () | см. 6.2.1 и таблицу 12. |
6.1.3.2.2 Элементы данных
raw_data_block_position[i] | Начальная позиция i-го блока raw_data_block() в adts_frame(), определяемая как смещение в байтах от начальной позиции первого блока raw_data_block() в adts_frame(). |
crc_check | Данные об обнаружении ошибок CRC, произведенные согласно таблицам 6, 7 и 10. |
syncword | Строка битов ’1111 1111 1111’. См. таблицу 8 |
ID | Идентификатор MPEG, установлен в ’1’. См. таблицу 8. |
layer | Указывает, какой уровень используется. Установлен в ’00’. См. таблицу 8. |
protection_absent | Указывает, присутствуют ли данные error_check(). |
profile | Используемый профиль. См. таблицу 8. |
sampling_frequency_index | Указывает на частоту дискретизации согласно таблицам 8 и 35: |
Таблица 35 - Частота дискретизации в зависимости от sampling_frequency_index
sampling_frequency_index | Частота дискретизации, Гц |
0x0 | 96000 |
0x1 | 88200 |
0x2 | 64000 |
0x3 | 48000 |
0x4 | 44100 |
0x5 | 32000 |
0x6 | 24000 |
0x7 | 22050 |
0x8 | 16000 |
0x9 | 12000 |
0ха | 11025 |
0xb | 8000 |
0xc | резерв |
0xd | резерв |
0xe | резерв |
0xf | резерв |
private_bit | См. таблицу 8. |
channel_configuration | Указывает на используемую конфигурацию канала. Если channel_configuration > 0, конфигурация канала дается в таблице 42 и 6.5.3.1. Если channel_configuration==0, конфигурация канала не определяется в заголовке и должна быть задана элементом program_config_element(), первым элементом синтаксиса первого raw_data_block() после заголовка (см. 6.5.3.2) или является неявной конфигурацией (см. 6.5.3.3), или должна быть известна из приложения (таблица 8). |
original_copy | См. определение в 6.1.2.2.2. |
home | См. определение в 6.1.2.2.2. |
copyright_identification_bit | Один бит 72-битного поля идентификации авторского права (см. copyright_id выше). Биты этого поля передаются фрейм за фреймом; первый бит copyright_identification_start равен ’1’. Поле состоит из 8-битного copyright_identifier, сопровождаемого 64-битным copyright_number. copyright_number - значение, которое идентифицирует защищенный авторским правом материал. См. таблицу 9. |
copyright_identification_start | Один бит, указывающий, что copyright_identification_bit в этом аудио фрейме - первый бит 72-битной идентификации авторского права. Если идентификация авторского права не передается, этот бит должен быть равен ’0’. ’0’ идентификация авторского права в этом аудио фрейме не используется]. ’1’ идентификация авторского права в этом аудио фрейме используется, см. таблицу 9. |
aac_frame_length | Размер фрейма, включая заголовки error_check в байтах (таблица 9). |
adts_buffer_fullness | Состояние резервуара битов в ходе кодирования фрейма ADTS, до первого блока raw_data_block() включительно и, опционально, после adts_raw_data_block_error_check(). Передается как количество доступных битов в резервуаре битов, деленное на NCC, деленное на 32 и округленное до целого значения (таблица 9). Шестнадцатеричное значение 7FF сигнализирует, что поток битов является потоком с переменной скоростью. В этом случае заполнение буфера не применимо. |
number_of_raw_data_ blocks_in_frame | Количество блоков raw_data_block(), которые мультиплексируютс* в adts_frame(), равно number_of_raw_data_blocks_in_frame + 1. Минимальное значение 0 указывает на один raw_data_block() (таблица 9). |
6.2 Необработанные данные
6.2.1. Определения
6.2.1.1 Функции данных
raw_data_stream () | Последовательность блоков raw_data_block(). |
raw_data_block () | Блок необработанных данных, который содержит аудиоданные за период времени, соответствующий 1024 отсчетам, относящейся к ним информации и других данных. Имеется семь синтаксических элементов, идентифицируемых по элементу данных id_syn_ele. Элементы audio_channel_element () в одном raw_data_stream () и одном raw_data_block() должны иметь одну и только одну частоту дискретизации. В raw_data_block () возможно появление того же самого синтаксического элемента несколько раз, однако element_instance_tag должны иметь различные 4 бита, за исключением data_stream_element() и fill_element(). Поэтому в одном raw_data_block() может быть от 0 до максимум 16 случаев появления любого синтаксического элемента, за исключением data_stream_element() и fill_element (), где это ограничение не применяется. Если встречаются несколько data_stream_element() с одинаковым element_instance_tag, они являются частью одного потока данных. У fill_element () нет element_instance_tag (так как контент не требует последующей ссылки), и может встретиться любое число раз. Конец блока raw_data_block() обозначается специальным id_syn_ele (TERM), который встречается в raw_data_block() лишь единожды (таблица 12). |
single_channel_element () | Сокращенно SCE. Синтаксический элемент потока битов, содержащий кодированные данные для единственного звукового канала. single_channel_element() в основном состоит из individual_channel_stream(). В блоке необработанных данных может присутствовать до 16 таких элементов, у каждого из которых должен быть уникальный element_instance_tag (таблица 13). |
channel_pair_element () | Сокращенно CPE. Синтаксический элемент потока битов, содержащий данные для пары каналов. channel_pair_element () состоит из двух individual_channel_stream() и дополнительнной информации об объединенном кодировании. Эти два канала могут иметь общую служебную информацию. Элемент channel_pair_element() имеет те же самые ограничения, что и single_channel_element, element_instance_tag, и число появлений (таблица 14). |
coupling_channel_element () | Сокращенно ССЕ. Синтаксический элемент, который содержит аудиоданные для спаренного канала. В спаренном канале представлена информация об одном блоке многоканальной интенсивности или диалогах многоязычных программ. Правила для количества coupling_channel_element() и instance_tag аналогичны правилам для single_channel_element() (таблица 22). См. 10.3. |
lfe_channel_element () | Сокращенно LFE. Синтаксический элемент, который содержит канал с низкой частотой дискретизации. Правила для числа lfe_channel_element() и instance_tag аналогичны правилам для single_channel_element () ’s (таблица 23). См. 6.4. |
audio_channel_element () | Общее обозначение для single_channel_element (), channel_pair_element (), coupling_channel_element () и Ife_channel_element (), |
program_config_element () | Сокращенно PCE. Синтаксический элемент, который содержит данные конфигурации программы. Правила для числа program_config_element () и element_instance_tag аналогичны правилам для single_channel_element () (таблица 25). PCE должны следовать перед всеми другими синтаксическими элементами в raw_data_block(). См. 6.5. |
fill_element () | Сокращенно FIL. Синтаксический элемент, который содержит данные заполнения. Может присутствовать любое число элементов, которые могут встретиться в любом порядке в raw_data_block (таблица 26). См. 6.7. |
data_stream_element () | Сокращенно DSE. Синтаксический элемент, который содержит данные. Снова, есть 16 element_instance_tags. Однако нет ограничения на количество data_stream_element() ни с каким instance_tag, в то время как единственный поток данных может продолжаться через многократный data_stream_element() с тем же самым instance_fag (таблица 24). См. 6.5.3. |
byte_alignment () | Выравнивание относительно первого бита raw_data_block(). |
6.2.1.2 Элементы данных
id_syn_ele | Элемент данных, который идентифицирует синтаксический элемент или конец raw_data_block() (таблица 12): |
Таблица 36 - Идентификация синтаксических элементов
ID | Код | Сокращение | Синтаксический элемент |
ID_SCE | 0x0 | SCE | single_channel_element() |
ID_CPE | 0x1 | CPE | channel_pair_element() |
ID_ССЕ | 0x2 | ССЕ | coupling_channel_element() |
ID_LFE | 0x3 | LFE | Ife_channel_element() |
ID_DSE | 0x4 | DSE | data_stream_element() |
ID_PCE | 0x5 | PCE | program_config_element() |
ID_FIL | 0x6 | FIL | fill_element() |
ID_END | 0x7 | TERM |
|
element_instance_tag | Уникальный тег для всех синтаксических элементов, кроме fill_element(). Все синтаксические элементы, содержащие теги, могут встречаться более одного раза, но, за исключением data_stream_element(), должны иметь уникальный element_instance_tag в каждом raw_data_block(). Этот тег также используется для указания на синтаксические элементы аудио в single_channel_element(), channel_pair_element(), Ife_channel_element(), data_channel_element() и coupling_channel_element() в program_config_element() и обеспечивает возможность использования до 16 независимых program_config_element() (таблицы 13, 14, 22, 23, 24, 25, 26). |
6.2.2 Требования к буферу
6.2.2.1 Минимальный входной буфер декодера
Следующие правила используются для вычисления максимального количества битов во входном буфере как для потока битов в целом, для любой данной программы, так и для любого данного SCE/CPE/CCE:
Входной размер буфера составляет 6144 бита на SCE или независимо переключаемого ССЕ, плюс 12288 битов на СРЕ (6144*NCC). Размеры общего буфера и отдельного буфера ограничиваются так, чтобы предел буферизации мог быть вычислен для всего потока битов, всей программы или для отдельного audio_channel_element(), позволяя декодеру разбивать многоканальный поток битов на отдельные моно и стерео потоки битов, которые декодируются отдельными моно и стерео декодерами соответственно. Все биты для LFE или зависимого ССЕ должны выделяться исходя из общих требований к буферу, основанных на независимых ССЕ, SCE и СРЕ. Кроме того, все биты, требуемые для любых DSE, PCE, FIL, фиксированных заголовков, переменных заголовков, byte_alignment и CRC, должны быть также выделены исходя из тех же самых общих требований к буферу.
6.2.2.2 Резервуар битов
Управление резервуаром битов осуществляется в кодере. Максимальный резервуар битов в кодере зависит от NCC и средней скорости передачи. Максимальный размер резервуара битов для каналов с постоянной скоростью передачи может быть вычислен путем вычитания среднего числа битов на блок из минимального входного размера буфера декодера. Например, при 96 кбит/с для сигнала стерео на частоте дискретизации 44,1 кГц среднее число битов на блок (mean_framelength) (96000 bit/s/44100 1/s* 1024) = 2229,1156.... Это приводит к максимальному размеру резервуара битов (max_bit_reservoir) INT (12288 битов - 2229,1156 ...) = 10058. Для каналов с переменной скоростью передачи кодер должен работать так, чтобы требования к входному буферу не превышали минимальный входной буфер декодера.
Состояние резервуара битов (bit_reservoir_state) передается в поле buffer_fullness либо как состояние резервуара битов, округленного до целого значения (adif_buffer_fullness), либо как состояние резервуара битов, разделенного на NCC, разделенного на 32 и округленного до целого значения (adts_buffer_fullness).
bit_reservoir_state последующих фреймов может быть получен следующим образом:
bit reservoir_state[frame] = bit_reservoir_state[frame - 1] + mean_framelength - framelength[frame].
Framelengths должны быть выбраны так, чтобы следующее условие выполнялось:
6.2.2.3 Максимальная скорость передачи
Максимальная скорость передачи зависит от частоты дискретизации звука. Она может быть вычислена по минимальному размеру входного буфера согласно формуле
В таблице 37 содержится несколько примеров максимальных скоростей передачи на канал в зависимости от используемой частоты дискретизации.
Таблица 37 - Максимальная скорость передачи в зависимости от частоты дискретизации
sampling_frequency | максимальная скорость передачи/NCC |
48 кГц | 288 кбит/с |
44,1 кГц | 264,6 кбит/с |
32 кГц | 192 кбит/с |
6.2.3 Процесс декодирования
Предполагая, что начало raw_data_block() известно, он может быть декодирован без использования дополнительной информации транспортного уровня и содержит 1024 отсчета звукового сигнала на один выходной канал. Частота дискретизации звукового сигнала, sampling_frequency_index, может быть указана в program_config_element() или специальным образом в зависимости от приложения. В последнем случае sampling_frequency_index должен быть обнаружен в потоке битов.
Так как данная частота дискретизации связана только с одной таблицей частот дискретизации, и так как максимальная гибкость требуется в диапазоне возможных частот дискретизации, следующая таблица должна использоваться, чтобы связать требуемую частоту дискретизации с желаемой.
Таблица 38 - Соответствие частот дискретизации
Диапазон частот, Гц | Частота дискретизации, Гц |
f> = 92017 | 96000 |
92017> f> = 75132 | 88200 |
75132> f> = 55426 | 64000 |
55426> f> = 46009 | 48000 |
46009> f> = 37566 | 44100 |
37566> f> = 27713 | 32000 |
27713> f> = 23004 | 24000 |
23004> f> = 18783 | 22050 |
18783> f> = 13856 | 16000 |
13856> f> = 11502 | 12000 |
11502> f> = 9391 | 11025 |
9391> f | 8000 |
raw_data_stream поддерживает кодирование каналов как с постоянной скоростью, так и с переменной. В каждом случае структура потока битов и работа декодера идентичны, за исключением некоторых незначительных отличий.
Для каналов с постоянной скоростью передачи кодер может добавлять элемент FIL, чтобы увеличить скорость до требуемого уровня. Декодер, считывающий данные канала с постоянной скоростью передачи, должен накопить минимальное число битов в его входном буфере до начала декодирования так, чтобы не произошло переполнение выходного буфера. В случае переменной скорости каждый raw_data_block() может обладать минимальной длиной (скоростью) так, чтобы достигалось требуемое качество звучания, и в декодере отсутствовали минимальные входные требования к данным до начала декодирования.
Примеры самых простых потоков битов:
Сегмент потока битов | Выходной сигнал |
<SCE> <TERM> <SCE> <TERM> ... | Моно сигнал |
<CPE> <TERM> <CPE> <TERM>... | Стереосигнал |
<SCE> <CPE> <CPE> <LFE> <TERM> <SCE> <CPE> <CPE> <LFE> <TERM> ... | Сигнал 5.1, |
где угловые скобки (<>) используются, чтобы разграничить синтаксические элементы. Для моно сигнала у каждого SCE должно быть то же самое значение в его element_instance_tag, и точно так же для сигнала стерео у каждого СРЕ должно быть то же самое значение в его element_instance_tag. Для сигналов 5.1 у каждого SCE должно быть то же самое значение в его element_instance_tag, каждый СРЕ, связанный с фронтальной парой каналов, должен иметь то же самое значение в его element_instance_tag, и каждый СРЕ, связанный с последней парой каналов, должен иметь то же самое значение в его element_instance_tag.
Если эти потоки битов должны быть переданы по каналу с постоянной скоростью передачи, то они могут включать в себя элемент fill_element() для подстройки мгновенной скорости передачи. В этом случае пример кодированного сигнала стерео
<СРЕ> <FIL> <TERM> <СРЕ> <FIL> <TERM> ...
Если потоки битов должны переносить вспомогательные данные при передаче по каналу с постоянной скоростью, то пример кодированного сигнала стерео
<CPE><DSE><FIL><TERM><CPE><DSE><FIL><TERM>....
Все элементы data_stream_element() имеют одинаковый element_instance_tag, если они - часть одного потока данных.
6.3 Элемент одиночного канала (SCE), элемент парного канала (СРЕ) и поток индивидуального канала (ICS)
6.3.1 Определения
6.3.1.1 Элементы данных
common_window | Флаг, указывающий на совместное использование общего ics_info() двумя individual_channel_stream(). В случае совместного использования ics_info() является частью channel_pair_element() и должен использоваться для обоих каналов. Иначе ics_info() является частью каждого individual_channel_stream() (таблица 14). |
ics_reserved_bit | Флаг, зарезервированный для будущего использования. Должен быть равен ’0’. |
window_sequence | Указывает на последовательность окон, как определено в таблице 44 (таблица 15). |
window_shape | 1-битное поле, определяющее тип окна для переключения окон (таблица 15). |
max_sfb | Количество полос масштабных коэффициентов на группу (таблица 15). |
scale_factor_grouping | Битовое поле, которое содержит информацию о группировке коротких спектральных данных (таблица 15). |
6.3.1.2 Функции данных
individual_channel_stream () | Содержит данные, необходимые для декодирования одного канала (таблица 16). |
ics_info () | Содержит служебную информацию, необходимую для декодирования individual_channel_stream(). Потоки individual_channel_stream () элемента channel_pair_element () могут совместно использовать один общий ics_info() (таблица 15). |
6.3.1.3 Элементы справки
scalefactor window band | Термин для полос масштабных коэффициентов в пределах окна, см. таблицы 45-57. |
scalefactor band | Термин для полос масштабных коэффициентов в пределах группы. В случае EIGHT_SHORT_SEQUENCE и группировки, полоса масштабных коэффициентов может содержать несколько масштабных коэффициентов окна соответствующей частоты. Для всех остальных window_sequences полосы масштабных коэффициентов и полосы масштабных коэффициентов в окне идентичны. |
g | Индекс группы. |
win | Индекс окна в пределах группы. |
sfb | Индекс полосы масштабных коэффициентов в пределах группы. |
swb | Индекс окна масштабных коэффициентов в пределах окна. |
bin | Индекс коэффициента. |
num_window_groups | Количество групп окон, которые совместно используют один набор масштабных коэффициентов. |
window_group_length[g] | Число окон в каждой группе. |
bit_set (bit_field, bit_num) | Функция, которая возвращает значение bit_num поля bit_field (самый правый бит - бит 0). |
num_windows | Количество окон в фактической последовательности окон. |
num_swb_long_window | Количество полос масштабных коэффициентов для длинных окон. Это число должно быть выбрано в зависимости от частоты дискретизации. См. 6.9. |
num_swb_short_window | Количество оконных масштабных коэффициентов для коротких окон. Это число должно быть выбрано в зависимости от частоты дискретизации. См. 6.9. |
num_swb | Количество оконных полос масштабных коэффициентов для коротких окон в случае EIGHT_SHORT_SEQUENCE, в противном случае - количество оконных полос масштабных коэффициентов для длинных окон. |
swb_offset_long_window [swb] | Таблица, содержащая индекс самого низкого спектрального коэффициента полосы масштабных коэффициентов sfb для длинных окон. Эта таблица должна быть выбрана в зависимости от частоты дискретизации. См. 6.9. |
swb_offset_short_window [swb] | Таблица, содержащая индекс самого низкого спектрального коэффициента полосы масштабных коэффициентов sfb для коротких окон. Эта таблица должна быть выбрана в зависимости от частоты дискретизации. См. 6.9 |
swb_offset [swb] | Таблица, содержащая индекс самого низкого спектрального коэффициента полосы масштабных коэффициентов sfb для коротких окон в случае EIGHT_SHORT_SEQUENCE, иначе для длинных окон. |
sect_sfb_offset [g] [section] | Таблица, которая содержит номер первого коэффициента для section_data () в пределах группы. Это смещение зависит от window_sequence и scale_factor_grouping. |
sampling_frequency_index | Указывает на частоту дискретизации согласно таблицам 8 и 35. |
6.3.2 Процесс декодирования
6.3.2.1 Декодирование single_channel_element () и channel_pair_element ()
Элемент single_channel_element () составляется из element_instance_tag и individual_channel_stream. В этом случае ics_info () всегда располагается в individual_channel_stream.
Элемент channel_pair_element () начинается с element_instance_tag и флага common_window. Если common_window равен ’1’, то ics_info() используется совместно для двух individual_channel_stream элементов, и информация о MS передается. Если common_window равен ’0’, то ics_info() существует в каждом individual_channel_stream и информация MS не представлена.
6.3.2.2 Декодирование individual_channel_stream ()
В individual_channel_stream используется следующий порядок декодирования:
- получить global_gain;
- получить ics_info () (искать в потоке битов, если общая информация не присутствует);
- получить section_data ();
- получить scalefactor_data (), если есть;
- получить pulse_data (), если есть;
- получить tns_data (), если есть;
- получить gain_control_data (), если есть;
- получить spectral_data (), если есть.
Процесс восстановления pulse_data описан в разделе 7, tns_data - в разделе 12, gain_control данных - в разделе 14. Краткий обзор декодирования ics_info() (см. 6.3), данных раздела 7, масштабных коэффициентов (разделы 7 и 9) и спектральных данных (раздел 7) дается ниже.
6.3.2.3 Восстановление ics_info ()
Для элементов single_channel_element () ics_info () всегда располагается непосредственно после global_gain в inidividual_channel_stream (). Для channel_pair_element () есть два возможных расположения ics_info (). Если оба отдельных канала в парном окне переключаются вместе, то ics_info () располагается непосредственно после common_window в channel_pair_element () и common_window устанавливается в 1. Иначе ics_info () присутствует сразу после global_gain в каждом из двух individual_channel_stream () в channel_pair_element (), и common_window устанавливается в 0.
ics_info () содержит информацию об окне, связанную с ICS, и таким образом позволяет каналам в channel_pair переключаться при необходимости независимо. Кроме того, ics_info () содержит max_sfb, который определяет верхнюю границу количества ms_used [] и predictor_used [] бит, которые должны быть переданы. Если window_sequence является EIGHT_SHORT_SEQUENCE, то scale_factor_grouping передается. Если ряд коротких окон образует группу, то они совместно используют масштабные коэффициенты, так же как и позиции intensity stereo и их спектральные коэффициенты чередуются. Первое короткое окно всегда является новой группой, таким образом, группировка битов не передается. Последующие короткие окна находятся в той же самой группе, если соответствующий бит группировки равен 1. Новая группа начинается, если соответствующий бит группировки равен 0. Предполагается, что сгруппированные короткие окна обладают подобной сигнальной статистикой. Следовательно, их спектральные значения чередуются для размещения коррелированных коэффициентов друг с другом. Способ чередования показан на рисунке 6. ics_info () также содержит данные предсказания для отдельного канала или пары каналов (см. раздел 11).
6.3.2.4 Восстановление данных разделения
В ICS восстанавливается информация об одном длинном окне или восьми коротких окнах. Данные разделения являются первым полем, которое должно быть декодировано и описывают коды Хаффмана, которые применяются к полосам масштабных коэффициентов в ICS (см. разделы 7 и 9). Форма данных разделения: sect_cb кодовая книга для раздела и sect_len длина раздела.
Эта длина восстанавливается путем последовательного считывания разделов из потока битов, с добавлением символа escape к разделу, до тех пор, пока значение, отличное от escape не будет найдено и добавлено к разделу. Этот процесс ясно объясняется при использовании С-подобного описания синтаксиса. Следует учесть, что в пределах каждой группы разделы должны формировать полосы масштабных коэффициентов от нуля до max_sfb так, чтобы первый раздел в пределах каждой группы начинался с нулевой полосы, а последний раздел заканчивался на полосе max_sfb.
Данные разделения описывают кодовую книгу и затем длину раздела, использующего эту кодовую книгу, начинающегося с первой полосы масштабных коэффициентов и продолжающегося, пока не будет достигнуто полное количество полос масштабных коэффициентов.
После того как это описание предоставлено, все масштабные коэффициенты и спектральные данные, соответствующие нулевой кодовой книге, обнуляются, и значения, соответствующие этим масштабным коэффициентам или спектральным данным, не будут переданы. Масштабные коэффициенты любых полос масштабных коэффициентов, кодовая книга Хаффмана которых является нулем, будут отброшены. Точно так же, все спектральные данные, относящиеся к нулевой кодовой книге Хаффмана, исключаются (см. разделы 7 и 9).
Кроме того, спектральные данные, относящиеся к полосам масштабных коэффициентов, у которых есть сборник интенсивностных кодов, не будут переданы, однако управляющие интенсивностные коэффициенты будут переданы вместо масштабных коэффициентов, как описано в 10.2.
6.3.2.5 Поиск данных о масштабных коэффициентах и декодирование
Для каждой полосы масштабных коэффициентов, которая не находится в разделе, кодированном с помощью нулевой кодовой книги (ZERO_HCB), передается масштабный коэффициент. Такие полосы будут обозначены как "активные" полосы масштабных коэффициентов, а соответствующие масштабные коэффициенты - как "активные" масштабные коэффициенты. Глобальное усиление, первый элемент данных в ICS, обычно является значением первого активного масштабного коэффициента. Все масштабные коэффициенты (и управляющие коэффициенты) передаются с помощью кодированных Хаффманом ДИКМ значений относительно предыдущего "активного" масштабного коэффициента (см. разделы 9 и 11). Первый активный масштабный коэффициент дифференциально кодируется относительно значения глобального усиления. Следует учесть, что неэффективно использовать global_gain, отличный от первого активного масштабного коэффициента и затем ненулевое значение ДИКМ для первого ДИКМ значения масштабного коэффициента. Если какие-либо управляющие интенсивностные коэффициенты получены вперемешку с ДИКМ масштабными коэффициентами, они отправляются в модуль intensity stereo, и не включаются в ДИКМ-кодирование значений масштабных коэффициентов (см. 10.2). Значение первого активного масштабного коэффициента обычно передается как global_gain с первым ДИКМ масштабным коэффициентом, имеющим нулевое значение. Как только масштабные коэффициенты декодируются и их целые значения получены, фактические значения находятся через степенную функцию (см. раздел 9).
6.3.2.6 Поиск спектральных данных и декодирование
Спектральные данные восстанавливаются как последняя часть анализа ICS. Они состоят из всех ненулевых коэффициентов, оставшихся в спектре или спектрах, упорядоченных, как описано в ICS_info. Для каждой ненулевой, неинтенсивностной кодовой книги данные восстанавливаются с помощью Хаффмана, декодированием четверок или пар, как показано в инструменте прозрачного кодирования (см. раздел 7). Если спектральные данные связываются с беззнаковой кодовой книгой Хаффмана, необходимые знаковые биты следуют за кодовым словом Хаффмана (см. 7.3). В случае сборника кодов ESCAPE, при получении значения escape, соответствующая escape-последовательность появится после указанного кода Хаффмана. Может встречаться от нуля до двух escape-последовательностей для каждой кодовой комбинации в сборнике кодов ESCAPE, в соответствии с наличием escape-значений в декодируемой кодовой комбинации. Для каждого раздела декодирование Хаффмана продолжается до тех пор, пока все спектральные значения в этом разделе не будут декодированы. Как только все разделы декодированы, данные умножаются на декодированные масштабные коэффициенты, и, в случае необходимости, устраняется чередование.
6.3.3 Окна и последовательности окон
Квантование и кодирование выполняются в частотном пространстве. С этой целью временной сигнал в кодере трансформируется в частотное пространство. Декодер выполняет обратное преобразование (см. раздел 13). В зависимости от сигнала кодер может варьировать частотно-временное разрешение путем использования двух различных окон: LONG_WINDOW и SHORT_WINDOW. Для переключения между окнами используются промежуточные окна перехода, LONG_START_WINDOW и LONG_STOP_WINDOW. В таблице 43 даны окна, соответствующая длина преобразования и форма окон. Используются 2 размера преобразования: 1024 (называемое длинным преобразованием) и 128 коэффициентов (называемое коротким преобразованием).
Последовательности окон образуются из окон исходя из того, что raw_data_block () всегда содержит данные, соответствующие 1024 выходным отсчетам. Элемент данных window_sequence определяет используемую последовательность окон. В таблице 44 показано, как последовательности окон образуются из отдельных окон.
6.3.4 Полосы масштабных коэффициентов и группировка
Множество инструментов декодера выполняют операции над группами последовательных спектральных значений, называемыми полосами масштабных коэффициентов (сокращенно ’sfb’). Ширина полос масштабных коэффициентов выбирается так, чтобы имитировать критические полосы слуховой системы человека. По этой причине число полос масштабных коэффициентов и их ширина зависят от длины преобразования и частоты дискретизации. В таблицах 45-57 приведены смещения начала каждой полосы масштабных коэффициентов для длин преобразования 1024 и 128 и различных частот дискретизации, соответственно.
Чтобы уменьшить количество служебной информации в случае использования последовательностей, которые содержат SHORT_WINDOWS, соседние SHORT_WINDOWS могут быть сгруппированы (см. рисунок 4). Информация о группировке содержится в элементе данных scale_factor_grouping. Группировка означает, что передается только один набор масштабных коэффициентов для всех сгруппированных окон, как будто это одно окно. Масштабные коэффициенты в этом случае применяются к соответствующим спектральным данным всех сгруппированных окон. Чтобы увеличить эффективность прозрачного кодирования (см. раздел 7), спектральные данные группы передаются в порядке чередования (см. 6.3.5). Чередование выполняется по полосам масштабных коэффициентов так, чтобы спектральные данные могли быть сгруппированы, чтобы сформировать виртуальную полосу масштабных коэффициентов, к которой может быть применен общий масштабный коэффициент. В пределах этого документа выражение "полоса масштабных коэффициентов" (сокращенно ’sfb’) означает эти виртуальные полосы масштабных коэффициентов. Если речь идет о полосах масштабных коэффициентов отдельных окон, используется выражение "оконная полоса масштабных коэффициентов" (сокращенно ’sfb’). Из-за влияния на полосы масштабных коэффициентов группировка сказывается на section_data, порядке следования спектральных данных (см. 6.3.5) и общем количестве полос масштабных коэффициентов. Для LONG_WINDOW полосы масштабных коэффициентов и оконные полосы масштабных коэффициентов окна идентичны, так как на одно окно приходится только одна группа.
Чтобы уменьшить количество информации, необходимой для передачи служебных данных, относящихся к каждой полосе масштабных коэффициентов, передается элемент данных max_sfb. Его значение превышает на единицу самую высокую активную полосу масштабных коэффициентов во всех группах. max_sfb влияет на интерпретацию данных раздела (см. раздел 7), передачу масштабных коэффициентов (см. разделы 7 и 9), передачу данных предсказывающего устройства (см. раздел 11) и передачу ms_mask (см. 10.1).
Так как полосы масштабных коэффициентов являются основным элементом алгоритма кодирования, необходимы некоторые справочные переменные и массивы для описания процесса декодирования во всех инструментах, с использованием полос масштабных коэффициентов. Эти справочные переменные зависят от sampling_frequency, window_sequence, scalefactor_grouping и max_sfb и должны быть созданы для каждого raw_data_block (). Псевдокод, показанный ниже, описывает:
- как определить число окон в window_sequence num_windows;
- как определить число window_groups num_window_groups;
- как определить число окон в каждой группе window_group_length [g];
- как определить общее количество оконных полос масштабных коэффициентов num_swb для фактического типа окна;
- как определить swb_offset [swb], смещение первого коэффициента в оконной полосе масштабных коэффициентов swb используемого окна;
- как определить sect_sfb_offset [g][section], смещение первого коэффициента в разделе section.
Это смещение зависит от window_sequence и scale_factor_grouping и требуется, чтобы декодировать spectral_data ().
Длинное окно преобразования всегда описывается как window_group, содержащая единственное окно. Так как число полос масштабных коэффициентов и их ширина зависят от частоты дискретизации, зависимые переменные индексируются с sampling_frequency_index для выбора соответствующей таблицы.
6.3.5 Порядок следования спектральных коэффициентов в spectral_data ()
Для окон ONLY_LONG_SEQUENCE (num_window_groups=1, window_group_length [0] = 1) спектральные данные расположены в порядке возрастания их номеров, как показано на рисунке 5.
Для окна EIGHT_SHORT_SEQUENCE порядок спектральных составляющих зависит от группировки следующим способом:
- группы следуют друг за другом;
- в пределах группы полоса масштабных коэффициентов состоит из спектральных данных всех сгруппированных SHORT_WINDOW окон соответствующей оконной полосы масштабных коэффициентов. Для примера, пусть длина группы находится в диапазоне от первого до восьмого окна SHORT_WINDOW;
- если есть восемь групп с единичной длиной каждая (num_window_groups = 8, window_group_length [0] = 1), результатом является последовательность их восьми спектральных значений, расположенных в порядке возрастания;
- если есть только одна группа с длиной восемь (num_window_group = 1, window_group_length [0] = 8), в результате спектральные данные всех восьми SHORT_WINDOW окон чередуются оконными полосами масштабных коэффициентов;
- на рисунке 6 показано расположение составляющих спектра для EIGHT_SHORT_SEQUENCE с группировкой SHORT_WINDOW согласно рисунку 4 (num_window_groups = 4);
- в пределах оконной полосы масштабных коэффициентов, коэффициенты расположены в порядке возрастания.
6.3.6 Длина выходного слова
Глобальное усиление для каждого звукового канала масштабируется так, чтобы целочисленная часть выхода ОМДКП могла использоваться непосредственно в качестве 16-разрядных выходных ИКМ аудиоданных, поступающих в цифро-аналоговый преобразователь (D/A). Это является режимом по умолчанию и обеспечивает корректные уровни громкости. Если декодер обладает цифро-аналоговым преобразователем, имеющим разрешение больше 16 разрядов, то выход ОМДКП может быть усилен так, чтобы сформировать требуемый размер слова. В этом случае уровень на выходе преобразователя будет соответствовать случаю с 16-разрядным D/A, однако будет обладать большим динамическим диапазоном и меньшим уровнем шумов квантования. Аналогичным образом обстоит ситуация с более короткими словами.
6.4 Канал низкой частоты (LFE)
Для совместимости с обычной структурой декодера lfe_channel_element() определяется как стандартный individual_channel_stream (0) элемент, равный single_channel_element (). Таким образом, декодирование может быть выполнено с помощью стандартной процедуры декодирования single_channel_element ().
Чтобы достичь большей скорости передачи и эффективности аппаратной реализации декодера LFE, требуется применить несколько ограничений к опциям, используемым для кодирования этого элемента:
- поле window_shape всегда устанавливается в 0, синусное окно (см. 4.3, таблица 15).
- поле window_sequence всегда устанавливается в 0 (ONLY_LONG_SEQUENCE) (см. 4.3, таблица 15).
- только самые нижние 12 спектральных коэффициентов любого LFE могут быть ненулевыми.
- временное формирование шума не используется, т.е. tns_data_present устанавливается в 0 (см. 4.3, таблица 16).
- предсказание не используется, predictor_data_present устанавливается в 0 (см. 4.3, таблица 15).
Наличие каналов LFE зависит от используемого профиля.
6.5 Элемент конфигурации программы (РСЕ)
Элемент program_config_element () может присутствовать как вне данных ААС, например в adif_header(), так и внутри ААС как синтаксический элемент в raw_data_block ().
6.5.1 Функции данных
byte_alignment () | Для элементов РСЕ в пределах raw_data_block (), выравнивание относительно первого бита raw_data_block (). Для элементов РСЕ в пределах adif_header(), выравнивание относительно первого бита заголовка. |
6.5.2 Элементы данных
profile | Двухбитный индекс профиля в таблице 31 (таблица 25). |
sampling_frequency_index | Указывает на частоту дискретизации программы (и всех других программ в этом потоке битов). |
num_front_channel_elements | Число синтаксических элементов аудио в передних каналах, от переднего к заднему, симметрично левые и правые, или попеременно левые и правые в случае элементов одиночного канала (таблица 25). |
num_side_channel_elements | Число элементов боковых каналов (таблица 25). |
num_back_channel_elements | То же, для заднего канала (таблица 25). |
num_lfe_channel_elements | Число элементов LFE канала (таблица 25). |
num_assoc_data_elements | Число элементов, связанных с этой программой (таблица 25). |
num_valid_cc_elements | Число элементов ССЕ, которые могут быть добавлены к аудиоданным этой программы (таблица 25). |
mono_mixdown_present | Один бит, указывающий на присутствие элемента моно сведения (таблица 25). |
mono_mixdown_element_number | Количество указанных SCE моно сведения (таблица 25). |
stereo_mixdown_present | Один бит, указывающий на присутствие стерео сведения (таблица 25). |
stereo_mixdown_element_number | Число указанных СРЕ стерео сведения (таблица 25). |
matrix_mixdown_idx_present | Один бит, указывающий на присутствие матричной информации средствами индекса матричного коэффициента стерео (таблица 39). Для всех конфигураций, кроме 3/2, этот бит должен быть равен ’0’ (таблица 25). |
matrix_mixdown_idx | Двухбитное поле, определяющее индекс коэффициента сведения, для использования в объединении 5 каналов в 2. Возможные матричные коэффициенты перечислены в таблице 39 (таблица 25). |
pseudo_surround_enable | Один бит, указывающий на возможность сведения для псевдопространственного окружения (таблица 25). |
front_element_is_cpe | Указывает, являются ли SCE или СРЕ передними элементами (таблица 25). ’0’ соответствует SCE,’1’ соответствует СРЕ. |
front_element_tag_select | instance_tag SCE/CPE, адресуемых как передние элементы (таблица 25). |
side_element_is_cpe | См. front_element_is_cpe, но для элементов стороны (таблица 25). |
side_element_tag_select | См. front_element_tag_select, но для элементов стороны (таблица 25). |
back_element_is_cpe | См. front_element_is_cpe, но для задних элементов (таблица 25). |
back_element_tag_select | См. front_element_tag_select, но для задних элементов (таблица 25). |
lfe_element_tag_select | instance_tag канала низкой частоты (таблица 25). |
assoc_data_element_tag_select | instance_tag DSE (таблица 25). |
valid_cc_element_tag_select | instance_tag ССЕ (таблица 25). |
cc_element_is_ind_sw | Один бит, указывающий, что соответствующий ССЕ - независимо переключаемый спаренный канал (таблица 25). |
comment_field_bytes | Длина поля комментария, в байтах (таблица 25). |
comment_field_data | Данные в поле комментария (таблица 25). |
Обращение к элементам SCE или СРЕ в пределах РСЕ происходит с помощью двух элементов синтаксиса. Во первых, элемент синтаксиса is_cpe выбирает, поэтому происходит обращение к SCE или СРЕ. Во вторых, элемент синтаксиса tag_select выбирает instance_tag SCE/CPE. Обращение к элементам LFE, ССЕ и DSE осуществляется непосредственно по их instance_tag.
6.5.3 Конфигурация канала
Аудио синтаксис ААС обеспечивает три способа передачи соответствия каналов физическим расположениям динамиков.
6.5.3.1 Явное соответствие каналов с настройками по умолчанию
Соответствия каналов по умолчанию определяются в таблице 42 (значения больше 0).
6.5.3.2 Явное соответствие каналов на основе program_config_element ()
Любая возможная конфигурация каналов может быть определена при помощи program_config_element (). Существует 16 доступных элементов РСЕ, каждый из которых может указывать на отдельную программу, которая присутствует в потоке необработанных данных. Все доступные РСЕ в пределах raw_data_block() должны следовать перед всеми другими синтаксическими элементами. Программы могут совместно использовать некоторые общие аудио синтаксические элементы, например общий channel_pair_element () и различные каналы комментариев на различных языках. Данный program_config_element () содержит информацию, имеющую отношение только к одной программе из тех, которые могут быть включены в raw_data_stream (). Включенный в РСЕ "список передних каналов", организован по принципу сначала центральный, затем остальные, левый и правый. В этом списке SCE центрального канала, если имеется, должен следовать первым, а любые другие SCE должны появляться в парах, составляя пару LR. Если указаны только два SCE, это соответствует одной стереофонической паре LR.
После списка передних каналов имеется "список боковых каналов", состоящих из СРЕ или из пар SCE. Они перечисляются в порядке от переднего к тыловому. Снова, в случае пары SCE, первым идет левый канал, вторым - правый канал.
После списка боковых каналов следует список тыловых каналов, перечисляемых снаружи внутрь. Любой SCE, кроме последнего, должен быть спарен, и наличие двух SCE (отдельных или после СРЕ) указывает, что два SCE являются левым и правым тыловым центром соответственно.
Конфигурация, обозначенная РСЕ, вступает в силу в raw_data_block (), содержащем РСЕ. Количество передних, боковых и задних каналов, указанное в РСЕ, должно присутствовать в том блоке и всех последующих raw_data_block () блоках, пока не будет передан raw_data_block(), содержащий новый РСЕ.
Также определяются другие элементы. Список одного или нескольких LFE, список одного или нескольких (зависимых от профиля) ССЕ, для осуществления управления диалогами и различными спаренными интенсивностными потоками различных каналов, при использовании тех же основных каналов. Список потоков данных, связанных с программой, также может связывать один или более потоков данных с программой. Элемент конфигурации программы также позволяет описать один монофонический и один стереофонический каналы, объединенные в канал сведения для одновременной передачи.
Для получения доступа к полной версии без ограничений вы можете выбрать подходящий тариф или активировать демо-доступ.