Формат Bard (.bard)
Файлы формата Bard на данный момент имеют такую структуру:
- Bard-заголовок
- заголовок BARD-файла (см. ниже)
- Bard-формат
- формат звука (см. ниже)
- Bard-данные
- звуковые данные (см. ниже)
Bard-заголовок
Смещение |
Размер |
Тип |
Содержимое |
0 |
4 |
ASCII |
Сигнатура 'B', 'A', 'R', 'D' |
4 |
4 |
DWORD |
Версия формата |
8 |
4 |
DWORD |
Размер Bard-заголовка. Если эта величина больше указанной здесь, то при чтении файла лишние байты пропускаются. |
12 |
4 |
- |
Зарезервировано |
16 |
8 |
QWORD |
Размер блока Bard-формат |
24 |
8 |
QWORD |
Размер блока Bard-данные |
Bard-формат
Смещение |
Размер |
Тип |
Содержимое |
0 |
18 |
WAVEFORMATEX |
Стандартная структура (см. MSDN)
Смещение |
Размер |
Тип |
Содержимое |
0 |
2 |
WORD |
wFormatTag. Тип формата. Для формата Bard равно 0xBA0D |
2 |
2 |
WORD |
nChannels. Число дорожек. Для формата Bard может быть от 1 до 1000 |
4 |
4 |
DWORD |
nSamplesPerSec. Частота дискретизации. Должно быть по крайней мере больше 100.
Желательны стандарнтые частоты: 44100, 22050 и т.п.
|
8 |
4 |
DWORD |
nAvgBytesPerSec. Среднее количество байт для кодирования секунды звука. Для формата Bard
вычисляется по тому же принципу, что и для формата PCM: nAvgBytesPerSec = nBlockAlign * nSamplesPerSec.
|
12 |
2 |
WORD |
nBlockAlign. Количество байт для кодирования одного шага дискретизации. Для формата Bard
вычисляется по тому же принципу, что и для формата PCM: nBlockAlign = nChannels * wBitsPerSample / 8.
|
14 |
2 |
WORD |
wBitsPerSample. Количество бит для кодирования одного шага дискретизации в одной дорожке.
Для формата Bard может быть равно 16 или 32 (см. ниже "тип кодирования").
|
16 |
2 |
WORD |
cbSize. Размер остальной части блока Bard-формат.
|
|
18 |
2 |
- |
Байты выравнивания, зарезервировано |
20 |
4 |
- |
Зарезервировано |
24 |
4 |
int 16 |
Тип кодирования:
0 |
неизвестный (не поддерживается) |
1 |
целое без знака 8-бит (стандартное кодирование для PCM, не поддерживается) |
2 |
целое со знаком 16-бит (стандартное кодирование для PCM) |
3 |
целое со знаком 32-бит (нестандартное кодирование, только Bard) |
4 |
32-бит с плавающей точкой (нестандартное кодирование, только Bard) |
5 |
64-бит с плавающей точкой (нестандартное кодирование, только Bard) |
|
28 |
4 |
- |
Зарезервировано |
32 |
8 |
double |
Общий коэффициент усиления (по-умолчанию 1.0) |
40 |
nChannels * 64 |
Массив |
Описания дорожек - по 64 байта на каждую дорожку (см. ниже) |
Описание дорожки
Смещение |
Размер |
Тип |
Содержимое |
0 |
4 |
COLORREF |
Цвет отображения дорожки в GUI. Если 0xFFFFFFFF, то берется цвет по-умолчанию |
4 |
4 |
int 16 |
Флаги дорожки
Бит 0 |
1: дорожка включена, 0: дорожка выключена |
Бит 1 |
1: показывать дорожку в GUI со смещением, чтобы график другой дорожки не закрывал ее |
Биты 2-31 |
зарезервированы |
|
8 |
4 |
int 16 |
Номер слоя (Z-order) для отображения дорожки в GUI. Самая далекая от зрителя дорожка находится в нулевом слое,
по мере приближения номера слоев увеличиваются на 1.
|
12 |
4 |
- |
Зарезервировано
|
16 |
8 |
double |
Коэффициент усиления для левого канала. Если он равен 0.0, то при микшировании эта дорожка
не будет попадать в левый канал. Если он 1.0, то при микшировании эта дорожка
будет попадать в левый канал без усиления или ослабления.
|
24 |
8 |
double |
Коэффициент усиления для правого канала. Если он равен 0.0, то при микшировании эта дорожка
не будет попадать в правый канал. Если он 1.0, то при микшировании эта дорожка
будет попадать в правый канал без усиления или ослабления.
|
32 |
32 |
ASCIIZ |
Текстовая пометка дорожки. Поле не предназначено для пространных описаний, а только
для временных пометок в процессе редактирования.
|
Bard-данные
Содержит непрерывный массив данных. Каждый элемент в зависимости от типа кодирования - 16-битное целое
со знаком, 32-битное целое со знаком или 32-битное с плавающей точкой. В последнем случае используется
стандартный тип для процессоров архитектуры x86 (в языке C/C++ это float).
Массив двумерный - число отсчетов на число дорожек. Индекс дорожки изменяется быстрее от 0
до nChannels, например для двух дорожек: отсчет 0 дорожка 0, отсчет 0 дорожка 1, отсчет 1 дорожка 0, отсчет 1 дорожка 1,...
Аналогичное кодирование используется в формате PCM.
Различие между дорожками и каналами таково. Каналы относятся к наушникам - левый и правый. Дорожки
относятся к инструментам оркестра (или партиям в хоре). При микшировании дорожки суммируются между собой,
причем, каждая дорожка может проецироваться на оба канала или только на один, или в разной степени
на левый и правый. Таким образом задается направление на источник звука, который представлен этой дорожкой.
А коэффициент усиления для дорожки задает расстояние до источника звука.
При этом когда создается файл с двумя дорожками, то автоматически одна проецируется только на левый,
вторая - только на правый канал. Так что в этом случае дорожки и каналы - это синонимы.