diff options
author | JP Cimalando <jpcima@users.noreply.github.com> | 2018-07-10 19:53:27 +0200 |
---|---|---|
committer | JP Cimalando <jpcima@users.noreply.github.com> | 2018-07-10 19:53:27 +0200 |
commit | 9fbf6b6240def0a0b6d5320f8e9e6a9a15945fe4 (patch) | |
tree | 7eeca4e6a623b4a453cffef3ff78295335ca1313 /utils/midiplay | |
parent | 4ac22738e50e20cf00e5b2d0efead4ba3aadb04e (diff) | |
download | libADLMIDI-9fbf6b6240def0a0b6d5320f8e9e6a9a15945fe4.tar.gz libADLMIDI-9fbf6b6240def0a0b6d5320f8e9e6a9a15945fe4.tar.bz2 libADLMIDI-9fbf6b6240def0a0b6d5320f8e9e6a9a15945fe4.zip |
midiplay: add argument --only
Diffstat (limited to 'utils/midiplay')
-rw-r--r-- | utils/midiplay/adlmidiplay.cpp | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/utils/midiplay/adlmidiplay.cpp b/utils/midiplay/adlmidiplay.cpp index 8f499df..16a9dde 100644 --- a/utils/midiplay/adlmidiplay.cpp +++ b/utils/midiplay/adlmidiplay.cpp @@ -6,6 +6,7 @@ #include <cstring> #include <cstdarg> #include <deque> +#include <vector> #include <algorithm> #include <signal.h> @@ -243,6 +244,8 @@ int main(int argc, char **argv) " -nl Quit without looping\n" " -w Write WAV file rather than playing\n" " -mb Run the test of multibank over embedded. 62, 14, 68, and 74'th banks will be combined into one\n" + " --solo <track> Selects a solo track to play\n" + " --only <track1,...,trackN> Selects a subset of tracks to play\n" #ifndef HARDWARE_OPL3 " --emu-nuked Uses Nuked OPL3 v 1.8 emulator\n" " --emu-nuked7 Uses Nuked OPL3 v 1.7.4 emulator\n" @@ -343,6 +346,7 @@ int main(int argc, char **argv) #endif size_t soloTrack = ~(size_t)0; + std::vector<size_t> onlyTracks; #if !defined(HARDWARE_OPL3) && !defined(OUTPUT_WAVE_ONLY) g_audioFormat.type = ADLMIDI_SampleType_S16; @@ -417,6 +421,31 @@ int main(int argc, char **argv) soloTrack = std::strtoul(argv[3], NULL, 0); had_option = true; } + else if(!std::strcmp("--only", argv[2])) + { + if(argc <= 3) + { + printError("The option --only requires an argument!\n"); + return 1; + } + + const char *strp = argv[3]; + unsigned long value; + unsigned size; + bool err = std::sscanf(strp, "%lu%n", &value, &size) != 1; + while(!err && *(strp += size)) + { + onlyTracks.push_back(value); + err = std::sscanf(strp, ",%lu%n", &value, &size) != 1; + } + if(err) + { + printError("Invalid argument to --only!\n"); + return 1; + } + onlyTracks.push_back(value); + had_option = true; + } else break; @@ -608,6 +637,21 @@ int main(int argc, char **argv) adl_setTrackOptions(myDevice, soloTrack, ADLMIDI_TrackOption_Solo); } + if(!onlyTracks.empty()) + { + size_t count = adl_trackCount(myDevice); + for(size_t track = 0; track < count; ++track) + adl_setTrackOptions(myDevice, track, ADLMIDI_TrackOption_Off); + std::fprintf(stdout, " - Only tracks:"); + for(size_t i = 0, n = onlyTracks.size(); i < n; ++i) + { + size_t track = onlyTracks[i]; + adl_setTrackOptions(myDevice, track, ADLMIDI_TrackOption_On); + std::fprintf(stdout, " %lu", (unsigned long)track); + } + std::fprintf(stdout, "\n"); + } + std::fprintf(stdout, " - File [%s] opened!\n", musPath.c_str()); flushout(stdout); |