I needed an automatic fade out in the song “Shine on you crazy diamond” when the organ plays a chord.
This chord should be faded out automatically, because I did not want to deal with a knob on my controller.
So I created this script, by pressing a specific key on my keyboard the sound volume fades out.
The trick is to press C1 and the fade out is triggered.
At the end of the fade out, the C1 can be triggered again and the volume is set to the original value.
@keyman, thx for cleaning up the script!
Here it is:
Var MASTER : Widget // A knob widget used to control the volume myRamp : Ramp // A generator that moves smoothly from 0.0 to 1.0 over some specified time MTW : MidiInBlock // The MidiIn Block from where the trigger note will come StartValue : double // This remembers the initial value of the knob so that when we start again // the knob will be reset to this value Running : Boolean // Keep track of whether we are currently running the ramp initialization SetGeneratorOneShot(myRamp, true) // Generator will only run once when triggered myRamp.SetGeneratorLength(2000); // Two seconds Running = false // When we start up, the ramp is not running end // This callback will be triggered only when the note C1 is received On NoteOnEvent(m : NoteMessage) matching C1 from MTW Print("Run state: " + Running) // Print true or false each time we're called depending // on whether we are currently responding to the ramp If not Running then StartValue := GetWidgetValue(MASTER) // Get the initial level of the knob (NB make sure it's not already 0 // otherwise nothing will happen Running = true // Remember that we are now running the ramp myRamp.EnableGenerator(True) // Arm the ramp function generator SetTimersRunning(true) // The ramp function generator will now start producing values else SetWidgetValue(MASTER, StartValue) // If we were running then reset the knob to the initial value again Running = false // and remember that we are now NOT running End End // This gets called by the ramp generator as time passes On TimePassing(timeX : integer, amplitudeY : double) from myRamp Print(amplitudeY) // Just lets you see the value of the ramp as time passes if Running then // The amplitude of the ramp goes from 0.0 to 1.0 so if we multiply that amplitude // by the INITIAL start value of the knob, we generate a value that gets closer to the // actual StartValue over time // Therefore, subtracting that from the initial StartValue causes the // the actual value to reduce down to zero // Hence the knob slowly reduces to 0 SetWidgetValue(MASTER, StartValue - StartValue * amplitudeY) end end