From 7181959675c1658cff313a161f3a96f88a118baa Mon Sep 17 00:00:00 2001 From: JP Cimalando Date: Thu, 28 Jun 2018 01:10:37 +0200 Subject: basic channel description API --- src/adlmidi.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'src/adlmidi.cpp') diff --git a/src/adlmidi.cpp b/src/adlmidi.cpp index 32872ef..3a1923a 100644 --- a/src/adlmidi.cpp +++ b/src/adlmidi.cpp @@ -757,6 +757,18 @@ ADLMIDI_EXPORT void adl_setTempo(struct ADL_MIDIPlayer *device, double tempo) } +ADLMIDI_EXPORT int adl_describeChannels(struct ADL_MIDIPlayer *device, char *str, char *attr, size_t size) +{ + if(!device) + return -1; + MIDIplay *play = reinterpret_cast(device->adl_midiPlayer); + if(!play) + return -1; + play->describeChannels(str, attr, size); + return 0; +} + + ADLMIDI_EXPORT const char *adl_metaMusicTitle(struct ADL_MIDIPlayer *device) { #ifndef ADLMIDI_DISABLE_MIDI_SEQUENCER -- cgit v1.2.3 From eecf8221aeac7097b971d585140850d45271e7a0 Mon Sep 17 00:00:00 2001 From: JP Cimalando Date: Tue, 3 Jul 2018 18:50:49 +0200 Subject: embedded bank loading API into multi-bank --- src/adlmidi.cpp | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) (limited to 'src/adlmidi.cpp') diff --git a/src/adlmidi.cpp b/src/adlmidi.cpp index 32872ef..6252df3 100644 --- a/src/adlmidi.cpp +++ b/src/adlmidi.cpp @@ -123,8 +123,8 @@ ADLMIDI_EXPORT int adl_setBank(ADL_MIDIPlayer *device, int bank) ADL_UNUSED(bank); MidiPlayer *play = GET_MIDI_PLAYER(device); play->setErrorString("This build of libADLMIDI has no embedded banks. " - "Please load bank by using of adl_openBankFile() or " - "adl_openBankData() functions instead of adl_setBank()"); + "Please load banks by using adl_openBankFile() or " + "adl_openBankData() functions instead of adl_setBank()."); return -1; #else const uint32_t NumBanks = static_cast(maxAdlBanks()); @@ -304,6 +304,37 @@ ADLMIDI_EXPORT int adl_setInstrument(ADL_MIDIPlayer *device, ADL_Bank *bank, uns return 0; } +ADLMIDI_EXPORT int adl_loadEmbeddedBank(struct ADL_MIDIPlayer *device, ADL_Bank *bank, int num) +{ + if(!device) + return -1; + MidiPlayer *play = GET_MIDI_PLAYER(device); + if (!play) + return -1; + +#ifdef DISABLE_EMBEDDED_BANKS + ADL_UNUSED(bank); + ADL_UNUSED(num); + play->setErrorString("This build of libADLMIDI has no embedded banks. " + "Please load banks by using adl_openBankFile() or " + "adl_openBankData() functions instead of adl_loadEmbeddedBank()."); + return -1; +#else + if(num < 0 || num >= maxAdlBanks()) + return -1; + + OPL3::BankMap::iterator it = OPL3::BankMap::iterator::from_ptrs(bank->pointer); + size_t id = it->first; + + for (unsigned i = 0; i < 128; ++i) { + size_t insno = i + ((id & OPL3::PercussionTag) ? 128 : 0); + size_t adlmeta = ::banks[num][insno]; + it->second.ins[i] = adlinsdata2(::adlins[adlmeta]); + } + return 0; +#endif +} + ADLMIDI_EXPORT int adl_setNumFourOpsChn(ADL_MIDIPlayer *device, int ops4) { if(!device) -- cgit v1.2.3 From 9c8d04d885946342d0ffd233418e7862b6ca990c Mon Sep 17 00:00:00 2001 From: Vitaly Novichkov Date: Wed, 4 Jul 2018 02:06:28 +0300 Subject: Continue public API documenting. Almost complete. --- src/adlmidi.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'src/adlmidi.cpp') diff --git a/src/adlmidi.cpp b/src/adlmidi.cpp index 8d1595a..365050f 100644 --- a/src/adlmidi.cpp +++ b/src/adlmidi.cpp @@ -72,6 +72,18 @@ ADLMIDI_EXPORT struct ADL_MIDIPlayer *adl_init(long sample_rate) return midi_device; } +ADLMIDI_EXPORT void adl_close(struct ADL_MIDIPlayer *device) +{ + if(!device) + return; + MIDIplay * play = reinterpret_cast(device->adl_midiPlayer); + if(play) + delete play; + device->adl_midiPlayer = NULL; + free(device); + device = NULL; +} + ADLMIDI_EXPORT int adl_setDeviceIdentifier(ADL_MIDIPlayer *device, unsigned id) { if(!device || id > 0x0f) @@ -653,18 +665,6 @@ ADLMIDI_EXPORT const char *adl_getMusicTitle(struct ADL_MIDIPlayer *device) return adl_metaMusicTitle(device); } -ADLMIDI_EXPORT void adl_close(struct ADL_MIDIPlayer *device) -{ - if(!device) - return; - MIDIplay * play = reinterpret_cast(device->adl_midiPlayer); - if(play) - delete play; - device->adl_midiPlayer = NULL; - free(device); - device = NULL; -} - ADLMIDI_EXPORT void adl_reset(struct ADL_MIDIPlayer *device) { if(!device) -- cgit v1.2.3 From efe169c36a145696e64892d53d8c90556a9e7b91 Mon Sep 17 00:00:00 2001 From: Vitaly Novichkov Date: Wed, 4 Jul 2018 03:42:23 +0300 Subject: Continue documenting, and apply some minor fixes on other files --- src/adlmidi.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/adlmidi.cpp') diff --git a/src/adlmidi.cpp b/src/adlmidi.cpp index 365050f..4fed13b 100644 --- a/src/adlmidi.cpp +++ b/src/adlmidi.cpp @@ -1324,7 +1324,7 @@ ADLMIDI_EXPORT int adl_generateFormat(struct ADL_MIDIPlayer *device, int sampleC #endif } -ADLMIDI_EXPORT double adl_tickEvents(struct ADL_MIDIPlayer *device, double seconds, double granuality) +ADLMIDI_EXPORT double adl_tickEvents(struct ADL_MIDIPlayer *device, double seconds, double granulality) { #ifndef ADLMIDI_DISABLE_MIDI_SEQUENCER if(!device) @@ -1332,11 +1332,11 @@ ADLMIDI_EXPORT double adl_tickEvents(struct ADL_MIDIPlayer *device, double secon MidiPlayer *play = GET_MIDI_PLAYER(device); if(!play) return -1.0; - return play->Tick(seconds, granuality); + return play->Tick(seconds, granulality); #else ADL_UNUSED(device); ADL_UNUSED(seconds); - ADL_UNUSED(granuality); + ADL_UNUSED(granulality); return -1.0; #endif } -- cgit v1.2.3 From 7cb0fe9dad9f7ef24d1142d866450305102bf3a9 Mon Sep 17 00:00:00 2001 From: JP Cimalando Date: Sat, 7 Jul 2018 02:03:01 +0200 Subject: sequencer API to turn tracks on/off/solo --- src/adlmidi.cpp | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) (limited to 'src/adlmidi.cpp') diff --git a/src/adlmidi.cpp b/src/adlmidi.cpp index 4fed13b..93d1bf1 100644 --- a/src/adlmidi.cpp +++ b/src/adlmidi.cpp @@ -1356,6 +1356,63 @@ ADLMIDI_EXPORT int adl_atEnd(struct ADL_MIDIPlayer *device) #endif } +ADLMIDI_EXPORT size_t adl_trackCount(struct ADL_MIDIPlayer *device) +{ +#ifndef ADLMIDI_DISABLE_MIDI_SEQUENCER + if(!device) + return 0; + MidiPlayer *play = GET_MIDI_PLAYER(device); + if(!play) + return 0; + return play->m_sequencer.getTrackCount(); +#else + ADL_UNUSED(device); + return 0; +#endif +} + +ADLMIDI_EXPORT int adl_setTrackOptions(struct ADL_MIDIPlayer *device, size_t trackNumber, unsigned trackOptions) +{ +#ifndef ADLMIDI_DISABLE_MIDI_SEQUENCER + if(!device) + return -1; + MidiPlayer *play = GET_MIDI_PLAYER(device); + if(!play) + return -1; + MidiSequencer &seq = play->m_sequencer; + + unsigned enableFlag = trackOptions & 3; + trackOptions &= ~3u; + + // handle on/off/solo + switch(enableFlag) + { + default: + break; + case ADL_TrackOption_On: + case ADL_TrackOption_Off: + if(!seq.setTrackEnabled(trackNumber, enableFlag == ADL_TrackOption_On)) + return -1; + break; + case ADL_TrackOption_Solo: + seq.setSoloTrack(trackNumber); + break; + } + + // handle others... + if(trackOptions != 0) + return -1; + + return 0; + +#else + ADL_UNUSED(device); + ADL_UNUSED(trackNumber); + ADL_UNUSED(trackOptions); + return -1; +#endif +} + ADLMIDI_EXPORT void adl_panic(struct ADL_MIDIPlayer *device) { if(!device) -- cgit v1.2.3 From b82e6572f86105d237b031624e28666f13c3ceb9 Mon Sep 17 00:00:00 2001 From: JP Cimalando Date: Sat, 7 Jul 2018 19:32:55 +0200 Subject: rename enum members for consistency --- src/adlmidi.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/adlmidi.cpp') diff --git a/src/adlmidi.cpp b/src/adlmidi.cpp index 93d1bf1..37e0c21 100644 --- a/src/adlmidi.cpp +++ b/src/adlmidi.cpp @@ -1389,12 +1389,12 @@ ADLMIDI_EXPORT int adl_setTrackOptions(struct ADL_MIDIPlayer *device, size_t tra { default: break; - case ADL_TrackOption_On: - case ADL_TrackOption_Off: - if(!seq.setTrackEnabled(trackNumber, enableFlag == ADL_TrackOption_On)) + case ADLMIDI_TrackOption_On: + case ADLMIDI_TrackOption_Off: + if(!seq.setTrackEnabled(trackNumber, enableFlag == ADLMIDI_TrackOption_On)) return -1; break; - case ADL_TrackOption_Solo: + case ADLMIDI_TrackOption_Solo: seq.setSoloTrack(trackNumber); break; } -- cgit v1.2.3 From 9fdaf5361c57438bf7f5bafaf6bb9a79b6bb7493 Mon Sep 17 00:00:00 2001 From: JP Cimalando Date: Mon, 9 Jul 2018 20:20:55 +0200 Subject: xmi: handle AIL callback trigger --- src/adlmidi.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'src/adlmidi.cpp') diff --git a/src/adlmidi.cpp b/src/adlmidi.cpp index 37e0c21..d839399 100644 --- a/src/adlmidi.cpp +++ b/src/adlmidi.cpp @@ -1413,6 +1413,25 @@ ADLMIDI_EXPORT int adl_setTrackOptions(struct ADL_MIDIPlayer *device, size_t tra #endif } +ADLMIDI_EXPORT int adl_setTriggerHandler(struct ADL_MIDIPlayer *device, ADL_TriggerHandler handler, void *userData) +{ +#ifndef ADLMIDI_DISABLE_MIDI_SEQUENCER + if(!device) + return -1; + MidiPlayer *play = GET_MIDI_PLAYER(device); + if(!play) + return -1; + MidiSequencer &seq = play->m_sequencer; + seq.setTriggerHandler(handler, userData); + return 0; +#else + ADL_UNUSED(device); + ADL_UNUSED(handler); + ADL_UNUSED(userData); + return -1; +#endif +} + ADLMIDI_EXPORT void adl_panic(struct ADL_MIDIPlayer *device) { if(!device) -- cgit v1.2.3 From 15f562fa018cbb7bb20a099f822539b402619a19 Mon Sep 17 00:00:00 2001 From: JP Cimalando Date: Thu, 26 Jul 2018 12:50:47 +0200 Subject: changing synth setup without the full MIDI reset --- src/adlmidi.cpp | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) (limited to 'src/adlmidi.cpp') diff --git a/src/adlmidi.cpp b/src/adlmidi.cpp index d839399..0e0b024 100644 --- a/src/adlmidi.cpp +++ b/src/adlmidi.cpp @@ -114,7 +114,7 @@ ADLMIDI_EXPORT int adl_setNumChips(ADL_MIDIPlayer *device, int numChips) } play->m_synth.m_numChips = play->m_setup.numChips; - adl_reset(device); + play->partialReset(); return adlRefreshNumCards(device); } @@ -606,7 +606,7 @@ ADLMIDI_EXPORT int adl_switchEmulator(struct ADL_MIDIPlayer *device, int emulato if((emulator >= 0) && (emulator < ADLMIDI_EMU_end)) { play->m_setup.emulator = emulator; - adl_reset(device); + play->partialReset(); return 0; } play->setErrorString("OPL3 MIDI: Unknown emulation core!"); @@ -623,7 +623,7 @@ ADLMIDI_EXPORT int adl_setRunAtPcmRate(ADL_MIDIPlayer *device, int enabled) if(play) { play->m_setup.runAtPcmRate = (enabled != 0); - adl_reset(device); + play->partialReset(); return 0; } } @@ -670,11 +670,7 @@ ADLMIDI_EXPORT void adl_reset(struct ADL_MIDIPlayer *device) if(!device) return; MidiPlayer *play = GET_MIDI_PLAYER(device); - play->m_setup.tick_skip_samples_delay = 0; - play->m_synth.m_runAtPcmRate = play->m_setup.runAtPcmRate; - play->m_synth.reset(play->m_setup.emulator, play->m_setup.PCM_RATE, play); - play->m_chipChannels.clear(); - play->m_chipChannels.resize((size_t)play->m_synth.m_numChannels); + play->partialReset(); play->resetMIDI(); } -- cgit v1.2.3 From 0f69d504792776967b61f8987ad458c48b4a322f Mon Sep 17 00:00:00 2001 From: Christopher Snowhill Date: Sun, 29 Jul 2018 20:52:26 -0700 Subject: Implemented optional soft panning support for the included chip emulators, disabled by default. --- src/adlmidi.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src/adlmidi.cpp') diff --git a/src/adlmidi.cpp b/src/adlmidi.cpp index 0e0b024..751afcf 100644 --- a/src/adlmidi.cpp +++ b/src/adlmidi.cpp @@ -447,6 +447,16 @@ ADLMIDI_EXPORT void adl_setLoopEnabled(ADL_MIDIPlayer *device, int loopEn) #endif } +ADLMIDI_EXPORT void adl_setSoftPanEnabled(ADL_MIDIPlayer *device, int softPanEn) +{ + if (!device) + return; + MidiPlayer *play = GET_MIDI_PLAYER(device); + if (!play) + return; + play->m_synth.m_softPanning = softPanEn != 0; +} + /* !!!DEPRECATED!!! */ ADLMIDI_EXPORT void adl_setLogarithmicVolumes(struct ADL_MIDIPlayer *device, int logvol) { -- cgit v1.2.3 From 9bd0a7edac19860ead160bf8ea693927924f8f27 Mon Sep 17 00:00:00 2001 From: JP Cimalando Date: Mon, 30 Jul 2018 16:36:20 +0200 Subject: remove an exported function which is unused --- src/adlmidi.cpp | 5 ----- 1 file changed, 5 deletions(-) (limited to 'src/adlmidi.cpp') diff --git a/src/adlmidi.cpp b/src/adlmidi.cpp index d839399..5564404 100644 --- a/src/adlmidi.cpp +++ b/src/adlmidi.cpp @@ -660,11 +660,6 @@ ADLMIDI_EXPORT const char *adl_errorInfo(struct ADL_MIDIPlayer *device) return play->getErrorString().c_str(); } -ADLMIDI_EXPORT const char *adl_getMusicTitle(struct ADL_MIDIPlayer *device) -{ - return adl_metaMusicTitle(device); -} - ADLMIDI_EXPORT void adl_reset(struct ADL_MIDIPlayer *device) { if(!device) -- cgit v1.2.3 From 6d48a253fe63b5e18ee03dd8c1f090323182f219 Mon Sep 17 00:00:00 2001 From: Wohlstand Date: Mon, 30 Jul 2018 19:42:28 +0300 Subject: [Experimental] Partially apply fixes to kode54's pull request --- src/adlmidi.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/adlmidi.cpp') diff --git a/src/adlmidi.cpp b/src/adlmidi.cpp index 751afcf..09cf7ea 100644 --- a/src/adlmidi.cpp +++ b/src/adlmidi.cpp @@ -449,12 +449,12 @@ ADLMIDI_EXPORT void adl_setLoopEnabled(ADL_MIDIPlayer *device, int loopEn) ADLMIDI_EXPORT void adl_setSoftPanEnabled(ADL_MIDIPlayer *device, int softPanEn) { - if (!device) + if(!device) return; MidiPlayer *play = GET_MIDI_PLAYER(device); - if (!play) + if(!play) return; - play->m_synth.m_softPanning = softPanEn != 0; + play->m_synth.m_softPanning = (softPanEn != 0); } /* !!!DEPRECATED!!! */ -- cgit v1.2.3 From 4802570b77fde4aefa5a99c33cc012a2591e8361 Mon Sep 17 00:00:00 2001 From: JP Cimalando Date: Tue, 31 Jul 2018 03:04:20 +0200 Subject: fix the gcc warning "class-memaccess" --- src/adlmidi.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/adlmidi.cpp') diff --git a/src/adlmidi.cpp b/src/adlmidi.cpp index 4f6044b..ab0c0c4 100644 --- a/src/adlmidi.cpp +++ b/src/adlmidi.cpp @@ -341,7 +341,7 @@ ADLMIDI_EXPORT int adl_loadEmbeddedBank(struct ADL_MIDIPlayer *device, ADL_Bank for (unsigned i = 0; i < 128; ++i) { size_t insno = i + ((id & OPL3::PercussionTag) ? 128 : 0); size_t adlmeta = ::banks[num][insno]; - it->second.ins[i] = adlinsdata2(::adlins[adlmeta]); + it->second.ins[i] = adlinsdata2::from_adldata(::adlins[adlmeta]); } return 0; #endif -- cgit v1.2.3 From d8394a61e0bf71b41851b4fdf2094ac2614204e0 Mon Sep 17 00:00:00 2001 From: JP Cimalando Date: Thu, 2 Aug 2018 20:19:37 +0200 Subject: add safety check for emulator switching --- src/adlmidi.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/adlmidi.cpp') diff --git a/src/adlmidi.cpp b/src/adlmidi.cpp index ab0c0c4..c7c5cf3 100644 --- a/src/adlmidi.cpp +++ b/src/adlmidi.cpp @@ -613,7 +613,7 @@ ADLMIDI_EXPORT int adl_switchEmulator(struct ADL_MIDIPlayer *device, int emulato assert(play); if(!play) return -1; - if((emulator >= 0) && (emulator < ADLMIDI_EMU_end)) + if(adl_isEmulatorAvailable(emulator)) { play->m_setup.emulator = emulator; play->partialReset(); -- cgit v1.2.3