Спецификация формата 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 показывает значения для полей в Аудио заголовке блока Описания.
Поле | Значение |
|---|---|
|
|
|
|
Размер блока фиксируется в 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. Не имеет никаких флагов формата. Посмотрите Сжатые Форматы аудио для получения дополнительной информации об этом и другие сжатые форматы аудио.
kAudioFormatMPEG4AACMPEG 4 AAC.
mFormatFlagsполе должно содержать тип объекта аудио MPEG 4 постоянное указание определенного вида данных.kAudioFormatMACE3MACE 3:1; не имеет никаких флагов формата.
kAudioFormatMACE6MACE 6:1; не имеет никаких флагов формата.
kAudioFormatULawμLaw 2:1; не имеет никаких флагов формата.
kAudioFormatALawaLaw 2:1; не имеет никаких флагов формата.
kAudioFormatMPEGLayer1MPEG 1 или 2, аудио Уровня 1. Не имеет никаких флагов формата.
kAudioFormatMPEGLayer2MPEG 1 или 2, аудио Уровня 2. Не имеет никаких флагов формата.
kAudioFormatMPEGLayer3MPEG 1 или 2, аудио Уровня 3 (т.е. MP3). Не имеет никаких флагов формата.
kAudioFormatAppleLosslessApple Lossless; не имеет никаких флагов формата.
Поле mFormatFlags
mFormatFlags поле обеспечивает подробную спецификацию для форматов аудиоданных, требующих его. Они включают линейный PCM, MPEG 4 AAC и AC 3. Для форматов аудио, не использующих флаги форматирования, это поле должно быть установлено в 0.
Флаговые биты, не указанные для любого опубликованного формата, резервируются для будущего использования. Для совместимости те флаговые биты должны быть установлены в 0.
Линейный PCM форматирующие флаги может иметь следующие значения:
enum { |
kCAFLinearPCMFormatFlagIsFloat = (1L << 0), |
kCAFLinearPCMFormatFlagIsLittleEndian = (1L << 1) |
}; |
kCAFLinearPCMFormatFlagIsFloat1для плавающей точки,0для целого числа со знаком.kCAFLinearPCMFormatFlagIsLittleEndian1для прямого порядка байтов,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.
Поле | Значение |
|---|---|
| 44100. |
|
|
|
|
| 2 |
| 16 |
| 1 |
| 4 |
В упакованном чемодане каждая выборка на 24 бита приводит 3 байта в рабочее состояние в файле. Например, для описания 24 битов, стерео с прямым порядком байтов, с частотой дискретизации 48 000 кадров в секунду, Вы использовали бы Аудио значения полей Описания в Таблице 2-3.
Поле | Значение |
|---|---|
| 48000. |
|
|
|
|
| 2 |
| 24 |
| 1 |
| 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.
Поле | Значение |
|---|---|
| 96000. |
|
|
|
|
| 4 |
| 64 |
| 1 |
| 32 |
Можно также использовать файлы CAF для хранения «не байта выровненные» форматы PCM, такие как 12-разрядный или 18-разрядный PCM. Для этого Вы должны
Упакуйте данные в выровненной байтом демонстрационной ширине.
Высоко - выравнивают выборки во включающей выровненной байтом ширине.
Например, 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.
Поле | Значение |
|---|---|
| 44100. |
|
|
| 0 |
| 2 |
| 0 |
| 64 |
| 68 (= |
В этом примере, mBitsPerChannel поле 0, указание, что это - сжатый формат. mBytesPerPacket поле отражает постоянное число байтов на канал (34) и число кадров на пакет (64 в этом случае).
Для сжатого формата аудио с переменной скоростью передачи, mBytesPerPacket поле 0, указание, что число байтов на пакет является переменным. В этом случае Пакетный Табличный блок (Пакетный Табличный Блок) требуется.
Например, формат данных MPEG 4 Усовершенствованного кодирования звука (AAC) использует переменную скорость передачи, но постоянное число кадров на пакет. Для описания файла CAF 2 каналов, Низкий Объект Аудио Сложности форматирует данные AAC с частотой дискретизации 44 100 кадров в секунду (для распакованных данных), Вы использовали бы Аудио значения полей Описания в Таблице 2-6.
Поле | Значение |
|---|---|
| 44100. |
|
|
|
|
| 2 |
| 0 |
| 1024 |
| 0 |
В этом примере, mBitsPerChannel поле 0, указание, что это - сжатый формат, и mBytesPerPacket поле 0, указание переменной скорости передачи.
Обратите внимание на то, что пока формат имеет постоянное число кадров на пакет, можно вычислить продолжительность каждого пакета путем деления mSampleRate значение mFramesPerPacket значение.
Некоторые сжатые форматы варьируются число кадров на пакет. В этом случае необходимо установить mFramesPerPacket поле к 0 (в дополнение к mBitsPerChannel поле, которое является 0 для всех сжатых форматов).
Блок аудиоданных
Каждый файл CAF должен иметь точно один блок Аудиоданных. Принимая во внимание, что другие блоки содержат данные, помогающие охарактеризовать или интерпретировать аудио, это - блок в файле CAF, содержащем фактические аудиоданные. Если его размер указан, этот блок может быть помещен куда угодно после Аудио блока Описания. Если его размер не указан, блок Аудиоданных должен быть последним в файле.
Заголовок блока аудиоданных
Таблица 2-7 показывает значения для полей в заголовке блока Аудиоданных.
Поле | Значение |
|---|---|
|
|
| Размер данных разделяет в байтах, или |
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 показывает значения для полей в Пакетном Табличном заголовке блока.
Поле | Значение |
|---|---|
|
|
| Должно всегда быть допустимым |
Для файла 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 дает некоторые примеры закодированных целых чисел.
Размер пакета | Целое число, кодирующее (шестнадцатеричный) | Целочисленное кодирование (двоичный файл) |
|---|---|---|
1 |
|
|
17 |
|
|
127 |
|
|
128 |
|
|
130 |
|
|
257 |
|
|
16383 |
|
|
16384 |
|
|
Таким образом раздел данных содержит простой список чисел или список упорядоченных пар чисел. Во всех случаях целые числа переменной длины используются для описания каждого пакета.
Формат с постоянной скоростью передачи
Пакетный Табличный блок может использоваться с постоянной скоростью передачи (постоянные кадры на пакет и постоянные байты на пакет) формат для предоставления информации о любом из следующего:
Любая задержка вследствие природы кодека (см. обсуждение
mPrimingFramesполе в Пакетном Табличном Описании).Любые кадры остатка. Когда общее количество кадров в аудиоданных не является равномерно делимым кадрами на пакет, указанный для файла, кадры остатка происходят. Посмотрите обсуждение
mFramesPerPacketполе в Аудио Разделе Данных Блока Описания и обсужденииmRemainderFramesполе в Пакетном Табличном Описании.
Для любого из этих случаев не необходимы никакие пакетные табличные данные, таким образом, устанавливает mNumberPackets поле к 0. Размер пакетной таблицы является поэтому размером пакетной табличной структуры заголовка.
Как пример второго использования, формат IMA кодирует выборки в пакеты, содержащие 64 демонстрационных кадра каждый. Если аудиоданные не являются одинаково делимыми 64 кадрами, то последний пакет содержания IMA декодирует к меньшему количеству выборок, чем 64, представленные пакетом. В этом случае Пакетный Табличный заголовок используется для указания общего количества кадров в файле и числе кадров остатка. Например, если бы существует 5 кадров остатка, Вы установили бы поля Пакетного Табличного заголовка как показано в Таблице 2-10.
Поле | Значение |
|---|---|
mNumberPackets | 0 |
mNumberValidFrames |
|
mPrimingFrames | 0 |
mRemainderFrames |
|
Переменная скорость передачи, постоянные кадры на пакет
Пакетный Табличный блок требуется для упакованных форматов данных с переменной скоростью передачи (mBytesPerPacket установлен в 0) и постоянное число кадров на пакет (mFramesPerPacket является ненулевым). (См. Аудио Раздел Данных Блока Описания для получения дополнительной информации об этих полях заголовка.)
В этом случае пакетные табличные данные содержат одно целое число переменной длины для каждого пакета, указывающего размер пакета в байтах. Посмотрите Пакетный Табличный Раздел Данных Блока для объяснения целых чисел переменной длины.
Например, потому что AAC имеет задержку 2 112 кадров, кодирование AAC 3 074 демонстрационных кадров требует в общей сложности 6 пакетов (AAC имеет 1 024 кадра на пакет). Поля Пакетного Табличного заголовка для этого примера находятся как показано в Таблице 2-11.
Поле | Значение |
|---|---|
| 6 |
| 3074 |
| 2112 |
| 958 (= 1024 ( |
Как показано в Таблице 2-12, первые два пакета содержат только кадры воспламенения; эти кадры не выводят допустимых аудиоданных. Третий пакет содержит заключительные 64 кадра воспламенения и затем выводы 960 кадров аудиоданных. Следующие два пакета содержат 1 024 демонстрационных кадра допустимых аудиоданных за штуку. (Обычно было бы много пакетов более с 1024 кадрами, чем два в этом примере.) Последний пакет содержит заключительные 66 демонстрационных кадров аудиоданных, сопровождаемых 958 кадрами остатка (который должен быть обрезан от вывода).
Пакет | 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 показывает значения для полей в заголовке блока Расположения Канала.
Поле | Значение |
|---|---|
|
|
| Должно всегда быть допустимым |
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.
Поле | Значение |
|---|---|
|
|
| Должно всегда быть допустимым |
Волшебный раздел данных блока Cookie
Структура Волшебного раздела данных блока Cookie определяется форматом аудиоданных, которому она применяется к. Например, файл CAF, содержащий данные MPEG 4 AAC, должен иметь Волшебный блок Cookie, содержащий элементарный потоковый дескриптор. Это - данные, содержавшиеся в 'esds' атоме в файле MPEG 4 (и часто упоминается как ESDS) для данного аудиотрека AAC.
Строковый блок
Дополнительный Строковый блок содержит любое число текстовых строк, вместе с индексом для доступа к ним. Эти строки служат метками для других блоков, таких как блоки Области или Маркер.
Строковый заголовок блока
Таблица 2-15 показывает значения для полей в Строковом заголовке блока.
Поле | Значение |
|---|---|
|
|
| Должно всегда быть допустимым |
Строковый заголовок блока может указать размер раздела данных, который больше, чем текущее значимое содержание блока для резервирования комнаты для дополнительных данных.
Строковый раздел данных блока
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.mSMPTETimeSMPTE устанавливает метку времени для маркера. Можно использовать это поле для связи маркера в файле 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_TimeType2424 видеокадра в секунду — стандарт для 16-миллиметрового и 35-миллиметрового фильма.
kCAF_SMPTE_TimeType2525 видеокадров в секунду — стандарт для PAL и видео SECAM.
kCAF_SMPTE_TimeType30Drop30 видеокадров в секунду, с количествами числа видеокадра, скорректированными, чтобы гарантировать, чтобы истекшие соответствия временного кода показали время.
kCAF_SMPTE_TimeType3030 видеокадров в секунду.
kCAF_SMPTE_TimeType299729,97 видеокадров в секунду — стандарт для видео NTSC.
kCAF_SMPTE_TimeType2997Drop29,97 видеокадров в секунду — стандарт для видео NTSC — с количествами числа видеокадра корректировался, чтобы гарантировать, чтобы истекшие соответствия временного кода показали время.
kCAF_SMPTE_TimeType6060 видеокадров в секунду.
kCAF_SMPTE_TimeType599459,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 показывает значения для полей в заголовке блока Маркера.
Поле | Значение |
|---|---|
|
|
| Должно всегда быть допустимым |
Заголовок блока Маркера может указать размер раздела данных, который больше, чем текущее значимое содержание блока для резервирования комнаты для дополнительных данных.
Раздел данных блока маркера
Раздел данных блока Маркера имеет два информационных поля, сопровождаемые списком описаний маркера. 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 показывает значения для полей в заголовке блока Области.
Поле | Значение |
|---|---|
|
|
| Должно всегда быть допустимым |
Заголовок блока Области может указать размер раздела данных, который больше, чем текущее значимое содержание блока для резервирования комнаты для дополнительных данных.
Раздел данных блока области
Раздел данных блока Области имеет два информационных поля, сопровождаемые списком описаний области. 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 показывает значения для полей в Инструментальном заголовке блока.
Поле | Значение |
|---|---|
|
|
| Должно всегда быть допустимым |
Инструментальный раздел данных блока
Инструментальный раздел данных блока имеет информационные поля и список описаний области. 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; |
mBaseNoteMIDI отмечает число и дробную подачу, для базовой ноты инструмента 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представляет единичное усиление. Используйте отрицательные числа для указания уменьшения в усилении.mStartRegionIDID области (seeRegion Описание), который определяет часть файла для использования в качестве этапа «запуска» для инструмента MIDI. Отсутствие допустимой области, ID в этом поле указывает, что нет никаких, запускает этап. Рекомендуется не присвоить ID
0к любому описанию области, так, чтобы можно было использовать0в этом и следующих полях для указания отсутствия области ID.mSustainRegionIDID области (в блоке Области), который определяет часть файла для использования в качестве «выдержать» этапа для инструмента MIDI. Отсутствие допустимой области, ID в этом поле указывает, что существует не, выдерживает этап.
mReleaseRegionIDID области (в блоке Области), который определяет часть файла для использования в качестве этапа «выпуска» для инструмента MIDI. Отсутствие допустимой области, ID в этом поле указывает, что нет никакого этапа выпуска.
mInstrumentIDID строки (в Строковом блоке, Строковом Блоке), который указывает имя инструмента. Отсутствие допустимой строки, ID в этом поле означает, что не указано никакое имя. Рекомендуется не присвоить ID
0к любому строковому описанию, так, чтобы можно было использовать0в этом поле для указания отсутствия идентификатора строки.
Блок MIDI
Можно использовать дополнительный блок MIDI для содержания данных MIDI с помощью стандартного формата файла MIDI. Это может использоваться для хранения метаданных об аудио в блоке Данных файла, или даже представления MIDI того аудио. Для получения информации о стандарте MIDI посмотрите http://www .midi.org.
Необходимо полагать, что информация в этом блоке заменяет конфликтную информацию в информационном блоке (информационный Блок). Например, и информационный блок и блок MIDI могут указать ключ и темп. В этом случае значения блока MIDI должны переопределить значения в информационном блоке.
Заголовок блока MIDI
Таблица 2-19 показывает значения для полей в заголовке блока MIDI.
Поле | Значение |
|---|---|
|
|
| Должно всегда быть допустимым |
Заголовок блока MIDI должен указать истинный размер допустимых данных в разделе данных.
Раздел данных блока MIDI
Раздел данных Блока MIDI может использоваться для содержания чего-либо, что может быть описано стандартным файлом MIDI, таким как:
Информация о темпе
Ключ
Музыкальный размер
Представление MIDI аудиоданных; например, MIDI отмечает числа
Аудио поддержка редактора
Можно использовать блок Обзора для содержания демонстрационных описаний аудиоданных для отображения данных для пользователя и Пикового блока для содержания информации о пиковых амплитудах.
Блок обзора
Можно использовать дополнительный блок Обзора для содержания демонстрационных описаний, которые можно использовать для рисования графического представления аудиоданных в файле CAF. Файл CAF может включать многократные блоки Обзора для представления аудио в многократных графических разрешениях.
Заголовок блока обзора
Таблица 2-20 показывает значения для полей в заголовке блока Обзора.
Поле | Значение |
|---|---|
|
|
| Должно всегда быть допустимым |
Заголовок блока Обзора должен указать истинный размер допустимых данных в разделе данных.
Раздел данных блока обзора
Раздел данных блока Обзора имеет два информационных поля, сопровождаемые списком демонстрационных описаний. 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 показывает значения для полей в Пиковом заголовке блока.
Поле | Значение |
|---|---|
|
|
| Должно всегда быть допустимым |
Пиковый блок использует Пиковую структуру для описания каждого пика (см. Пиковую Структуру). Размер раздела данных Пикового блока, чтобы быть помещенным в 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 показывает значения для полей в заголовке блока Комментариев Редактирования.
Поле | Значение |
|---|---|
|
|
| Должно всегда быть допустимым |
Заголовок блока Комментариев Редактирования может указать размер раздела данных, который больше, чем текущее значимое содержание блока для резервирования комнаты для дополнительных данных.
Раздел данных блока комментариев редактирования
Раздел данных для этого блока содержит поле, описывающее число записей, сопровождаемых списком комментариев редактирования. 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 показывает значения для полей в информационном заголовке блока.
Поле | Значение |
|---|---|
|
|
| Должно всегда быть допустимым |
Информационный заголовок блока может указать размер раздела данных, который больше, чем текущее значимое содержание блока для резервирования комнаты для дополнительных данных.
Информационный раздел данных блока
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 показывает значения для полей в Уникальном Материальном заголовке блока Идентификатора.
Поле | Значение |
|---|---|
|
|
| 64 ( |
Уникальный материальный раздел данных блока идентификатора
CAFUMIDChunk структура описывает раздел данных блока UMID.
struct CAFUMIDChunk { |
UInt8 mBytes[64]; |
}; |
typedef struct CAFUMIDChunk CAFUMIDChunk; |
mBytesUMID для файла. Первые 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 показывает значения для полей в Определяемом пользователем заголовке блока.
Поле | Значение |
|---|---|
|
|
| Размер данных разделяет плюс 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 показывает значения для полей в Свободном заголовке блока.
Поле | Значение |
|---|---|
|
|
| Должно всегда быть допустимым |
Набор mChunkSize к размеру раздела данных Вы используете для зарезервированного пространства.
Свободный раздел данных блока
Необходимо проигнорировать содержание Свободного раздела данных блока.