Jump to content

Set global reverb with wet/dry setting for each channel?


Recommended Posts

I'm working on a repair patch for an old video game that fixes the midi-based music (it's buggy in the original game). Among other things, the wet/dry settings for the individual channels is completely messed up and needs to be set correctly by hand.

The game uses a globally defined, simple reverb and reads the midi command 91 from the songs to set the reverb for each channel. Basically, the command sets a value between Dry and Wet.

Here is an example. The first note has no reverb event, the second has one with a value of 70, then 90, 100, and 127: https://cdn.discordapp.com/attachments/502388312850300928/1092056255528435742/Reverb.mp3

 

But in order to adjust the reverb well, I need to recreate this reverb in a midi editor so I can hear and adjust the result directly.

Originally I used LMMS, where I can import the midis and create a similar reverb effect, but unfortunately I found out that the program plays the volume levels completely different than in any other midieditor, which leads to the instruments having wrong volume ratios.

 


Now I want to try it with Cakewalk, but I am quite a beginner with the program. However, so far I have been able to set up sforzando so that I can load the soundfont.
But even though I watched a lot of videotutorials, I still don't understand exactly how to add a global reverb, and set the wet/dry level on each channel. And also if it would be possible to import a midi so that it directly captures the right instruments in sforzando and I don't always have to set it by hand.

How could I achieve something like that?

Thanks in advance!

Edited by Louis Miles
Link to comment
Share on other sites

From your 1st post, it sounds like you are dealing with some possible custom MIDI implementation, and I think tools in Cakewalk could certainly help work with that. It also sounds like it may take somewhat of a learning curve, it's good you have been checking out tutorials! MIDI can be confusing at 1st.

Can we get more information on your situation? What type of MIDI file are you using to bring the material into Cakewalk? Does the game engine use any kind of MIDI standards for the rest of the controls, such as instrument/patch selection, even perhaps any system exclusive or other of the in depth stuff?  You mentioned CC 91 as being used for a reverb level, which is an optional command within the GM standards, are the volume levels for the mix also using standard CCs?

Link to comment
Share on other sites

Normally when sharing a reverb on audio tracks, the reverb is set to 100% wet and you have sends going from each track to control how wet you want each track.

When working with multiple MIDI channels on a multi-timbral synth, reverb works in a similar way.  The global reverb level is usually set to a high volume, and you then use the reverb send level of each MIDI channel to determine how much of a "wet" signal you want for that sound.  If the the send level is high compared to the channel volume, it'll sound wetter;  if the send level is low compared to the channel volume, it'll sound dryer.

 

  • Like 1
Link to comment
Share on other sites

56 minutes ago, msmcleod said:

Normally when sharing a reverb on audio tracks, the reverb is set to 100% wet and you have sends going from each track to control how wet you want each track.

When working with multiple MIDI channels on a multi-timbral synth, reverb works in a similar way.  The global reverb level is usually set to a high volume, and you then use the reverb send level of each MIDI channel to determine how much of a "wet" signal you want for that sound.  If the the send level is high compared to the channel volume, it'll sound wetter;  if the send level is low compared to the channel volume, it'll sound dryer.

 

And if you are using a GM/XG compatible synth or TTS-1, CC91 events on a given part (or track) controls the reverb send level of that part (or track)

  • Like 1
Link to comment
Share on other sites

Also, if you use the default multi-timbral synth in Cakewalk, TTS-1, note that the defaults loaded for all tracks have reverb level set at 40.  -So, unless you have a different stated MIDI command at the start of playback, reverb on any default instrument will start at that level. -It used to really throw me off!  My solution when loading a MIDI track, or assigning a new one, to a TTS-1 instrument, is to toggle the reverb setting (in the inspector for instance) to zero - or whatever you really want to start with, before continuing to play and program.  -Of course, any later MIDI changes will override that, but starting out it may not be obvious. For some reason, I usually have to do that with chorus as well, but the TTS-1 GUI says the default there is zero - maybe it was just me!  - FYI.

Edited by JnTuneTech
  • Like 1
Link to comment
Share on other sites

Just thinking out loud here. Doesn’t it depend on the video game player how it works? Like I know games on a PC can use the ms wavetable synth. Apple probably uses something similar? Or do modern  game players just play wave files?  
If there is a midi sound generator then you would need to find out what cC events it responds to.  I would figure this would be GM. 
If it is then you would definitely use the TTS 1 to compose. 

Link to comment
Share on other sites

