Playing MIDI


Hi, I'm trying to play a MIDI track that I have recorded using JUCE MIDI input. I have found this old thread (, but there's no final solution.


I have a separate thread which implements the run method like this:


void MidiPlayer::run(){
    if (!workingTrack || !deviceManager) return;
    int index;
    double time = workingTrack->getStartTime(), nextTime;

    for (index = 0; index < workingTrack->getNumEvents(); index++){
        if (threadShouldExit()) break;
        sleep((nextTime = workingTrack->getEventTime(index)) - time);
        time = nextTime;


But the problem is similar as in the posted thread. It seems to play everything in a moment.
 I think that I don't quite understand the timestamp in this case. What is the "double" suppose to mean? The thing is that there should be some tempo settings and those other MIDI settings but I just cannot put it together.


I record the track like this (it is taken out from the MIDI demo and modified a bit):


void handleNoteOn(MidiKeyboardState*, int midiChannel, int midiNoteNumber, float velocity) override
        MidiMessage m(MidiMessage::noteOn(midiChannel, midiNoteNumber, velocity));
        m.setTimeStamp(Time::getMillisecondCounterHiRes() * 0.001);    
        //play sound
        MidiOutput* out = deviceManager->getDefaultMidiOutput();
        if (out) out->sendMessageNow(m);


Thanks a lot...


//Edit: I think I am beginning to understand... There's no dimension to the timestamp, it is just what I make it to be, right? And it is up to me to interpret it correctly. So in the case above the problem is that I record it in seconds but try to play it in millis. But I stilll do not understand wheteher there is any support for this tempo/clicks per quater note built in or whether I need to implement this as well...