aboutsummaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorWohlstand <admin@wohlnet.ru>2017-10-24 23:01:01 +0300
committerWohlstand <admin@wohlnet.ru>2017-10-24 23:01:01 +0300
commit6783770a8533dd099b39c51a5c3f7f5f4000b4bc (patch)
tree5532ae111fe681d4d410f4f3caa71500dea3b1b4 /utils
parent306ecba785a64fa111c1198b9b986ac3e98db619 (diff)
downloadlibADLMIDI-6783770a8533dd099b39c51a5c3f7f5f4000b4bc.tar.gz
libADLMIDI-6783770a8533dd099b39c51a5c3f7f5f4000b4bc.tar.bz2
libADLMIDI-6783770a8533dd099b39c51a5c3f7f5f4000b4bc.zip
Added working seekability!
Testing and stabilizing is needed
Diffstat (limited to 'utils')
-rw-r--r--utils/midiplay/adlmidiplay.cpp35
1 files changed, 33 insertions, 2 deletions
diff --git a/utils/midiplay/adlmidiplay.cpp b/utils/midiplay/adlmidiplay.cpp
index 9fb9033..45e1cf9 100644
--- a/utils/midiplay/adlmidiplay.cpp
+++ b/utils/midiplay/adlmidiplay.cpp
@@ -3,6 +3,7 @@
#include <string>
#include <cstdio>
#include <cctype>
+#include <cmath>
#include <cstdlib>
#include <cstring>
#include <deque>
@@ -276,10 +277,18 @@ int main(int argc, char **argv)
signal(SIGHUP, sighandler);
#endif
+ double total = adl_totalTimeLength(myDevice);
+
if(!recordWave)
{
SDL_PauseAudio(0);
+ #ifdef DEBUG_SEEKING_TEST
+ int delayBeforeSeek = 20;
+ std::fprintf(stdout, "DEBUG: === Random position set test is active! ===\n");
+ std::fflush(stdout);
+ #endif
+
while(!stop)
{
short buff[4096];
@@ -287,6 +296,10 @@ int main(int argc, char **argv)
if(got <= 0)
break;
+ std::fprintf(stdout, " \r");
+ std::fprintf(stdout, "Time position: %10f / %10f\r", adl_positionTell(myDevice), total);
+ std::fflush(stdout);
+
AudioBuffer_lock.Lock();
size_t pos = AudioBuffer.size();
AudioBuffer.resize(pos + got);
@@ -299,8 +312,17 @@ int main(int argc, char **argv)
{
SDL_Delay(1);
}
- }
+ #ifdef DEBUG_SEEKING_TEST
+ if(delayBeforeSeek-- <= 0)
+ {
+ delayBeforeSeek = rand() % 20;
+ double seekTo = double((rand() % int(adl_totalTimeLength(myDevice)) - delayBeforeSeek - 1 ));
+ adl_positionSeek(myDevice, seekTo);
+ }
+ #endif
+ }
+ std::fprintf(stdout, " \n\n");
SDL_CloseAudio();
}
else
@@ -319,10 +341,19 @@ int main(int argc, char **argv)
if(got <= 0)
break;
wave_write(buff, (long)got);
+
+ double complete = std::floor(100.0 * adl_positionTell(myDevice) / total);
+ std::fprintf(stdout, " \r");
+ std::fprintf(stdout, "Recording WAV... [%d%% completed]\r", (int)complete);
+ std::fflush(stdout);
}
wave_close();
+ std::fprintf(stdout, " \n\n");
- std::fprintf(stdout, "Completed!\n");
+ if(stop)
+ std::fprintf(stdout, "Interrupted! Recorded WAV is incomplete, but playable!\n");
+ else
+ std::fprintf(stdout, "Completed!\n");
std::fflush(stdout);
}
else