Thanks for your answers and info!

On 6/24/2023 at 8:48 PM, JnTuneTech said:

From your 1st post, it sounds like you are dealing with some possible custom MIDI implementation, and I think tools in Cakewalk could certainly help work with that. It also sounds like it may take somewhat of a learning curve, it's good you have been checking out tutorials! MIDI can be confusing at 1st.

Can we get more information on your situation? What type of MIDI file are you using to bring the material into Cakewalk? Does the game engine use any kind of MIDI standards for the rest of the controls, such as instrument/patch selection, even perhaps any system exclusive or other of the in depth stuff?  You mentioned CC 91 as being used for a reverb level, which is an optional command within the GM standards, are the volume levels for the mix also using standard CCs?

These are Type 0 standard MIDIs that I import into Cakewalk. The midis only use the ProgramChange (23), Channel Volume (7), Panpot (1), ReverbSendLevel (91), PitchBend (36) and TremoloDepth (92) events. The latter seems to be ignored* by the game and is possibly a leftover from the composer, who most likely created the music with a different synthesizer than the game uses.

ReverbSendLevel only controls the wet/dry level of the reverb for the channel, with 0 being dry and 127 being wet. The other events work like midi-standard.
The reverb itself is globally set by the game engine and cannot be changed.

I believe the volume levels are also midi-standard. When I compare a Cakewalk export to an in-game recording, the instruments seem to be pretty much at the same volume ratio.
For testing purposes, I have completely removed the reverb in this example so that there are no effects and you can easily compare the volume levels:

Cakewalk with sforzando:Cakewalk.mp3

Ingame Recording:Ingame.mp3


In general the game uses a quite simple midi player, with the only difference that the wet/dry level for reverb is controlled by ReverbSendLevel.


 

*I have done several tests with the tremolo event, but don't notice any differences.
Here are recordings from the game with notes gradually using a higher ReverbSendLevel value, but with TremoloDepth set to 0:NoTremolo.mp3
And here the same, except that TremoloDepth is now set to 127:Tremolo.mp3

 

Link to comment
Share on other sites

11 hours ago, Louis Miles said:

ReverbSendLevel only controls the wet/dry level of the reverb for the channel, with 0 being dry and 127 being wet.

Thanks for the info on what you are working with, -very helpful!  -So, I am stuck on one of the terms you keep using - wet/dry level. In a typical audio mixing scenario, wet/dry usually refers to having an effect process that in itself routes both the dry audio feed it is being sent, and the amount of effect added to that, -used either in the primary signal path, such as an inline fx bin routing, or in a separate audio process fed by a send, such as a bus, for instance, that then is usually mixed back in with the main mix, and so by nature creates an element of parallel processing of any "dry" signal in most cases.  -In your case, what do you mean - does the internal game audio engine have a separate reverb fx unit you need to control & mix back with the original audio?

As a note - in GM MIDI - CC91 is only "commonly" referred to as Reverb Send - it actually can be almost anything at all, and it really has no literal connection to being a send or just plain level, so don't let the general terms confuse you. In your case it looks like CC91 refers to a certain level of what you say results in reverb, and it is assigned per channel individually.

Otherwise, there are many ways to use a separate reverb fx that offers wet/dry mixing in Cakewalk if you think you need that. It might be difficult to do however from a multi-timbral synth, you may want to use separate synths for each MIDI instrument in that case. -How many individual instruments are defined in the MIDI you are using?

Edited by JnTuneTech
clarifications...
Link to comment
Share on other sites

11 hours ago, Louis Miles said:

Here are recordings from the game with notes gradually using a higher ReverbSendLevel value

In listening to those examples, it sounds to me as though the reverb is coming from a pre-fade send source - perhaps? Is the track volume dropping at the end of those tremolo examples?

Link to comment
Share on other sites

  • 3 months later...
On 6/29/2023 at 8:47 PM, JnTuneTech said:

Thanks for the info on what you are working with, -very helpful!  -So, I am stuck on one of the terms you keep using - wet/dry level. In a typical audio mixing scenario, wet/dry usually refers to having an effect process that in itself routes both the dry audio feed it is being sent, and the amount of effect added to that, -used either in the primary signal path, such as an inline fx bin routing, or in a separate audio process fed by a send, such as a bus, for instance, that then is usually mixed back in with the main mix, and so by nature creates an element of parallel processing of any "dry" signal in most cases.  -In your case, what do you mean - does the internal game audio engine have a separate reverb fx unit you need to control & mix back with the original audio?

