TTA аудиокодек без потерь — Описание формата


Детальное описание TTA мультиканального аудио формата

TTA это простой и стабильный формат цифровой записи звука, предназначенный для хранения аудио данных, сжатых с помощью беспотерьного алгоритма True Audio. Бесплатный и простой в использовании. Формат TTA имеет очень простую структуру. Заголовок TTA файла содержит уникальный идентификатор формата, который сопровождается блоком мета-данных. Блок мета-данных содержит минимальную информацию, необходимую для восстановления оригинального потока (количество каналов, частоту дискретизации, разрядность, общее количество сэмплов в файле и пр.) и оканчивается 32-битной контрольной суммой. Непосредственно за этим заголовком следуют блоки сжатых данных (фреймы), каждый из которых так же оканчивается 32-битной контрольной суммой. Декодирование возможно с начала любого TTA фрейма. Сжатые сэмплы каждого из каналов во фрейме располагаются последовательно, как и в обычном PCM формате данных.

Структура заголовка формата TTA1

Номер байтаЗначение (формат)
Заголовок начала потока
00-03Идентификатор формата с номером версии (символьный, «TTA1»)
04-05Аудио формат (бинарный, Little Endian)
06-07Число аудио каналов (бинарный, Little Endian)
08-09Разрядность, бит/сэмпл (бинарный, Little Endian)
10-13Частота дискретизации (бинарный, Little Endian)
14-17Количество сэмплов в файле (бинарный, Little Endian)
18-21CRC32 контрольная сумма (бинарный, Little Endian)
Таблица поиска1
22-25Точка поиска 1 (бинарный, Little Endian)
26-X0.. .. .. .. .. .. .. .. .. .. .. .. .. ..
X1-X4Точка поиска N (бинарный, Little Endian)
X5-X8CRC32 контрольная сумма (бинарный, Little Endian)
.. .. .. данные .. .. ..

1 В формате TTA1 таблица поиска (seek table) располагается в начале файла, непосредственно за блоком мета-данных.

Структура заголовка формата TTA2

Номер байтаЗначение (формат)
Заголовок начала потока
00-03Идентификатор формата с номером версии (символьный, «TTA2»)
04-05Число аудио каналов (бинарный, Little Endian)
06-07Разрядность, бит/сэмпл (бинарный, Little Endian)
08-11Частота дискретизации (бинарный, Little Endian)
12-19Количество сэмплов в файле (бинарный, Little Endian, может быть 0)
20-27Размер блока данных, байт (бинарный, Little Endian, может быть 0)
28-31CRC32 контрольная сумма (бинарный, Little Endian)
.. .. .. данные .. .. ..
Заголовок конца потока (Таблица поиска)
00-02Идентификатор конца потока (бинарный, «0xFFFFFF»)
03-06Точка поиска 1 (бинарный, Little Endian)
07-X0.. .. .. .. .. .. .. .. .. .. .. .. .. ..
X1-X4Точка поиска N (бинарный, Little Endian)
X5-X8CRC32 контрольная сумма (бинарный, Little Endian)

Отношение количества сэмплов в файле к стандартной длине фрейма определяет общее количество фреймов данных. Таблица поиска (seek table) содержит количество точек поиска, равное числу фреймов данных в потоке. Каждая точка поиска занимает 4 байта, содержит размер текущего фрейма данных в байтах и соответственно может быть легко преобразована в величину относительного смещения, указывающего на начало следующего фрейма. Формат поддерживает декодирование TTA файла с поврежденной таблицей поиска, но без возможности позиционирования по файлу.

Структура фрейма TTA1

Номер байтаЗначение (формат)
00-X0Данные фрейма (битовый поток)
X1-X4CRC32 контрольная сумма (бинарный, Little Endian)

Продолжительность фрейма в TTA1 формате фиксирована и приблизительно равна одной секунде. Таким образом, каждый фрейм в потоке имеет одинаковое количество сэмплов, за исключением последнего. Количество сэмплов в TTA1 фрейме кратно 576 (размер буфера данных), исходя из этого продолжительность фрейма в секундах определена константой 1.04489795918367346939. Количество сэмплов в TTA1 фрейме может быть вычислено по следующей формуле:

длина стандартного TTA1 фрейма = продолжительность фрейма * частота дискретизации

Структура фрейма TTA2

Номер байтаЗначение (формат)
00-X0Данные фрейма (битовый поток)
X1~X3Идентификатор конца фрейма (битовый поток, «0xFFFFFE»)
X4-X7CRC32 контрольная сумма (бинарный, Little Endian)

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

Общее количество фреймов в потоке данных может быть вычислено как результат деления количества сэмплов в файле на длину стандартного TTA фрейма. TTA формат поддерживает оба формата информационных тэгов ID3v1/ID3v2 и теги APEv2.