Спецификация формата Core Audio

В этой главе описываются и указывает Формат Core Audio Apple. Обратитесь к Обзору Файла CAF для введения в CAF, включая информацию о возможностях CAF и расположении файла.

Типы данных

Все поля в файле CAF находятся в (сетевом) порядке байтов с обратным порядком байтов, за исключением аудиоданных, которые могут быть большими - или прямой порядок байтов в зависимости от формата данных. Формат аудиоданных описан Аудио блоком Описания.

Все поля с плавающей точкой в файле CAF должны соответствовать спецификации IEEE 754. Посмотрите http://grouper .ieee.org/groups/754/.

Заголовок файла CAF и заголовки блока

Заголовок файла CAF и заголовок блока в каждом блоке, являются требуемыми элементами в каждом файле CAF. Они служат для создания файла и его самоописания блоков.

Заголовок файла CAF

Файл CAF начинается с простого заголовка. CAFFileHeader структура описывает заголовок файла.

struct CAFFileHeader {
    UInt32  mFileType;
    UInt16  mFileVersion;
    UInt16  mFileFlags;
};
mFileType

Тип файла. Это значение должно быть установлено в 'caff'. Необходимо рассмотреть только файлы с mFileType полевой набор к 'caff' быть допустимыми файлами CAF.

mFileVersion

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

mFileFlags

Флаги зарезервированы Apple для будущего использования. Для файлов CAF v1, должен быть установлен в 0. Необходимо проигнорировать любое значение этого поля, которое Вы не понимаете, и необходимо принять файл как допустимый файл CAF, пока поля типа версии и типа файла допустимы.

Заголовок блока CAF

Каждый блок в файле CAF имеет заголовок, и каждый такой заголовок содержит два обязательных поля как показано в CAFChunkHeader структура:

struct CAFChunkHeader {
    UInt32  mChunkType;
    SInt64  mChunkSize;
};
mChunkType

