I found the cause of the problem, and am posting it here for the benefit of others. I was passing a difference of two REFERENCE_TIME variables to ReferenceToMusicTime(...). Apparently, ReferenceToMusicTime(...) does not like that. It seems to require absolute REFERENCE_TIME. I was passing the difference because I wanted to have the time relative to a pre-determined event (first MIDI message captured). The work-around was to convert each REFERENCE_TIME to MUSIC_TIME separately, and then take the difference of the MUSIC_TIME variables. That works!! -Abhijit Abhijit Patait <abhijit_patait@xxxxxxxxx> wrote: I am having problems calling the function IDirectMusicPerformance8::ReferenceToMusicTime(...) on a properly initialized performance interface. The music time returned is zero. Here is the code: // Assume that pPerf is the pointer to the IDirectMusicPerformance8 interface pPerf->ReferenceToMusicTime(rt, &startTime); I have verified that rt is valid when the above function is called. Somewhere before calling this function, I am setting the performance's master tempo via the following call // Assume that ratio contains proper ratio for the desired tempo pPerf->SetGlobalParam(GUID_PerfMasterTempo, (void *) &ratio, sizeof(float)))) What could be wrong here? Does the performance object need to be initialized in any other way (other than InitAudio) before calling ReferenceToMusicTime(...)? Thank you Abhijit --------------------------------- Do you Yahoo!? Yahoo! Mail is new and improved - Check it out! --------------------------------- Do you Yahoo!? Yahoo! Mail - 50x more storage than other providers!