Правила, действующие в этом форуме и всех его подфорумах:
1) Запрещена реклама в любых её проявлениях (сразу бан без предупреждения)! 2) Мат тоже не приветствуется на форуме, но иногда можно выразить свои чувства ( лучше заменяйте матные слова точками, пробелами, другими буквами)! 3) Категорически запрещается унижать, посылать, издеваться над участниками форума! Мы здесь все - одна большая и дружная семья! Поэтому за нарушение этого правила автоматически будем банить! 4) Разрешены ссылки на информацию, которые относятся к тому или иному разделу форума! 5) Ссылки не в тему будут удаляться и пользователь получит предупреждение или будет забанен! 6) Пользователям разрешено задавать любые вопросы относящиеся к теме, а мы все дружно ответим на эти вопросы. А также отвечать на вопросы и высказывать своё мнение. 7) Повторные темы, которые будут создаваться, будут удалены! Создавайте темы, удостоверившись, что такой темы нет на форуме! 8) Запрещён флуд во всех его проявлениях, сообщения не по теме, сообщения состоящие из одного или нескольких смайликов без текста, сообщения типа - Вах!, Рулез!, Круто! и т.п. Пользуйтесь пожалуйста кнопкой [EDIT], не плодите бессодержательные сообщения. 9) Использование смайликов разрешается не более 3-х подряд!
вот что я узнал 2)CHR - это файл в котором находится текст в виде спрайтов,нужны Программы для обработки: Chr Editor 1.50, ChrPrint 1.06, Burial Gfx Editor. Хитро придумано веть это использовалось для создания игр на Спектруме,есть идеи???нужны эти проги!!!Символьный файл или файл шрифта Borland graphics interface (BGI)
Весь звук игры находится в stream файлах в папке ShockWave2\FrontEnd\Streams и в файлах миссий без разширения в папке ShockWave2\ (их я буду называть m-файлы)
На первом диске находятся данные для 1,2,3,4,7,8 уровней: m1a, m1b, m1c это файлы миссий первого уровня m2a, m2b это файлы миссий второго уровня и т.д. На втором диске для 1,5,6,7,8 уровней
Эти файлы что-то вроде архива, внутри которого находятся файлы для уровня ANIM CEL stream и какие-то еще
Форматы файлов: Файлы stream внутри содержат SNDS и FILM - звук и видео, соответственно ANIM - это группа CEL кадров и возможно что-то еще CEL - это текстура(картинка)
Для озвучки нас интересуют SNDS файлы внутри stream находится один аудио файл внутри m-файлов находится несколько stream файлов, внутри которых по одному аудио-файлу для нас удобней будет не распаковывать m-файлы
Инструменты, которые я использовал: bin2iso для конвертации образа из bin/cue в ISO 2048 unCD-ROM для распаковки файлов из ISO образа quickBMS универсальный инструмент для распаковки и запаковки игровых файлов ffmpeg мультимедиа-фрейморк для разных конвертаций(aifc в wav, в основном) ZStreamChunksReader специальный инструмент для файлов приставки 3DO audacity аудио-редактор для "монтажа" звука
Процесс состоит из 3 этапов: 1.Извлечь аудио файлы 2.Озвучить 3.Запаковать аудио файлы обратно, сначала в файл stream или m-файл, а потом и в ISO
Извлекаем
0. Конвертируем образ в ISO. Извлекаем файлы в папку bin2iso первой строчкой в cue файле ожидает увидеть путь к bin файлу, поэтому открываем cue файл блокнотом и удаляем первую строку с нолями, если они там есть конвертируем образ в ISO(в командной строке) bin2iso disc1.cue disc1.iso извлекаем файлы в папку(в командной строке) uncd-rom disc1.iso
1.Достаём аудио в понятном формате из m-файлов и stream Для этого можно использовать ZStreamChunksReader. На вкладке Audio Convertation(1) жмём на кнопку Add Files(2) и выбираем все нужные нам файлы. Они появятся в списке справа
На вкладке Audio Data Ripper(3) жмём Search Audio(4) Программа создаст MAP файлы, в которых содержится информация о расположении аудио и других файлов внутри
Снова заполняем список(2) m-файлами и stream. Теперь жмём Extract Audio(5) Мы получили аудио данные в сыром виде(sound), без заголовка и сжатые методом SDX2 Для конвертации в wav нужна информация о частоте дискретизации(22050Hz) и количестве каналов(моно, стерео) Узнать информацию о конкретном файле можно при сканировании одного файла(не списком) кнопкой Search Audio
У Shockwave 2: Beyond the Gate всё аудио в 22050 Hz Стерео: I1_1 - начальная заставка CD - фразы "вставьте диск 1 или 2" cv - архив записей ev - катсцены между уровнями Моно: всё остальное, в том числе m-файлы
Опять заполняем список на вкладке Audio Convertation(1), но на этот раз полученными sound файлами Выбираем соответствующие свойства 22050 Hz и моно или стерео Не забудьте поставить 0 в поле Header Lenght to cut Жмём на кнопку SDX2 to WAV В итоге, мы получили исходный звук из игры в формате PCM 16-bit без сжатия и с заголовком wav файла
В процессе работы заметил, что ZStreamChunksReader не точно вырезает-конвертирует файлы. В конце волны бывают артефакты, которые звучат как щелчок. Поэтому, для распаковки написал bms скрипт SHDRv2.bms Он достаёт sound файлы из чего угодно(даже из ISO) и сохраняет их в виде sound и aifc файлов aifc файлы содержат заголовок с информацией, необходимой для конвертации в wav извлекаем из file quickbms SHDRv2.bms file конвертируем в wav ffmpeg -i file.aifc -filter:a "volume=-10dB" file.wav тут я сразу уменьшаю громкость оригинала на -10db для удобства наложения озвучки (всё что в теге code нужно вводить в командной строке)
для автоматизации процесса использую bat файл for %%a in (m*) do quickbms SHDRv2.bms "%%a"
for %%a in (*.aifc) do ffmpeg -i %%a -filter:a "volume=-10dB" %%~na.wav
del *.aifc @pause он извлекает всё аудио из m-файлов (m*)(для stream файлов заменить на (*.stream) ) конвертирует все aifc файлы в wav и удаляет aifc файлы(они нам больше не понадобятся)
В теории, этим скриптом можно извлечь всё аудио из ISO образа без распаковки(не проверял).
Скрипт поддерживает много разных хостингов видео. Я выбрал рутюб
1. Склеил wav и создал видео-файлы из картинки+звук для заливки на rutube Дальше, всё что в теге code нужно вводить в командной строке создать txt с именами файлов в папке dir /b /a /-p /o:gen >files.txt склеить файлы в один wav ffmpeg -f concat -i concat.txt -c copy cv.wav внутри concat.txt такая структура file 'CV1A_1.wav' file 'CV1A_2.wav' file 'CV1A_3.wav' file 'CV1C2_1.wav' и т.д. создать видео со звуком из картинки ffmpeg -loop 1 -i shock-wave-2-beyond-the-gate-logo.jpg -i cv.wav -c:v libx264 -c:a mp3 -strict -2 -pix_fmt yuv420p -shortest cv.avi где cv.wav это имя файла из склеенных wav Получили cv.avi для заливки на rutube
2. Получаем озвучку Залил файлы на rutube и в скрипте после озвучки скачал чистый mp3 с озвучкой
Видео доступные по ссылке не могут быть обработаны скриптом
3. Миксуем озвучку с оригинальным звуком из игры Я делал в audacity. Можно использовать любой удобный вам аудио-редактор Длительность аудио не может быть больше чем в оригинале. Если фраза на русском длиннее оригинала, менял темп в редакторе На выходе у нас должна получиться куча wav файлов PCM 16-bit 22050Hz с соответствующими оригиналу количеством каналов и длиной, готовых к запаковке обратно
Запаковываем
1. Конвертируем wav обратно в голый SDX2 В ZStreamChunksReader загружаем готовые wav файлы в список(2) Жмём Pack to SDX2 Получили кучу aifc файлов. Это наш звук, пожатый алгоритмом SDX2 с заголовком aifc и хвостом Для вставки аудио обратно в stream или m-файл нужно голое аудио без заголовка Вот тут я то ли не понял, то ли ZStreamChunksReader не работает как надо: ZStreamChunksReader версии 0.8.2 содержит в архиве инструкцию по работе с программой. Там написано "сделать из него “сырой” файл выполнив операции Search Audio и Extract Audio в итоге получив .SOUND файл." Вот это не работает. Пишет No Data Extracted
2.Обрезаем заголовок и хвост у aifc файлов помещаем quickbms и скрипт SSNDstrip.bms для него в папку с aifc файлами и в командной строке пишем for %f in (*.aifc) do quickbms SSNDstrip.bms "%a" Получили кучку SSND файлов, готовых к вставке обратно в stream и m-файлы
3.Вставляем аудио обратно Убедитесь, что MAP файлы лежат рядом с соответствующими stream и m-файлами В ZStreamChunksReader на вкладке Audio Data Insert жмём кнопку Insert Audio Сначала выбираем куда вставлять(stream или m-файл), затем - что вставлять (SSND файл)
С m-файлами на этом этапе есть нюанс. Помните, мы не стали распаковывать m-файлы? Нужно предварительно склеить SSND файлы из конкретного m-файла для вставки в этот m-файл Нюанс заключается в том, что m-файл, в отличии от stream, содержит несколько аудио файлов, а ZStreamChunksReader вставляет только один аудио файл
Для склейки используем команду (на примере m4a m-файла) copy /b m4a*.SSND m4a.SSND Важно! Файлы для склейки должны быть пронумерованы в правильном порядке, таком же, в котором они извлекались из m-файла. Нужно добавить 0 к одноциферным SSND 0>00 1>01 2>02 и т.д.
4. Запаковываем файлы в ISO Я использовал скрипт iso2files.bms для quickbms Он читает данные из unCD-ROM.log (его создает unCD-ROM при распаковке) и заменяет файлы внутри ISO Таким образом, нет необходимости пересобирать весь диск и переподписывать его. С unCD-ROM.log есть нюанс: скрипт iso2files.bms еще сырой, поэтому, нужно подправить файл unCD-ROM.log блокнотом, чтобы все пробелы после "PosInFile:" и "Size:" были нолями. Вот так: было "PosInFile: 71800 Size: 25858" стало "PosInFile:00071800 Size:000025858"
В папке с ISO должен находится подправленный файл unCD-ROM.log и quickbms, а файлы на замену - рядом в папке с названием как у ISO Например, если образ disс1.iso, то в папке disc1 должны лежать stream и m-файлы, которые вы хотите вставить, но БЕЗ папок ShockWave2\FrontEnd\Streams или ShockWave2\ Команда quickbms -r -w iso2files.bms disс1.iso запишет файлы из папки disс1 в образ disс1.iso
Готово!
Добавлено спустя 3 минуты 30 секунд: Содержимое bms скриптов, на всякий случай
SHDRv2.bms
endian big get NAME BASENAME set Snumber long -1 //Sound file number in file get Size asize
// count SNDS chunks for i findloc OFFSET string "SNDS" 0 "" if OFFSET == "" break endif math count + 1 math OFFSET + 1 goto OFFSET next goto 0
//get Sound file Header and Samples For i = 0 < count FindLoc OFFSET string "SNDS" goto OFFSET getdstring SNDS 4 get Size long get UNKN long get NULL long getdstring ID 4
if ID = "SHDR" //Header math Snumber + 1 get MFSize asize MEMORY_FILE
if MFSize != 0 //there is data in memory (more than 1 sound file in archive) xmath WSize "MFSize - 8" //WAVE size xmath SSize "MFSize - HeaderSize" //sound data size (with padding) xmath SSize2 "SSize - 8" //sound data size (no padding) log SNAME 110 SSize2 MEMORY_FILE // write .sound file math HeaderSize - 4 Putvarchr MEMORY_FILE 4 WSize long //ckSize Putvarchr MEMORY_FILE HeaderSize SSize long //sound data size log FNAME 0 MFSize MEMORY_FILE //write .aifc file log MEMORY_FILE 0 0 //clear memory endif
//read header #SHDR[0][Buffers][Ampltude][Balance][0][Sample bits][Sample rate][Channels][Codec][Comp ratio][Samples count] get NULL long get Buffers long get Ampltude long get Balance long get NULL long get sampleSize long get SampleRate long get numChannels long getdstring Codec 4 get CompRatio long get numSampleFrames long string FNAME P "%NAME%-%Snumber%.aifc"
//make aifc header log MEMORY_FILE 0 0 putdstring "FORM" 4 MEMORY_FILE put 0 long MEMORY_FILE //ckSize putdstring "AIFC" 4 MEMORY_FILE putdstring "FVER" 4 MEMORY_FILE put 4 long MEMORY_FILE //ckDataSize put 2726318400 long MEMORY_FILE //AIFCVersion1 putdstring "COMM" 4 MEMORY_FILE put 62 long MEMORY_FILE //ckDataSize2 put numChannels short MEMORY_FILE put numSampleFrames long MEMORY_FILE //0 is ok (samples/channel) put sampleSize short MEMORY_FILE //8bit 16bit (bits/sample) //actualy its extended data type 10 bytes put 0x400E short MEMORY_FILE put sampleRate short MEMORY_FILE //sampleRate put 0 long MEMORY_FILE put 0 short MEMORY_FILE // end of sampleRate
putdstring Codec 4 MEMORY_FILE //comp Type putdstring "2:1 Squareroot-Delta-Exact compression." 40 MEMORY_FILE //comp Name putdstring "SSND" 4 MEMORY_FILE //Sound Data Chunk put 0 long MEMORY_FILE //sound data size get HeaderSize asize MEMORY_FILE put 0 long MEMORY_FILE //padding 0000 put 0 long MEMORY_FILE //padding 0000
endif
if ID = "SSMP" //Sound Sample get SMPSize long Savepos SMPOffset string SNAME P "%NAME%-%Snumber%.sound" append log MEMORY_FILE SMPOffset SMPSize /* log SNAME SMPOffset SMPSize */ append endif Next i
get Size asize MEMORY_FILE xmath WSize "Size - 8" //WAVE size xmath SSize "Size - HeaderSize" //sound data size (with padding) xmath SSize2 "SSize - 8" //sound data size (no padding) log SNAME 110 SSize2 MEMORY_FILE // write .sound file math HeaderSize - 4 Putvarchr MEMORY_FILE 4 WSize long //ckSize Putvarchr MEMORY_FILE HeaderSize SSize long //sound data size log FNAME 0 Size MEMORY_FILE // write .aifc file
SSNDstrip.bms
endian big get NAME FILENAME FindLoc OFFSET string "SSND" goto OFFSET getdstring SSND 4 get Size long math Size - 8 Savepos OFFSET math OFFSET + 8 string NAME P "%NAME%.SSND" log NAME OFFSET Size
iso2files.bms
#extract files from 3DO iso according to unCD-ROM.log file #unCD-ROM.log must be in folder with iso file #for import to iso use "quickbms -r -w iso2files.bms disk.iso" #files you wish to import must be in folder with iso name
log MEMORY_FILE 0 0 log MEMORY_FILE2 0 0 get Dir BASENAME open FDSE unCD-ROM.log 1 EXIST //open unCD-ROM.log file if EXIST = 0 print "Can't open unCD-ROM.log file" else //parse unCD-ROM.log for i = 0 < 398 FindLoc OFFSET string "PosInFile:" 1 math OFFSET + 10 goto OFFSET 1 getdstring PosInFile 8 1 put PosInFile string MEMORY_FILE
FindLoc OFFSET string "Size:0" 1 math OFFSET + 6 goto OFFSET 1 getdstring Size 8 1 put Size string MEMORY_FILE endian big comtype hex clog MEMORY_FILE2 0 17 17 MEMORY_FILE goto 0 MEMORY_FILE goto 0 MEMORY_FILE2 FindLoc OFFSET string "filename:" 1 math OFFSET + 9 goto OFFSET 1 get FName line 1
get PosInFileHex long MEMORY_FILE2 get SizeHex long MEMORY_FILE2 endian little string Name P "%Dir%/%FName%" log Name PosInFileHex SizeHex
next i
endif
Последний раз редактировалось sherad00 14 авг 2023, 02:46, всего редактировалось 1 раз.
Добавлено спустя 7 минут 26 секунд: Drug wars - уже руссо пирато на плейстешн есть может кто воспользуется совместит файлы? там вроде не такой плохой перевод
Весь звук и видео находится в папке DrugWarsData\aScenario\ Куча файлов Scenario.001 Scenario.002 ... Scenario.066 это уже знакомые нам stream файлы Текстуры лежат отельными файлами cel и img в папке DrugWarsData\Art\
Ролики внутри stream файлов расположены довольно хаотично, иногда внутри могут оказаться ролики из одного эпизода, а иногда совсем из разных. Например, ролики эпизода carchase находятся в 001, 003 и 066 файлах, а ролики с комментариями партнёра из уровня Южной Америки в 021 и 063 Начальное видео находится в 041 и 042 файлах, нарезанное кусками В некоторых Scenario есть видео файлы, состоящие из одного кадра, например слайды титров в 042 (в папке art тоже есть слайды титров, но в виде img файлов) И, да. В некоторых stream файлах попадается тот самый case #3 из UNSPEAKABLE HACK
064 splashscreen 1 frame sierrabar.mpg roof intro bus helicopter safinalscene.mpg MISSING? director says to shoot the tank on the right safinalscene.mpg MISSING? director says to shoot the straight plank
65 safinalscene.mpg MISSING? director says to shoot red gas cans Press Start to continue frame Point gun down to reload frame Insert Coins to Continue Play frame
Видео запаковано стандартным cinepack кодеком с битрейтом примерно 2mbits/s. Размер кадра 288x216. 15 fps Аудио не сжато: pcm_s8 22050Hz mono Но! Первый чанк данных аудио файла не простой, а со своим заголовком внутри
Насколько я понял, структура такая: [SSMP][DataSize] - стандарт для SNDS (по 4 байта) [SubHeader1 Size][SubHeader1Data] - Первый суб-заголовок. Первый байт содержит размер суб-заголовка включая сам первый байт [SubHeader2 Size][SubHeader2Data] - Второй суб-заголовок. Первый байт вроде бы тоже содержит размер суб-заголовка включая сам первый байт. [AudioData] - обычные аудио данные
Из-за этого пришлось подправить BMS скрипт извлечения, чтобы он отрезал заголовок в файл
После подготовки wav файлов с русской озвучкой(нарезка из mpg файлов ПК версии) Конвертируем в aiff командой for %f in (Scenario*RU.wav) do ffmpeg -i %f -c:a pcm_s8 %~nf.aiff
Затем, отрезаем aiff заголовок BMS скриптом
endian big get NAME FILENAME string NAME - 5 FindLoc OFFSET string "SSND" goto OFFSET getdstring SSND 4 get Size long math Size - 8 Savepos OFFSET string NAME P "%NAME%.sound" log NAME OFFSET Size
Клеим суб-заголовок к новым аудио-данным в командной строке copy /b *.Header + *.sound *.done проверять, будет ли работать без этих суб-заголовков, не стал.
Из-за того, что в Scenario может быть несколько аудио файлов, (Scenario.066-0.done Scenario.066-1.done и тд) склеиваем их copy /b Scenario.066*.done Scenario.066.full эту команду повторял для каждого Scenario файла(в примере Scenario.066) наверное, есть одна команда для склейки сразу всех файлов, но мне она не известна
В итоге, у нас получились Scenario.*.full аудио файлы с русской озвучкой, готовые для вставки обратно в stream файлы с помощью ZStreamChunksReader (вкладка Audio Data Insert)
PS. Если кто-то захочет использовать BMS скрипт извлечения, имейте ввиду, что он еще сырой. При запуске он спрашивает, извлекать видео? извлекать аудио? Отвечайте "y" или "n" в зависимости от того, что вам нужно. Одновременное извлечение видео и аудио(yy) глючит!: Сначала извлеките видео, а потом извлеките аудио.(yn затем ny) Внутри есть переменные ConcatVideo и ConcatSound, если поменять их значения на "y", то скрипт предварительно склеит файлы внутри каждого Scenario файла. Если ваш проигрыватель не подхватывает аудио-дорожку к видео из соседнего aiff файла, командой ffmpeg -i video.avi -i audio.aiff -c copy VideoWithSound.mov можно смешать видео и аудио в один файл (для просмотра со звуком)
Добавлено спустя 7 минут 26 секунд: Drug wars - уже руссо пирато на плейстешн есть может кто воспользуется совместит файлы? там вроде не такой плохой перевод
на ПК есть обе части Crime Patrol с русской локализацией от 1C, там есть русская озвучка
Сейчас этот форум просматривают: Yandex [Bot] и гости: 1
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения