MIDI Live Performance Question - Tempo Change?

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?

Thanks so much for any knowledge you can share.

In the Options menu, under Global MIDI Settings, you can set a controller for Tap Tempo.

691

1 Like

What software do you use to play the midi sequences?

I’ve never used a Midi sequence live before, so I would have to buy something for this purpose.

Without a Click the band has to play with,
I am sure it is more difficult to tap the tempo and start the sequence than to learn the Solo.

Better you render your solo as audio, use the audio player and give the band a click track.

Have you looked at the MIDISequence object and associated functions in GP Script in Gig Performer 3? :slight_smile:

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
5 Likes

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…

I’ll take a look at this next week.