diff options
author | Vitaly Novichkov <admin@wohlnet.ru> | 2018-08-06 01:56:50 +0300 |
---|---|---|
committer | Vitaly Novichkov <admin@wohlnet.ru> | 2018-08-06 01:56:50 +0300 |
commit | 1ab34e88a326c396fbb42c503eb4ffa56fa0a148 (patch) | |
tree | 4f2d6ada0ab0bd1d64947a71c5492a29be7c8dbf /utils | |
parent | 0a003c8bc12514a5586f2f0e40559fcbf6607883 (diff) | |
parent | 0e2807a9d4c8c900e85c9b33ba96c69a82c58a68 (diff) | |
download | libADLMIDI-1ab34e88a326c396fbb42c503eb4ffa56fa0a148.tar.gz libADLMIDI-1ab34e88a326c396fbb42c503eb4ffa56fa0a148.tar.bz2 libADLMIDI-1ab34e88a326c396fbb42c503eb4ffa56fa0a148.zip |
Merge branch 'master' into stable
Diffstat (limited to 'utils')
-rw-r--r-- | utils/adlmidi-2/midiplay.cc | 3 | ||||
-rw-r--r-- | utils/adlmidi-2/puzzlegame.cc | 8 | ||||
-rw-r--r-- | utils/gen_adldata/file_formats/load_ail.h | 1 | ||||
-rw-r--r-- | utils/gen_adldata/file_formats/load_bisqwit.h | 1 | ||||
-rw-r--r-- | utils/gen_adldata/file_formats/load_bnk.h | 1 | ||||
-rw-r--r-- | utils/gen_adldata/file_formats/load_bnk2.h | 1 | ||||
-rw-r--r-- | utils/gen_adldata/file_formats/load_ibk.h | 1 | ||||
-rw-r--r-- | utils/gen_adldata/file_formats/load_jv.h | 1 | ||||
-rw-r--r-- | utils/gen_adldata/file_formats/load_op2.h | 1 | ||||
-rw-r--r-- | utils/gen_adldata/file_formats/load_tmb.h | 1 | ||||
-rw-r--r-- | utils/gen_adldata/file_formats/load_wopl.h | 1 | ||||
-rw-r--r-- | utils/gen_adldata/gen_adldata.cc | 3 | ||||
-rw-r--r-- | utils/gen_adldata/progs_cache.cpp | 2 | ||||
-rw-r--r-- | utils/gen_adldata/progs_cache.h | 5 | ||||
-rw-r--r-- | utils/midiplay/adlmidiplay.cpp | 238 | ||||
-rw-r--r-- | utils/vlc_codec/libadlmidi.c | 9 | ||||
-rw-r--r-- | utils/xmi2mid/xmi2mid.cpp | 74 |
17 files changed, 284 insertions, 67 deletions
diff --git a/utils/adlmidi-2/midiplay.cc b/utils/adlmidi-2/midiplay.cc index 8fe1c8a..b5f43dc 100644 --- a/utils/adlmidi-2/midiplay.cc +++ b/utils/adlmidi-2/midiplay.cc @@ -1608,6 +1608,7 @@ int main(int argc, char **argv) " -w [<filename>] Write WAV file rather than playing\n" " -d [<filename>] Write video file using ffmpeg\n" #ifndef HARDWARE_OPL3 + " -fp Enables full-panning stereo support\n" " --emu-nuked Uses Nuked OPL3 v 1.8 emulator\n" " --emu-nuked7 Uses Nuked OPL3 v 1.7.4 emulator\n" " --emu-dosbox Uses DosBox 0.74 OPL3 emulator\n" @@ -1676,6 +1677,8 @@ int main(int argc, char **argv) else if(!std::strcmp("-frb", argv[2])) adl_setFullRangeBrightness(myDevice, 1); #ifndef HARDWARE_OPL3 + else if(!std::strcmp("-fp", argv[2])) + adl_setSoftPanEnabled(myDevice, 1); else if(!std::strcmp("--emu-nuked", argv[2])) emulator = ADLMIDI_EMU_NUKED; else if(!std::strcmp("--emu-nuked7", argv[2])) diff --git a/utils/adlmidi-2/puzzlegame.cc b/utils/adlmidi-2/puzzlegame.cc index f8fa57c..e7b9890 100644 --- a/utils/adlmidi-2/puzzlegame.cc +++ b/utils/adlmidi-2/puzzlegame.cc @@ -90,7 +90,7 @@ bool ADLMIDI_PuzzleGame::TetrisArea::CascadeEmpty(int FirstY) * FIXME: Improve weird code fragment disliked by CLang * /////////BEGIN//////////// */ - auto label = + auto label = & " SINGLE " " DOUBLE " " TRIPLE " @@ -100,7 +100,7 @@ bool ADLMIDI_PuzzleGame::TetrisArea::CascadeEmpty(int FirstY) " SEXTUPLE " " SEPTUPLE " " OCTUPLE " - + ((n_full - 1) * 10); + [(n_full - 1) * 10]; for(int y = FirstY; y < Height - 1; ++y) { if(list_full & (1u << y)) @@ -214,9 +214,9 @@ int ADLMIDI_PuzzleGame::TetrisAIengine::AI_Run(const decltype(Area)&in_area, con for(unsigned rot2 = 0; rot2 < 4; ++rot2) for(int x2 = -1; x2 <= 1; ++x2) { - positions1.push_back(std::move<position> ({int(rot), x, int(rot2), x2})); + positions1.push_back(position{int(rot), x, int(rot2), x2}); if(rot2 == rot && x2 == 0) - positions2.push_back(std::move<position> ({int(rot), x, int(rot2), x2})); + positions2.push_back(position{int(rot), x, int(rot2), x2}); } confident = false; diff --git a/utils/gen_adldata/file_formats/load_ail.h b/utils/gen_adldata/file_formats/load_ail.h index e63b1d7..7f4d7ea 100644 --- a/utils/gen_adldata/file_formats/load_ail.h +++ b/utils/gen_adldata/file_formats/load_ail.h @@ -91,6 +91,7 @@ static bool LoadMiles(const char *fn, unsigned bank, const char *prefix) tmp2.pseudo4op = false; tmp2.real4op = (inscount > 1); tmp2.voice2_fine_tune = 0.0; + tmp2.midi_velocity_offset = 0; std::string name; if(midi_index >= 0) name = std::string(1, '\377') + MidiInsName[midi_index]; size_t resno = InsertIns(tmp[0], tmp[1], tmp2, name, name2, twoOp); diff --git a/utils/gen_adldata/file_formats/load_bisqwit.h b/utils/gen_adldata/file_formats/load_bisqwit.h index f5f73dc..3283aa9 100644 --- a/utils/gen_adldata/file_formats/load_bisqwit.h +++ b/utils/gen_adldata/file_formats/load_bisqwit.h @@ -26,6 +26,7 @@ static bool LoadBisqwit(const char *fn, unsigned bank, const char *prefix) tmp2.notenum = (uint8_t)std::fgetc(fp); tmp2.pseudo4op = false; tmp2.voice2_fine_tune = 0.0; + tmp2.midi_velocity_offset = 0; insdata tmp[2]; for(int side = 0; side < 2; ++side) diff --git a/utils/gen_adldata/file_formats/load_bnk.h b/utils/gen_adldata/file_formats/load_bnk.h index aa7701f..dfa066e 100644 --- a/utils/gen_adldata/file_formats/load_bnk.h +++ b/utils/gen_adldata/file_formats/load_bnk.h @@ -110,6 +110,7 @@ static bool LoadBNK(const char *fn, unsigned bank, const char *prefix, bool is_f tmp2.pseudo4op = false; tmp2.real4op = false; tmp2.voice2_fine_tune = 0.0; + tmp2.midi_velocity_offset = 0; if(is_fat) tmp.data[10] ^= 1; diff --git a/utils/gen_adldata/file_formats/load_bnk2.h b/utils/gen_adldata/file_formats/load_bnk2.h index 4772da5..a55551a 100644 --- a/utils/gen_adldata/file_formats/load_bnk2.h +++ b/utils/gen_adldata/file_formats/load_bnk2.h @@ -88,6 +88,7 @@ static bool LoadBNK2(const char *fn, unsigned bank, const char *prefix, tmp2.pseudo4op = false; tmp2.real4op = false; tmp2.voice2_fine_tune = 0.0; + tmp2.midi_velocity_offset = 0; if(xxP24NNN & 8) { diff --git a/utils/gen_adldata/file_formats/load_ibk.h b/utils/gen_adldata/file_formats/load_ibk.h index 12fa520..934fb67 100644 --- a/utils/gen_adldata/file_formats/load_ibk.h +++ b/utils/gen_adldata/file_formats/load_ibk.h @@ -63,6 +63,7 @@ static bool LoadIBK(const char *fn, unsigned bank, const char *prefix, bool perc tmp2.pseudo4op = false; tmp2.real4op = false; tmp2.voice2_fine_tune = 0.0; + tmp2.midi_velocity_offset = 0; size_t resno = InsertIns(tmp, tmp2, std::string(1, '\377') + name, name2); SetBank(bank, (unsigned int)gmno, resno); diff --git a/utils/gen_adldata/file_formats/load_jv.h b/utils/gen_adldata/file_formats/load_jv.h index 35caead..ad840d8 100644 --- a/utils/gen_adldata/file_formats/load_jv.h +++ b/utils/gen_adldata/file_formats/load_jv.h @@ -73,6 +73,7 @@ static bool LoadJunglevision(const char *fn, unsigned bank, const char *prefix) tmp2.pseudo4op = false; tmp2.real4op = (data[offset] != 0); tmp2.voice2_fine_tune = 0.0; + tmp2.midi_velocity_offset = 0; while(tmp2.notenum && tmp2.notenum < 20) { diff --git a/utils/gen_adldata/file_formats/load_op2.h b/utils/gen_adldata/file_formats/load_op2.h index 48b7eae..7c68dd8 100644 --- a/utils/gen_adldata/file_formats/load_op2.h +++ b/utils/gen_adldata/file_formats/load_op2.h @@ -110,6 +110,7 @@ static bool LoadDoom(const char *fn, unsigned bank, const char *prefix) tmp2.pseudo4op = false; tmp2.real4op = false; tmp2.voice2_fine_tune = 0.0; + tmp2.midi_velocity_offset = 0; while(tmp2.notenum && tmp2.notenum < 20) { tmp2.notenum += 12; diff --git a/utils/gen_adldata/file_formats/load_tmb.h b/utils/gen_adldata/file_formats/load_tmb.h index 5b38433..1d999d1 100644 --- a/utils/gen_adldata/file_formats/load_tmb.h +++ b/utils/gen_adldata/file_formats/load_tmb.h @@ -52,6 +52,7 @@ static bool LoadTMB(const char *fn, unsigned bank, const char *prefix) tmp2.pseudo4op = false; tmp2.real4op = false; tmp2.voice2_fine_tune = 0.0; + tmp2.midi_velocity_offset = (int8_t)data[offset + 12]; std::string name; if(midi_index >= 0) name = std::string(1, '\377') + MidiInsName[midi_index]; diff --git a/utils/gen_adldata/file_formats/load_wopl.h b/utils/gen_adldata/file_formats/load_wopl.h index fe4865d..24b303e 100644 --- a/utils/gen_adldata/file_formats/load_wopl.h +++ b/utils/gen_adldata/file_formats/load_wopl.h @@ -171,6 +171,7 @@ static bool LoadWopl(const char *fn, unsigned bank, const char *prefix) tmp2.pseudo4op = (flags & (uint8_t)WOPL_Flags::Mode_DoubleVoice) != 0; tmp2.real4op = real4op && !tmp2.pseudo4op; tmp2.voice2_fine_tune = 0; + tmp2.midi_velocity_offset = (int8_t)data[offset + 36]; tmp[0].diff = false; tmp[1].diff = real4op && !tmp2.pseudo4op; diff --git a/utils/gen_adldata/gen_adldata.cc b/utils/gen_adldata/gen_adldata.cc index d03ad09..28c6efd 100644 --- a/utils/gen_adldata/gen_adldata.cc +++ b/utils/gen_adldata/gen_adldata.cc @@ -412,13 +412,14 @@ int main(int argc, char**argv) (info.nosound ? ins::Flag_NoSound : 0); std::fprintf(outFile, " {"); - std::fprintf(outFile, "%4d,%4d,%3d, %d, %6" PRId64 ",%6" PRId64 ",%g", + std::fprintf(outFile, "%4d,%4d,%3d, %d, %6" PRId64 ",%6" PRId64 ", %6d, %g", (unsigned) i->first.insno1, (unsigned) i->first.insno2, (int)(i->first.notenum), flags, info.ms_sound_kon, info.ms_sound_koff, + i->first.midi_velocity_offset, i->first.voice2_fine_tune); std::string names; for(std::set<std::string>::const_iterator diff --git a/utils/gen_adldata/progs_cache.cpp b/utils/gen_adldata/progs_cache.cpp index 81bba4c..12c2de1 100644 --- a/utils/gen_adldata/progs_cache.cpp +++ b/utils/gen_adldata/progs_cache.cpp @@ -112,7 +112,7 @@ size_t InsertNoSoundIns() { // { 0x0F70700,0x0F70710, 0xFF,0xFF, 0x0,+0 }, insdata tmp1 = MakeNoSoundIns(); - struct ins tmp2 = { 0, 0, 0, false, false, 0.0 }; + struct ins tmp2 = { 0, 0, 0, false, false, 0.0, 0 }; return InsertIns(tmp1, tmp1, tmp2, "nosound", ""); } diff --git a/utils/gen_adldata/progs_cache.h b/utils/gen_adldata/progs_cache.h index 5a916f5..1212097 100644 --- a/utils/gen_adldata/progs_cache.h +++ b/utils/gen_adldata/progs_cache.h @@ -55,6 +55,7 @@ struct ins bool pseudo4op; bool real4op; double voice2_fine_tune; + int8_t midi_velocity_offset; bool operator==(const ins &b) const { @@ -63,7 +64,8 @@ struct ins && insno2 == b.insno2 && pseudo4op == b.pseudo4op && real4op == b.real4op - && equal_approx(voice2_fine_tune, b.voice2_fine_tune); + && equal_approx(voice2_fine_tune, b.voice2_fine_tune) + && midi_velocity_offset == b.midi_velocity_offset; } bool operator< (const ins &b) const { @@ -73,6 +75,7 @@ struct ins if(pseudo4op != b.pseudo4op) return pseudo4op < b.pseudo4op; if(real4op != b.real4op) return real4op < b.real4op; if(!equal_approx(voice2_fine_tune, b.voice2_fine_tune)) return voice2_fine_tune < b.voice2_fine_tune; + if(midi_velocity_offset != b.midi_velocity_offset) return midi_velocity_offset < b.midi_velocity_offset; return 0; } bool operator!=(const ins &b) const diff --git a/utils/midiplay/adlmidiplay.cpp b/utils/midiplay/adlmidiplay.cpp index 78b1235..5880243 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> @@ -242,7 +243,11 @@ int main(int argc, char **argv) " -frb Enables full-ranged CC74 XG Brightness controller\n" " -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 + " -fp Enables full-panning stereo support\n" " --emu-nuked Uses Nuked OPL3 v 1.8 emulator\n" " --emu-nuked7 Uses Nuked OPL3 v 1.7.4 emulator\n" " --emu-dosbox Uses DosBox 0.74 OPL3 emulator\n" @@ -330,18 +335,25 @@ int main(int argc, char **argv) /* * Set library options by parsing of command line arguments */ - #ifndef OUTPUT_WAVE_ONLY + bool multibankFromEnbededTest = false; + +#ifndef OUTPUT_WAVE_ONLY bool recordWave = false; int loopEnabled = 1; - #endif - #ifndef HARDWARE_OPL3 +#endif + +#ifndef HARDWARE_OPL3 int emulator = ADLMIDI_EMU_NUKED; - #endif - #if !defined(HARDWARE_OPL3) && !defined(OUTPUT_WAVE_ONLY) +#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; g_audioFormat.containerSize = sizeof(Sint16); g_audioFormat.sampleOffset = sizeof(Sint16) * 2; - #endif +#endif while(argc > 2) { @@ -352,7 +364,7 @@ int main(int argc, char **argv) else if(!std::strcmp("-v", argv[2])) adl_setHVibrato(myDevice, 1);//Force turn on deep vibrato - #if !defined(OUTPUT_WAVE_ONLY) && !defined(HARDWARE_OPL3) +#if !defined(OUTPUT_WAVE_ONLY) && !defined(HARDWARE_OPL3) else if(!std::strcmp("-w", argv[2])) { //Current Wave output implementation allows only SINT16 output @@ -373,7 +385,7 @@ int main(int argc, char **argv) spec.format = AUDIO_S32; else if(!std::strcmp("-f32", argv[2]) && !recordWave) spec.format = AUDIO_F32; - #endif +#endif else if(!std::strcmp("-t", argv[2])) adl_setHTremolo(myDevice, 1);//Force turn on deep tremolo @@ -381,22 +393,62 @@ int main(int argc, char **argv) else if(!std::strcmp("-frb", argv[2])) adl_setFullRangeBrightness(myDevice, 1);//Turn on a full-ranged XG CC74 Brightness - #ifndef OUTPUT_WAVE_ONLY +#ifndef OUTPUT_WAVE_ONLY else if(!std::strcmp("-nl", argv[2])) loopEnabled = 0; //Enable loop - #endif +#endif - #ifndef HARDWARE_OPL3 +#ifndef HARDWARE_OPL3 else if(!std::strcmp("--emu-nuked", argv[2])) emulator = ADLMIDI_EMU_NUKED; else if(!std::strcmp("--emu-nuked7", argv[2])) emulator = ADLMIDI_EMU_NUKED_174; else if(!std::strcmp("--emu-dosbox", argv[2])) emulator = ADLMIDI_EMU_DOSBOX; - #endif - +#endif + else if(!std::strcmp("-fp", argv[2])) + adl_setSoftPanEnabled(myDevice, 1); + else if(!std::strcmp("-mb", argv[2])) + multibankFromEnbededTest = true; else if(!std::strcmp("-s", argv[2])) adl_setScaleModulators(myDevice, 1);//Turn on modulators scaling by volume + + else if(!std::strcmp("--solo", argv[2])) + { + if(argc <= 3) + { + printError("The option --solo requires an argument!\n"); + return 1; + } + 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; std::copy(argv + (had_option ? 4 : 3), @@ -405,29 +457,29 @@ int main(int argc, char **argv) argc -= (had_option ? 2 : 1); } - #ifndef OUTPUT_WAVE_ONLY +#ifndef OUTPUT_WAVE_ONLY //Turn loop on/off (for WAV recording loop must be disabled!) adl_setLoopEnabled(myDevice, recordWave ? 0 : loopEnabled); - #endif +#endif - #ifdef DEBUG_TRACE_ALL_EVENTS +#ifdef DEBUG_TRACE_ALL_EVENTS //Hook all MIDI events are ticking while generating an output buffer if(!recordWave) adl_setRawEventHook(myDevice, debugPrintEvent, NULL); - #endif +#endif - #ifndef HARDWARE_OPL3 +#ifndef HARDWARE_OPL3 adl_switchEmulator(myDevice, emulator); - #endif +#endif std::fprintf(stdout, " - Library version %s\n", adl_linkedLibraryVersion()); - #ifdef HARDWARE_OPL3 +#ifdef HARDWARE_OPL3 std::fprintf(stdout, " - Hardware OPL3 chip in use\n"); - #else +#else std::fprintf(stdout, " - %s Emulator in use\n", adl_chipEmulatorName(myDevice)); - #endif +#endif - #if !defined(HARDWARE_OPL3) && !defined(OUTPUT_WAVE_ONLY) +#if !defined(HARDWARE_OPL3) && !defined(OUTPUT_WAVE_ONLY) if(!recordWave) { // Set up SDL @@ -477,7 +529,7 @@ int main(int argc, char **argv) break; } } - #endif +#endif if(argc >= 3) { @@ -510,7 +562,40 @@ int main(int argc, char **argv) } } - #ifndef HARDWARE_OPL3 + if(multibankFromEnbededTest) + { + ADL_BankId id[] = + { + {0, 0, 0}, /*62*/ // isPercussion, MIDI bank MSB, LSB + {0, 8, 0}, /*14*/ // Use as MSB-8 + {1, 0, 0}, /*68*/ + {1, 0, 25} /*74*/ + }; + int banks[] = + { + 62, 14, 68, 74 + }; + + for(size_t i = 0; i < 4; i++) + { + ADL_Bank bank; + if(adl_getBank(myDevice, &id[i], ADLMIDI_Bank_Create, &bank) < 0) + { + printError(adl_errorInfo(myDevice)); + return 1; + } + + if(adl_loadEmbeddedBank(myDevice, &bank, banks[i]) < 0) + { + printError(adl_errorInfo(myDevice)); + return 1; + } + } + + std::fprintf(stdout, " - Ran a test of multibank over embedded\n"); + } + +#ifndef HARDWARE_OPL3 int numOfChips = 4; if(argc >= 4) numOfChips = std::atoi(argv[3]); @@ -522,10 +607,10 @@ int main(int argc, char **argv) return 1; } std::fprintf(stdout, " - Number of chips %d\n", adl_getNumChips(myDevice)); - #else +#else int numOfChips = 1; adl_setNumChips(myDevice, numOfChips); - #endif +#endif if(argc >= 5) { @@ -546,16 +631,40 @@ int main(int argc, char **argv) return 2; } + std::fprintf(stdout, " - Track count: %lu\n", (unsigned long)adl_trackCount(myDevice)); + + if(soloTrack != ~(size_t)0) + { + std::fprintf(stdout, " - Solo track: %lu\n", (unsigned long)soloTrack); + 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); - #ifndef HARDWARE_OPL3 +#ifndef HARDWARE_OPL3 signal(SIGINT, sighandler); signal(SIGTERM, sighandler); - #if !defined(_WIN32) && !defined(__WATCOMC__) +# if !defined(_WIN32) && !defined(__WATCOMC__) signal(SIGHUP, sighandler); - #endif - #else//HARDWARE_OPL3 +# endif + +#else//HARDWARE_OPL3 static const unsigned NewTimerFreq = 209; unsigned TimerPeriod = 0x1234DDul / NewTimerFreq; @@ -581,11 +690,11 @@ int main(int argc, char **argv) unsigned long BIOStimer_begin = BIOStimer; double tick_delay = 0.0; - #endif//HARDWARE_OPL3 +#endif//HARDWARE_OPL3 double total = adl_totalTimeLength(myDevice); - #ifndef OUTPUT_WAVE_ONLY +#ifndef OUTPUT_WAVE_ONLY double loopStart = adl_loopStartTime(myDevice); double loopEnd = adl_loopEndTime(myDevice); char totalHMS[25]; @@ -598,9 +707,9 @@ int main(int argc, char **argv) secondsToHMSM(loopEnd, loopEndHMS, 25); } - #ifndef HARDWARE_OPL3 +# ifndef HARDWARE_OPL3 if(!recordWave) - #endif +# endif { std::fprintf(stdout, " - Loop is turned %s\n", loopEnabled ? "ON" : "OFF"); if(loopStart >= 0.0 && loopEnd >= 0.0) @@ -608,33 +717,42 @@ int main(int argc, char **argv) std::fprintf(stdout, "\n==========================================\n"); flushout(stdout); - #ifndef HARDWARE_OPL3 +# ifndef HARDWARE_OPL3 SDL_PauseAudio(0); - #endif +# endif - #ifdef DEBUG_SEEKING_TEST +# ifdef DEBUG_SEEKING_TEST int delayBeforeSeek = 50; std::fprintf(stdout, "DEBUG: === Random position set test is active! ===\n"); flushout(stdout); - #endif +# endif - #ifndef HARDWARE_OPL3 +# ifndef HARDWARE_OPL3 Uint8 buff[16384]; - #endif +# endif char posHMS[25]; uint64_t milliseconds_prev = -1; while(!stop) { - #ifndef HARDWARE_OPL3 +# ifndef HARDWARE_OPL3 size_t got = (size_t)adl_playFormat(myDevice, 4096, buff, buff + g_audioFormat.containerSize, &g_audioFormat) * g_audioFormat.containerSize; if(got <= 0) break; - #endif - - #ifndef DEBUG_TRACE_ALL_EVENTS +# endif + +# ifdef DEBUG_TRACE_ALL_CHANNELS + enum { TerminalColumns = 80 }; + char channelText[TerminalColumns + 1]; + char channelAttr[TerminalColumns + 1]; + adl_describeChannels(myDevice, channelText, channelAttr, sizeof(channelText)); + std::fprintf(stdout, "%*s\r", TerminalColumns, ""); // erase the line + std::fprintf(stdout, "%s\n", channelText); +# endif + +# ifndef DEBUG_TRACE_ALL_EVENTS double time_pos = adl_positionTell(myDevice); std::fprintf(stdout, " \r"); uint64_t milliseconds = static_cast<uint64_t>(time_pos * 1000.0); @@ -646,9 +764,9 @@ int main(int argc, char **argv) flushout(stdout); milliseconds_prev = milliseconds; } - #endif +# endif - #ifndef HARDWARE_OPL3 +# ifndef HARDWARE_OPL3 g_audioBuffer_lock.Lock(); size_t pos = g_audioBuffer.size(); g_audioBuffer.resize(pos + got); @@ -662,16 +780,16 @@ int main(int argc, char **argv) SDL_Delay(1); } - #ifdef DEBUG_SEEKING_TEST +# ifdef DEBUG_SEEKING_TEST if(delayBeforeSeek-- <= 0) { delayBeforeSeek = rand() % 50; double seekTo = double((rand() % int(adl_totalTimeLength(myDevice)) - delayBeforeSeek - 1 )); adl_positionSeek(myDevice, seekTo); } - #endif +# endif - #else//HARDWARE_OPL3 +# else//HARDWARE_OPL3 const double mindelay = 1.0 / NewTimerFreq; //__asm__ volatile("sti\nhlt"); @@ -698,20 +816,20 @@ int main(int argc, char **argv) stop = true; } - #endif//HARDWARE_OPL3 +# endif//HARDWARE_OPL3 } std::fprintf(stdout, " \n\n"); - #ifndef HARDWARE_OPL3 +# ifndef HARDWARE_OPL3 SDL_CloseAudio(); - #endif +# endif } - #endif //OUTPUT_WAVE_ONLY +#endif //OUTPUT_WAVE_ONLY - #ifndef HARDWARE_OPL3 +#ifndef HARDWARE_OPL3 - #ifndef OUTPUT_WAVE_ONLY +# ifndef OUTPUT_WAVE_ONLY else - #endif //OUTPUT_WAVE_ONLY +# endif //OUTPUT_WAVE_ONLY { std::string wave_out = musPath + ".wav"; std::fprintf(stdout, " - Recording WAV file %s...\n", wave_out.c_str()); @@ -755,9 +873,9 @@ int main(int argc, char **argv) return 1; } } - #endif //HARDWARE_OPL3 +#endif //HARDWARE_OPL3 - #ifdef HARDWARE_OPL3 +#ifdef HARDWARE_OPL3 #ifdef __DJGPP__ // Fix the skewed clock and reset BIOS tick rate @@ -780,7 +898,7 @@ int main(int argc, char **argv) adl_panic(myDevice); //Shut up all sustaining notes - #endif +#endif adl_close(myDevice); diff --git a/utils/vlc_codec/libadlmidi.c b/utils/vlc_codec/libadlmidi.c index f6d785f..187ee84 100644 --- a/utils/vlc_codec/libadlmidi.c +++ b/utils/vlc_codec/libadlmidi.c @@ -65,6 +65,10 @@ #define EMBEDDED_BANK_ID_LONGTEXT N_( \ "Use one of embedded banks.") +#define FULL_PANNING_TEXT N_("Full panning") +#define FULL_PANNING_LONGTEXT N_( \ + "Enable full-panning stereo support") + #define VOLUME_MODEL_TEXT N_("Volume scaling model") #define VOLUME_MODEL_LONGTEXT N_( \ "Declares volume scaling model which will affect volume levels.") @@ -146,6 +150,9 @@ vlc_module_begin () add_bool( CONFIG_PREFIX "full-range-brightness", false, FULL_RANGE_CC74_TEXT, FULL_RANGE_CC74_LONGTEXT, false ) + add_bool( CONFIG_PREFIX "full-panning", false, FULL_PANNING_TEXT, + FULL_PANNING_LONGTEXT, false ) + vlc_module_end () @@ -191,6 +198,8 @@ static int Open (vlc_object_t *p_this) adl_setVolumeRangeModel(p_sys->synth, var_InheritInteger(p_this, CONFIG_PREFIX "volume-model")); + adl_setSoftPanEnabled(p_sys->synth, var_InheritBool(p_this, CONFIG_PREFIX "full-panning")); + adl_setFullRangeBrightness(p_sys->synth, var_InheritBool(p_this, CONFIG_PREFIX "full-range-brightness")); char *bank_path = var_InheritString (p_this, CONFIG_PREFIX "custombank"); diff --git a/utils/xmi2mid/xmi2mid.cpp b/utils/xmi2mid/xmi2mid.cpp new file mode 100644 index 0000000..65d5858 --- /dev/null +++ b/utils/xmi2mid/xmi2mid.cpp @@ -0,0 +1,74 @@ + +#include "cvt_xmi2mid.hpp" +#include <stdio.h> +#include <sys/stat.h> +#if !defined(_WIN32) +#include <unistd.h> +#else +#include <io.h> +#define fileno(fd) _fileno(fd) +#define isatty(fd) _isatty(fd) +#endif + +int main(int argc, char *argv[]) +{ + if(argc != 2) + { + fprintf(stderr, "Usage: xmi2mid <midi-file>\n"); + return 1; + } + + const char *filename = argv[1]; + + FILE *fh = fopen(filename, "rb"); + if(!fh) + { + fprintf(stderr, "Error opening file.\n"); + return 1; + } + + struct stat st; + if(fstat(fileno(fh), &st) != 0) + { + fprintf(stderr, "Error reading file status.\n"); + return 1; + } + + size_t insize = (size_t)st.st_size; + if(insize > 8 * 1024 * 1024) + { + fprintf(stderr, "File too large.\n"); + return 1; + } + + uint8_t *filedata = new uint8_t[insize]; + if(fread(filedata, 1, insize, fh) != insize) + { + fprintf(stderr, "Error reading file data.\n"); + return 1; + } + + uint8_t *xmidata = NULL; + uint32_t xmisize = 0; + if(Convert_xmi2midi(filedata, insize, &xmidata, &xmisize, XMIDI_CONVERT_NOCONVERSION) < 0) + { + fprintf(stderr, "Error converting XMI to SMF.\n"); + return 1; + } + + FILE *out = stdout; + if(isatty(fileno(out))) + { + fprintf(stderr, "Not writing SMF data on the text terminal.\n"); + } + else + { + if (fwrite(xmidata, 1, xmisize, out) != xmisize || fflush(out) != 0) + { + fprintf(stderr, "Error writing SMF data.\n"); + return 1; + } + } + + return 0; +} |