aboutsummaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
Diffstat (limited to 'utils')
-rw-r--r--utils/adlmidi-2/midiplay.cc3
-rw-r--r--utils/adlmidi-2/puzzlegame.cc8
-rw-r--r--utils/gen_adldata/file_formats/load_ail.h1
-rw-r--r--utils/gen_adldata/file_formats/load_bisqwit.h1
-rw-r--r--utils/gen_adldata/file_formats/load_bnk.h1
-rw-r--r--utils/gen_adldata/file_formats/load_bnk2.h1
-rw-r--r--utils/gen_adldata/file_formats/load_ibk.h1
-rw-r--r--utils/gen_adldata/file_formats/load_jv.h1
-rw-r--r--utils/gen_adldata/file_formats/load_op2.h1
-rw-r--r--utils/gen_adldata/file_formats/load_tmb.h1
-rw-r--r--utils/gen_adldata/file_formats/load_wopl.h1
-rw-r--r--utils/gen_adldata/gen_adldata.cc3
-rw-r--r--utils/gen_adldata/progs_cache.cpp2
-rw-r--r--utils/gen_adldata/progs_cache.h5
-rw-r--r--utils/midiplay/adlmidiplay.cpp238
-rw-r--r--utils/vlc_codec/libadlmidi.c9
-rw-r--r--utils/xmi2mid/xmi2mid.cpp74
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;
+}