Спецификация формата 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. Не имеет никаких флагов формата. Посмотрите Сжатые Форматы аудио для получения дополнительной информации об этом и другие сжатые форматы аудио.
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.
Поле | Значение |
---|---|
| 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.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 показывает значения для полей в заголовке блока Маркера.
Поле | Значение |
---|---|
|
|
| Должно всегда быть допустимым |
Заголовок блока Маркера может указать размер раздела данных, который больше, чем текущее значимое содержание блока для резервирования комнаты для дополнительных данных.
Раздел данных блока маркера
Раздел данных блока Маркера имеет два информационных поля, сопровождаемые списком описаний маркера. 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; |
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.
Поле | Значение |
---|---|
|
|
| Должно всегда быть допустимым |
Заголовок блока 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; |
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 показывает значения для полей в Определяемом пользователем заголовке блока.
Поле | Значение |
---|---|
|
|
| Размер данных разделяет плюс 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
к размеру раздела данных Вы используете для зарезервированного пространства.
Свободный раздел данных блока
Необходимо проигнорировать содержание Свободного раздела данных блока.