From what I've read and researched about the technique of the game's reverb so far, the game doesn't have a separate reverb effect, instead the audio engine always has an active reverb for each midi channel.

 

On 6/29/2023 at 8:47 PM, JnTuneTech said:

As a note - in GM MIDI - CC91 is only "commonly" referred to as Reverb Send - it actually can be almost anything at all, and it really has no literal connection to being a send or just plain level, so don't let the general terms confuse you. In your case it looks like CC91 refers to a certain level of what you say results in reverb, and it is assigned per channel individually.

Exactly, that's what controls the level. On some channels of the midis, the CC91 command is even set to 0 to play it completely dry (as if it had no reverb).

On 6/29/2023 at 8:47 PM, JnTuneTech said:

Otherwise, there are many ways to use a separate reverb fx that offers wet/dry mixing in Cakewalk if you think you need that. It might be difficult to do however from a multi-timbral synth, you may want to use separate synths for each MIDI instrument in that case. -How many individual instruments are defined in the MIDI you are using?

In the example song there are 10. The problem is that many songs have different instruments and number of midi channels.
The soundfont file of the game counts 25 instruments.

So to mimic the reverb I would have to use a separate synthesizer for each midi channel, in which I also set the respective reverb level. Would sforzando be a good choice for this?

Another problem I would have is that sforzando doesn't take over the instruments of the midi (i.e. the ProgramChange (23) command to assign the instrument from the soundbank) and I have to set it up again for each channel. Is there a synthesizer that takes over the instruments set in the midi?

On 6/30/2023 at 4:01 AM, JnTuneTech said:

In listening to those examples, it sounds to me as though the reverb is coming from a pre-fade send source - perhaps? Is the track volume dropping at the end of those tremolo examples?

No, the volume always remains the same. This is also a disadvantage of this sound engine, that is that the channel volume does not affect while playing a note. So, for example, if a Channel Volume (7) command occurs while a note is playing, it will not affect that note, but will only affect the next note after that command. But am still researching what this tremolo command is used for!

 

Thanks for all the help, and sorry for my late reply!

 

Link to comment
Share on other sites

8 hours ago, Louis Miles said:
On 6/29/2023 at 6:01 PM, JnTuneTech said:

In listening to those examples, it sounds to me as though the reverb is coming from a pre-fade send source - perhaps? Is the track volume dropping at the end of those tremolo examples?

No, the volume always remains the same. This is also a disadvantage of this sound engine, that is that the channel volume does not affect while playing a note. So, for example, if a Channel Volume (7) command occurs while a note is playing, it will not affect that note, but will only affect the next note after that command. But am still researching what this tremolo command is used for!

Again, perhaps I am mistaken, the brain sometimes chooses to interpret sounds in different ways 😅. But perhaps the instrument note level was changing, not the channel level. This is common in MIDI programming, and typically Expression (11) is used to change an active note level, separately from the overall Channel Volume (7), since the latter does not normally change an otherwise already keyed note.

I can't help answering questions about use of sforzando, I haven't used that app. I am fairly versed in using multi-timbral synths, in Cakewalk of course the TTS-1, and you seem to have the hang of that. There is basically 1 mini sampler/synth for each channel there, and while each synth can be somewhat customized initially - thus having its own saved parameters, each synth then uses the dynamic channel specific controls of 7 and 11, as well as pitch bend, modulation, etc. On each synth output there is a reverb and chorus mix level, but the type of reverb, as well as chorus is set on an overall settings page that is common to all channels, and the reverb & chorus actually mixes at the point of each main output. Whereas the other MIDI control items like modulation, pitch bend, vibrato, etc. dynamically activate the feature on a channel-by-channel basis within the saved synth - relative to the saved synth settings determining how those commands will exhibit in each instance.

Hopefully you can examine the packets of individual channels and their respective control one at a time, and just find a way to emulate each instrument with a synth that sounds the same - or close anyway, one part at a time. If it were me, I would separate the instrument/control MIDI stream into separate tracks in Cakewalk. Perhaps you are already doing that - but either way, I have no doubt you can find some combination of techniques to get this working!  Just keep at it. 😎

Link to comment
Share on other sites

On 10/14/2023 at 11:15 PM, JnTuneTech said:

Again, perhaps I am mistaken, the brain sometimes chooses to interpret sounds in different ways 😅. But perhaps the instrument note level was changing, not the channel level. This is common in MIDI programming, and typically Expression (11) is used to change an active note level, separately from the overall Channel Volume (7), since the latter does not normally change an otherwise already keyed note.

