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.

Различие между дорожками и каналами таково. Каналы относятся к наушникам - левый и правый. Дорожки относятся к инструментам оркестра (или партиям в хоре). При микшировании дорожки суммируются между собой, причем, каждая дорожка может проецироваться на оба канала или только на один, или в разной степени на левый и правый. Таким образом задается направление на источник звука, который представлен этой дорожкой. А коэффициент усиления для дорожки задает расстояние до источника звука.

При этом когда создается файл с двумя дорожками, то автоматически одна проецируется только на левый, вторая - только на правый канал. Так что в этом случае дорожки и каналы - это синонимы.