diff options
author | Wohlstand <admin@wohlnet.ru> | 2017-10-24 23:01:01 +0300 |
---|---|---|
committer | Wohlstand <admin@wohlnet.ru> | 2017-10-24 23:01:01 +0300 |
commit | 6783770a8533dd099b39c51a5c3f7f5f4000b4bc (patch) | |
tree | 5532ae111fe681d4d410f4f3caa71500dea3b1b4 /utils | |
parent | 306ecba785a64fa111c1198b9b986ac3e98db619 (diff) | |
download | libADLMIDI-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.cpp | 35 |
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 |