Hello. I am a bit surprised that sounds from NiGHTS: Into Dreams were ripped, but not from Journey of Dreams. Is there any way to do this? I believe that the sounds are stored in the archive.arc file.
I don't think I took this as a request.
Music and anything lengthy is in the ADX files. These can be converted using
VGMStream.
archive.arc is just metadata - no sounds there.
In-game voices are at
hugeData/audio/PJN_voices.afs (filenames are in the
.h file). This file contains ADXs - they must be extracted from it. I am not aware of any tools that can do this. Game Extractor can, but they all end up with the same filename so it just keeps overwriting the same file when extracting.
If you just want the sounds, I've uploaded them to The Sounds Resource and are available
here.
But while I have got voices out of the game plus some miscellaneous sounds, I don't believe at all that I've got everything. But I can't get anything more out of the game. The SFD files are the videos (
w for widescreen) - they can be previewed with VLC but would need converted for audio.
[spoiler=In here I've documented what I did for ripping - spoilered because it's probably not helpful.]I used this janky script to convert the AFS to a set of WAVs, though it'll only work on my computer without modifications. Still, it gives you the general idea: split by the ADX header and convert with VGMStream. I extended what it was searching for to also include the copyright offset, since that's the same for all of them and doing this vastly reduces false positives.
PHP Code:
<?php
$name = "PJN_voices";
$hex = bin2hex(file_get_contents("$name.afs"));
$adxs = explode("80000024", $hex);
$i = 0;
exec("mkdir -p $name");
foreach ($adxs as $adx) {
$adx = "80000024$adx";
file_put_contents("$name/" . sprintf('%03d', $i) . ".adx", hex2bin($adx));
exec("wine ~/spriters/maw/vgmstream-master/test.exe ~/spriters/njod/out2/DATA/files/hugeData/$name/" . sprintf('%03d', $i) . ".adx -o ~/spriters/njod/out2/DATA/files/hugeData/$name/" . sprintf('%03d', $i) . ".wav");
$i++;
}
exec("rm $name/*.adx");
exec("fdupes -rdN $name");
The original filenames are in PJN_voices.h so I cut that down so each line is just
EH1000_03_Owl and so on. Probably overkill, but I use regex and the usual Find & Replace to do so. At that point, it was a piece of cake to rename the files using this script:
PHP Code:
<?php
$handle = fopen("files.txt", "r");
$i = 1;
while (($line = fgets($handle)) !== false) {
$line = trim($line);
exec("mv PJN_voices/" . sprintf('%03d', $i) . ".wav PJN_voices/$line.wav");
$i++;
}
fclose($handle);
[/spoiler]