Fixes for non-looping file playback and precision handling on 32 bit targets

CQTexperiment
Chris Moeller 2013-10-16 10:03:40 -07:00
parent 711da5fe24
commit 015a09d419
1 changed files with 5 additions and 5 deletions

View File

@ -17,23 +17,23 @@ void MIDIPlayer::setSampleRate(unsigned long rate)
{ {
for (unsigned long i = 0; i < mStream.size(); i++) for (unsigned long i = 0; i < mStream.size(); i++)
{ {
mStream[i].m_timestamp = mStream[i].m_timestamp * rate / uSampleRate; mStream[i].m_timestamp = (unsigned long)((uint64_t)mStream[i].m_timestamp * rate / uSampleRate);
} }
} }
if (uTimeCurrent) if (uTimeCurrent)
{ {
uTimeCurrent = uTimeCurrent * rate / uSampleRate; uTimeCurrent = (unsigned long)((uint64_t)uTimeCurrent * rate / uSampleRate);
} }
if (uTimeEnd) if (uTimeEnd)
{ {
uTimeEnd = uTimeEnd * rate / uSampleRate; uTimeEnd = (unsigned long)((uint64_t)uTimeEnd * rate / uSampleRate);
} }
if (uTimeLoopStart) if (uTimeLoopStart)
{ {
uTimeLoopStart = uTimeLoopStart * rate / uSampleRate; uTimeLoopStart = (unsigned long)((uint64_t)uTimeLoopStart * rate / uSampleRate);
} }
uSampleRate = rate; uSampleRate = rate;
@ -54,7 +54,7 @@ bool MIDIPlayer::Load(const midi_container & midi_file, unsigned subsong, unsign
uLoopMode = loop_mode; uLoopMode = loop_mode;
uTimeEnd = midi_file.get_timestamp_end( subsong ) + 1000; uTimeEnd = midi_file.get_timestamp_end( subsong, true ) + 1000;
if (uLoopMode & loop_mode_enable) if (uLoopMode & loop_mode_enable)
{ {