USF sample muting by rcsb at 1:24 PM EDT on June 9, 2020
Ok, so I know that questions like this happen to appear from time to time (here and here, for example), but since I've searched and messed around with some tools, but couldn't find help, I came here to try one last time.
Since isolating USF channels are not "possible" due to how the system works, I'd like to try another way. I only superficially understand how USF rips work, because I was not able to find anything on USF ripping, but I guess the USFlib file on rips are where the samples are stored. And if I'm right, would it be possible in some way to mute certain samples?
My objective is to hear isolated instruments on songs, so I could transcribe them as accurate as possible for arrangement purposes. So even if the channels are not isolated as I would tradicionally do with other consoles, my objective would still be viable that way.
I tried to use N64SoundTool to rip sound banks and I noticed that maybe the info there would help me to identify which samples I would mute or not.
PS: I have zero experience with hex editors and more intricate/specific programming tools/languages, but I AM WILLING TO LEARN. Any help would be really appreciated.
There's also the N64MidiTool and N64SoundBankTool. Both can convert to MIDI so there's no need to transcribe anything by ear. Except on games that are not supported by the tools or are streamed.
@WDLmaster, thanks for the answer! Unfortunately I think I would have a hard time to understand the info on the MIDI files, regarding which channel corresponds to each sample or "instrument" (I really never tried, will try to export something to check on that), but I have a question:
Would there be a way to "reconstruct" the song using the MIDI file? Like, I know how to put the samples on a DAW for the MIDI channels to reproduce, but how can I know which sample correspond to each channel? From what I read on the threads I've linked before, the MIDI files are kinda messed up, but I really don't know the extent of that.
Exported midis are indeed often screwed up, there will be little to no observance of GM spec and there will be apparent patch-changing going on (sometimes without actual patch change events.) One upside is that people can't so easily make lazy "soundfont remixes" with them :) but it does also mean there's some respectability in authoring MIDIs of N64 songs that are in a sensible GM format, which despite the lazy people are still nice to have.
I think if it's possible to export samples and sequence data, in theory it should also be possible to nullify or modify sample/sequence data. I don't know if we have the tools for that currently though, there's probably a wide variety of ways games handle their audio so not as simple as with hardware synthesizers e.g. SPC700.
I guess the best thing to try for now is exporting samps+seq and attempt reconstruction of songs in a sequencer or DAW with samplers or a soundfont host or whatever you find best. It's definitely not the most straightforward thing to do, but it should aat least save on some of the heavy lifting involved in aural transcription.
If the soundbank format and MIDI format of a specific game is known (which is the case with every game supported by SoundBankTool and MidiTool) AND the data is uncompressed in the ROM, it is kinda possible to do just that but it requires tremendous amounts of work without dedicated tools. But because the offsets and formats are known, we could theoretically write a tool to directly modify the soundbanks or MIDI files.
The standard N64 MIDI format for example always starts with 16 4-byte addresses which correspond to the offset to the respective MIDI channel relative to the start of the sequence. Just by setting an offset to zero effectively disables the channel. But this disables the complete channel and not single instruments. The same should be true by setting pointers to samples to zero to disable them.
Hi friends, it seems the most promising approach for this particular use case would be to zero out sample memory regions in the usflib. Or at least, this is what I'm going to try.
I'm adding N64 to my player (Chip Player JS) and really want channel/instrument/sample muting...I'll report back if I have any success.
This is my first post! I didn't know where to start, so, i chose this one, because is about a subject of interest of mine.
Thanks to all of you members and rippers, I got to know this world. Based on reading, and on trial and error, a newb like me was able to hear isolated instruments for a few n64 games. The " usflib +hex editor + winamp" combo really works! I know this is a relatively old topic, that's why I didn't create a thread. I'm just happy enough to share my results. I don't know much about the ripping process itself, but it's been fun trying to see patterns in the usflibs.