diff options
author | Wohlstand <Wohlstand@users.noreply.github.com> | 2024-05-27 01:16:38 +0300 |
---|---|---|
committer | Wohlstand <Wohlstand@users.noreply.github.com> | 2024-05-27 01:16:38 +0300 |
commit | b174fa2b13027318b164d9112e7754fc6301bdec (patch) | |
tree | ce2ac985fc51546773103814c8152281b704db17 /utils/midiplay/adlmidiplay.cpp | |
parent | 4bec2559594a50a5891ebbbedd8d67b1998ffada (diff) | |
download | libADLMIDI-b174fa2b13027318b164d9112e7754fc6301bdec.tar.gz libADLMIDI-b174fa2b13027318b164d9112e7754fc6301bdec.tar.bz2 libADLMIDI-b174fa2b13027318b164d9112e7754fc6301bdec.zip |
MidiPlay: Alternative test of MIDI timer
On macOS the problem was found because tempo works much slower than it should go
Diffstat (limited to 'utils/midiplay/adlmidiplay.cpp')
-rw-r--r-- | utils/midiplay/adlmidiplay.cpp | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/utils/midiplay/adlmidiplay.cpp b/utils/midiplay/adlmidiplay.cpp index 021bf54..40cfa41 100644 --- a/utils/midiplay/adlmidiplay.cpp +++ b/utils/midiplay/adlmidiplay.cpp @@ -549,6 +549,7 @@ static struct TimeCounter char totalHMS[25]; char loopStartHMS[25]; char loopEndHMS[25]; + char realHMS[25]; bool hasLoop; uint64_t milliseconds_prev; @@ -557,6 +558,8 @@ static struct TimeCounter int complete_prev; double totalTime; + double realTimeStart; + #ifdef HARDWARE_OPL3 unsigned newTimerFreq; unsigned timerPeriod; @@ -747,6 +750,8 @@ static struct TimeCounter { totalTime = total; secondsToHMSM(total, totalHMS, 25); + realTimeStart = s_getTime(); + secondsToHMSM(s_getTime() - realTimeStart, realHMS, 25); } void setLoop(double loopStart, double loopEnd) @@ -777,8 +782,9 @@ static struct TimeCounter { printsCounter = -1; secondsToHMSM(pos, posHMS, 25); + secondsToHMSM(s_getTime() - realTimeStart, realHMS, 25); std::fprintf(stdout, " \r"); - std::fprintf(stdout, "Time position: %s / %s\r", posHMS, totalHMS); + std::fprintf(stdout, "Time position: %s / %s [Real time: %s]\r", posHMS, totalHMS, realHMS); flushout(stdout); milliseconds_prev = milliseconds; } @@ -817,13 +823,35 @@ static void runHWSerialLoop(ADL_MIDIPlayer *myDevice) double timeBegL, timeEndL; const double minDelay = 0.005; double eat_delay; - bool tickSkip = true; + // bool tickSkip = true; s_timeCounter.clearLineR(); while(!stop) { timeBegL = s_getTime(); + tick_delay = adl_tickEvents(myDevice, tick_delay < minDelay ? tick_delay : minDelay, minDelay / 10.0); + // adl_tickIterators(myDevice, minDelay); +# ifndef DEBUG_TRACE_ALL_EVENTS + s_timeCounter.printTime(adl_positionTell(myDevice)); +# endif + timeEndL = s_getTime(); + + eat_delay = timeEndL - timeBegL; + + if(tick_delay < minDelay) + tick_wait = tick_delay - eat_delay; + else + tick_wait = minDelay - eat_delay; + + if(adl_atEnd(myDevice) && tick_delay <= 0) + stop = true; + + if(tick_wait > 0.0) + s_sleepU(tick_wait); + +#if 0 + timeBegL = s_getTime(); tick_delay = adl_tickEventsOnly(myDevice, tick_delay, 0.000000001); adl_tickIterators(myDevice, tick_delay < minDelay ? tick_delay : minDelay); @@ -872,6 +900,7 @@ static void runHWSerialLoop(ADL_MIDIPlayer *myDevice) tick_wait -= minDelay; } } +#endif } s_timeCounter.clearLine(); |