aboutsummaryrefslogtreecommitdiff
path: root/src/adlmidi.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/adlmidi.cpp')
-rw-r--r--src/adlmidi.cpp71
1 files changed, 34 insertions, 37 deletions
diff --git a/src/adlmidi.cpp b/src/adlmidi.cpp
index db97447..d26911d 100644
--- a/src/adlmidi.cpp
+++ b/src/adlmidi.cpp
@@ -312,11 +312,34 @@ ADLMIDI_EXPORT int adl_openData(ADL_MIDIPlayer *device, const void *mem, unsigne
ADLMIDI_EXPORT const char *adl_emulatorName()
{
- #ifdef ADLMIDI_USE_DOSBOX_OPL
- return "DosBox";
- #else
- return "Nuked";
- #endif
+ return "<adl_emulatorName() is deprecated! Use adl_chipEmulatorName() instead!>";
+}
+
+ADLMIDI_EXPORT const char *adl_chipEmulatorName(struct ADL_MIDIPlayer *device)
+{
+ if(device)
+ {
+ MIDIplay *play = reinterpret_cast<MIDIplay *>(device->adl_midiPlayer);
+ if(play && !play->opl.cardsOP2.empty())
+ return play->opl.cardsOP2[0]->emulatorName();
+ }
+ return "Unknown";
+}
+
+ADLMIDI_EXPORT int adl_switchEmulator(struct ADL_MIDIPlayer *device, int emulator)
+{
+ if(device)
+ {
+ MIDIplay *play = reinterpret_cast<MIDIplay *>(device->adl_midiPlayer);
+ if(play && (emulator >= 0) && (emulator < ADLMIDI_EMU_end))
+ {
+ play->m_setup.emulator = emulator;
+ adl_reset(device);
+ return 0;
+ }
+ play->setErrorString("OPN2 MIDI: Unknown emulation core!");
+ }
+ return -1;
}
ADLMIDI_EXPORT const char *adl_linkedLibraryVersion()
@@ -373,7 +396,7 @@ ADLMIDI_EXPORT void adl_reset(struct ADL_MIDIPlayer *device)
return;
MIDIplay *play = reinterpret_cast<MIDIplay *>(device->adl_midiPlayer);
play->m_setup.tick_skip_samples_delay = 0;
- play->opl.Reset(play->m_setup.PCM_RATE);
+ play->opl.Reset(play->m_setup.emulator, play->m_setup.PCM_RATE);
play->ch.clear();
play->ch.resize(play->opl.NumChannels);
}
@@ -651,25 +674,13 @@ ADLMIDI_EXPORT int adl_play(ADL_MIDIPlayer *device, int sampleCount, short *out)
unsigned int chips = player->opl.NumCards;
if(chips == 1)
{
- #ifdef ADLMIDI_USE_DOSBOX_OPL
- player->opl.cards[0].GenerateArr(out_buf, &in_generatedStereo);
- in_generatedPhys = in_generatedStereo * 2;
- #else
- OPL3_GenerateStream(&player->opl.cards[0], out_buf, static_cast<Bit32u>(in_generatedStereo));
- #endif
+ player->opl.cardsOP2[0]->generate(out_buf, (size_t)in_generatedStereo);
}
else if(n_periodCountStereo > 0)
{
/* Generate data from every chip and mix result */
- for(unsigned card = 0; card < chips; ++card)
- {
- #ifdef ADLMIDI_USE_DOSBOX_OPL
- player->opl.cards[card].GenerateArrMix(out_buf, &in_generatedStereo);
- in_generatedPhys = in_generatedStereo * 2;
- #else
- OPL3_GenerateStreamMix(&player->opl.cards[card], out_buf, static_cast<Bit32u>(in_generatedStereo));
- #endif
- }
+ for(size_t card = 0; card < chips; ++card)
+ player->opl.cardsOP2[card]->generateAndMix(out_buf, (size_t)in_generatedStereo);
}
/* Process it */
SendStereoAudio(sampleCount, in_generatedStereo, out_buf, gotten_len, out);
@@ -743,26 +754,12 @@ ADLMIDI_EXPORT int adl_generate(struct ADL_MIDIPlayer *device, int sampleCount,
std::memset(out_buf, 0, static_cast<size_t>(in_generatedPhys) * sizeof(int16_t));
unsigned int chips = player->opl.NumCards;
if(chips == 1)
- {
- #ifdef ADLMIDI_USE_DOSBOX_OPL
- player->opl.cards[0].GenerateArr(out_buf, &in_generatedStereo);
- in_generatedPhys = in_generatedStereo * 2;
- #else
- OPL3_GenerateStream(&player->opl.cards[0], out_buf, static_cast<Bit32u>(in_generatedStereo));
- #endif
- }
+ player->opl.cardsOP2[0]->generate(out_buf, (size_t)in_generatedStereo);
else if(n_periodCountStereo > 0)
{
/* Generate data from every chip and mix result */
for(unsigned card = 0; card < chips; ++card)
- {
- #ifdef ADLMIDI_USE_DOSBOX_OPL
- player->opl.cards[card].GenerateArrMix(out_buf, &in_generatedStereo);
- in_generatedPhys = in_generatedStereo * 2;
- #else
- OPL3_GenerateStreamMix(&player->opl.cards[card], out_buf, static_cast<Bit32u>(in_generatedStereo));
- #endif
- }
+ player->opl.cardsOP2[card]->generate(out_buf, (size_t)in_generatedStereo);
}
/* Process it */
SendStereoAudio(sampleCount, in_generatedStereo, out_buf, gotten_len, out);