Extract audio from Harmonix Fuser (UE4 .uexp file)

Codecs, formats, encoding/decoding of game audio, video and music
SoundForge
Posts: 3
Joined: Fri Nov 13, 2020 3:20 pm

Extract audio from Harmonix Fuser (UE4 .uexp file)

Post by SoundForge »

I've seen some people do magic with separating out baked content in a .uexp file and was wondering if anyone could help. Opening up the .uexp, you can see there's a mogg audio file (don't worry if this doesn't play by default, it may be encrypted and I have a decypter for HMX Mogg files) and a .fusion file that's in plain text in the .uexp file (which seems to indicate the .uexp isn't compressed).

Thanks so much for your help! Here's a sample of one of the audio files
Lordmau5
Posts: 11
Joined: Wed Jan 31, 2018 4:57 am

Re: Extract audio from Harmonix Fuser (UE4 .uexp file)

Post by Lordmau5 »

To add onto this, the end of the file also has some very interesting data in plain text... (Attached in a file because it'd take up a lot of space here)

Funnily enough, it's even formatted correctly with spacing, huh...

Seems to include some data about the audio file such as "orig_tempo" and "root_note" (for proper syncing)
spiritovod
Posts: 719
Joined: Sat Sep 28, 2019 7:00 pm

Re: Extract audio from Harmonix Fuser (UE4 .uexp file)

Post by spiritovod »

Not sure what do you need exactly, but here is script that will let you extract raw "mogs" part (mogg) from the uexp. Tested on that single file, so can't guarantee it will work on other files like this.
You can run it on multiple files at once with something like [quickbms.exe -F "*.uexp" fuser_uexp_mogg.bms input_folder_with_uexp output_folder]

It's using embedded filenames for output mogg, but if you want the same filename as uexp, uncomment two strings near the end in the updated script.
Lordmau5
Posts: 11
Joined: Wed Jan 31, 2018 4:57 am

Re: Extract audio from Harmonix Fuser (UE4 .uexp file)

Post by Lordmau5 »

I've attached another .uexp file for which the script isn't working - more datasets to get the script tailored to would probably be helpful.

I've also went ahead and made a Discord Server in which we could share a few more files in regards to this.

For one, the .uexp file only seems to contain the actual audio - but what about the other files such as the album art or song name / artist, for example?
Probably also the rest of the info that isn't part of the uexp file (I assume there's a "global" file that has info such as BPM, root note and whatnot)
expnandbanana
Posts: 1
Joined: Thu Nov 19, 2020 9:32 pm

Re: Extract audio from Harmonix Fuser (UE4 .uexp file)

Post by expnandbanana »

posting .uasset files of my own for a wider test-base
spiritovod
Posts: 719
Joined: Sat Sep 28, 2019 7:00 pm

Re: Extract audio from Harmonix Fuser (UE4 .uexp file)

Post by spiritovod »

@Lordmau5: AllStar_VOX_Gb_104_fusion.uexp is simply broken, maybe you've already tried to do something with it. It's missing noticeable part of the header and corresponding uasset addresses more data, like that missing part is present in the uexp.
Aside from that, all other samples works fine with the script. But I don't even know how usual mogg looks like. Considering how that format was obfuscated in Rock Band series (they even implemented drm by denuvo devs for audio subsystem), I doubt it's possible to do something reasonable with it.
Lordmau5
Posts: 11
Joined: Wed Jan 31, 2018 4:57 am

Re: Extract audio from Harmonix Fuser (UE4 .uexp file)

Post by Lordmau5 »

@spiritovod: Ah yeah, I think I fiddled around with it in HxD to get only the MOGG data working but ended up messing it up completely...

But I don't even know how usual mogg looks like

A quick Google search for "Download MOGG Files" brought up some blogspot website that had links to 2 MEGA folders - here's one of the files so you can have a look at an MOGG file

they even implemented drm by denuvo devs for audio subsystem

Into the .uexp files?
Someone's managed to get an unpacked executable (probably just with Steamless at first glance at the filesize difference) in case that would be helpful.

I've already posted it in the Discord I've created to better keep track of it, but I feel the best approach for this would be the following:

Perhaps the better thing to look into would be making a custom song loader entirely.
Scan a specific folder with subfolders (e.g. "CustomSongs") - put a specific file in each one (song.ini or whatever) that contains the info and then have it call specific methods in the game itself so it links those ingame.
I wouldn't be surprised if there were methods to load raw audio files - surely the devs must be testing with that, too
spiritovod
Posts: 719
Joined: Sat Sep 28, 2019 7:00 pm

Re: Extract audio from Harmonix Fuser (UE4 .uexp file)

Post by spiritovod »

@Lordmau5: Well, they do look similar. The link you've provided contains usual mogg though (aka multi-track ogg), while Rock Band and Fuser are using encrypted versions of it. That drm thing was about Rock Band series, but here they're using some kind of encryption as well.

Also, that part about raw audio and custom songs is simply not true. The game is using its own self-made audio subsystem (not default UE4), so you can feed only compatible with it files to the game. The same goes for raw audio - UE4 only supports UE4 assets for already pre-compiled subsystems and plugins - for example, even if you pack some stuff for default UE4 audio subsystem, the game will not understand it, because it's asking different subsystem to process audio assets. If you want to add something different to the game, you should be a skilled UE4 dev at least.

At least, it's possible to operate mogg and fusion parts from uexp. Though corresponding uasset should be edited as well, but theoretically it's not hard to modify the script for that (theoretically, because there are a lot of internal filenames there with unknown influence on the whole asset).

P.S. There is a fun part too - it seems that audio subsystem was developed in parts, because internal filenames for audio are messed so much, like they were created and compiled on different PCs from different projects.