Hello all, I’m in the process of learning a couple of ridiculously difficult organ solos for my band. I have no doubt that I’ll get them down eventually, but would love a backup when playing live the first several gigs just in case. What I’d like to do is to perform the solos and save them as midi sequences, and play those sequences live until I’m comfortable that I’ll pull them off with few/no mistakes. So - play the song live as normal until the solo, fire the midi solo, then pick up and play the rest live.
Our band doesn’t play with a click, so I would need to “tap” the tempo during the song to set the speed of the solo. Is that even possible? Or is there an easier way to do this?
Have you looked at the MIDISequence object and associated functions in GP Script in Gig Performer 3?
Here’s an example of something I created to manually step through a sequence in one song I play with a Steely Dan Tribute band. I don’t have time to clean it up right now but if someone wants to dissect it, it might be feasible for this purpose.
//$<AutoDeclare>
// DO NOT EDIT THIS SECTION MANUALLY
Var
Keyboard : MidiInBlock
Bass : MidiInBlock
LeadSynth : MidiInBlock
//$</AutoDeclare>
var
cs : MidiSequence
trackCount : integer
initialization
trackCount := MidiSequence_LoadMidiFile(cs, "your midi file here.mid")
Print(trackCount)
MidiSequence_Quantize(cs, 2)
MidiSequence_MapOutputChannel(cs, 2, 4)
end
// Use this as a finger clock -- pressing C0/D0 one after the other
// continuously behaves like a manual clock to sequence through the events
// Pressing B-1 resets the sequence to the beginning
On NoteEvent(m : NoteMessage) Matching [C0..D0], B-1 from Keyboard
var
notes : MidiMessage Array
aNote : MidiMessage
index : integer
trackIndex : integer
if IsNoteOn(m)
then
if MidiSequence_EndOfSong(cs) or m.GetNoteNumber() == B-1
then MidiSequence_ResetToStart(cs)
end
MidiSequence_CollectEventsNow(cs);
notes = MidiSequence_GetCurrentEvents(cs, 3) // Lead synth
for index = 0; index < Size(notes); index = index + 1 do
aNote = notes[index]
LeadSynth.SendNow(aNote)
end
end
End
On NoteEvent(m : NoteMessage) Matching A-1 from Keyboard
MidiSequence_ResetToStart(cs)
//Panic() // Stop any sounds that were being held
AllNotesOff(LeadSynth)
end
That’s cool. Could be helpful for one of my projects too. Not a solo but some phrases with different sounds that would normally need two or more keyboard players…