From 9fbaa58e87a63749ff1694bdb9f4d1241db98689 Mon Sep 17 00:00:00 2001 From: Wohlstand Date: Mon, 17 Oct 2022 18:39:08 +0300 Subject: Improved the multi-song XMI support - Allow selecting every individual song of the XMI file - Allow dynamic song switch without re-opening of a file - Fixed XMI2MID converter with adding an ability to export every individual song - Added hooks for loop start and end events - Added an option to immediately stop the song processing on loop end reaching (needed to perform dynamic song switch at the loop end point) --- utils/xmi2mid/xmi2mid.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'utils/xmi2mid/xmi2mid.cpp') diff --git a/utils/xmi2mid/xmi2mid.cpp b/utils/xmi2mid/xmi2mid.cpp index 65d5858..9442a5e 100644 --- a/utils/xmi2mid/xmi2mid.cpp +++ b/utils/xmi2mid/xmi2mid.cpp @@ -12,14 +12,21 @@ int main(int argc, char *argv[]) { - if(argc != 2) + int songNumber = 0; + + (void)Convert_xmi2midi_multi; /* Shut up the warning */ + + if(argc != 2 && argc != 3) { - fprintf(stderr, "Usage: xmi2mid \n"); + fprintf(stderr, "Usage: xmi2mid [song-number 0...N-1]\n"); return 1; } const char *filename = argv[1]; + if(argc > 2) + songNumber = atoi(argv[2]); + FILE *fh = fopen(filename, "rb"); if(!fh) { @@ -50,7 +57,8 @@ int main(int argc, char *argv[]) uint8_t *xmidata = NULL; uint32_t xmisize = 0; - if(Convert_xmi2midi(filedata, insize, &xmidata, &xmisize, XMIDI_CONVERT_NOCONVERSION) < 0) + + if(Convert_xmi2midi(filedata, insize, &xmidata, &xmisize, XMIDI_CONVERT_NOCONVERSION, songNumber) < 0) { fprintf(stderr, "Error converting XMI to SMF.\n"); return 1; -- cgit v1.2.3