The MIDI Forum

  Tuesday, 30 May 2023
  9 Replies
  3.4K Visits
Anyone know of a way to see all of the percussion in a particular soundfont? I am referring to the sf2 format used by assorted MIDI software.

I am running Windows 10. Coolsoft VirtualMIDISynth will show all of the instruments in a soundfont, but does not really show much for percussion aside from kit names.

My MIDI-MIS instrument switcher I am now finding out has a highly inaccurate percussion display. See the screenshot for an example. By loading the custom instrument names exported from VirtualMIDISynth, I can see that I have selected the "Cartoon FX" kit, but I don't have any valid names to go along with anything that is in the actual kit, and so I don't actually know what is there without listening to each instrument. I display the default names from my generic GM/GS/XG percussion list files.

So far I have not found any software that will show me anything other than kit names, which is becoming an issue as I am now working on games in the SNES MIDI Remaster Project that have lots of "actual" percussion. Prior to now, I have used very little "real" percussion, because I needed the melodic properties of the melodic percussion instruments such as Melodic Tom, Timpani, Koto, etc. But now I need things like "Hi-Hat" and "Bass Drum", but more... refined or whatnot.

You can see what I am working with at this link:
These are the files exported from VirtualMIDISynth and modified to load in to my editor. Plenty of kit names to go around, but no contents of said kits. :(
Jason set the type of the post as  Technical Question — 6 months ago
6 months ago

I use the 'Timbres of Heaven' VST, and this uses a SF2 file for the multiple banks of normal instruments, and the perc kits.

There is an associated .TXT file that lists all the instruments, and the numbers, byt this list has one item ONLY for the kits, i.e. the bank and the instrument no for Bank Select and PC. No indiv instrument details, as you say.

I don't know how different SF2 files compare. The SF2 file you use may be different?

Using a hex viewer on the actual SF2 file, doing a quick look towards the end of the file, I see that there SEEMS to be data for each perc instrument, much shorter than the data for normal instruments (as in a brief sample ?), but this sample does seem to include a name, although brief (compared to the names given to the main instruments). So this file at least does seem to have indiv names, but I'd wonder if they're not too brief to be helpful. Or would you say that any name is better than nothing?

May well be that the kits have a similar structure to the charts in the manual for, say, my Yamaha MU90r. These details numbers are a total guess, for purposes of illustration. Say there are 100 different instruments defined, but 50 instruments in each kit. Some instruments might be in every kit, other instruments in some kits only. Every instrument in at least 1 kit. I suppose that a specific instrument might not be the same Note Number in every kit it's used in? Each kit would have a list of note numbers, each with an instrument number attached. To get what you want, you'd need to try and create a list of ## for the instruments, with names (such as they are) and when a kit is selected, get the numbers from that and match with numbers, and thence names) from the instrument list.

A more complicated process than required for the normal instruments?

Does the SF2 file you have seem to work the same way?

6 months ago
I have an in-development project at https://github.com/jazz-soft/JZZ-midi-SF2
It can show the contents of the soundfont, but cannot play it yet...
You can clone the repo and open the test.html file. Further steps should be obvious.

It looks like SF2 does not include names for the percussion instruments,
but you can map the corresponding note (zone) numbers to the ones from the General MIDI specs.
( and these are also available as JavaScript code at https://github.com/jazz-soft/JZZ-midi-GM )

Hope that helps...
6 months ago

A more complicated process than required for the normal instruments?

Does the SF2 file you have seem to work the same way?

More complicated for sure, which is what I hope to avoid :p

I am currently using, in order from first loaded to last, with later ones "overwriting" any duplicate sounds in earlier ones:
Stgiga's HiDef Soundfont
Timbers Of Heaven (XGM) 3.94 (v 4.0 has some instrument assignment errors, such as seagull which is properly named and works in older versions, but is missing or misplaced in v 4.0)

so my kit names themselves at least are accurate for what I have loaded.

Any valid percussion instrument name is better than no name. But not like in my screenshot, where the names I have are completely unrelated, and do not match up to which numbers are actually there. So I might have a name there for, say patch 23 (if it exists in the "standard" GM/GS/XG percussion banks), but with my loaded soundfonts there may not actually be a playable sound there, or something that does not match the description even remotely.

I do have both Polyphone and Viena, which can show the contents of and edit sf2, but neither has a viewable list of names for the percussion. Even if they would just export a name of the corresponding samples, that would maybe help.

A soundfont has a series of presets, which are bank:prog, and "within" that is the sound or sounds and their properties for that particular instrument.
In Viena, I can drill down and see a structure like this with the Cartoon FX from earlier:

127:062 = Cartoon FX 127

so there are names there that would be very beneficial, but it is very difficult to follow along and figure out where each of these things go, because everything is a pointer to something else (in the editor at least). But these are the kinds of names I'm hoping to list.
6 months ago
I have an in-development project at https://github.com/jazz-soft/JZZ-midi-SF2
It can show the contents of the soundfont, but cannot play it yet...

Currently, it seems that I can not get any info to display for any of my full/large soundfonts. I tried a single instrument soundfont and it loaded and displayed, and a smaller "8bit" soundfont also loaded fine.

The "root key" with corresponding "sample name" under zones would be helpful as an exportable list. That seems to be the values that I mentioned that I can see in Viena.
6 months ago
Jason, could you please attach some of your "full/large soundfonts"? I'd like to debug those...
6 months ago
I can't actually attach them, as they much too large. However, these are links for 2 of the 5 large ones I use (and I only tested these 2 before trying a small one)


Timbres of Heaven 3.94
6 months ago
Thanks a lot!
I was not able to download the second file, but one is enough for me for now...
6 months ago
Hmm, yes, I didn't actually try the download link :D

But the latest version can be found at the bottom of the non-archived page (which I DID try)
6 months ago
Ooh, I posted on the Synthfont/Viena forum, and the author said the feature sort of exists already in Viena!

I have to do one kit at a time, so it may take a while, but he also has a new version of Viena that's nearing release that he will try to update the feature.

You load a soundfont, then select the drum kit name under "Presets", then under the "File" menu, select "Export Note Names"

See the attached code for what is exported, again for the Cartoon FX drum kit. I can run these files through an editor or adapt my import code to add these in to my program.

[128,62] Cartoon FX
@27@ boMk
@28@ DripletL
@29@ SplashL,SplashR
@30@ SlipL
@31@ MetalDingL
@32@ MudL,MudR
@33@ Pop2L
@34@ FlexatoneTingL,FlexatoneTingR
@35@ SeriousTickleL,SeriousTickleR
@36@ ThudL,ThudR
@37@ PopL,PopR
@38@ Bite
@39@ ArrowPlankL,ArrowPlankR
@40@ Growl1L,Growl1R
@41@ BulldogL
@42@ LittleBoingL,LittleBoingR
@43@ FartL,FartR
@44@ TwingL,TwingR
@45@ SquirtL,SquirtR
@46@ PlainOleBuzzL,PlainOleBuzzR
@47@ BounceCrankL,BounceCrankR
@48@ HardCrankL,HardCrankR
@49@ FalldownL,FalldownR,FalldownvelL,FalldownvelR
@50@ SqueakyL,SqueakyR
@51@ FallDown2L,FallDown2R
@52@ FlappyHornL,FlappyHornR
@53@ WhewL,WhewR
@54@ SwoopL,SwoopR
@55@ ZoomAway,ZoomAway
@56@ WhistleSlideL,WhistleSlideL
@57@ FakePhoneL,FakePhoneR
@58@ BlllblblblL,BlllblblblR
@59@ DingL,DingR,ShortFuseL,ShortFuseR
@60@ StringTangleL,StringTangleR
@61@ Pot!L,Pot!R
@62@ PrankL,PrankR
@63@ BeepL,BeepR
@64@ CanL,CanR
@65@ SpringL,SpringR
@66@ LooseWireL,LooseWireR
@67@ MistakeL,MistakeR
@68@ Oh S#it!25355L,Oh S#it!25355R
@69@ FailL
@70@ Aawww!,Aawww!
@71@ NOPE
@73@ Gunload25355L,Gunload25355R
@74@ RubberDuckL
@75@ BoomswooshR,BoomswooshL
@76@ YEET!,YEET!
@77@ F_Bomb,F_Bomb
@78@ Ting!L
@79@ Roblox Death,Roblox Death
@81@ Grunt (5),Grunt (6),Grunt (1),Grunt (3),Grunt (2),Grunt (4)
  • Page :
  • 1
There are no replies made for this post yet.