Need help finding loop points for the PC version of Shantae & The Pirate's Curse by CyberBotX at 9:23 PM EDT on September 16, 2017
Hey everyone. I was looking into extracting the OGGs from the PC version of Shantae & The Pirate's Curse, because I didn't see them on JoshW's PC archive.
First thing I had done was used [ur=http://aluigi.altervista.org/quickbms.htm]QuickBMS[/url] with the Scooby Looney script to extract all the files from the game's ShantaeCurse.data file. This gave me a bunch of .vol files.
From the MUSIC\m directory of the extracted data, I started looking at the .vol files there. What I found was that the .vol files for the music are just OGG files with a header on them. Unfortunately, stripping away the header wasn't enough to get them to be playable completely (the time was something like a few seconds instead of the actual time). I had to use ffmpeg with the following:
ffmpeg -i <orig>.ogg -c:a copy <copy>.ogg
After that I had to run revorb on the OGG, as the time was entirely wrong after ffmpeg. The reason for using ffmpeg first was that revorb actually destroyed the file and made it really short (in the sample case, it was around less than 1/5 the original size).
The ffmpeg/revorb combo was enough to get them playable, but I wanted to make them loopable. I looked at the header portion of the .vol file, but I couldn't determine what constitutes loop points, if they are in that header.
I'm going to link to the files for Burning Town, as that was the first one I tried.
Any help finding the loop points would be appreciated. I didn't spend a ton of time on it, but I did try various values that seemed like they might've been loop points and none of them produced a working or seamless loop.
Using Ravioli Explorer the .vol file contains 3 oggs but one is very short so only 2 are probably what you need and loop fine ?? so perhaps use Ravioli or similar on the .vol files
The format has 3 full "section" oggs inside: intro + loop + end (you can cut them just fine), and the header references has their samples and stuff (+ some extra data, prefetch?). After the intro it just repeats the loop section (what an, uhm, "interesting" solution for looping). The end section seems empty.
I think it wouldn't be too hard to add support in vgmstream actually, if you can provide a bunch of examples (the more the better)
Thanks for looking into it in more detail, bnnm! That is an "interesting" way to handle looping, indeed.
Here is a folder with more of the .vol files, I made sure they could play as OGGs if copied without the header and corrected using the methods I described above:
Another VGMStream idea, if it's not too far off topic: Appending multi-stream Oggs and playing them as intro+loop. Assuming the original files have different serial numbers, it should be possible to concatenate them for that purpose, if there's an Ogg reader that supports separate intro+loop streams.
Good idea. A few rips of mine games have a 5-10 sec intro then the main body of the song looping for 3 mins e.g. On my player I just listen to the looping main part as it is a bother to first listen to the intro then the main...
so yes it would be great somehow they can be joined or vgmstream or whatever -)
For .VOL, since it's a single stream and the internal Oggs use the same header/setup I think could be implemented as a block layout by skipping/resetting between sections, or maybe a special Vorbis codec. It may take a bit to consider.
Files with separate intro+loop however, I agree would be neat, but I'm not too sure what would be a decent implementation; I'll give it some thought.
I've finally added this. The format is interesting (read: retarded) in that sections may mix codecs (ex. often the first seconds are ADPCM then Ogg), and that required some extra massaging.
Note you need to re-apply the .BMS on the .vol to get .wave, .vol/data are just generic containers. I've uploaded the rip to joshw anyway.
What kode54 suggested is now technically possible too (IOW vgmstream can play any concatenated codecs, from the same or separate files), I think a couple of games did something like that (GTA San Andreas?).