diff options
author | Vitaly Novichkov <Wohlstand@users.noreply.github.com> | 2018-07-10 21:13:05 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-07-10 21:13:05 +0300 |
commit | 988a55880c0634020b01c8c7942b2aa29b732196 (patch) | |
tree | e67bfd2f7a2c8d746c6e6051da8dc7bcc67d920e /utils/midiplay/adlmidiplay.cpp | |
parent | b1b27f8af15196a1f14aefdc961e3aa664c8b7b0 (diff) | |
parent | 9fbf6b6240def0a0b6d5320f8e9e6a9a15945fe4 (diff) | |
download | libADLMIDI-988a55880c0634020b01c8c7942b2aa29b732196.tar.gz libADLMIDI-988a55880c0634020b01c8c7942b2aa29b732196.tar.bz2 libADLMIDI-988a55880c0634020b01c8c7942b2aa29b732196.zip |
Merge pull request #135 from jpcima/midiplay-only
midiplay: add argument --only
Diffstat (limited to 'utils/midiplay/adlmidiplay.cpp')
-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); |