Possibly the effect has something to do with such notes:

image.thumb.png.dea6510f8fcc90086f430b35866052ea.png

In Cakewalk and other midi editors these notes sound echo-like:

But in the game they sound like this:

 

 

 

So far I have managed to set an instrument track as output for each midi track using the juicysfplugin synthesizers. These tracks then use a send to a bus that uses a reverb effect. So I can then use the send level of each track to set the reverb individually.😅

Unfortunately, I have not been able to find a plugin that can set the reverb to be wet like the example in the first post. That is, so that it becomes very quiet when the Sent is turned up all the way.

 

I was also able to set up VirtualMIDIsynth, which lets the miditracks directly play the soundfont instruments without needing an additional instrument track with extra synthesizer. But I can't add any effects (except midi effects) to the midi tracks themselves. Do I have to enable this in the settings first or do I need a plugin for this?

 

Edited by Louis Miles
Link to comment
Share on other sites

VST instruments use an Audio track to output the sound. It can be used as a Split instrument track or a Simple instrument track which is we’re you can place midi directly on the track. 
Because they are Audio tracks then applying effects is treated the same. You can put effects in the FX bin , the Pro Channel or create a send to a effects buss. All this including control of effects parameters can be easily automated. 
There are hundreds of free or very inexpensive VST instruments. 
 

 

Link to comment
Share on other sites

6 hours ago, Louis Miles said:

n Cakewalk and other midi editors these notes sound echo-like:

 

But in the game they sound like this:

 

 

To my ear, the difference could be in the synth or sample control itself. I would guess the game sound is applying an envelope to the sample, which is very commonly used to vary note cutoff & resonance, etc., and can be done dynamically with MIDI control as well. -But that is just my guess.

As @John Vere points out, there are many virtual synths out there, and if the synth itself doesn't provide the FX you want internally, using a VST in Cakewalk involves an audio track that can have many routings & FX inherently. -Multiple choices for how reverb is mixed, for instance, some reverb FX have a "wet/dry" setting, which again really only applies relative to how the sound is routed, as a send with return routing can achieve the same thing as well. -Just keep looking for the sounds you need, as that is usually the hardest part, then the mixing is easy. -Or so I like to think anyway!

  • Like 1
Link to comment
Share on other sites

Ok, thank you for the information!

I just realized that I must have routed it wrong, which is why the reverb effect didn't get quieter with any effect plugin/reverb! 😬

Each miditrack I had set as out an instrument with sforzando synthesizers, all of which have a send to a bus that uses the reverb effect. My goal was that with the send level I could set exactly this W/D level, so to what extent the miditrack is affected by the reverb, like in this example here in LMMS:

(on the left is the reverb plugin where the level is adjustable, while the actual reverb parameters of the reverb effect on the right are untouched).


But I'm doing something wrong, because now the reverb comes from the bus but in addition the unaffected sound of the same instrument is played as well.

Here in the picture is left the instrument with sforzando and right the bus to which it sends:

image.png.222ca22deaeb0b54a307a88de2ea3183.png

I've also tried an AUX instead of a Bus, but it makes no difference.

 

Another idea, which I think would also be much easier to work with, would be to use a MIDI synthesizer software with reverb control that is automatically used by the reverb send event (Command 91).

The only one I could find is VirtualMIDISynth. It has a reverb whose influence is controlled by Midi Command 91, but the reverb itself does not seem to be adjustable. Or is there a way to change it?

Edited by Louis Miles
Link to comment
Share on other sites

7 hours ago, Louis Miles said:

But I'm doing something wrong, because now the reverb comes from the bus but in addition the unaffected sound of the same instrument is played as well.

Most likely this is exactly what that "wet/dry" setting you started all this with can result in! So, -In the reverb FX plugin itself, there should be a control for how much dry signal (unaffected in your sentence above) is passed through the reverb plugin itself - as in the LMMS screenshot, for example. -Most of the time when used on a bus, this setting is used to eliminate that duplicate signal, which sounds like what you need. You will undoubtedly encounter this technique as you go along with audio mixing.

Also, audio FX plugins such as reverb, -which as in the notes above about synth plugins do vary widely in cost (many free ones) and features, but many of the better ones allow for MIDI control. You would need to learn how to implement that functionality in the relevant documentation is all.

Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
×
×
  • Create New...