Тип блока, описанный как четыре кода символа. Apple резервирует все коды, использующие только строчные буквенные символы — т.е. символы в диапазоне ASCII 'a''z' вместе с ' ' (пространство) и '.' (период). Определенные с помощью приложения идентификаторы блока должны включать по крайней мере один символ за пределами этого диапазона (см. Определяемый пользователем Блок.

mChunkSize

Размер, в байтах, данных разделяет для блока. Это - размер блока не включая заголовок. Если не отмечено иначе для определенного типа блока, mChunkSize должно всегда быть допустимым.

Блок Аудиоданных может использовать специальное значение для mChunkSize из –1 когда не известен размер раздела данных. Посмотрите Блок Аудиоданных.

Файлы CAF могут содержать блоки, содержащие ряд записей — особенно Строковый блок, блок Маркера, блок Области и информационный блок. Заголовки этих блоков могут указать размер раздела данных, который больше, чем текущее значимое содержание блока для резервирования комнаты для дополнительных данных. Разделы данных таких блоков начинаются со спецификатора для текущего числа действительных доступов в блоке.

Файлы CAF могут также иметь дополнительный Свободный блок, используемый для резервирования дополнительного пространства для файла в целом.

Посмотрите свободный блок, строковый блок, блок маркера, блок области и информационный блок.

Требуемые блоки

Каждый файл CAF должен иметь Аудио блок Описания и блок Аудиоданных. Файлы CAF, содержащие аудиоданные или переменной частоты кадров с переменной скоростью передачи, должны также иметь Пакетный Табличный блок.

Аудио блок описания

Аудио блок Описания требуется и должен сразу появиться в файле CAF после заголовка файла. Это описывает формат аудиоданных в блоке Аудиоданных.

Аудио заголовок блока описания

Таблица 2-1 показывает значения для полей в Аудио заголовке блока Описания.

Табличное 2-1  Описание Аудио разделяет поля заголовка на блоки

Поле

Значение

mChunkType

‘desc’

mChunkSize

sizeof(CAFAudioFormat)

Размер блока фиксируется в mChunkSize = sizeof(CAFAudioFormat) размещать информацию в Аудио разделе данных блока Описания.

Аудио раздел данных блока описания

Раздел данных в Аудио блоке Описания описывает формат аудиоданных, содержавших в блоке Аудиоданных. Посмотрите Блок Аудиоданных. Поскольку определения должны были интерпретировать эти поля, посмотрите Пакеты, Кадры и Выборки.

struct CAFAudioFormat {
    Float64 mSampleRate;
    UInt32  mFormatID;
    UInt32  mFormatFlags;
    UInt32  mBytesPerPacket;
    UInt32  mFramesPerPacket;
    UInt32  mChannelsPerFrame;
    UInt32  mBitsPerChannel;
};
mSampleRate

Число демонстрационных кадров в секунду данных. Можно объединить это значение с кадрами на пакет для определения количества времени, представленного пакетом. Это значение должно быть ненулевым.

mFormatID

Четыре кода символа, указывающие общий вид данных в потоке. См. mFormatID Поле. Это значение должно быть ненулевым.

mFormatFlags

Отмечает определенный для каждого формата. Может быть установлен в 0 не указать флаги формата. См. mFormatFlags Поле.

mBytesPerPacket

Число байтов в пакете данных. Для форматов с переменным размером пакета это поле установлено в 0. В этом случае файл должен включать Пакетный Табличный Пакетный Табличный Блок блока. Пакеты всегда выровненные к границе байта. Для примера Аудио блока Описания для формата с переменным размером пакета посмотрите Сжатые Форматы аудио.

mFramesPerPacket

Число демонстрационных кадров в каждом пакете данных. Для сжатых форматов это поле указывает число кадров, закодированных в каждом пакете. Для форматов с переменным числом кадров на пакет это поле установлено в 0 и файл должен включать Пакетный Табличный Пакетный Табличный Блок блока.

mChannelsPerFrame

Число каналов в каждом кадре данных. Это значение должно быть ненулевым.

mBitsPerChannel

Число битов демонстрационных данных для каждого канала в кадре данных. Это поле должно быть установлено в 0 если формат данных (например, какой-либо сжатый формат) не содержит отдельные выборки для каждого канала (см. Сжатые Форматы аудио).

Аудио блок Описания может полностью описать любой формат с постоянной скоростью передачи, имеющий один или несколько каналов того же размера. Для данных с переменной скоростью передачи файл CAF также требует Пакетного Табличного блока. Посмотрите Пакетный Табличный Блок.

Файл CAF может сохранить любое число звуковых каналов. mChannelsPerFrame поле указывает число каналов в данных (или закодированный в данных для сжатых форматов). Для несжатых форматов, mBitsPerChannel поле указывает, сколько битов присваивается каждому каналу (для сжатых форматов, это поле 0). Расположение каналов описано блоком Расположения Канала (Блок Расположения Канала).

Поле mFormatID

Следующее перечисление перечисляет некоторые в настоящее время определяемые значения для mFormatID поле. Этот список не является исчерпывающим.

enum {
    kAudioFormatLinearPCM      = 'lpcm',
    kAudioFormatAppleIMA4      = 'ima4',
    kAudioFormatMPEG4AAC       = 'aac ',
    kAudioFormatMACE3          = 'MAC3',
    kAudioFormatMACE6          = 'MAC6',
    kAudioFormatULaw           = 'ulaw',
    kAudioFormatALaw           = 'alaw',
    kAudioFormatMPEGLayer1     = '.mp1',
    kAudioFormatMPEGLayer2     = '.mp2',
    kAudioFormatMPEGLayer3     = '.mp3',
    kAudioFormatAppleLossless  = 'alac'
};
kAudioFormatLinearPCM

Линейный PCM. Использует PCM-связанные флаги формата, обсужденные в mFormatFlags Поле. Посмотрите Линейный PCM для получения дополнительной информации о линейных форматах PCM.

kAudioFormatAppleIMA4

Реализация Apple IMA 4:1 ADPCM. Не имеет никаких флагов формата. Посмотрите Сжатые Форматы аудио для получения дополнительной информации об этом и другие сжатые форматы аудио.

kAudioFormatMPEG4AAC

MPEG 4 AAC. mFormatFlags поле должно содержать тип объекта аудио MPEG 4 постоянное указание определенного вида данных.

kAudioFormatMACE3

MACE 3:1; не имеет никаких флагов формата.

kAudioFormatMACE6

MACE 6:1; не имеет никаких флагов формата.

kAudioFormatULaw

μLaw 2:1; не имеет никаких флагов формата.

kAudioFormatALaw

aLaw 2:1; не имеет никаких флагов формата.

kAudioFormatMPEGLayer1

MPEG 1 или 2, аудио Уровня 1. Не имеет никаких флагов формата.

kAudioFormatMPEGLayer2

MPEG 1 или 2, аудио Уровня 2. Не имеет никаких флагов формата.

kAudioFormatMPEGLayer3

MPEG 1 или 2, аудио Уровня 3 (т.е. MP3). Не имеет никаких флагов формата.

kAudioFormatAppleLossless

Apple Lossless; не имеет никаких флагов формата.

Поле mFormatFlags

mFormatFlags поле обеспечивает подробную спецификацию для форматов аудиоданных, требующих его. Они включают линейный PCM, MPEG 4 AAC и AC 3. Для форматов аудио, не использующих флаги форматирования, это поле должно быть установлено в 0.

Флаговые биты, не указанные для любого опубликованного формата, резервируются для будущего использования. Для совместимости те флаговые биты должны быть установлены в 0.

Линейный PCM форматирующие флаги может иметь следующие значения:

enum {
    kCAFLinearPCMFormatFlagIsFloat         = (1L << 0),
    kCAFLinearPCMFormatFlagIsLittleEndian  = (1L << 1)
};
kCAFLinearPCMFormatFlagIsFloat

1 для плавающей точки, 0 для целого числа со знаком.

kCAFLinearPCMFormatFlagIsLittleEndian

1 для прямого порядка байтов, 0 для обратного порядка байтов.

Флаги форматирования MPEG 4 AAC используют Типы объектов Аудио MPEG 4, определенные для AAC. Эти значения подвергаются версии MPEG 4 организации по стандартизации.

 
enum {
 kMP4Audio_AAC_LC_ObjectType  = 2
};

Линейный PCM

Линейный PCM (импульсно-кодовый модулируемый) данные является наиболее распространенным несжатым форматом аудиоданных. Для всех линейных форматов PCM, mFramesPerPacket поле равняется 1 по определению. mBytesPerPacket поле тогда равно числу байтов на кадр. Все пакеты являются выровненным байтом.

Следующие изменения линейного аудио PCM должны поддерживаться всеми синтаксическими анализаторами CAF:

  • Любая частота дискретизации

  • Выборки 16-, 24-, и 32-разрядное целое число со знаком, и большое - и прямой порядок байтов

  • Выборки 32-и 64-разрядная плавающая точка, и большая - и прямой порядок байтов

Выборки 24 битов обычно сохранены в файлах CAF PCM или в (упакованных) 3 байтах за выборку или в (распакованных) форматах 4 байтов за выборку. Для приспосабливания спецификации CAF необходимо поддерживать оба метода хранения.

Как пример распакованных данных, для описания 16 битов, стерео с обратным порядком байтов, с частотой дискретизации 44 100 кадров в секунду, Вы использовали бы Аудио значения полей Описания в Таблице 2-2.

Табличные 2-2  значения полей Описания Аудио для обратного порядка байтов распаковали 16-разрядный PCM

Поле

Значение

mSampleRate

44100.

mFormatID

kAudioFormatLinearPCM

mFormatFlags

0 (целое число с обратным порядком байтов)

mChannelsPerFrame

2

mBitsPerChannel

16

mFramesPerPacket

1

mBytesPerPacket

4

В упакованном чемодане каждая выборка на 24 бита приводит 3 байта в рабочее состояние в файле. Например, для описания 24 битов, стерео с прямым порядком байтов, с частотой дискретизации 48 000 кадров в секунду, Вы использовали бы Аудио значения полей Описания в Таблице 2-3.

Табличные 2-3  значения полей Описания Аудио для прямого порядка байтов упаковали 24-разрядный PCM

Поле

Значение

mSampleRate

48000.

mFormatID

kAudioFormatLinearPCM

mFormatFlags

kCAFLinearPCMFormatFlagIsLittleEndian

mChannelsPerFrame

2

mBitsPerChannel

24

mFramesPerPacket

1

mBytesPerPacket

6

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

00 LL XX MM

где MM старший значащий байт и LL младше значащее.

Версия с обратным порядком байтов 24-разрядного аудио PCM в 4 байтах похожа на это:

MM XX LL 00

Аудио блок Описания для этого формата совпадает с для упакованной версии (Таблица 2-3), за исключением того, что mBytesPerPacket поле установлено в 8, а не 6.

Для описания выборок с плавающей точкой необходимо добавить kCAFLinearPCMFormatFlagIsFloat отметьте к mFormatFlags поле. Например, для описания 4 каналов 64-разрядных выборок с плавающей точкой с прямым порядком байтов с частотой дискретизации 96 000 кадров в секунду Вы использовали бы Аудио значения полей блока Описания в Таблице 2-4.

Табличные 2-4  значения полей Описания Аудио для 64-разрядного PCM с плавающей точкой

Поле

Значение

mSampleRate

96000.

mFormatID

kAudioFormatLinearPCM

mFormatFlags

kCAFLinearPCMFormatFlagIsFloat | kCAFLinearPCMFormatFlagIsLittleEndian

mChannelsPerFrame

4

mBitsPerChannel

64

mFramesPerPacket

1

mBytesPerPacket

32

Можно также использовать файлы CAF для хранения «не байта выровненные» форматы PCM, такие как 12-разрядный или 18-разрядный PCM. Для этого Вы должны

  1. Упакуйте данные в выровненной байтом демонстрационной ширине.

  2. Высоко - выравнивают выборки во включающей выровненной байтом ширине.

Например, 12-разрядные данные PCM должны быть упакованы (высоко выровненные) в 2-байтовом (16-разрядном) слове, позволив синтаксическому анализатору CAF проанализировать демонстрационные данные с помощью тех же алгоритмов, как используется для 16-разрядных данных.

В этом случае Аудио блок Описания для 12-разрядных данных был бы идентичен блоку для 16-разрядных данных, за исключением того, что mBitsPerChannel поле было бы установлено в 12, а не 16.

Широтно-импульсная модуляция

В формате Широтно-импульсной модуляции (PWM) (также известный как 1-разрядное аудио), каждая выборка составляет один бит. Это - формат данных, используемый для Супер Аудиокомпакт-диска (SA-CD; посмотрите http://www .superaudio-cd.com/). Несмотря на то, что CAF не определяет идентификатор формата, постоянный для формата PWM, это поучительно для взгляда на то, как данные PWM хранились бы.

Частота дискретизации для Супер потока битов Аудиокомпакт-диска является 2 822 400 кадрами в секунду. В файле CAF с данными PWM не было бы никаких флагов формата, 1 бит за канал, и 8 кадров на пакет. Поэтому для двух каналов (стерео), было бы 2 байта за пакет (1 байт для каждого канала в файле).

PWM стерео упаковывается следующим образом (в двоичном файле):

LLLLLLLL RRRRRRRR

где L немного для левого канала и R немного для правильного канала. Поэтому первое L бит вместе с первым R бит составляет первый кадр.

Точно так же для 6 каналов было бы 6 байтов за пакет и 8 кадров на пакет, упакованный следующим образом:

11111111 22222222 33333333 44444444 55555555 66666666

Как истина для данных во всех файлах CAF, данные PWM являются выровненным байтом.

Сжатые форматы аудио

В сжатых форматах аудио пакеты непрозрачны и не могут быть проанализированы, сначала не будучи распакованным кодеком. Для таких форматов, mSampleRate поле указывает число демонстрационных кадров в секунду распакованных данных и mFramesPerPacket поле указывает число кадров, закодированных в каждом сжатом пакете. Кроме того, для сжатых форматов mBitsPerChannel поле всегда 0. Все пакеты в файлах CAF должны быть выровненным байтом.

Например, формат данных IMA4 кодирует кадры с 64 выборками в единственный пакет с постоянной скоростью передачи 34 байтов за канал. Для описания файла CAF 2 каналов данные IMA4 с частотой дискретизации 44 100 кадров в секунду Вы использовали бы Аудио значения полей Описания в Таблице 2-5.

Табличные 2-5  значения полей Описания Аудио для 2 каналов IMA4

Поле

Значение

mSampleRate

44100.

mFormatID

kAudioFormatAppleIMA4

mFormatFlags

0

mChannelsPerFrame

2

mBitsPerChannel

0

mFramesPerPacket

64

mBytesPerPacket

68 (= mChannelsPerFrame * 34)

В этом примере, mBitsPerChannel поле 0, указание, что это - сжатый формат. mBytesPerPacket поле отражает постоянное число байтов на канал (34) и число кадров на пакет (64 в этом случае).

Для сжатого формата аудио с переменной скоростью передачи, mBytesPerPacket поле 0, указание, что число байтов на пакет является переменным. В этом случае Пакетный Табличный блок (Пакетный Табличный Блок) требуется.

Например, формат данных MPEG 4 Усовершенствованного кодирования звука (AAC) использует переменную скорость передачи, но постоянное число кадров на пакет. Для описания файла CAF 2 каналов, Низкий Объект Аудио Сложности форматирует данные AAC с частотой дискретизации 44 100 кадров в секунду (для распакованных данных), Вы использовали бы Аудио значения полей Описания в Таблице 2-6.

Табличные 2-6  значения полей Описания Аудио для 2 каналов AAC

Поле

Значение

mSampleRate

44100.

mFormatID

kAudioFormatMPEG4AAC

mFormatFlags

kMP4Audio_AAC_LC_ObjectType

mChannelsPerFrame

2

mBitsPerChannel

0

mFramesPerPacket

1024

mBytesPerPacket

0

В этом примере, mBitsPerChannel поле 0, указание, что это - сжатый формат, и mBytesPerPacket поле 0, указание переменной скорости передачи.

Обратите внимание на то, что пока формат имеет постоянное число кадров на пакет, можно вычислить продолжительность каждого пакета путем деления mSampleRate значение mFramesPerPacket значение.

Некоторые сжатые форматы варьируются число кадров на пакет. В этом случае необходимо установить mFramesPerPacket поле к 0 (в дополнение к mBitsPerChannel поле, которое является 0 для всех сжатых форматов).

Блок аудиоданных

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

Заголовок блока аудиоданных

Таблица 2-7 показывает значения для полей в заголовке блока Аудиоданных.

Табличные 2-7  Аудиоданные разделяют поля заголовка на блоки

Поле

Значение

mChunkType

‘data’

mChunkSize

Размер данных разделяет в байтах, или -1 если неизвестный.

mChunkSize значение -1 указывает, что размер раздела данных для этого блока неизвестен. В этом случае блок Аудиоданных должен появиться в последний раз в файле так, чтобы конец блока Аудиоданных совпал с концом файла. Это размещение позволяет Вам определять размер раздела данных.

Это настоятельно рекомендовано это после записи или изменения аудиоданных, Вы завершаете файл CAF путем обновления mChunkSize поле для отражения размера раздела данных блока Аудиоданных. При чтении файла CAF, размер раздела аудиоданных которого не указан, необходимо определить размер и обновить mChunkSize значение для блока Аудиоданных.

Если блок Аудиоданных не является последним блоком в файле CAF, mChunkSize поле должно содержать размер раздела данных блока для файла, чтобы быть допустимым.

Сразу после блока Аудиоданных заголовок является разделом аудиоданных.

Раздел данных блока аудиоданных

Раздел данных в блоке Аудиоданных содержит аудиоданные в формате, указанном Аудио блоком Описания. Посмотрите Аудио Блок Описания.

Раздел данных блока Аудиоданных имеет поле количества редактирования, сопровождаемое аудиоданными для файла. CAFData структура описывает раздел данных для этого блока.

struct CAFData {
    UInt32 mEditCount;                 // initially set to 0
    UInt8 mData [kVariableLengthArray];
};
mEditCount

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

mData

Аудиоданные для файла CAF, в формате указаны Аудио блоком Описания.

Можно сравнить значение mEditCount к соответствующему значению в зависимом блоке, таком как Блок Обзора или Пиковый Блок.

Этот документ не адресует специфические особенности форматов данных, указанных Аудио блоком Описания. Обратитесь к спецификациям, выпущенным соответствующей организацией по стандартизации или отраслевым объектом для получения информации об определенном формате аудиоданных.

Пакетный табличный блок

Файлы CAF, содержащие аудиоданные или переменной частоты кадров (VFR) с переменной скоростью передачи (VBR), содержат аудио пакеты переменного размера. Такие файлы должны иметь точно один Пакетный Табличный блок для указания размера каждого пакета.

Можно идентифицировать файлы CAF, содержащие VBR или аудио VFR их Аудио блоком Описания. В таких файлах, один или оба из mBytesPerPacket и mFramesPerPacket поля в Аудио блоке Описания имеют значение 0. Посмотрите аудио блок описания.

Содержание Пакетного Табличного блока описывает, и поэтому зависит от, содержание блока Аудиоданных. Посмотрите Блок Аудиоданных. Пакетная таблица должна всегда отражать текущее состояние аудиоданных в файле CAF.

Файл CAF с постоянным размером пакета может все еще включать Пакетный Табличный блок для записи определенной информации о кадрах (см. Пакетное Табличное Описание).

Пакетный табличный заголовок блока

Таблица 2-8 показывает значения для полей в Пакетном Табличном заголовке блока.

Табличная 2-8  Пакетная Таблица разделяет поля заголовка на блоки

Поле

Значение

mChunkType

‘pakt’

mChunkSize

Должно всегда быть допустимым

Для файла CAF с переменными размерами пакета, значением для mChunkSize может быть больше, чем фактическое допустимое содержание пакетного табличного блока. Пакетное Табличное описание указывает число действительных доступов в Пакетной Таблице (см. Пакетное Табличное Описание). В случае файла CAF с постоянным размером пакета, значением для mChunkSize должны быть 24 байта — как раз для содержания самого Пакетного Табличного описания.

Пакетное табличное описание

Этот блок имеет дескриптивный раздел для самой пакетной таблицы. Это сразу появляется после заголовка блока. CAFPacketTableHeader структура описывает его:

struct CAFPacketTableHeader {
    SInt64  mNumberPackets;
    SInt64  mNumberValidFrames;
    SInt32  mPrimingFrames;
    SInt32  mRemainderFrames;
};
mNumberPackets

Общее количество пакетов аудиоданных описано в пакетной таблице. Это значение должно всегда быть допустимым.

Для файла CAF с переменными размерами пакета это значение должно отразить фактическое число пакетов в блоке Аудиоданных. В файле CAF с постоянным размером пакета, и поэтому никакой пакетной таблице, это поле должно быть установлено в 0.

mNumberValidFrames

Общее количество аудио кадров закодировано в файле. Продолжительность аудио в файле является этим значением, разделенным на частоту дискретизации, указанную в Аудио блоке Описания файла. Посмотрите Аудио Блок Описания. Значение этого поля должно всегда быть допустимым.

mPrimingFrames

Число кадров для воспламенения или задержки обработки для сжатого формата аудио. Например, кодеки MPEG-AAC обычно имеют задержку 2 112 кадров. Число кадров воспламенения может быть полезно для любого файла CAF, содержащего сжатое аудио, варьируются ли пакеты по размеру.

mRemainderFrames

Число неиспользованных кадров в заключительном пакете файла CAF; т.е. число кадров, которые должны быть обрезаны от вывода последнего пакета при декодировании.

Например, файл AAC может иметь только 313 кадров, содержащих аудиоданные в его заключительном пакете. Файлы AAC содержат 1 024 кадра на пакет. Значение для mRemainderFrames тогда 1024 – 313 = 711.

mNumberPackets значение указано только, когда блок содержит пакетную таблицу — т.е. когда файл CAF содержит пакеты переменного размера. С другой стороны, независимо от того, варьируются ли его пакеты по размеру или нет, любой файл CAF может использовать mNumberValildFrames, mPrimingFrames, и mRemainderFrames поля.

Пакетный табличный раздел данных блока

Пакетные Табличные данные блока разделяют информацию о списках о пакетах переменного размера в блоке Аудиоданных файла. Посмотрите Блок Аудиоданных.

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

Следующий список этих трех типов формата аудио включает соответствующие значения для mBytesPerPacket и mFramesPerPacket настоящее в Аудио блоке Описания. Посмотрите Аудио Блок Описания:

  • Переменная скорость передачи, постоянное число кадров на пакет (таких как AAC и MP3 с переменной скоростью передачи): mBytesPerPacket нуль, mFramesPerPacket является ненулевым.

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

  • Переменное число кадров на пакет, постоянную скорость передачи: mBytesPerPacket является ненулевым; mFramesPerPacket нуль.

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

  • Переменная скорость передачи, переменное число кадров на пакет (таких как Ogg Vorbis): mBytesPerPacket нуль, mFramesPerPacket нуль.

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

Числа, описывающие размер пакетов или кадров на пакет, кодируются как целые числа переменной длины. В этой схеме кодирования каждый байт содержит 7 битов двоичного целого числа и 1-разрядного флага продолжения — старший бит в каждом байте используется, чтобы указать, продолжается ли число следующий байт. Байт самый низкоуровневый в любом данном целом числе является поэтому первым, для которого не установлен старший бит; т.е. первый байт, имеющий значение, меньше чем 128 содержат последние 7 битов в целом числе. Таблица 2-9 дает некоторые примеры закодированных целых чисел.

Табличная 2-9  Демонстрационная переменная длина закодировала целые числа

Размер пакета

Целое число, кодирующее (шестнадцатеричный)

Целочисленное кодирование (двоичный файл)

1

0x01

0000 0001

17

0x11

0001 0001

127

0x7F

0111 1111

128

0x81 0x00

1000 0001 0000 0000

130

0x81 0x02

1000 0001 0000 0010

257

0x82 0x01

1000 0010 0000 0001

16383

0xFF 0x7F

1111 1111 0111 1111

16384

0x81 0x80 0x00

1000 0001 1000 0000 0000 0000

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

Формат с постоянной скоростью передачи

Пакетный Табличный блок может использоваться с постоянной скоростью передачи (постоянные кадры на пакет и постоянные байты на пакет) формат для предоставления информации о любом из следующего:

Для любого из этих случаев не необходимы никакие пакетные табличные данные, таким образом, устанавливает mNumberPackets поле к 0. Размер пакетной таблицы является поэтому размером пакетной табличной структуры заголовка.

Как пример второго использования, формат IMA кодирует выборки в пакеты, содержащие 64 демонстрационных кадра каждый. Если аудиоданные не являются одинаково делимыми 64 кадрами, то последний пакет содержания IMA декодирует к меньшему количеству выборок, чем 64, представленные пакетом. В этом случае Пакетный Табличный заголовок используется для указания общего количества кадров в файле и числе кадров остатка. Например, если бы существует 5 кадров остатка, Вы установили бы поля Пакетного Табличного заголовка как показано в Таблице 2-10.

Табличный 2-10  Пакетный Табличный заголовок для файла IMA с 5 кадрами остатка

Поле

Значение

mNumberPackets

0

mNumberValidFrames

numFramesInFile (= (mFramesPerPacket * (sizeOfAudioData) / mBytesPerPacket)-5)

mPrimingFrames

0

mRemainderFrames

59 (= mFramesPerPacket - 5)

Переменная скорость передачи, постоянные кадры на пакет

Пакетный Табличный блок требуется для упакованных форматов данных с переменной скоростью передачи (mBytesPerPacket установлен в 0) и постоянное число кадров на пакет (mFramesPerPacket является ненулевым). (См. Аудио Раздел Данных Блока Описания для получения дополнительной информации об этих полях заголовка.)

В этом случае пакетные табличные данные содержат одно целое число переменной длины для каждого пакета, указывающего размер пакета в байтах. Посмотрите Пакетный Табличный Раздел Данных Блока для объяснения целых чисел переменной длины.

Например, потому что AAC имеет задержку 2 112 кадров, кодирование AAC 3 074 демонстрационных кадров требует в общей сложности 6 пакетов (AAC имеет 1 024 кадра на пакет). Поля Пакетного Табличного заголовка для этого примера находятся как показано в Таблице 2-11.

Табличный 2-11  Пакетный Табличный заголовок для файла AAC

Поле

Значение

mNumberPackets

6

mNumberValidFrames

3074

mPrimingFrames

2112

mRemainderFrames

958 (= 1024 (mFramesPerPacket) – 66)

Как показано в Таблице 2-12, первые два пакета содержат только кадры воспламенения; эти кадры не выводят допустимых аудиоданных. Третий пакет содержит заключительные 64 кадра воспламенения и затем выводы 960 кадров аудиоданных. Следующие два пакета содержат 1 024 демонстрационных кадра допустимых аудиоданных за штуку. (Обычно было бы много пакетов более с 1024 кадрами, чем два в этом примере.) Последний пакет содержит заключительные 66 демонстрационных кадров аудиоданных, сопровождаемых 958 кадрами остатка (который должен быть обрезан от вывода).

Табличные 2-12  Кадры допустимых аудиоданных на пакет для файла AAC 3 074 кадров

Пакет

1

2

3

4

5

6

Допустимые кадры

0

0

960

1024

1024

66

Общие кадры

1024

1024

1024

1024

1024

1024

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

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

Расположение канала

Блок расположения канала требуется для всех файлов CAF, имеющих больше чем два канала (если нет никакого значения или упорядочивания каналов в файле). Нет принятого упорядочивания никакого значения по умолчанию каналов в файле больше чем с двумя каналами. Блок расположения канала является дополнительным для файла CAF с одним или двумя каналами. Для файла CAF с одним или двумя каналами и никаким блоком расположения канала, можно предположить, что файл с одним каналом представляет монофонические данные, и файл с двумя каналами представляет стерео с выборкой левого канала сначала в каждом кадре.

Блок расположения канала

Блок Расположения Канала описывает порядок и роль каждого канала в файле CAF. Это особенно полезно для любого файла CAF больше чем с двумя звуковыми каналами, но может также предоставить важную информацию для одной - и файлы с двумя каналами. Например, когда пользователь преобразовывает или многоканальный аудиофайл стерео в ряд файлов с одним каналом, блок Расположения Канала может указать роль файла каждого-канала.

В блоке Аудиоданных (Блок Аудиоданных) несжатого аудио файла CAF, выборка для каждого канала появляется в последовательности в каждом кадре. Число каналов на кадр и число битов на канал указаны в Аудио блоке Описания (см. Аудио Раздел Данных Блока Описания). Блок Описания канала указывает порядок, в котором данные канала появляются в блоке аудиоданных.

Заголовок блока расположения канала

Таблица 2-13 показывает значения для полей в заголовке блока Расположения Канала.

Табличное 2-13  Расположение Канала разделяет поля заголовка на блоки

Поле

Значение

mChunkType

‘chan’

mChunkSize

Должно всегда быть допустимым

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

Раздел данных блока расположения канала

Раздел данных блока Расположения Канала начинается с тега, указывающего природу данных в блоке, сопровождаемом по условию, как показано в CAFChannelLayout структура.

 
struct CAFChannelLayout {
    UInt32                 mChannelLayoutTag;
    UInt32                 mChannelBitmap;
    UInt32                 mNumberChannelDescriptions;
    CAFChannelDescription  mChannelDescriptions[kVariableLengthArray];
};
mChannelLayoutTag

Тег, указывающий тип используемого расположения, как описано в Тегах Расположения Канала.

mChannelBitmap

Битовый массив, описывающий, какие каналы присутствуют. Порядок каналов совпадает с порядком битов; т.е. установленный бит самый низкоуровневый соответствует первому каналу файла и т.д. Число битов набора является числом каналов, которые должны равняться числу каналов в файле. Этот метод битового поля используется и в файлах WAV и в Спецификации Аудио USB. Посмотрите Битовые массивы Канала для разрядных присвоений.

mNumberChannelDescriptions

Число описаний канала в mChannelDescriptions массив. Если это число 0, тогда это - последнее поле в структуре.

mChannelDescriptions

Массив CAFChannelDescription структуры (Описание канала), которые описывают расположение каналов. Это поле не присутствует если mNumberChannelDescriptions поле 0.

Битовые массивы канала

Значение битов в mChannelBitmap поле указано в следующем перечислении:

enum {
    kCAFChannelBit_Left                 = (1<<0),
    kCAFChannelBit_Right                = (1<<1),
    kCAFChannelBit_Center               = (1<<2),
    kCAFChannelBit_LFEScreen            = (1<<3),
    kCAFChannelBit_LeftSurround         = (1<<4),   // WAVE: "Back Left"
    kCAFChannelBit_RightSurround        = (1<<5),   // WAVE: "Back Right"
    kCAFChannelBit_LeftCenter           = (1<<6),
    kCAFChannelBit_RightCenter          = (1<<7),
    kCAFChannelBit_CenterSurround       = (1<<8),   // WAVE: "Back Center"
    kCAFChannelBit_LeftSurroundDirect   = (1<<9),   // WAVE: "Side Left"
    kCAFChannelBit_RightSurroundDirect  = (1<<10),  // WAVE: "Side Right"
    kCAFChannelBit_TopCenterSurround    = (1<<11),
    kCAFChannelBit_VerticalHeightLeft   = (1<<12),  // WAVE: "Top Front Left"
    kCAFChannelBit_VerticalHeightCenter = (1<<13),  // WAVE: "Top Front Center"
    kCAFChannelBit_VerticalHeightRight  = (1<<14),  // WAVE: "Top Front Right"
    kCAFChannelBit_TopBackLeft          = (1<<15),
    kCAFChannelBit_TopBackCenter        = (1<<16),
    kCAFChannelBit_TopBackRight         = (1<<17)
};

Теги расположения канала

Разметки канала могут быть описаны кодом в mChannelLayoutTag поле.

Значение kCAFChannelLayoutTag_UseChannelDescriptions (== 0) указывает, что нет никакого стандартного описания для упорядочивания или использования каналов в файле, так, чтобы описания канала использовались вместо этого. В этом случае, число описаний канала (mNumberChannelDescriptions) должен равняться числу каналов, содержавшихся в файле. Описания канала следуют mNumberChannelDescriptions поле; см. Описание канала.

Значение kCAFChannelLayoutTag_UseChannelBitmap (== 0x10000), указывает, что блок Расположения Канала использует битовый массив (в mChannelBitmap поле) для описания, какие каналы присутствуют.

Значение, больше, чем 0x10000 указывает один из тегов расположения, упомянутых ниже в этом разделе. Каждый тег расположения канала имеет две части:

  • Низкие 16 битов представляют число каналов, описанных тегом.

  • Высокие 16 битов указывают определенное упорядочивание каналов.

Например, тег kCAFChannelLayoutTag_Stereo определяется как ((101<<16) | 2 ) и указывает стерео с двумя каналами, упорядоченный оставленным как первый канал, право как второе.

Текущая стоимость для этого кода перечислена в следующем перечислении:

enum {
    kCAFChannelLayoutTag_UseChannelDescriptions = (0<<16) | 0,
        // use the array of AudioChannelDescriptions to define the mapping.
 
    kCAFChannelLayoutTag_UseChannelBitmap       = (1<<16) | 0,
        // use the bitmap to define the mapping.
 
// 1 Channel Layout
    kCAFChannelLayoutTag_Mono                   = (100<<16) | 1,
        // a standard mono stream
 
// 2 Channel layouts
    kCAFChannelLayoutTag_Stereo                 = (101<<16) | 2,
        // a standard stereo stream (L R)
 
    kCAFChannelLayoutTag_StereoHeadphones       = (102<<16) | 2,
        // a standard stereo stream (L R) - implied headphone playback
 
    kCAFChannelLayoutTag_MatrixStereo           = (103<<16) | 2,
        // a matrix encoded stereo stream (Lt, Rt)
 
    kCAFChannelLayoutTag_MidSide                = (104<<16) | 2,
        // mid/side recording
 
    kCAFChannelLayoutTag_XY                     = (105<<16) | 2,
        // coincident mic pair (often 2 figure 8's)
 
    kCAFChannelLayoutTag_Binaural               = (106<<16) | 2,
        // binaural stereo (left, right)
 
// Symmetric arrangements - same distance between speaker locations
    kCAFChannelLayoutTag_Ambisonic_B_Format     = (107<<16) | 4,
        // W, X, Y, Z
 
    kCAFChannelLayoutTag_Quadraphonic           = (108<<16) | 4,
        // front left, front right, back left, back right
 
    kCAFChannelLayoutTag_Pentagonal             = (109<<16) | 5,
        // left, right, rear left, rear right, center
 
    kCAFChannelLayoutTag_Hexagonal              = (110<<16) | 6,
        // left, right, rear left, rear right, center, rear
 
    kCAFChannelLayoutTag_Octagonal              = (111<<16) | 8,
        // front left, front right, rear left, rear right,
        // front center, rear center, side left, side right
 
    kCAFChannelLayoutTag_Cube                   = (112<<16) | 8,
        // left, right, rear left, rear right
        // top left, top right, top rear left, top rear right
 
//  MPEG defined layouts
    kCAFChannelLayoutTag_MPEG_1_0   = kCAFChannelLayoutTag_Mono,    //  C
    kCAFChannelLayoutTag_MPEG_2_0   = kCAFChannelLayoutTag_Stereo,  //  L R
    kCAFChannelLayoutTag_MPEG_3_0_A = (113<<16) | 3,         // L R C
    kCAFChannelLayoutTag_MPEG_3_0_B = (114<<16) | 3,         // C L R
    kCAFChannelLayoutTag_MPEG_4_0_A = (115<<16) | 4,         // L R C Cs
    kCAFChannelLayoutTag_MPEG_4_0_B = (116<<16) | 4,         // C L R Cs
    kCAFChannelLayoutTag_MPEG_5_0_A = (117<<16) | 5,         // L R C Ls Rs
    kCAFChannelLayoutTag_MPEG_5_0_B = (118<<16) | 5,         // L R Ls Rs C
    kCAFChannelLayoutTag_MPEG_5_0_C = (119<<16) | 5,         // L C R Ls Rs
    kCAFChannelLayoutTag_MPEG_5_0_D = (120<<16) | 5,         // C L R Ls Rs
    kCAFChannelLayoutTag_MPEG_5_1_A = (121<<16) | 6,         // L R C LFE Ls Rs
    kCAFChannelLayoutTag_MPEG_5_1_B = (122<<16) | 6,         // L R Ls Rs C LFE
    kCAFChannelLayoutTag_MPEG_5_1_C = (123<<16) | 6,         // L C R Ls Rs LFE
    kCAFChannelLayoutTag_MPEG_5_1_D = (124<<16) | 6,         // C L R Ls Rs LFE
    kCAFChannelLayoutTag_MPEG_6_1_A = (125<<16) | 7,         // L R C LFE Ls Rs Cs
    kCAFChannelLayoutTag_MPEG_7_1_A = (126<<16) | 8,         // L R C LFE Ls Rs Lc Rc
    kCAFChannelLayoutTag_MPEG_7_1_B = (127<<16) | 8,         // C Lc Rc L R Ls Rs LFE
    kCAFChannelLayoutTag_MPEG_7_1_C = (128<<16) | 8,         // L R C LFE Ls R Rls Rrs
 
    kCAFChannelLayoutTag_Emagic_Default_7_1 = (129<<16) | 8,
        //  L R Ls Rs C LFE Lc Rc
 
    kCAFChannelLayoutTag_SMPTE_DTV          = (130<<16) | 8,
        //  L R C LFE Ls Rs Lt Rt
        //  (kCAFChannelLayoutTag_ITU_5_1 plus a matrix encoded stereo mix)
 
//  ITU defined layouts
    kCAFChannelLayoutTag_ITU_1_0    = kCAFChannelLayoutTag_Mono,    //  C
    kCAFChannelLayoutTag_ITU_2_0    = kCAFChannelLayoutTag_Stereo,  //  L R
 
    kCAFChannelLayoutTag_ITU_2_1    = (131<<16) | 3,    // L R Cs
    kCAFChannelLayoutTag_ITU_2_2    = (132<<16) | 4,    // L R Ls Rs
    kCAFChannelLayoutTag_ITU_3_0    = kCAFChannelLayoutTag_MPEG_3_0_A,  //  L R C
    kCAFChannelLayoutTag_ITU_3_1    = kCAFChannelLayoutTag_MPEG_4_0_A,  //  L R C Cs
 
    kCAFChannelLayoutTag_ITU_3_2    = kCAFChannelLayoutTag_MPEG_5_0_A,  //  L R C Ls Rs
    kCAFChannelLayoutTag_ITU_3_2_1  = kCAFChannelLayoutTag_MPEG_5_1_A,
                                                        //  L R C LFE Ls Rs
    kCAFChannelLayoutTag_ITU_3_4_1  = kCAFChannelLayoutTag_MPEG_7_1_C,
                                                        //  L R C LFE Ls Rs Rls Rrs
 
// DVD defined layouts
    kCAFChannelLayoutTag_DVD_0  = kCAFChannelLayoutTag_Mono,    // C (mono)
    kCAFChannelLayoutTag_DVD_1  = kCAFChannelLayoutTag_Stereo,  // L R
    kCAFChannelLayoutTag_DVD_2  = kCAFChannelLayoutTag_ITU_2_1, // L R Cs
    kCAFChannelLayoutTag_DVD_3  = kCAFChannelLayoutTag_ITU_2_2, // L R Ls Rs
    kCAFChannelLayoutTag_DVD_4  = (133<<16) | 3,                // L R LFE
    kCAFChannelLayoutTag_DVD_5  = (134<<16) | 4,                // L R LFE Cs
    kCAFChannelLayoutTag_DVD_6  = (135<<16) | 5,                // L R LFE Ls Rs
    kCAFChannelLayoutTag_DVD_7  = kCAFChannelLayoutTag_MPEG_3_0_A,// L R C
    kCAFChannelLayoutTag_DVD_8  = kCAFChannelLayoutTag_MPEG_4_0_A,// L R C Cs
    kCAFChannelLayoutTag_DVD_9  = kCAFChannelLayoutTag_MPEG_5_0_A,// L R C Ls Rs
    kCAFChannelLayoutTag_DVD_10 = (136<<16) | 4,                // L R C LFE
    kCAFChannelLayoutTag_DVD_11 = (137<<16) | 5,                // L R C LFE Cs
    kCAFChannelLayoutTag_DVD_12 = kCAFChannelLayoutTag_MPEG_5_1_A,// L R C LFE Ls Rs
// 13 through 17 are duplicates of 8 through 12.
    kCAFChannelLayoutTag_DVD_13 = kCAFChannelLayoutTag_DVD_8,   // L R C Cs
    kCAFChannelLayoutTag_DVD_14 = kCAFChannelLayoutTag_DVD_9,   // L R C Ls Rs
    kCAFChannelLayoutTag_DVD_15 = kCAFChannelLayoutTag_DVD_10,  // L R C LFE
    kCAFChannelLayoutTag_DVD_16 = kCAFChannelLayoutTag_DVD_11,  // L R C LFE Cs
    kCAFChannelLayoutTag_DVD_17 = kCAFChannelLayoutTag_DVD_12,  // L R C LFE Ls Rs
    kCAFChannelLayoutTag_DVD_18 = (138<<16) | 5,                // L R Ls Rs LFE
    kCAFChannelLayoutTag_DVD_19 = kCAFChannelLayoutTag_MPEG_5_0_B,// L R Ls Rs C
    kCAFChannelLayoutTag_DVD_20 = kCAFChannelLayoutTag_MPEG_5_1_B,// L R Ls Rs C LFE
 
// These layouts are recommended for audio unit use
// These are the symmetrical layouts
    kCAFChannelLayoutTag_AudioUnit_4= kCAFChannelLayoutTag_Quadraphonic,
    kCAFChannelLayoutTag_AudioUnit_5= kCAFChannelLayoutTag_Pentagonal,
    kCAFChannelLayoutTag_AudioUnit_6= kCAFChannelLayoutTag_Hexagonal,
    kCAFChannelLayoutTag_AudioUnit_8= kCAFChannelLayoutTag_Octagonal,
// These are the surround-based layouts
    kCAFChannelLayoutTag_AudioUnit_5_0  = kCAFChannelLayoutTag_MPEG_5_0_B,
                                                                // L R Ls Rs C
    kCAFChannelLayoutTag_AudioUnit_6_0  = (139<<16) | 6,        // L R Ls Rs C Cs
    kCAFChannelLayoutTag_AudioUnit_7_0  = (140<<16) | 7,        // L R Ls Rs C Rls Rrs
    kCAFChannelLayoutTag_AudioUnit_5_1  = kCAFChannelLayoutTag_MPEG_5_1_A,
                                                                 // L R C LFE Ls Rs
    kCAFChannelLayoutTag_AudioUnit_6_1  = kCAFChannelLayoutTag_MPEG_6_1_A,
                                                                // L R C LFE Ls Rs Cs
    kCAFChannelLayoutTag_AudioUnit_7_1  = kCAFChannelLayoutTag_MPEG_7_1_C,
                                                          // L R C LFE Ls Rs Rls Rrs
 
// These layouts are used for AAC Encoding within the MPEG-4 Specification
    kCAFChannelLayoutTag_AAC_Quadraphonic   = kCAFChannelLayoutTag_Quadraphonic,
                                                                    // L R Ls Rs
    kCAFChannelLayoutTag_AAC_4_0= kCAFChannelLayoutTag_MPEG_4_0_B,  // C L R Cs
    kCAFChannelLayoutTag_AAC_5_0= kCAFChannelLayoutTag_MPEG_5_0_D,  // C L R Ls Rs
    kCAFChannelLayoutTag_AAC_5_1= kCAFChannelLayoutTag_MPEG_5_1_D,  // C L R Ls Rs Lfe
    kCAFChannelLayoutTag_AAC_6_0= (141<<16) | 6,            // C L R Ls Rs Cs
    kCAFChannelLayoutTag_AAC_6_1= (142<<16) | 7,            // C L R Ls Rs Cs Lfe
    kCAFChannelLayoutTag_AAC_7_0= (143<<16) | 7,            // C L R Ls Rs Rls Rrs
    kCAFChannelLayoutTag_AAC_7_1= kCAFChannelLayoutTag_MPEG_7_1_B,
                                                            // C Lc Rc L R Ls Rs Lfe
    kCAFChannelLayoutTag_AAC_Octagonal  = (144<<16) | 8,    // C L R Ls Rs Rls Rrs Cs
 
 
    kCAFChannelLayoutTag_TMH_10_2_std   = (145<<16) | 16,
                            // L R C Vhc Lsd Rsd Ls Rs Vhl Vhr Lw Rw Csd Cs LFE1 LFE2
    kCAFChannelLayoutTag_TMH_10_2_full  = (146<<16) | 21,
                                            // TMH_10_2_std plus: Lc Rc HI VI Haptic
 
    kCAFChannelLayoutTag_RESERVED_DO_NOT_USE= (147<<16)
};

Описание канала

Если тег расположения канала установлен в kCAFChannelLayoutTag_UseChannelDescriptions , нет никакого стандартного описания для упорядочивания или использования каналов в файле; описания канала используются вместо этого. В этом случае, число описаний канала (mNumberChannelDescriptions) должен равняться числу каналов, содержавшихся в файле. После mNumberChannelDescriptions поле является массивом описаний канала, один для каждого канала, как указано CAFChannelDescription структура:

struct CAFChannelDescription {
    UInt32   mChannelLabel;
    UInt32   mChannelFlags;
    Float32  mCoordinates[3];
};
mChannelLabel

Метка, описывающая роль канала. В общих падежах, такой как «Левая» или «Правильный», роль подразумевает расположение. В таких случаях, mChannelFlags и mCoordinates может быть установлен в 0. Относитесь для маркировки кодов для разметок канала.

mChannelFlags

Флаги, указывающие, как интерпретировать данные в mCoordinates поле. Относитесь для Формирования каналов Флагов для Разметок Канала. Если звуковой канал не запрашивает эту информацию, установите это поле в 0.

mCoordinates

Ряд трех координат, указывающих размещение звукового источника для канала в трех измерениях, согласно mChannelFlags информация. Если звуковой канал не запрашивает эту информацию, установите это поле в 0.

Число описаний канала в разделе данных этого блока должно соответствовать число каналов, указанных в mChannelsPerFrame поле Аудио блока Описания. Кроме того, порядок описаний канала должен соответствовать порядку каналов в блоке Аудиоданных. Посмотрите Аудио Блок Блока и Аудиоданных Описания.

Можно использовать дополнительный информационный блок (информационный Блок) для предоставления презентабельных пользователем имен для определенных разметок канала. Однако, если существует какой-либо конфликт между назначениями канала в информационном блоке, и те в блоке Расположения Канала, блок Расположения Канала всегда имеет приоритет.

Коды метки для разметок канала

Коды метки указывают роль канала. Файлы CAF указывают эту информацию в этом блоке mChannelLabel поле.

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

enum {
    kCAFChannelLabel_Unknown        = 0xFFFFFFFF, // unknown role or unspecified other use for channel
    kCAFChannelLabel_Unused         = 0,          // channel is present, but has no intended role or destination
    kCAFChannelLabel_UseCoordinates = 100,        // channel is described solely by the mCoordinates fields
 
    kCAFChannelLabel_Left                 = 1,
    kCAFChannelLabel_Right                = 2,
    kCAFChannelLabel_Center               = 3,
    kCAFChannelLabel_LFEScreen            = 4,
    kCAFChannelLabel_LeftSurround         = 5,    // WAVE (.wav files): “Back Left”
    kCAFChannelLabel_RightSurround        = 6,    // WAVE: "Back Right"
    kCAFChannelLabel_LeftCenter           = 7,
    kCAFChannelLabel_RightCenter          = 8,
    kCAFChannelLabel_CenterSurround       = 9,    // WAVE: "Back Center or plain "Rear Surround"
    kCAFChannelLabel_LeftSurroundDirect   = 10,   // WAVE: "Side Left"
    kCAFChannelLabel_RightSurroundDirect  = 11,   // WAVE: "Side Right"
    kCAFChannelLabel_TopCenterSurround    = 12,
    kCAFChannelLabel_VerticalHeightLeft   = 13,   // WAVE: "Top Front Left”
    kCAFChannelLabel_VerticalHeightCenter = 14,   // WAVE: "Top Front Center”
    kCAFChannelLabel_VerticalHeightRight  = 15,   // WAVE: "Top Front Right”
    kCAFChannelLabel_TopBackLeft          = 16,
    kCAFChannelLabel_TopBackCenter        = 17,
    kCAFChannelLabel_TopBackRight         = 18,
    kCAFChannelLabel_RearSurroundLeft     = 33,
    kCAFChannelLabel_RearSurroundRight    = 34,
    kCAFChannelLabel_LeftWide             = 35,
    kCAFChannelLabel_RightWide            = 36,
    kCAFChannelLabel_LFE2                 = 37,
    kCAFChannelLabel_LeftTotal            = 38,   // matrix encoded 4 channels
    kCAFChannelLabel_RightTotal           = 39,   // matrix encoded 4 channels
    kCAFChannelLabel_HearingImpaired      = 40,
    kCAFChannelLabel_Narration            = 41,
    kCAFChannelLabel_Mono                 = 42,
    kCAFChannelLabel_DialogCentricMix     = 43,
    kCAFChannelLabel_CenterSurroundDirect = 44,   // back center, non diffuse
 
// first order ambisonic channels
    kCAFChannelLabel_Ambisonic_W          = 200,
    kCAFChannelLabel_Ambisonic_X          = 201,
    kCAFChannelLabel_Ambisonic_Y          = 202,
    kCAFChannelLabel_Ambisonic_Z          = 203,
 
// Mid/Side Recording
    kCAFChannelLabel_MS_Mid               = 204,
    kCAFChannelLabel_MS_Side              = 205,
 
// X-Y Recording
    kCAFChannelLabel_XY_X                 = 206,
    kCAFChannelLabel_XY_Y                 = 207,
 
// other
    kCAFChannelLabel_HeadphonesLeft       = 301,
    kCAFChannelLabel_HeadphonesRight      = 302,
    kCAFChannelLabel_ClickTrack           = 304,
    kCAFChannelLabel_ForeignLanguage      = 305
};

Флаги канала для разметок канала

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

Вот соглашения CAF для прямоугольных координат:

  • Отрицательный оставлен, и положительный является правильным.

  • Отрицательный вернулся, и положительный передняя сторона.

  • Отрицательный уровень под землей, 0 уровень земли, и положительный над уровнем земли.

В файлах CAF сферические координаты измеряются в градусах. Вот соглашения CAF для сферических координат:

  • 0 передний центр, положительный является правильным, отрицательный оставлен.

  • +90 зенит, 0 горизонталь, -90 низшая точка.

Эти константы используются в mChannelFlags поле блока Расположения Канала:

enum {
    kCAFChannelFlags_AllOff                  = 0,
    kCAFChannelFlags_RectangularCoordinates  = (1<<0),
    kCAFChannelFlags_SphericalCoordinates    = (1<<1),
    kCAFChannelFlags_Meters                  = (1<<2)
};
kCAFChannelFlags_AllOff

Никакие флаги не установлены.

kCAFChannelFlags_RectangularCoordinates

Канал указан декартовыми координатами позиции динамика. Этот флаг является взаимоисключающим с kCAFChannelFlags_SphericalCoordinates.

kCAFChannelFlags_SphericalCoordinates

Канал указан сферическими координатами позиции динамика. Этот флаг является взаимоисключающим с kCAFChannelFlags_RectangularCoordinates.

kCAFChannelFlags_Meters

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

Если описание канала не предоставляет координатной информации, то mChannelFlags поле установлено в 0.

Дополнительные данные

Некоторые форматы аудио запрашивают определенную информацию в дополнение к данным в Аудио блоках Описания и Аудиоданных (Требуемые Блоки). Вы используете Волшебный блок Cookie с этой целью. Точно так же некоторые блоки относятся к строкам, сохраненным в отдельном блоке, Строковом блоке.

Волшебный блок Cookie

Волшебный блок Cookie содержит дополнительный (“волшебный cookie”) данные, требуемые определенными форматами аудиоданных, такими как MPEG 4 AAC, для декодирования аудиоданных. Если формат аудиоданных, содержавшийся в файле CAF, требует волшебных cookie-данных, файл должен иметь этот блок.

Волшебный заголовок блока Cookie

Таблица 2-14 показывает значения для полей в Волшебном заголовке блока Cookie.

Табличный 2-14  Cookie Волшебства разделяет поля заголовка на блоки

Поле

Значение

mChunkType

‘kuki’

mChunkSize

Должно всегда быть допустимым

Волшебный раздел данных блока Cookie

Структура Волшебного раздела данных блока Cookie определяется форматом аудиоданных, которому она применяется к. Например, файл CAF, содержащий данные MPEG 4 AAC, должен иметь Волшебный блок Cookie, содержащий элементарный потоковый дескриптор. Это - данные, содержавшиеся в 'esds' атоме в файле MPEG 4 (и часто упоминается как ESDS) для данного аудиотрека AAC.

Строковый блок

Дополнительный Строковый блок содержит любое число текстовых строк, вместе с индексом для доступа к ним. Эти строки служат метками для других блоков, таких как блоки Области или Маркер.

Строковый заголовок блока

Таблица 2-15 показывает значения для полей в Строковом заголовке блока.

Табличные 2-15  Строки разделяют поля заголовка на блоки

Поле

Значение

mChunkType

‘strg’

mChunkSize

Должно всегда быть допустимым

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

Строковый раздел данных блока

CAFStrings структура описывает раздел данных для Строкового блока.

struct CAFStrings {
    UInt32       mNumEntries;
    CAFStringID  mStringsIDs[kVariableLengthArray];
    UInt8        mStrings[kVariableLengthArray];
};
mNumEntries

Число строк в mStrings поле.

mStringsIDs

Таблица поиска идентификаторов строки для каждой из строк в mStrings поле. Вы получаете доступ к строкам при помощи связанного ID. Рекомендуется не использовать 0 для ID.

mStrings

Массив завершенных нулем UTF8-закодированных текстовых строк.

Идентификатор строки

CAFStringID структура описывает идентификатор строки, используемый для доступа к строке.

struct CAFStringID {
    UInt32  mStringID;
    SInt64  mStringStartByteOffset;
};
typedef struct CAFStringID CAFStringID;
mStringID

Идентификатор для строки, позволяя приложениям и другим блокам в файле относиться к строке.

mStringStartByteOffset

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

Маркер и блоки области

Можно добавить отдельные маркеры, отмеченные области или обоих к файлу CAF. Маркер и блоки Области совместно используют некоторые типы данных, описанные в следующем разделе. Кроме того, оба могут использовать Строковые блоки (Строковый Блок) для содержания текстовых аннотаций.

Маркеры и маркеры области могут включать метки времени, которые можно использовать для корреляции отмеченной точки в аудиопотоке с внешним событием. Например, можно использовать метку времени для корреляции звука в аудиофайле с видеокадром в файле ролика. SMPTE (Общество Изображения движущихся объектов и Телевизионных Инженеров, объявленных «simptee») метки времени и типы временного кода, используются с этой целью. См. Типы Временного кода SMPTE и Метки времени SMPTE для получения дополнительной информации о времени SMPTE.

Типы данных маркера

Типы данных в этом разделе используются и блоком Маркера и блоком Области.

Описания маркера

CAFMarker структура определяет маркер.

struct CAFMarker {
    UInt32          mType;
    Float64         mFramePosition;
    UInt32          mMarkerID;
    CAF_SMPTE_Time  mSMPTETime;
    UInt32          mChannel;
}
typedef struct CAFMarker CAFMarker;
mType

Тип маркера, определяемого одним из кодов в перечислении Типов Маркера. Посмотрите Типы Маркера.

mFramePosition

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

mMarkerID

Расположение в таблице строк (см. Строковый Блок) уникального идентификатора для описания маркера, установленного приложением. Вы тогда используете этот ID для обращения к маркеру. Рекомендуется не использовать 0 для ID.

mSMPTETime

SMPTE устанавливает метку времени для маркера. Можно использовать это поле для связи маркера в файле CAF ко времени в другом файле, таком как видеофайл. Отметьте метку времени SMPTE как недопустимая, если Вам не нужна эта функция. Чтобы указать, что метка времени SMPTE маркера не допустима, устанавливает все ее байты к 0xFF. См. метки времени SMPTE.

mChannel

Канал, числом, к которому применяется описание маркера. Это число соответствует последовательности, в которой данные для каналов упорядочиваются в кадре. Первый канал пронумерован 1. Установите это поле в 0, чтобы указать, что маркер применяется ко всем каналам.

Типы маркера

Следующее перечисление перечисляет поддерживаемые типы маркера для файлов CAF. Используйте эти коды в mType поле каждого описания маркера (см. CAFMarker структура, выше в этом разделе).

enum {
    kCAFMarkerType_Generic              = 0,
    kCAFMarkerType_ProgramStart         = 'pbeg',
    kCAFMarkerType_ProgramEnd           = 'pend',
    kCAFMarkerType_TrackStart           = 'tbeg',
    kCAFMarkerType_TrackEnd             = 'tend',
    kCAFMarkerType_Index                = 'indx',
    kCAFMarkerType_RegionStart          = 'rbeg',
    kCAFMarkerType_RegionEnd            = 'rend',
    kCAFMarkerType_RegionSyncPoint      = 'rsyc',
    kCAFMarkerType_SelectionStart       = 'sbeg',
    kCAFMarkerType_SelectionEnd         = 'send',
    kCAFMarkerType_EditSourceBegin      = 'cbeg',
    kCAFMarkerType_EditSourceEnd        = 'cend',
    kCAFMarkerType_EditDestinationBegin = 'dbeg',
    kCAFMarkerType_EditDestinationEnd   = 'dend',
    kCAFMarkerType_SustainLoopStart     = 'slbg',
    kCAFMarkerType_SustainLoopEnd       = 'slen',
    kCAFMarkerType_ReleaseLoopStart     = 'rlbg',
    kCAFMarkerType_ReleaseLoopEnd       = 'rlen'
};
kCAFMarkerType_Generic

Универсальный маркер.

kCAFMarkerType_ProgramStart

Запустите из программы маркер; используемый для формирования рисунка запуска CD или другого списка воспроизведения.

kCAFMarkerType_ProgramEnd

Маркер конца программы; используемый для формирования рисунка конца CD.

kCAFMarkerType_TrackStart

Запустите из дорожки маркер; используемый для формирования рисунка запуска дорожки для CD.

kCAFMarkerType_TrackEnd

Маркер конца дорожки; используемый для формирования рисунка конца дорожки для CD.

kCAFMarkerType_Index

Индексный маркер для Красной книги совместимый индекс.

kCAFMarkerType_RegionStart

Запустите из области маркер. Посмотрите Блок Области.

kCAFMarkerType_RegionEnd

Маркер конца области. Посмотрите Блок Области.

kCAFMarkerType_RegionSyncPoint

Маркер точки синхронизации области; используемый для синхронизации точки в (или внешний к) область с событием, таким как удар в музыке.

kCAFMarkerType_SelectionStart

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

kCAFMarkerType_SelectionEnd

Маркер конца выбора, для пользовательского выбора части выведенной на экран формы волны.

kCAFMarkerType_EditSourceBegin

Маркер начала источника для копии или операции пересылки.

kCAFMarkerType_EditSourceEnd

Маркер конца источника для копии или операции пересылки.

kCAFMarkerType_EditDestinationBegin

Маркер начала места назначения для копии или операции пересылки.

kCAFMarkerType_EditDestinationEnd

Маркер конца места назначения для копии или операции пересылки.

kCAFMarkerType_SustainLoopStart

Маркер Start-sustain для выдержать цикла.

kCAFMarkerType_SustainLoopEnd

Маркер End-sustain для выдержать цикла.

kCAFMarkerType_ReleaseLoopStart

Запустите из выпуска маркер для выдержать цикла.

kCAFMarkerType_ReleaseLoopEnd

Маркер конца выпуска для выдержать цикла.

Типы временного кода SMPTE

Следующее перечисление перечисляет поддерживаемые типы временного кода SMPTE для файлов CAF. Типы временного кода используются блоками Маркера и Области для синхронизации данных в файле CAF с данными в видеофайле (см. Раздел Данных Блока Раздела и Области Данных Блока Маркера).

enum {
    kCAF_SMPTE_TimeTypeNone     = 0,
    kCAF_SMPTE_TimeType24       = 1,
    kCAF_SMPTE_TimeType25       = 2,
    kCAF_SMPTE_TimeType30Drop   = 3,
    kCAF_SMPTE_TimeType30       = 4,
    kCAF_SMPTE_TimeType2997     = 5,
    kCAF_SMPTE_TimeType2997Drop = 6,
    kCAF_SMPTE_TimeType60       = 7,
    kCAF_SMPTE_TimeType5994     = 8
};
kCAF_SMPTE_TimeTypeNone

Никакой тип временного кода не присваивается. Используйте это значение, если Вы не указываете время SMPTE в маркере.

kCAF_SMPTE_TimeType24

24 видеокадра в секунду — стандарт для 16-миллиметрового и 35-миллиметрового фильма.

kCAF_SMPTE_TimeType25

25 видеокадров в секунду — стандарт для PAL и видео SECAM.

kCAF_SMPTE_TimeType30Drop

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

kCAF_SMPTE_TimeType30

30 видеокадров в секунду.

kCAF_SMPTE_TimeType2997

29,97 видеокадров в секунду — стандарт для видео NTSC.

kCAF_SMPTE_TimeType2997Drop

29,97 видеокадров в секунду — стандарт для видео NTSC — с количествами числа видеокадра корректировался, чтобы гарантировать, чтобы истекшие соответствия временного кода показали время.

kCAF_SMPTE_TimeType60

60 видеокадров в секунду.

kCAF_SMPTE_TimeType5994

59,94 видеокадров в секунду.

Метки времени SMPTE

Каждый маркер может содержать метку времени SMPTE в mSMPTETime поле, которое можно использовать для соединения маркера с внешним временем SMPTE (см. Описания Маркера) —, например, для синхронизации аудиоданных с видеофайлом.

CAF_SMPTE_Time структура описывает формат для указания меток времени в файле CAF.

struct CAF_SMPTE_Time {
    SInt8   mHours;
    SInt8   mMinutes;
    SInt8   mSeconds;
    SInt8   mFrames;
    UInt32  mSubFrameSampleOffset;
};
typedef struct CAF_SMPTE_Time CAF_SMPTE_Time;
mHours

Число часов для метки времени.

mMinutes

Число минут для метки времени.

mSeconds

Число секунд для метки времени.

mFrames

Число видеокадров для метки времени. Используйте тип временного кода SMPTE (Типы Временного кода SMPTE) для определения числа видеокадров в секунду.

mSubFrameSampleOffset

Смещение аудиосэмпла к метке времени HH:MM:SS:FF. Можно использовать это поле для расположения маркера где-нибудь в отрезке времени, представленном видеокадром, при необходимости. mSampleRate поле (см. Аудио Раздел Данных Блока Описания) указывает число аудио кадров в секунду для этого файла CAF.

Для указания неиспользованной метки времени SMPTE установите каждый байт в CAF_SMPTE_Time структура к 0xFF. Когда файл CAF не указывает тип временного кода SMPTE (см. Типы Временного кода SMPTE), все метки времени описания маркера должны быть установлены как недопустимые.

Блок маркера

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

Описания маркера могут также использовать соглашение синхронизации, известное как SMPTE (Общество Изображения движущихся объектов и Телевизионных Инженеров) временной код. Для получения дополнительной информации об этом соглашении посмотрите http://www .smpte.org/.

Заголовок блока маркера

Таблица 2-16 показывает значения для полей в заголовке блока Маркера.

Табличный 2-16  Маркер разделяет поля заголовка на блоки

Поле

Значение

mChunkType

‘mark’

mChunkSize

Должно всегда быть допустимым

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

Раздел данных блока маркера

Раздел данных блока Маркера имеет два информационных поля, сопровождаемые списком описаний маркера. CAFMarkerChunk структура описывает раздел данных для этого блока.

struct CAFMarkerChunk {
    UInt32     mSMPTE_TimeType;
    UInt32     mNumberMarkers;
    CAFMarker  mMarkers[kVariableLengthArray];
}
mSMPTE_TimeType

Тип временного кода SMPTE используется для маркеров. Для доступных типов см. Типы Временного кода SMPTE. Необходимо использовать метку времени SMPTE, только если необходимо синхронизировать маркер в файле CAF с внешним событием, таким как точка в видеофайле. Чтобы указать, что маркеры в файле не имеют допустимых меток времени SMPTE, установите это поле в 0.

Если это поле имеет ненулевое значение, необходимо интерпретировать метки времени описания маркера согласно указанному типу временного кода. Отдельные описания маркера могут все еще иметь недопустимый (0xFF) Метки времени SMPTE.

Файл CAF может содержать маркеры без областей (см. Блок Области, области без блока Маркера, или и блок Маркера и блок Области. Поэтому Маркер и Область разделяют на блоки, оба включают mSMPTE_TimeType поле. В типичном использовании, если оба блока присутствуют, значение в обоих полях идентично.

mNumberMarkers

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

mMarkers

Описания маркера. См. Описания Маркера. Раздел данных блока Маркера содержит 0 или больше описаний маркера.

Блок области

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

Заголовок блока области

Таблица 2-17 показывает значения для полей в заголовке блока Области.

Табличная 2-17  Область разделяет поля заголовка на блоки

Поле

Значение

mChunkType

‘regn’

mChunkSize

Должно всегда быть допустимым

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

Раздел данных блока области

Раздел данных блока Области имеет два информационных поля, сопровождаемые списком описаний области. CAFRegionChunk структура описывает раздел данных для этого блока.

struct CAFRegionChunk {
    UInt32     mSMPTE_TimeType;
    UInt32     mNumberRegions;
    CAFRegion  mRegions[kVariableLengthArray];
}
typedef struct CAFRegionChunk CAFRegionChunk;
mSMPTE_TimeType

Тип временного кода SMPTE используется для маркеров. Для доступных типов см. Типы Временного кода SMPTE. Необходимо использовать метку времени SMPTE, только если необходимо синхронизировать область в файле CAF с областью в другом файле, таком как видеофайл. Чтобы указать, что маркеры в файле не имеют допустимых меток времени, установите это поле в 0.

Если это поле имеет ненулевое значение, необходимо интерпретировать метки времени описания маркера согласно указанному типу временного кода. Отдельные описания маркера могут все еще иметь недопустимый (0xFF) Метки времени SMPTE.

Файл CAF может содержать области без блока Маркера (см. Блок Маркера), блок Маркера без областей, или и блок Маркера и блок Области. Поэтому и блоки Маркера и Области включают mSMPTE_TimeType поле. В типичном использовании, если оба блока присутствуют, значение в обоих полях идентично.

mNumberRegions

Число описаний области в разделе данных.

mRegions

Описания области.

Описание области

Раздел данных блока Области содержит 0 или больше описаний области. CAFRegion структура определяет описание области. Описания области именуются Инструментальным блоком; посмотрите Инструментальный Раздел Данных Блока.

struct CAFRegion {
    UInt32    mRegionID;
    UInt32    mFlags;
    UInt32    mNumberMarkers;
    CAFMarker mMarkers[kVariableLengthArray];
};
typedef struct CAFRegion CAFRegion;
mRegionID

Уникальный идентификатор для описания области, установленного приложением. Вы тогда используете этот ID для обращения к области. Рекомендуется не использовать 0 для области ID.

mFlags

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

mNumberMarkers

Общее количество описаний маркера в этом описании области. Это число должно всегда быть допустимым.

mMarkers

Описания маркера для этой области.

Флаги области

Каждое описание области включает ряд флагов, определенных следующим перечислением:

enum {
    kCAFRegionFlag_LoopEnable    = 1,
    kCAFRegionFlag_PlayForward   = 2,
    kCAFRegionFlag_PlayBackward  = 4
};
kCAFRegionFlag_LoopEnable

Если этот флаг установлен, аудиоданные, очерченные этой областью, должны играться как цикл. Если этот флаг установлен, то один или оба из PlayForward и PlayBackward флаги должны также быть установлены.

kCAFRegionFlag_PlayForward

Если этот флаг установлен, цикл должен играться вперед. Если и этот флаг и PlayBackward флаг установлен, тогда цикл должен играться поочередно вперед и назад.

kCAFRegionFlag_PlayBackward

Если этот флаг установлен, цикл должен играться назад. Если и этот флаг и PlayForward флаг установлен, тогда цикл должен играться поочередно вперед и назад.

Музыкальные метаданные

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

Инструментальный блок

Дополнительный Инструментальный блок может использоваться для описания аудиоданных в файле CAF в условиях, относящихся к сэмплерам или к другим приложениям обработки цифрового аудио. Например, файл или часть файла могут быть описаны как инструмент MIDI. (Для получения дополнительной информации о MIDI и инструментах MIDI, перейдите в http://www .midi.org/.) Может быть любое число Инструментальных блоков в файле CAF, каждый указывающий часть файла.

Инструментальный заголовок блока

Таблица 2-18 показывает значения для полей в Инструментальном заголовке блока.

Табличный 2-18  Инструмент разделяет поля заголовка на блоки

Поле

Значение

mChunkType

‘inst’

mChunkSize

Должно всегда быть допустимым

Инструментальный раздел данных блока

Инструментальный раздел данных блока имеет информационные поля и список описаний области. CAFInstrumentChunk структура описывает раздел данных для этого блока.

struct CAFInstrumentChunk {
    Float32  mBaseNote;
    UInt8    mMIDILowNote;
    UInt8    mMIDIHighNote;
    UInt8    mMIDILowVelocity;
    UInt8    mMIDIHighVelocity;
    Float32  mdBGain;
    UInt32   mStartRegionID;
    UInt32   mSustainRegionID;
    UInt32   mReleaseRegionID;
    UInt32   mInstrumentID;
};
typedef struct CAFInstrumentChunk CAFInstrumentChunk;
mBaseNote

MIDI отмечает число и дробную подачу, для базовой ноты инструмента MIDI. Целочисленная часть этого поля указывает базовую ноту в целочисленном диапазоне 0 к 127, где значение 60 представляет середину C, и каждое целое число является шагом на стандартной клавиатуре фортепьяно (например, 61 C# выше середины C). Дробная часть поля указывает дробную подачу; например, 60.5 подача на полпути между примечаниями 60 и 61.

mMIDILowNote

Самое низкое примечание для области, в целочисленном диапазоне 0 к 127, где значение 60 представляет середину C (после соглашения MIDI). Это значение представляет предложенное самое низкое примечание по клавиатуре для воспроизведения этого инструментального определения. Если инструмент требуют играть примечание между, звуковые данные должны играться mMIDILowNote и mMIDIHighNote, включительно. mBaseNote значение должно быть в этом диапазоне.

mMIDIHighNote

Самое высокое примечание для области, когда используется в качестве инструмента MIDI, в целочисленном диапазоне 0 к 127, где значение 60 представляет середину C. Посмотрите обсуждения mBaseNote и mMIDILowNote поля для получения дополнительной информации.

mMIDILowVelocity

Самая низкая скорость MIDI для игры области, в целочисленном диапазоне 0 к 127.

mMIDIHighVelocity

Самая высокая скорость MIDI для игры области, в целочисленном диапазоне 0 к 127.

mdBGain

Усиление, в децибелах, для игры области. Значение 0 представляет единичное усиление. Используйте отрицательные числа для указания уменьшения в усилении.

mStartRegionID

ID области (seeRegion Описание), который определяет часть файла для использования в качестве этапа «запуска» для инструмента MIDI. Отсутствие допустимой области, ID в этом поле указывает, что нет никаких, запускает этап. Рекомендуется не присвоить ID 0 к любому описанию области, так, чтобы можно было использовать 0 в этом и следующих полях для указания отсутствия области ID.

mSustainRegionID

ID области (в блоке Области), который определяет часть файла для использования в качестве «выдержать» этапа для инструмента MIDI. Отсутствие допустимой области, ID в этом поле указывает, что существует не, выдерживает этап.

mReleaseRegionID

ID области (в блоке Области), который определяет часть файла для использования в качестве этапа «выпуска» для инструмента MIDI. Отсутствие допустимой области, ID в этом поле указывает, что нет никакого этапа выпуска.

mInstrumentID

ID строки (в Строковом блоке, Строковом Блоке), который указывает имя инструмента. Отсутствие допустимой строки, ID в этом поле означает, что не указано никакое имя. Рекомендуется не присвоить ID 0 к любому строковому описанию, так, чтобы можно было использовать 0 в этом поле для указания отсутствия идентификатора строки.

Блок MIDI

Можно использовать дополнительный блок MIDI для содержания данных MIDI с помощью стандартного формата файла MIDI. Это может использоваться для хранения метаданных об аудио в блоке Данных файла, или даже представления MIDI того аудио. Для получения информации о стандарте MIDI посмотрите http://www .midi.org.

Необходимо полагать, что информация в этом блоке заменяет конфликтную информацию в информационном блоке (информационный Блок). Например, и информационный блок и блок MIDI могут указать ключ и темп. В этом случае значения блока MIDI должны переопределить значения в информационном блоке.

Заголовок блока MIDI

Таблица 2-19 показывает значения для полей в заголовке блока MIDI.

Таблица 2-19  MIDI разделяет поля заголовка на блоки

Поле

Значение

mChunkType

‘midi’

mChunkSize

Должно всегда быть допустимым

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

Раздел данных блока MIDI

Раздел данных Блока MIDI может использоваться для содержания чего-либо, что может быть описано стандартным файлом MIDI, таким как:

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

  • Ключ

  • Музыкальный размер

  • Представление MIDI аудиоданных; например, MIDI отмечает числа

Аудио поддержка редактора

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

Блок обзора

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

Заголовок блока обзора

Таблица 2-20 показывает значения для полей в заголовке блока Обзора.

Табличный 2-20  Обзор разделяет поля заголовка на блоки

Поле

Значение

mChunkType

‘ovvw’

mChunkSize

Должно всегда быть допустимым

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

Раздел данных блока обзора

Раздел данных блока Обзора имеет два информационных поля, сопровождаемые списком демонстрационных описаний. CAFOverview структура описывает раздел данных для этого блока.

struct CAFOverview {
    UInt32             mEditCount;
    UInt32             mNumFramesPerOVWSample;
    CAFOverviewSample  mData[kVariableLengthArray];
};
typedef struct CAFOverview CAFOverview;
mEditCount

Количество модификации раздела данных Блока Обзора. При создании блока Обзора необходимо установить mEditCount поле к значению mEditCount поле блока Аудиоданных файла CAF. Можно тогда проверить, допустим ли обзор все еще путем сравнения количеств редактирования. Если они не соответствуют, необходимо регенерировать обзор.

mNumFramesPerOVWSample

Число кадров аудиоданных, представленных единственной выборкой обзора.

mData

Массив выборок обзора. Для mNumFramesPerOVWSample кадры аудио в блоке Аудиоданных, необходимо сохранить одну выборку на канал в этом поле. Последовательность каналов должна совпасть с в блоке Аудиоданных.

Выборка обзора

Раздел данных блока Обзора содержит выборки обзора, описанные CAFOverviewSample структура.

struct CAFOverviewSample {
    SInt16  mMinValue;
    SInt16  mMaxValue;
};
mMinValue

Минимальное значение для выборки, перечисленной как обратный порядок байтов, 16-разрядное целое число со знаком.

mMaxValue

Максимальное значение для выборки, перечисленной как обратный порядок байтов, 16-разрядное целое число со знаком.

Пиковый блок

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

Пиковый заголовок блока

Таблица 2-21 показывает значения для полей в Пиковом заголовке блока.

Табличный 2-21  Пик разделяет поля заголовка на блоки

Поле

Значение

mChunkType

‘peak’

mChunkSize

Должно всегда быть допустимым

Пиковый блок использует Пиковую структуру для описания каждого пика (см. Пиковую Структуру). Размер раздела данных Пикового блока, чтобы быть помещенным в mChunkSize поле заголовка, зависит от числа каналов в файле следующим образом:

mChunkSize = sizeof(CAFPositionPeak) * numChannelsInFile + sizeof(UInt32);

sizeof(UInt32) параметр представляет раздел данных mEditCount поле. Число каналов в файле, представленном numChannelsInFile параметр, указан в mChannelsPerFrame поле Аудио блока Описания.

Пиковый раздел данных блока

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

struct CAFPeakChunk {
    UInt32           mEditCount;
    CAFPositionPeak  mPeaks[kVariableLengthArray];
};
typedef struct CAFPeakChunk CAFPeakChunk;
mEditCount

Состояние модификации Пикового раздела данных Блока. Когда Вы создаете Пиковый блок, устанавливаете mEditCount поле к значению mEditCount поле блока Аудиоданных файла CAF. Можно тогда проверить, допустимы ли пиковые данные все еще путем сравнения количеств редактирования. Если они не соответствуют, пиковая информация должна быть регенерирована.

mPeaks

Массив Пиковых структур, один для каждого канала аудиоданных содержится в файле. Посмотрите Пиковую Структуру.

Число каналов в файле указано в mChannelsPerFrame поле Аудио блока Описания (Аудио Блок Описания).

Пиковая структура

Пиковый раздел данных блока содержит одну Пиковую структуру для каждого канала, определенного следующим образом:

struct CAFPositionPeak {
    Float32  mValue;
    UInt64   mFrameNumber;
};
mValue

Максимальная абсолютная амплитуда со знаком в канале, нормализованном к значению с плавающей точкой в интервале [{–1.0, +1.0}].

mFrameNumber

Число кадра, где происходит пик. Первый кадр в файле CAF 0.

Аннотации

Можно добавить текстовые строки к файлу CAF, чтобы предоставить информацию об аудиоданных (в информационном блоке) и указать, какое редактирование было сделано на файле (в блоке Комментариев Редактирования).

Блок комментариев редактирования

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

Заголовок блока комментариев редактирования

Таблица 2-22 показывает значения для полей в заголовке блока Комментариев Редактирования.

Табличные 2-22  Комментарии Редактирования разделяют поля заголовка на блоки

Поле

Значение

mChunkType

‘edct’

mChunkSize

Должно всегда быть допустимым

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

Раздел данных блока комментариев редактирования

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

struct CAFCommentStringsChunk {
    UInt32       mNumEntries;
    CAFStringID  mStrings[kVariableLengthArray];
};
mNumEntries

Число редактирования комментирует в разделе данных.

mStrings

Список комментариев редактирования. См. Комментарий Редактирования.

Комментарий редактирования

editComment структура описывает комментарий редактирования.

struct editCommment {
    UInt8  mKey[kVariableLengthArray];
    UInt8  mValue[kVariableLengthArray];
}
mKey

Завершенный нулем, строка времени суток, соответствующая ISO 8601. Все случаи основываются на UTC (Всемирное координированное время). Посмотрите Формат данных Времени суток.

mValue

Завершенная нулем строка UTF8.

Информационный блок

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

Необходимо полагать, что информация в этом блоке вторична, когда та же информация появляется в других блоках. Например, и информационный блок и блок MIDI (Блок MIDI) могут указать ключ и темп. В этом случае, значения блока MIDI переопределяет значения в информационном блоке.

Информационный заголовок блока

Таблица 2-23 показывает значения для полей в информационном заголовке блока.

  Информация о таблице 2-23 разделяет поля заголовка на блоки

Поле

Значение

mChunkType

‘info’

mChunkSize

Должно всегда быть допустимым

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

Информационный раздел данных блока

CAFStringsChunk структура описывает раздел данных для информационного блока.

struct CAFStringsChunk {
    UInt32       mNumEntries;
    CAFStringID  mStrings[kVariableLengthArray];
};
mNumEntries

Число информации представляет в виде строки в блоке. Должно всегда быть допустимым.

mStrings

Переменная длина включила массив информационных записей. Посмотрите информационные Записи.

CAF включает некоторые соглашения для информационных пар ключ/значение блока.

  • Apple резервирует ключи, которые являются всем нижним регистром (см. информационные Ключи Записи). Определенные с помощью приложения ключи должны включать по крайней мере один символ верхнего регистра.

  • Для любого ключа, заканчивающегося ' date' (т.е. пробел, сопровождаемый словом 'date'— например, 'recorded date'), значение должно быть строкой времени суток. Посмотрите Формат данных Времени суток.

  • Используя a '.' символ (периода) как первый символ ключа означает, что пара ключ/значение не должна быть выведена на экран. Это позволяет Вам хранить частную информацию, которая должна быть сохранена другими приложениями, но не выведена на экран пользователю.

Информационные записи

CAFInformation структура описывает информационную запись.

struct CAFInformation {
    UInt8  mKey[kVariableLengthArray];
    UInt8  mValue[kVariableLengthArray];
};
mKey

Завершенная нулем строка UTF8. Посмотрите информационные Ключи Записи.

mValue

Завершенная нулем строка UTF8.

Информационные ключи записи

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

tempo

Основной темп аудиоданных в ударах в минуту.

key signature

Ключ для аудио в файле. В mValue поле, примечание капитализируется со значениями от A к G. Нижний регистр m указывает минорную тональность. Нижний регистр b указывает плоский ключ. # символ указывает диезную тональность.

Примеры: ‘C’, ‘Cm’, ‘C#’, ‘Cb’.

time signature

Музыкальный размер для аудио в файле.

Примеры: ‘4/4’, ‘6/8’.

artist

Имя художника производительности для аудио в файле.

Пример: ‘Able Baker,Charlie Delta’

album

Имя альбома, из которого аудио в файле является частью.

track number

Номер дорожки, в альбоме, для аудио в файле.

year

Год публикации для аудио в файле.

composer

Имя композитора для аудио в файле.

lyricist

Имя лирика для аудио в файле.

genre

Имя жанра для аудио в файле.

title

Заголовок или имя аудио в файле. Может отличаться от имени файла.

recorded date

Метка времени для записи в файле. Посмотрите Формат данных Времени суток.

comments

Свободная форма комментирует об аудио в файле.

copyright

Информация об авторском праве для аудио в файле.

Пример: 'Copyright © 2004 The CoolBandName. All Rights Reserved'

source encoder

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

Пример: 'My AAC Encoder v4.2'

encoding application

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

Пример: 'My App v1.0'

nominal bit rate

Описание скорости передачи используется для аудио в файле.

Пример: '128 kbits'

channel layout

Описание расположения канала для файла.

Примеры: 'stereo', '5.1 Surround', '10.2 Surround'

Идентификатор

Файлы CAF могут включать Уникальный Материальный блок Идентификатора для однозначного определения звукового содержимого.

Уникальный материальный блок идентификатора

Можно использовать дополнительный Уникальный Материальный блок Идентификатора для однозначного определения аудио, содержавшегося в файле CAF. В файле может быть самое большее один блок UMID.

Данные в этом блоке соответствуют стандарту SMPTE 330M-2004 спецификация для уникальных существенных идентификаторов. Посмотрите http://www .smpte.org/standards/.

Европейский вещательный союз (EBU) обеспечивает инструкции для использования UMIDs в широковещательном производстве. Файлы CAF должны придерживаться этих инструкций. Посмотрите http://www .ebu.ch/CMSimages/en/tec_text_d92-2001_tcm6-4721.pdf.

Уникальный материальный заголовок блока идентификатора

Таблица 2-24 показывает значения для полей в Уникальном Материальном заголовке блока Идентификатора.

Таблица 2-24  Уникальные Материальные поля заголовка блока Идентификатора

Поле

Значение

mChunkType

‘umid’

mChunkSize

64 (sizeof(CAFUMIDChunk)); Должно всегда быть допустимым

Уникальный материальный раздел данных блока идентификатора

CAFUMIDChunk структура описывает раздел данных блока UMID.

struct CAFUMIDChunk {
    UInt8 mBytes[64];
};
typedef struct CAFUMIDChunk CAFUMIDChunk;
mBytes

UMID для файла. Первые 32 байта составляют «Основной» UMID и включают четыре данные: число экземпляра, копия указания флага или исходное, материальное число и описание устройства, записавшего исходный материал.

Вторые 32 байта составляют так называемый раздел «Source Pack» для UMID, включающего три дополнительных данные: метка времени записи, географические координаты записи и информация о владении.

Размер раздела данных блока UMID - точно 64 байта. Если файл CAF имеет только «Основной» UMID, остающиеся 32 байта в разделе данных должны быть установлены в 0.

Для получения дополнительной информации обратитесь к спецификации UMID, SMPTE 330M-2004, доступный от http://www .smpte.org/standards/.

Расширение спецификации CAF

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

При парсинге файла CAF необходимо проигнорировать любой блок с UUID, который Вы не распознаете.

Определяемый пользователем блок

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

Определяемый пользователем заголовок блока

Таблица 2-25 показывает значения для полей в Определяемом пользователем заголовке блока.

Таблица 2-25  значения полей заголовка CAF для Определяемого пользователем Блока

Поле

Значение

mChunkType

‘uuid’

mChunkSize

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

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

struct CAF_UUID_ChunkHeader {
    CAFChunkHeader  mHeader;
    UInt8           mUUID[16];
};
CAF_UUID_ChunkHeader CAF_UUID_ChunkHeader;
mHeader

Стандартный заголовок CAF со значениями в Таблице 2-25.

mUUID

Уникальный универсальный идентификатор (UUID), на основе ISO 14496-1 спецификация для идентификаторов UUID, доступных от http://www.iso.ch/iso/en/CatalogueListPage. CatalogueList.

Определяемый пользователем раздел данных блока

Любые данные после заголовка блока определяются пользовательским типом блока. Если блок UUID имеет зависимости от количества редактирования блока Аудиоданных, то количество редактирования должно быть сохранено после mUUID поле.

Дополнительное пространство

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

Свободный блок

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

Свободный заголовок блока

Таблица 2-26 показывает значения для полей в Свободном заголовке блока.

Таблица 2-26  Свободные поля заголовка блока

Поле

Значение

mChunkType

‘free’

mChunkSize

Должно всегда быть допустимым

Набор mChunkSize к размеру раздела данных Вы используете для зарезервированного пространства.

Свободный раздел данных блока

Необходимо проигнорировать содержание Свободного раздела данных блока.