aboutsummaryrefslogtreecommitdiff
path: root/src/adlmidi_midiplay.cpp
diff options
context:
space:
mode:
authorJP Cimalando <jpcima@users.noreply.github.com>2018-05-16 01:31:18 +0200
committerJP Cimalando <jpcima@users.noreply.github.com>2018-05-16 19:35:30 +0200
commit9b478615e7f0cd73c360fd289b05db52b5f730f1 (patch)
tree718629304c857bfe69d930c428bddd12ec02ee04 /src/adlmidi_midiplay.cpp
parent8cce88f8706ca6fb52592458aa12641c43469a6e (diff)
downloadlibADLMIDI-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.cpp45
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
);