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

From Tau Projects
Jump to: navigation,
TTA Audio Codec Logo

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

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

Структура TTA заголовка

Заголовок TTA1 Заголовки TTA2 (в разработке)
Номер байта Значение (формат)

Заголовок начала потока

00-03 Идентификатор формата с номером версии (символьный, "TTA1")
04-05 Аудио формат (бинарный, Little Endian)
06-07 Число аудио каналов (бинарный, Little Endian)
08-09 Разрядность, бит/сэмпл (бинарный, Little Endian)
10-13 Частота дискретизации (бинарный, Little Endian)
14-17 Количество сэмплов в файле (бинарный, Little Endian)
18-21 CRC32 контрольная сумма (бинарный, Little Endian)

Таблица поиска1

22-25 Точка поиска 1 (бинарный, Little Endian)
26-X0 .. .. .. .. .. .. .. .. .. .. .. .. .. ..
X1-X4 Точка поиска N (бинарный, Little Endian)
X5-X8 CRC32 контрольная сумма (бинарный, Little Endian)

.. .. .. данные .. .. ..

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

 
Номер байта Значение (формат)

Заголовок начала потока

00-03 Идентификатор формата с номером версии (символьный, "TTA2")
04-05 Число аудио каналов (бинарный, Little Endian)
06-07 Разрядность, бит/сэмпл (бинарный, Little Endian)
08-11 Частота дискретизации (бинарный, Little Endian)
12-15 Маска расположения каналов2 (бинарный, Little Endian)
16-23 Количество сэмплов в файле (бинарный, Little Endian, может быть 0)
24-31 Размер блока данных, байт (бинарный, Little Endian, может быть 0)
32-35 CRC32 контрольная сумма (бинарный, Little Endian)

.. .. .. данные .. .. ..

Заголовок конца потока (Таблица поиска)

00-02 Идентификатор конца потока (бинарный, "0xFFFFFF")
03-06 Точка поиска 1 (бинарный, Little Endian)
07-X0 .. .. .. .. .. .. .. .. .. .. .. .. .. ..
X1-X4 Точка поиска N (бинарный, Little Endian)
X5-X8 CRC32 контрольная сумма (бинарный, Little Endian)

2 Битовая маска расположения каналов

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

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

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

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

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

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

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

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