diff options
author | JP Cimalando <jpcima@users.noreply.github.com> | 2018-05-16 01:31:18 +0200 |
---|---|---|
committer | JP Cimalando <jpcima@users.noreply.github.com> | 2018-05-16 19:35:30 +0200 |
commit | 9b478615e7f0cd73c360fd289b05db52b5f730f1 (patch) | |
tree | 718629304c857bfe69d930c428bddd12ec02ee04 /src/adlmidi_midiplay.cpp | |
parent | 8cce88f8706ca6fb52592458aa12641c43469a6e (diff) | |
download | libADLMIDI-9b478615e7f0cd73c360fd289b05db52b5f730f1.tar.gz libADLMIDI-9b478615e7f0cd73c360fd289b05db52b5f730f1.tar.bz2 libADLMIDI-9b478615e7f0cd73c360fd289b05db52b5f730f1.zip |
storing adldata and adlinsdata in unified structures
Diffstat (limited to 'src/adlmidi_midiplay.cpp')
-rw-r--r-- | src/adlmidi_midiplay.cpp | 45 |
1 files changed, 22 insertions, 23 deletions
diff --git a/src/adlmidi_midiplay.cpp b/src/adlmidi_midiplay.cpp index 9ccd3f8..5f3ce57 100644 --- a/src/adlmidi_midiplay.cpp +++ b/src/adlmidi_midiplay.cpp @@ -1058,12 +1058,12 @@ bool MIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocity) //int meta = banks[opl.AdlBank][midiins]; size_t meta = opl.GetAdlMetaNumber(midiins); - const adlinsdata *ains = &opl.GetAdlMetaIns(meta); + adlinsdata2 ains = opl.GetAdlMetaIns(meta); int16_t tone = note; if(!isPercussion && !isXgPercussion && (bank > 0)) // For non-zero banks { - if(ains->flags & adlinsdata::Flag_NoSound) + if(ains.flags & adlinsdata::Flag_NoSound) { if(hooks.onDebugMessage) { @@ -1076,27 +1076,27 @@ bool MIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocity) bank = 0; midiins = Ch[channel].patch; meta = opl.GetAdlMetaNumber(midiins); - ains = &opl.GetAdlMetaIns(meta); + ains = opl.GetAdlMetaIns(meta); } } - if(ains->tone) + if(ains.tone) { /*if(ains.tone < 20) tone += ains.tone; else*/ - if(ains->tone < 128) - tone = ains->tone; + if(ains.tone < 128) + tone = ains.tone; else - tone -= ains->tone - 128; + tone -= ains.tone - 128; } //uint16_t i[2] = { ains.adlno1, ains.adlno2 }; - bool pseudo_4op = ains->flags & adlinsdata::Flag_Pseudo4op; + bool pseudo_4op = ains.flags & adlinsdata::Flag_Pseudo4op; MIDIchannel::NoteInfo::Phys voices[MIDIchannel::NoteInfo::MaxNumPhysChans] = { - {0, ains->adlno1, false}, - {0, ains->adlno2, pseudo_4op} + {0, ains.adl[0], false}, + {0, ains.adl[1], pseudo_4op} }; if((opl.AdlPercussionMode == 1) && PercussionMap[midiins & 0xFF]) @@ -1104,7 +1104,7 @@ bool MIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocity) if(hooks.onDebugMessage) { - if(!caugh_missing_instruments.count(static_cast<uint8_t>(midiins)) && (ains->flags & adlinsdata::Flag_NoSound)) + if(!caugh_missing_instruments.count(static_cast<uint8_t>(midiins)) && (ains.flags & adlinsdata::Flag_NoSound)) { hooks.onDebugMessage(hooks.onDebugMessage_userData, "[%i] Playing missing instrument %i", channel, midiins); caugh_missing_instruments.insert(static_cast<uint8_t>(midiins)); @@ -1132,7 +1132,7 @@ bool MIDIplay::realTime_NoteOn(uint8_t channel, uint8_t note, uint8_t velocity) if(ccount == 1 && static_cast<int32_t>(a) == adlchannel[0]) continue; // ^ Don't use the same channel for primary&secondary - if(voices[0].insId == voices[1].insId || pseudo_4op/*i[0] == i[1] || pseudo_4op*/) + if(voices[0].ains == voices[1].ains || pseudo_4op/*i[0] == i[1] || pseudo_4op*/) { // Only use regular channels uint8_t expected_mode = 0; @@ -1440,7 +1440,7 @@ void MIDIplay::NoteUpdate(uint16_t MidCh, const uint8_t vol = info.vol; const int midiins = info.midiins; const size_t insmeta = info.insmeta; - const adlinsdata &ains = opl.GetAdlMetaIns(insmeta); + const adlinsdata2 ains = opl.GetAdlMetaIns(insmeta); AdlChannel::Location my_loc; my_loc.MidCh = MidCh; my_loc.note = info.note; @@ -1454,7 +1454,7 @@ void MIDIplay::NoteUpdate(uint16_t MidCh, if(props_mask & Upd_Patch) { - opl.Patch(c, ins.insId); + opl.Patch(c, ins.ains); AdlChannel::LocationData *d = ch[c].users_find_or_create(my_loc); if(d) { // inserts if necessary d->sustained = false; @@ -1610,7 +1610,7 @@ void MIDIplay::NoteUpdate(uint16_t MidCh, // Don't bend a sustained note if(!d || !d->sustained) { - double bend = Ch[MidCh].bend + opl.GetAdlIns(ins.insId).finetune; + double bend = Ch[MidCh].bend + ins.ains.finetune; double phase = 0.0; if((ains.flags & adlinsdata::Flag_Pseudo4op) && ins.pseudo4op) @@ -2575,7 +2575,7 @@ ADLMIDI_EXPORT void AdlInstrumentTester::DoNote(int note) OPL3 *opl = P->opl; if(P->adl_ins_list.empty()) FindAdlList(); const unsigned meta = P->adl_ins_list[P->ins_idx]; - const adlinsdata &ains = opl->GetAdlMetaIns(meta); + const adlinsdata2 ains = opl->GetAdlMetaIns(meta); int tone = (P->cur_gm & 128) ? (P->cur_gm & 127) : (note + 50); if(ains.tone) @@ -2589,16 +2589,15 @@ ADLMIDI_EXPORT void AdlInstrumentTester::DoNote(int note) tone -= ains.tone - 128; } double hertz = 172.00093 * std::exp(0.057762265 * (tone + 0.0)); - int i[2] = { ains.adlno1, ains.adlno2 }; int32_t adlchannel[2] = { 0, 3 }; - if(i[0] == i[1]) + if(ains.adl[0] == ains.adl[1]) { adlchannel[1] = -1; adlchannel[0] = 6; // single-op if(play->hooks.onDebugMessage) { play->hooks.onDebugMessage(play->hooks.onDebugMessage_userData, - "noteon at %d(%d) for %g Hz\n", adlchannel[0], i[0], hertz); + "noteon at %d for %g Hz\n", adlchannel[0], hertz); } } else @@ -2606,7 +2605,7 @@ ADLMIDI_EXPORT void AdlInstrumentTester::DoNote(int note) if(play->hooks.onDebugMessage) { play->hooks.onDebugMessage(play->hooks.onDebugMessage_userData, - "noteon at %d(%d) and %d(%d) for %g Hz\n", adlchannel[0], i[0], adlchannel[1], i[1], hertz); + "noteon at %d and %d for %g Hz\n", adlchannel[0], adlchannel[1], hertz); } } @@ -2616,7 +2615,7 @@ ADLMIDI_EXPORT void AdlInstrumentTester::DoNote(int note) for(unsigned c = 0; c < 2; ++c) { if(adlchannel[c] < 0) continue; - opl->Patch((uint16_t)adlchannel[c], (uint16_t)i[c]); + opl->Patch((uint16_t)adlchannel[c], ains.adl[c]); opl->Touch_Real((uint16_t)adlchannel[c], 127 * 127 * 100); opl->Pan((uint16_t)adlchannel[c], 0x30); opl->NoteOn((uint16_t)adlchannel[c], hertz); @@ -2650,7 +2649,7 @@ ADLMIDI_EXPORT void AdlInstrumentTester::NextAdl(int offset) for(unsigned a = 0, n = P->adl_ins_list.size(); a < n; ++a) { const unsigned i = P->adl_ins_list[a]; - const adlinsdata &ains = opl->GetAdlMetaIns(i); + const adlinsdata2 ains = opl->GetAdlMetaIns(i); char ToneIndication[8] = " "; if(ains.tone) @@ -2665,7 +2664,7 @@ ADLMIDI_EXPORT void AdlInstrumentTester::NextAdl(int offset) } std::printf("%s%s%s%u\t", ToneIndication, - ains.adlno1 != ains.adlno2 ? "[2]" : " ", + ains.adl[0] != ains.adl[1] ? "[2]" : " ", (P->ins_idx == a) ? "->" : "\t", i ); |