Автор Тема: Формат звука *.sfx [pc]  (Прочитано 341 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Anakinator

  • Пользователь
  • Сообщений: 17
    • Просмотр профиля
Формат звука *.sfx [pc]
« : 01 Август 2023, 15:30:42 »
Всем привет, очень нуждаюсь в помощи!
Я разбираю игру "Pirates of the Caribbean: At World's End". Изначально, в директории игры файлы с диалогами (голос озвучки) запакованы в архивы с расширением "*.000"
С помощью game extractor я извлек файлы в формате "*.sfx". Узнал, что это звук, то есть то, что мне и нужно.
Однако, конвертировать в ".wav" или ".mp3" не получается и даже прослушать не один плеер не может. Либо не открывает, либо шипение.
Изучив немного форум, наткнулся на плагин VGMstream для foobar, файл открывается, но воспроизводится очень очень быстро, будто мультяшный голос. Если замедлять через "audacity", то слышно речь, но ужасного качества.
Подскажите, как решить данную проблему? Может я делаю что-то не так?  :cry:
Прикрепляю пару файлов "*.sfx".
https://dropmefiles.com/LQZiS
« Последнее редактирование: 01 Август 2023, 17:44:26 от Anakinator »

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2538
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
Формат звука *.sfx
« Ответ #1 : 01 Август 2023, 17:41:40 »
надо в заголовке в квадратных скобочках указывать какая платформа. консоль или комп или еще что...

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

Оффлайн Anakinator

  • Пользователь
  • Сообщений: 17
    • Просмотр профиля
Формат звука *.sfx [pc]
« Ответ #2 : 01 Август 2023, 17:45:15 »
Частоту действительно менял на пониже, уже слышны норм голоса, но будто с помехами, искажениями.

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2538
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
Формат звука *.sfx [pc]
« Ответ #3 : 01 Август 2023, 17:51:49 »
помимо измененной частоты, помимо стерео моно, могут быть использованы еще и сжатия. типа DPCM или ADPCM. если все дело обстояло так - то надо выдрать алгоритм, по которому происходит "распаковывание" такого сжатого сэмпла в нормальный формат. а еще можно погуглить и возможно кто-то эту игру уже ковырял и соответственно все ресурсы выкладывал.

Оффлайн Anakinator

  • Пользователь
  • Сообщений: 17
    • Просмотр профиля
Формат звука *.sfx [pc]
« Ответ #4 : 01 Август 2023, 18:52:48 »
Гуглил, не выкладывали
А как все-таки выдрать алгоритм, по которому происходит "распаковывание"?

Оффлайн SeregaZ

  • Пользователь
  • Сообщений: 2538
  • Пол: Мужской
  • ливнул с форума
    • Youtube
    • Просмотр профиля
Формат звука *.sfx [pc]
« Ответ #5 : 01 Август 2023, 21:00:10 »
ну в файле в самом начале написан какой-то MUSX или чот такое... гуглы говорят чото похожее на миди. а по поводу расжатия - а хз. могу только пример DPCM из сеговского Мортал Комбата рассказать :) таблица должна быть где-то в игре. и алгоритм использования этой таблицы. ну или просто что-то не стандартное какоенить там 16 или 32 битное чонить там... чего этим афторам OGG не понравилось... и весит мало и лицензии никакой не надо.

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5140
    • Просмотр профиля
Формат звука *.sfx [pc]
« Ответ #6 : 01 Август 2023, 22:04:17 »
vgmstream нужно запускать как консольное приложение (https://github.com/vgmstream/vgmstream/releases, vgmstream-win.zip или vgmstream-win64.zip, доки ссылка "vgmstream-cli: A command-line decoder." на https://github.com/vgmstream/vgmstream/), чтобы определить какой формат. Вам повезло, что он распознал. Вызов "vgmstream-cli.exe -m rus_str_2d411c9b.sfx" покажет информацию или при декодировании "vgmstream-cli.exe -i -o 1.wav rus_str_2d411c9b.sfx" (где 1.wav выходной файл):
metadata for rus_str_2d411c9b.sfx
sample rate: 44100 Hz
channels: 2
stream total samples: 159736 (0:03.622 seconds)
encoding: Eurocom DAT4 4-bit IMA ADPCM
layout: interleave
interleave: 0x20 bytes
metadata from: Eurocom MUSX header
bitrate: 403 kbps
play duration: 159736 samples (0:03.622 seconds)
Но информация о каналах и битрейте неверная, как уже заметили. Ищем код на github (нужна авторизация) и находим парсинг MUSX (https://github.com/vgmstream/vgmstream/blob/master/src/meta/musx.c). Там разные кодеки и версии и здесь он определил верно, раз слышно правильно, но ошибка в битрейте и каналах из-за того, что используется версия формата без их указания, а по умолчанию 44100Гц и 2 канала, на деле 22050Гц и моно. Можно перекомпилировать и указать правильные или задать в файле TXTH (в доках описано, формат видимо отсюда брать https://github.com/vgmstream/vgmstream/blob/master/src/formats.c), но я указал в самом файле - увидел такой вариант (в коде uint32_t miniheader = read_u32be(0x40, sf);).

Короче, замените байты в файле с 0x30 на: 00 00 00 00 AB AB AB AB AB AB AB AB AB AB AB AB 44 41 54 34 FF FF FF FF 01 00 00 00 22 56 00 00. Там указал макс. размер stream_size = 0xFFFFFFFF, channels = 1, sample_rate = 22050. Теперь запускайте в командной строке:
vgmstream-cli.exe -i -o rus_str_2d411c9b.wav rus_str_2d411c9b.sfx
vgmstream-cli.exe -i -o rus_str_2d41205e.wav rus_str_2d41205e.sfx
Будут правильные (на слух) файлы WAV. UPD: Хотя теперь можно через foobar2000 сконвертировать.