Структура аудио в SA

Материал из GTAModding.ru
Версия от 13:42, 9 августа 2011; Lego (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

В этой статье описана структура аудио-форматов в GTA SA.

Содержание

Папка STREAMS

В папке STREAMS хранятся файлы радиостанций и звуковые дорожки катсцен.

TRAKLKUP.DAT

Все поинтеры для файлов папки STREAMS хранятся в файле TRAKLKUP.DAT. Структура файла такова:

  1 байт - BYTE - ID файла
  3 байта - зарезервированное место
  4 байта - DWORD - Оффсет метаданных звукового файла
  4 байта - DWORD - Непосредственно, длина звукового файла

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

PS2

Структура метаданных

  8000 байт - "танцевальный ритм" (Beats)
  4 байта - DWORD - длина "исцелённого" левого канала звукового файла
  4 байта - DWORD - частота левого канала звукового файла
  4 байта - DWORD - длина "исцелённого" правого канала звукового файла
  4 байта - DWORD - частота правого канала звукового файла
  4 байта - DWORD - неизвестное (возможно, кол-во каналов, т.к. всегда равно 2)

Rockstar зачем-то прописали длину и частоту для каждого канала отдельно (смысла в этом нет никакого, так как эти значения будут одинаковыми всегда), поэтому чтобы прочитать сколько весит "исцелённый" файл надо сложить значения длины правого и левого каналов.

"Битые" файлы

Наверное вы заметили ранее употребление слова "исцелённый". Дело в том, что файлы хранятся в немного побитом виде - посреди файлов были добавлены пустые блоки. Процедура корректного прочтения музыки из радиостанций описано в статье Моддинг San Andreas PS2. В файле CUTSCENE.PAK обстоит всё несколько по-другому - через каждые 131072 байта (0x20000) вставлен блок нулевых байтов размером 4096 байт (0x1000).

Структура Beats

Таблица Beats используется в танцевальных мини-играх, состоит из двух значений:

  4 байта - DWORD - время появления (в миллисекундах)
  4 байта - DWORD - клавиша

Если значение времени стоит -1, то "ритмы" не используются.

Таблица Beats не может весить больше 8000 байт. Это означает, что в мини-игре не может быть задействовано более 1000 "ритмов".

Проигрывание файлов

"Исцелённые" файлы можно проиграть с помощью программы MF Audio. Для этого надо выставить тип формата RAW ADPCM, в Interleave - 10000 и истинную частоту (где она находится описано выше).

PC

Дешифровка

В ПК-версии файлы зашифрованы и для корректного прочтения нужно их сначала дешифровать. Дешифровуются файлы методом исключения (XOR).

16-байтный ключ шифрования в hex-нотации выглядит так:

 EA 3A C4 A1   9A A8 14 F3   48 B0 D7 23   9D E8 FF F1

Алгоритм дешифровки таков:

  • Исключить из первого байта файла первый байт ключа (EA)
  • Исключить из второго байта файла второй байт ключа (3A)

(...)

  • Исключить из шестнадцатого байта файла шестнадцатый байт ключа (F1)
  • Исключить из семнадцатого байта файла первый байт ключа (EA)

Вот простой алгоритм дешифровки в C++ (взят из исходного кода программы San Andreas Audio Toolkit)

void stream_encode(int8_t *buff, const size_t size, int &index)
{
	for (size_t i = 0; i < size; ++i) 
	{
		buff[i] ^= encode_key[index];
		index = (index + 1) % 16;
	}
 
	return;
}

Этот метод является двухсторонним, т.е. его можно использовать как для дешифровки, так и для зашифровки.

XBOX

Таблица ID файлов

ID Файл
0 AA
1 ADVERTS
2 AMBIENCE
3 BEATS
4 CH
5 CO
6 CR
7 CUTSCENE
8 DS
9 HC
10 MH
11 MR
12 NJ
13 RE
14 RG
15 TK

Таблица клавиш для Beats

Управление танцевальной мини-игры
Значение (hex) Клавиша
xbox PS2 PC (по умолчанию)
0x01 A X Вниз
0x02 X Квадрат Влево
0x03 Y Треугольник Вверх
0x04 B Круг Вправо
0x21 Окончание мини-игры
Управление мини-игры лоурайдера
Значение (hex) Клавиша
xbox и PS2 PC (по умолчанию)
0x09 Прав. аналоговый стик: вправо Numpad 6
0x0a Прав. аналоговый стик: влево Numpad 4
0x0b Прав. аналоговый стик: вверх и вправо Numpad 8 и Numpad 6
0x0c Прав. аналоговый стик: вниз и влево Numpad 2 и Numpad 4
0x0d Прав. аналоговый стик: вверх Numpad 8
0x0e Прав. аналоговый стик: вниз Numpad 2
0x0f Прав. аналоговый стик: вверх и влево Numpad 8 и Numpad 4
0x10 Прав. аналоговый стик: вниз и вправо Numpad 2 и Numpad 6
0x21 Окончание мини-игры

Ссылки

п · о · р
San Andreas Grand Theft Auto: San Andreas
Форматы файлов.col.cfg.cut.dff.dat.fxp.gxt.ide.ifp.img.ipl.rep.rrr.scm.txd.set
Документацияcarcols.datCarrecPed EventsPed TypeАдреса Памяти Функций (SA)Анимация моделей в SAВизуальные эффекты в скриптинге
Загруженные звукиКатсценыНомера оружияРисование на экранеТрюки с меткамиСтатистикаСтруктура аудио в SABeta версия
ИнструментыCLEOCollision File Editor IIENBSeriesG-ToolsGXT EditorIMG ToolPS2 TXD ModPS2 TXD ViewerLimit AdjusterMap EditorPathViewer
San Andreas Audio ToolkitSan Andreas Texture PlacerSanny BuilderTXD WorkshopTXDFuckerXBOX TXD PowerTool
ТуториалыРедактирование аудио в SAИзменение cutsceneDecision MakerПропуск роликовКонвертация автомобилей в SA
Основы маппинга GTA:SAДелаем ломающиеся объектыКонвертирование персонажа в SA2dfx в SanAndreasМоддинг San Andreas v2.0
Новая анимация персонажейУниверсальный солдат (GTA SA)
МодыAlien CityDesign Your Own MissionGTA: UnitedGTA StoriesGTA Berlin
МультиплеерgtaTournamentMulti Theft AutoSan Andreas Multiplayer