Barking Sands Posted May 23, 2021 (edited) I'm thinking about starting a new project that creates a custom soundfont that caters to each DOOM midi track individually. I'm brand new to Polyphone, and I have no idea how to keep things legal, so any help from the community is greatly appreciated. The goal is a single soundfont, but if necessary, I plan on tayloring a series of soundfonts to maximize the quality of the music for each MIDI and converting the MIDI to .OGG so they can be compatible with Bethesda's Unity port. The sound type I'm shooting for is a garage band of metalheads. It should use minimal synth and loop effects for maximum sound clarity and realism. Tracks like E3M3 can get away with orchestral presets for the atmospheric effects. All resources need to be public domain (free to modify and distribute), so the samples especially must be both well normalized (same volume) and unprotected by legal tape. I'm very open to any advice on better ways of approaching the project. E1M1 E1M2 E1M3 E1M4 E1M9 E2M3 Database of presets complete: Spoiler 000:000 [Acoustic Grand Piano] INTRO 000:004 [Electric Piano 1] STALKS 000:006 [Harpsichord] E1M2 IN_CIT 000:007 [Clavinet (Clavi)] VICTOR 000:010 [Music Box] E1M6 000:011 [Vibraphone] INTRO INTROA DOOM 000:012 [Marimba] STALKS IN_CIT MESSAG 000:013 [Xylophone] E2M7 DM2TTL 000:014 [Tubular Bells] DDTBLU 000:015 [Dulcimer] E1M7 DOOM 000:017 [Percussive Organ] EVIL 000:018 [Rock Organ] INTRO INTROA RUNNIN DOOM DEAD 000:020 [Reed Organ] EVIL 000:024 [Acoustic Guitar (nylon)] ROMERO 000:028 [Electric Guitar (muted)] E2M1 BETWEE THE_DA SHAWN AMPIE 000:029 [Overdriven Guitar] E1M1 E1M4 E1M8 E2M1 E3M1 E3M2 E3M3 RUNNIN DDTBLU MESSAG AMPIE READ_M 000:030 [Distortion Guitar] E1M1 E1M4 E1M9 E2M1 E3M1 E3M2 E3M3 E3M8 INTER BUNNY BETWEE SHAWN IN_CIT DEAD READ_M 000:031 [Guitar harmonics] INTRO INTROA E3M1 E3M8 BUNNY DOOM 000:032 [Acoustic Bass] VICTOR STALKS COUNTD DEAD MESSAG 000:033 [Electric Bass (finger)] E1M6 E1M9 E2M1 E3M2 E3M8 INTER BUNNY BETWEE ADRIAN 000:034 [Electric Bass (pick)] E1M1 E1M4 E3M1 RUNNIN DDTBLU 000:035 [Fretless Bass] THE_DA ROMERO 000:036 [Slap Bass 1] DM2INT 000:037 [Slap Bass 2] E1M2 RUNNIN AMPIE 000:038 [Synth Bass 1] E1M3 000:039 [Synth Bass 2] DOOM SHAWN 000:040 [Violin] E1M9 OPENIN READ_M 000:041 [Viola] E1M9 READ_M 000:042 [Cello] E1M9 IN_CIT READ_M 000:043 [Contrabass] E3M1 IN_CIT DEAD 000:044 [Tremolo Strings] E1M7 E1M8 E2M4 E2M6 E2M7 DOOM OPENIN 000:045 [Pizzicato Strings] E1M7 E2M4 E3M1 COUNTD IN_CIT ROMERO ADRIAN 000:046 [Orchestral Harp] E1M7 BUNNY DEAD 000:047 [Timpani] INTRO E1M6 E1M7 E2M6 E2M7 DM2TTL VICTOR DEAD TENSE READ_M 000:048 [String Ensemble 1] E1M2 E1M5 E1M7 E2M6 E2M7 E2M7 E3M1 VICTOR BUNNY COUNTD ROMERO ADRIAN TENSE DM2INT READ_M 000:049 [String Ensemble 2] E2M4 ROMERO 000:050 [Synth Strings 1] E2M6 000:051 [Synth Strings 2] INTRO INTROA E1M2 DM2TTL DDTBLU TENSE DM2INT 000:052 [Choir Aahs] E1M8 E2M4 DM2INT 000:053 [Voice Oohs] DOOM 000:054 [Synth Choir] THE_DA MESSAG DM2INT 000:055 [Orchestra Hit] E2M7 000:058 [Tuba] ULTIMA 000:060 [French Horn] OPENIN ULTIMA 000:062 [Synth Brass 1] E1M6 STALKS EVIL 000:063 [Synth Brass 2] E1M4 E1M6 STALKS DEAD DM2INT 000:068 [Oboe] TENSE ULTIMA 000:070 [Bassoon] E2M8 BUNNY TENSE 000:071 [Clarinet] TENSE ULTIMA 000:072 [Piccolo] E2M7 BUNNY ULTIMA 000:073 [Flute] TENSE 000:075 [Pan Flute] BUNNY 000:078 [Whistle] THE_DA AMPIE OPENIN 000:079 [Ocarina] E2M2 DDTBLU 000:080 [Lead 1 (square)] E2M2 E2M8 E3M2 SHAWN DDTBLU DEAD MESSAG TENSE DM2INT 000:081 [Lead 2 (sawtooth)] E1M2 E1M6 E1M7 E2M8 E3M2 INTER SHAWN IN_CIT TENSE ULTIMA 000:082 [Lead 3 (calliope)] E1M9 INTER DEAD 000:085 [Lead 6 (voice)] TENSE 000:087 [Lead 8 (bass + lead)] E2M6 READ_M 000:088 [Pad 1 (new age)] DOOM DDTBLU DM2INT 000:090 [Pad 3 (polysynth)] DOOM 000:092 [Pad 5 (bowed)] E1M3 OPENIN 000:093 [Pad 6 (metallic)] MESSAG 000:094 [Pad 7 (halo)] INTRO INTROA E2M2 VICTOR SHAWN TENSE 000:095 [Pad 8 (sweep)] DEAD 000:096 [FX 1 (rain)] OPENIN 000:097 [FX 2 (soundtrack)] E2M2 DDTBLU 000:100 [FX 5 (brightness)] THE_DA 000:101 [FX 6 (goblins)] E2M2 000:102 [FX 7 (echoes)] INTRO 000:107 [Koto] DEAD 000:108 [Kalimba] E1M6 E2M7 DDTBLU 000:116 [Taiko Drum] MESSAG 000:117 [Melodic Tom] INTRO RUNNIN MESSAG DM2INT 000:118 [Synth Drum] E1M8 DM2TTL RUNNIN IN_CIT 000:119 [Reverse Cymbal] E1M5 IN_CIT 000:120 [Guitar Fret Noise] E1M5 E1M7 DM2INT 000:121 [Breath Noise] OPENIN DM2INT 000:123 [Bird Tweet] BUNNY 000:127 [Gunshot] EVIL 128:000 [Standard] (Channel 09) Production road map: This next step might take longer than I previously imagined. I was planning on just copying and pasting the channel presets into a single soundfont, but comparing and analyzing the presets is taking a great deal more effort than I thought it would. I just finished work on preset 000:004 (Rhodes piano), and I found myself feeling forced to mix multiple instruments together and modify the settings a great deal to get the sound I wanted. The Fender Rhodes only appears once in the DOOM soundtrack, and it isn't happening until late in D_STALKS.MUS which means there's a chance few will even hear it. But here it is in its full glory (the channel preset still has a couple of bugs in the higher register, but they don't affect the sound here): This is a comparison of the SC-55 General Grieferus versus the same soundfont but with Preset 000:004 replaced with a mix of three custom soundfonts. I'm going to use that database to merge voices from soundfonts provided here and here into a single soundfont called Beowulf. The noise levels will be normalized to match the volume output that SC-55 General Grieferus uses. Beowulf.sf2 will only contain the samples necessary to populate those basic presets with instruments, so I predict it will be between 100-200 megabytes in size. At least this is something I'm confident that I can do with the very limited skill set that I currently have. Part three is the first ambitious or optimistic endeavor. I'll try to assemble together a soundfont that mirrors Beowulf but also features cross-faded instruments from multiple soundfonts to populate individual channels. It will also use channels on higher level banks so it will need to be accompanied by a set of modified DOOM midi files. That soundfont, if I can create it, will be called Chives.sf2, and it will likely be larger than 400 megabytes in size. The final achievement that I can only dream of reaching, is Gorgonzola.sf2 (Alias "The Cheese"). That soundfont is going to have a complete collection of presets so that it can be used to convert any custom midi files to ogg, mp3, wav, or flac. If it's even possible (it's going to have multiple banks and a huge assortment of intermixed voices and instruments, and it will probably contradict its own design at some point because of the large variety of custom midis that are designed to be played with DOOM), I predict its size to exceed 1 gigabyte, so it will only really be useful for conversions unless the user is running on a high-end machine that can manage that kind of workload in real time. Edited June 1, 2021 by Barking Sands : Roadmap added 2 Share this post Link to post
Doomkid Posted May 23, 2021 If you're considering exporting them to OGG anyway, which not only the Bethesda port but also Zandronum, GZDoom, ZDaemon and possibly others support, you could do this pretty easily without the need to assemble custom soundfonts for each song which would be hellish and take a million hours (at least for someone like me who has tried assembling a custom soundfont and failed miserably). The best way to do this would be to layer various instruments from various soundfonts in a program that makes doing so very simple, such as Virtual MIDI Synth. I just do this on a per-song basis then export to MP3 or OGG. For example, recently I wanted to do a "soundfont remaster" of the old EXEC.WAD soundtrack (which kicks ass). Here's the soundfont remastered version: Throughout the entire soundtrack, you can hear that guitars, drums, synths etc. are from many different soundfonts. The only way to really share this exact sound with others was to export as MP3 or OGG - actually compiling all the bits and pieces into one massive soundfont, then telling the game which bits of that soundfont to use for which MIDIs is, as far as I'm aware, impossible, but if you just export them as actual sound files you don't really need to worry about it, the only drawback being the largeish filesize. 1 Share this post Link to post
Barking Sands Posted May 24, 2021 (edited) I was hoping to get a reply from you; you're always so helpful on these subjects. I don't have a million hours of spare time to work with, so I think it makes sense to steal presets from the soundfonts I already have and just throw them through a mixer in CoolSoft VirtualMIDISynth and convert the MIDIs to .mp3 and then into .ogg (I have to trim several seconds off of the end of the clip so I'm using Shotcut to convert from .mp3 to .ogg as well as do the time trimming). I'm just worried about getting into hot water for using both soundfonts and MIDIs I don't own the rights to and producing and distributing soundtrack files with them. Here's a first draft At Doom's Gate (D_E1M1.ogg): D_E1M1.zip Edited May 24, 2021 by Barking Sands 1 Share this post Link to post
Doomkid Posted May 25, 2021 23 hours ago, Barking Sands said: I'm just worried about getting into hot water for using both soundfonts and MIDIs I don't own the rights to and producing and distributing soundtrack files with them. Here's a first draft At Doom's Gate (D_E1M1.ogg): D_E1M1.zip Sounds really good! Stays true to the intended sound while adding a lot of oomph. I like that. I wouldn't worry about getting into hot water - there's an extremely popular Doom Metal pack on ModDB which the creators likely don't have the "right" to do (technically speaking) but no one from id has given them any trouble yet. In a similar vein, a soundfont author would have to be really anal to get mad at you for using their instruments in a small scale Doom music conversion like this, though worst case you'd just have to take it off of wherever you're hosting it (ModDB, MediaFire, etc.) 0 Share this post Link to post
Barking Sands Posted May 25, 2021 (edited) Now that I've heard the direct VirtualMIDISynth output compared to a 100% quality converted .ogg format played through the Unity rerelease port a few times, I feel spoiled. I just don't want to allow the quality loss. I still think that a one-size-fits-all soundfont is the best route to go for quality, but it comes at a great cost as well. The same "Distortion Guitar" preset that plays the backup in "At Doom's Gate" is used at the forefront in "An Intermission from DOOM," and that just doesn't work at all for me because I'd have to find some kind of common ground between those MIDI tracks, which there is little to none. I guess I just have to settle for something less than optimal no matter what approach I take here. I'm just lazily attempting to do a version that's noticeably crisper in sound clarity than the OST version (or versions) found all over YouTube. Also, for what it's worth, I'm only using assets or resources that were provided in that Soundfont tutorial you posted with 40 great soundfonts and 10 soundfonts of drums. BTW I think I've finished "An Intermission from DOOM" (Besides more cowbell, I think it could benefit from a sawtooth with a higher pitch without sacrificing tuning): (Uploading the file to DoomWorld forums isn't working for some reason) Edited May 25, 2021 by Barking Sands : Link is broken and I can't upload the file because of Site disabling cookies or something wierd. 1 Share this post Link to post
TheUltimateDoomer666 Posted May 25, 2021 (edited) On 5/24/2021 at 5:43 AM, Doomkid said: actually compiling all the bits and pieces into one massive soundfont, then telling the game which bits of that soundfont to use for which MIDIs is, as far as I'm aware, impossible It would actually theoretically be possible by using edited MIDIs that specify what MIDI banks/SoundFont banks to use for each preset. To elaborate, a SoundFont can contain multiple versions of the same presets. This means you can have, say, multiple Acoustic Grand Pianos stored at Preset 0, each with their own sound, in the same SoundFont. In fact, EdgeSounds Soniqbear GM120Pro does this; it is a single SoundFont that contains 4 different versions of each General MIDI instrument (by default, most MIDIs will use the SoundFont's first GM set). With some additional editing in Polyphone and a MIDI sequencer, you could have one SoundFont play customized instruments for individual MIDIs (e.g., Bank 0 has instruments customized for MIDI 1, Bank 1 has instruments customized for MIDI 2, and so on). MIDIs can also be made to switch instrument banks on the fly, so you could have a channel cycling through the different banks for Preset 30 (Distortion Guitar) or such. Useful if you think certain versions of a particular instrument slot will fit specific parts of one MIDI. Of course, all of that would take a bit of work, and I do think it is easier to just make MP3/OGG renders instead of making a SoundFont that contains a gajillion different versions of each GM preset. Edited May 26, 2021 by TheUltimateDoomer666 : Made post less wordy. 2 Share this post Link to post
Barking Sands Posted May 25, 2021 (edited) That's very interesting. So far, all of the channels I've worked with have been using bank 0 (except for the drums channel of course, which uses bank 127), and I've been wondering why that is. I was thinking about trying different presets for the percussions to see what happens, but I have no way of knowing which preset the MIDI is using based on watching the synth mixer (it just says "drums"). I guess I would need to open the MIDI files in an editor. If I get really ambitious, I could get tempted to edit the MIDI and swap some banks around so that I can use all of the custom presets in a single SF2 file. I think the harder job is just normalizing the sound using a combination of attenuation (to decrease a preset's sound volume) and duplicating instruments (to increase the volume). Right now, I'm doing most of the work with the mixer board because it takes seconds instead of minutes to adjust a channel. So far, I've been adjusting the mixer settings based on the drum channel as a constant (100% volume using the same exact drum soundfont). I just realized that the MIDI sets the channel volume to different levels based on how pronounced the composer wants the drums to be which varies from one track to the next, and that means that my master levels are all out of whack. I'm seriously considering just going with the first option which was to cobble together a custom soundfont (Chives.SF2) which just has normalized volume voices (just enough to populate the MIDI channels that DOOM uses) and providing along with it some custom MIDI files in order to use multiple banks. I looked at a DOOM MIDI file in a MIDIEditor program I downloaded, and it assigns voices to channels on the same tick that the music starts, so I think I have to replace that command with a command that assigns a bank instead of a preset. That hopefully changes a setting that was once (000:030) to (030:000) so I just have to meddle with the first preset in the bank which number matches the original voice's preset value. Edited May 27, 2021 by Barking Sands : Just realized I need to look into the MIDI file pan/volume settings 0 Share this post Link to post