The current soundtrack I am working on for the SNES MIDI Remaster Project has issues with lots of the strings.
A sustained note slowly fades out using expression, and then the next note instantly jumps to expression 127 on the same tick that the previous note has been turned off. This causes transients from the previous note to briefly sound at full volume. In one previous soundtrack I ended up duplicating the tracks and then alternating each original track's notes between the two new tracks.
I've tried to work around it this time by gapping the string notes, which only helps somewhat. So I want to see if there is some sort of "smoothing" I can do in any of the commonly available Windows MIDI editors to make the expression of the new note blend with the one of the old so the transition isn't so jarring. I have Anvil Studio, Sekaiju, and Sonar as the main ones I use, plus assorted others for converting to/from text etc. I would only need it to apply to the strings, which sometimes share a track/channel with one or more other instrument(s).
If worse comes to worse, I can always do the duplicate/alternate hack again, but it's time consuming (and I haven't added that in to my editor yet 😆 ) but I'd rather just be able to have it sound good without all the extra modification.
Well, it seems that alternating the notes will be the way to go.
I am in the process of adding this feature to MIDI-MIS, though it is a bit more tricky than I initially anticipated. The partially working results already sound loads better with the elimination of cross-talk between subsequent notes on a channel.
I have two possible methods to choose: A) Clone the track I want to modify, move it to another channel, and remove all of the alternating notes, -or- B) keep all of the notes on the same track, and only change the channel values of the notes that are moving to the other channel
I'm currently working on method B. I already had systems in place to collect relevant commands around each note, so I am using that to split the notes between channels, and bringing along any expressions and pitch bends. I then realized I need to duplicate a bunch of other commands like bank selection, channel volume, pitch bend range, echo, chorus, and who knows what else so both channels still have those commands. Hmm. This could be a problem if someone besides myself were to actually use my editor for this purpose.
Pitch bend will require more fiddling, as if it changes on a note on one channel, but then jumps to the other channel, that channel will still be working with the previous pitch bend value. Oof.
So now the more I think about it, the more I may be leaning toward method A, which may come with it's own set of "issues".
Currently I am allowing it to work on a single instrument on a channel, so if there are multiple instruments on a single track/channel (which is the case with nearly all of my files) then I can only affect the chosen instrument. Cloning the entire track will make it harder to only modify the one instrument, since I then need to remove all commands related to the other un-split instrument(s). (Or, I could simply delete all of the note on/off related to the other, but then I will be left with a bunch of unneeded commands clogging up the file)
Each has pros and cons. It would be great if someone already had a working method of doing this 😀
However, as such, my niche editor keeps getting niche-ier.
It's taken a while but I believe I finally have it working satisfactorily. I went with Method A, and I now clone the MIDI track to a new track and assign it to an empty channel, and then alternately remove notes from each channel, along with adding in pitch bends that carry across notes but are lost when those alternate notes are removed. Cloning the track makes it much less complicated to keep track of all of the commands required for both the old and new channel.
The differences between the before and after of splitting strings notes to separate channels is clearly apparent. I made mp3 files to upload so you can hear the difference, but they rendered too large.
Loading the before and after mp3 files in to Audacity and then inverting the second one generates a third file of only the auditory differences between the two. The strings are the instrument in question to listen to. There are a few other glitches cause by the other instruments in the same channels as the strings, which will be ironed out once I port the code to work on the entire track instead of isolating the single instrument (or if run a second pass on the other instruments also).
I am attaching a cut down version of only the "differences" mp3 file, plus the WIP of the original and split MIDI files. Your playback mileage may vary.
Using Winamp with CoolSoft VirtualMIDISynth and an assorted curation of soundfonts, the difference for the strings is night and day. You can clearly hear the unintended emphasis and note twitching at the start of nearly every note as the new pitch bend and/or expression affects the end of the previous note.
It is not so obvious in MIDIPlayer, which is using BassVST - Yamaha S-YXG50.
This process will drastically improve the overall sound quality of this particular soundtrack, and most likely others that I will work on in the future.
The correct way to make a 'phrase' (several notes played one after the other without 'attack') is to use the legato switch and to slightly overlap the first note beyond the start of the second. And second to third, etc., until the end of the phrase. I.e. the note off for note 1 comes after the note on for the 2nd note.
This is often shown in notation with a 'tie' written across the top of two or more notes.
However the MIDI triggered voice has to support this feature and, upon encountering tied notes, misses off the attack portion of the waveform generated. Most good orchestral libraries implement this with brass, woodwind and strings.
Is legato an extended channel on/off command, or does it need to be applied to each note involved? My files are generated with a conversion utility, so I will need to manually add in the legato to the files if I go that route.
It does sound exactly like what it needs though 😀
The legato command effectively puts that MIDI channel into monophonic mode.
The dropping of attack should only function when there are overlapped notes, otherwise they should use the normal note attack. The strength of the attack will be determined by the expression controller. Of course, exactly what audio output you get depends upon the VST library you use. Not all of them have built in support for legato.
Personally, I still tend to turn down the expression on the 2nd and subsequent notes in a phrase and, yes, it does mean editing each note if you want a "perfect" result. 🙁 How much time you spend will depend too on the software you use. As an old timer just about to turn eighty, I still use Yamaha XGworks for note input and editing and Yamaha SOL2 with various orchestral libraries.
JohnG
Hmm, I'll try it, but it sounds like it may not work in this case since the notes technically do not overlap. They do stop and start on the same tick, but that may not be enough coverage between the two to trigger the effect. The original pre-converted music is essentially monophonic to begin with, since it is all sample based and each of its 8 channels can only produce sound from a single sample at a time.
Most of my editing is done using my own self-written editor that lets me automate most of the repetitive changes I have to make to these files. I also briefly use Anvil Studio for repairing and removing empty channels from the initially converted files. I use Cakewalk for the final touchups at the end, trimming the ends of the files and adding a fade out. Sekaiju for adding channel names, tags, etc, and the occasional odd command addition or correction. Any other edits are made manually by converting the MIDI to text and editing it with Notepad++. Fortunately the more functionality I add to my editor, the less I need to make the manual edits.
I did make an option in my editor to shorten/gap notes recently. I suppose it wouldn't be all that hard to modify the code to lengthen them instead, but that may introduce a whole new series of unexpected results.
I tested a few things out, and I'm going to stick with my "splitting notes to separate channels". Lengthening the notes will probably break other things in my editor because of the way I handle individual notes. I tried enabling legato and that did not have any perceivable effect on the playback.
Thanks for the info though!
Is it safe to assume XGWorks is Win98?
I've got it running successfully on Windoze 7, but it is from the Win98 era.