diff options
-rw-r--r-- | include/adlmidi.h | 8 | ||||
-rw-r--r-- | src/adlmidi.cpp | 34 | ||||
-rw-r--r-- | src/chips/dosbox_opl3.cpp | 4 | ||||
-rw-r--r-- | src/chips/dosbox_opl3.h | 4 | ||||
-rw-r--r-- | src/chips/nuked_opl3.cpp | 14 | ||||
-rw-r--r-- | src/chips/nuked_opl3.h | 4 | ||||
-rw-r--r-- | src/chips/nuked_opl3_v174.cpp | 14 | ||||
-rw-r--r-- | src/chips/nuked_opl3_v174.h | 4 | ||||
-rw-r--r-- | src/chips/opl_chip_base.h | 4 |
9 files changed, 50 insertions, 40 deletions
diff --git a/include/adlmidi.h b/include/adlmidi.h index 8ba8939..3e5d444 100644 --- a/include/adlmidi.h +++ b/include/adlmidi.h @@ -251,16 +251,16 @@ extern struct Adl_MarkerEntry adl_metaMarker(struct ADL_MIDIPlayer *device, size /*Take a sample buffer and iterate MIDI timers */ -extern int adl_play(struct ADL_MIDIPlayer *device, int sampleCount, short out[]); +extern int adl_play(struct ADL_MIDIPlayer *device, int sampleCount, short *out); /*Take a sample buffer and iterate MIDI timers */ -extern int adl_playFormat(struct ADL_MIDIPlayer *device, int sampleCount, ADL_UInt8 left[], ADL_UInt8 right[], const struct ADLMIDI_AudioFormat *format); +extern int adl_playFormat(struct ADL_MIDIPlayer *device, int sampleCount, ADL_UInt8 *left, ADL_UInt8 *right, const struct ADLMIDI_AudioFormat *format); /*Generate audio output from chip emulators without iteration of MIDI timers.*/ -extern int adl_generate(struct ADL_MIDIPlayer *device, int sampleCount, short out[]); +extern int adl_generate(struct ADL_MIDIPlayer *device, int sampleCount, short *out); /*Generate audio output from chip emulators without iteration of MIDI timers.*/ -extern int adl_generateFormat(struct ADL_MIDIPlayer *device, int sampleCount, ADL_UInt8 left[], ADL_UInt8 right[], const struct ADLMIDI_AudioFormat *format); +extern int adl_generateFormat(struct ADL_MIDIPlayer *device, int sampleCount, ADL_UInt8 *left, ADL_UInt8 *right, const struct ADLMIDI_AudioFormat *format); /** * @brief Periodic tick handler. diff --git a/src/adlmidi.cpp b/src/adlmidi.cpp index 39bb5b6..ade4f33 100644 --- a/src/adlmidi.cpp +++ b/src/adlmidi.cpp @@ -40,8 +40,8 @@ static ADL_Version adl_version = { static const ADLMIDI_AudioFormat adl_DefaultAudioFormat = { ADLMIDI_SampleType_S16, - sizeof(short), - 2 * sizeof(short), + sizeof(int16_t), + 2 * sizeof(int16_t), }; /*---------------------------EXPORTS---------------------------*/ @@ -620,8 +620,8 @@ static void CopySamplesRaw(ADL_UInt8 *dstLeft, ADL_UInt8 *dstRight, const int32_ size_t frameCount, unsigned sampleOffset) { for(size_t i = 0; i < frameCount; ++i) { - *(Dst *)(dstLeft + i * sampleOffset) = src[2 * i]; - *(Dst *)(dstRight + i * sampleOffset) = src[2 * i + 1]; + *(Dst *)(dstLeft + (i * sampleOffset)) = src[2 * i]; + *(Dst *)(dstRight + (i * sampleOffset)) = src[(2 * i) + 1]; } } @@ -631,8 +631,8 @@ static void CopySamplesTransformed(ADL_UInt8 *dstLeft, ADL_UInt8 *dstRight, cons Ret(&transform)(int32_t)) { for(size_t i = 0; i < frameCount; ++i) { - *(Dst *)(dstLeft + i * sampleOffset) = transform(src[2 * i]); - *(Dst *)(dstRight + i * sampleOffset) = transform(src[2 * i + 1]); + *(Dst *)(dstLeft + (i * sampleOffset)) = transform(src[2 * i]); + *(Dst *)(dstRight + (i * sampleOffset)) = transform(src[(2 * i) + 1]); } } @@ -655,6 +655,9 @@ static int SendStereoAudio(int samples_requested, const unsigned containerSize = format->containerSize; const unsigned sampleOffset = format->sampleOffset; + left += outputOffset * containerSize; + right += outputOffset * containerSize; + switch(sampleType) { case ADLMIDI_SampleType_S8: switch(containerSize) { @@ -707,14 +710,15 @@ ADLMIDI_EXPORT int adl_play(struct ADL_MIDIPlayer *device, int sampleCount, shor } ADLMIDI_EXPORT int adl_playFormat(ADL_MIDIPlayer *device, int sampleCount, - ADL_UInt8 out_left[], ADL_UInt8 out_right[], + ADL_UInt8 *out_left, ADL_UInt8 *out_right, const ADLMIDI_AudioFormat *format) { #ifndef ADLMIDI_DISABLE_MIDI_SEQUENCER #ifdef ADLMIDI_HW_OPL (void)device; (void)sampleCount; - (void)out; + (void)out_left; + (void)out_right; (void)format; return 0; #else @@ -774,14 +778,15 @@ ADLMIDI_EXPORT int adl_playFormat(ADL_MIDIPlayer *device, int sampleCount, unsigned int chips = player->opl.NumCards; if(chips == 1) { - player->opl.cardsOP2[0]->generate(out_buf, (size_t)in_generatedStereo); + player->opl.cardsOP2[0]->generate32(out_buf, (size_t)in_generatedStereo); } else if(n_periodCountStereo > 0) { /* Generate data from every chip and mix result */ for(size_t card = 0; card < chips; ++card) - player->opl.cardsOP2[card]->generateAndMix(out_buf, (size_t)in_generatedStereo); + player->opl.cardsOP2[card]->generateAndMix32(out_buf, (size_t)in_generatedStereo); } + /* Process it */ if(SendStereoAudio(sampleCount, in_generatedStereo, out_buf, gotten_len, out_left, out_right, format) == -1) return 0; @@ -815,13 +820,14 @@ ADLMIDI_EXPORT int adl_generate(struct ADL_MIDIPlayer *device, int sampleCount, } ADLMIDI_EXPORT int adl_generateFormat(struct ADL_MIDIPlayer *device, int sampleCount, - ADL_UInt8 out_left[], ADL_UInt8 out_right[], + ADL_UInt8 *out_left, ADL_UInt8 *out_right, const ADLMIDI_AudioFormat *format) { #ifdef ADLMIDI_HW_OPL (void)device; (void)sampleCount; - (void)out; + (void)out_left; + (void)out_right; (void)format; return 0; #else @@ -863,12 +869,12 @@ ADLMIDI_EXPORT int adl_generateFormat(struct ADL_MIDIPlayer *device, int sampleC std::memset(out_buf, 0, static_cast<size_t>(in_generatedPhys) * sizeof(out_buf[0])); unsigned int chips = player->opl.NumCards; if(chips == 1) - player->opl.cardsOP2[0]->generate(out_buf, (size_t)in_generatedStereo); + player->opl.cardsOP2[0]->generate32(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) - player->opl.cardsOP2[card]->generateAndMix(out_buf, (size_t)in_generatedStereo); + player->opl.cardsOP2[card]->generateAndMix32(out_buf, (size_t)in_generatedStereo); } /* Process it */ if(SendStereoAudio(sampleCount, in_generatedStereo, out_buf, gotten_len, out_left, out_right, format) == -1) diff --git a/src/chips/dosbox_opl3.cpp b/src/chips/dosbox_opl3.cpp index 57b1412..24c1c44 100644 --- a/src/chips/dosbox_opl3.cpp +++ b/src/chips/dosbox_opl3.cpp @@ -78,7 +78,7 @@ int DosBoxOPL3::generateAndMix(int16_t *output, size_t frames) return (int)frames; } -int DosBoxOPL3::generate(int32_t *output, size_t frames) +int DosBoxOPL3::generate32(int32_t *output, size_t frames) { DBOPL::Handler *chip_r = reinterpret_cast<DBOPL::Handler*>(m_chip); ssize_t left = (ssize_t)frames; @@ -92,7 +92,7 @@ int DosBoxOPL3::generate(int32_t *output, size_t frames) return (int)frames; } -int DosBoxOPL3::generateAndMix(int32_t *output, size_t frames) +int DosBoxOPL3::generateAndMix32(int32_t *output, size_t frames) { DBOPL::Handler *chip_r = reinterpret_cast<DBOPL::Handler*>(m_chip); ssize_t left = (ssize_t)frames; diff --git a/src/chips/dosbox_opl3.h b/src/chips/dosbox_opl3.h index 05682ae..422e2d1 100644 --- a/src/chips/dosbox_opl3.h +++ b/src/chips/dosbox_opl3.h @@ -17,8 +17,8 @@ public: virtual void writeReg(uint16_t addr, uint8_t data) override; virtual int generate(int16_t *output, size_t frames) override; virtual int generateAndMix(int16_t *output, size_t frames) override; - virtual int generate(int32_t *output, size_t frames) override; - virtual int generateAndMix(int32_t *output, size_t frames) override; + virtual int generate32(int32_t *output, size_t frames) override; + virtual int generateAndMix32(int32_t *output, size_t frames) override; virtual const char *emulatorName() override; }; diff --git a/src/chips/nuked_opl3.cpp b/src/chips/nuked_opl3.cpp index 16cc73b..70fc525 100644 --- a/src/chips/nuked_opl3.cpp +++ b/src/chips/nuked_opl3.cpp @@ -61,26 +61,28 @@ int NukedOPL3::generateAndMix(int16_t *output, size_t frames) return (int)frames; } -int NukedOPL3::generate(int32_t *output, size_t frames) +int NukedOPL3::generate32(int32_t *output, size_t frames) { opl3_chip *chip_r = reinterpret_cast<opl3_chip*>(m_chip); for(size_t i = 0; i < frames; ++i) { int16_t frame[2]; OPL3_GenerateResampled(chip_r, frame); - output[2 * i] = frame[0]; - output[2 * i + 1] = frame[1]; + output[0] = (int32_t)frame[0]; + output[1] = (int32_t)frame[1]; + output += 2; } return (int)frames; } -int NukedOPL3::generateAndMix(int32_t *output, size_t frames) +int NukedOPL3::generateAndMix32(int32_t *output, size_t frames) { opl3_chip *chip_r = reinterpret_cast<opl3_chip*>(m_chip); for(size_t i = 0; i < frames; ++i) { int16_t frame[2]; OPL3_GenerateResampled(chip_r, frame); - output[2 * i] += frame[0]; - output[2 * i + 1] += frame[1]; + output[0] += (int32_t)frame[0]; + output[1] += (int32_t)frame[1]; + output += 2; } return (int)frames; } diff --git a/src/chips/nuked_opl3.h b/src/chips/nuked_opl3.h index 144fb23..ceb1dfd 100644 --- a/src/chips/nuked_opl3.h +++ b/src/chips/nuked_opl3.h @@ -17,8 +17,8 @@ public: virtual void writeReg(uint16_t addr, uint8_t data) override; virtual int generate(int16_t *output, size_t frames) override; virtual int generateAndMix(int16_t *output, size_t frames) override; - virtual int generate(int32_t *output, size_t frames) override; - virtual int generateAndMix(int32_t *output, size_t frames) override; + virtual int generate32(int32_t *output, size_t frames) override; + virtual int generateAndMix32(int32_t *output, size_t frames) override; virtual const char *emulatorName() override; }; diff --git a/src/chips/nuked_opl3_v174.cpp b/src/chips/nuked_opl3_v174.cpp index 59f7953..0dcf925 100644 --- a/src/chips/nuked_opl3_v174.cpp +++ b/src/chips/nuked_opl3_v174.cpp @@ -61,26 +61,28 @@ int NukedOPL3v174::generateAndMix(int16_t *output, size_t frames) return (int)frames; } -int NukedOPL3v174::generate(int32_t *output, size_t frames) +int NukedOPL3v174::generate32(int32_t *output, size_t frames) { opl3_chip *chip_r = reinterpret_cast<opl3_chip*>(m_chip); for(size_t i = 0; i < frames; ++i) { int16_t frame[2]; OPL3v17_GenerateResampled(chip_r, frame); - output[2 * i] = frame[0]; - output[2 * i + 1] = frame[1]; + output[0] = (int32_t)frame[0]; + output[1] = (int32_t)frame[1]; + output += 2; } return (int)frames; } -int NukedOPL3v174::generateAndMix(int32_t *output, size_t frames) +int NukedOPL3v174::generateAndMix32(int32_t *output, size_t frames) { opl3_chip *chip_r = reinterpret_cast<opl3_chip*>(m_chip); for(size_t i = 0; i < frames; ++i) { int16_t frame[2]; OPL3v17_GenerateResampled(chip_r, frame); - output[2 * i] += frame[0]; - output[2 * i + 1] += frame[1]; + output[0] += (int32_t)frame[0]; + output[1] += (int32_t)frame[1]; + output += 2; } return (int)frames; } diff --git a/src/chips/nuked_opl3_v174.h b/src/chips/nuked_opl3_v174.h index b9a0466..acbdcca 100644 --- a/src/chips/nuked_opl3_v174.h +++ b/src/chips/nuked_opl3_v174.h @@ -17,8 +17,8 @@ public: virtual void writeReg(uint16_t addr, uint8_t data) override; virtual int generate(int16_t *output, size_t frames) override; virtual int generateAndMix(int16_t *output, size_t frames) override; - virtual int generate(int32_t *output, size_t frames) override; - virtual int generateAndMix(int32_t *output, size_t frames) override; + virtual int generate32(int32_t *output, size_t frames) override; + virtual int generateAndMix32(int32_t *output, size_t frames) override; virtual const char *emulatorName() override; }; diff --git a/src/chips/opl_chip_base.h b/src/chips/opl_chip_base.h index 1aaddf8..70f9375 100644 --- a/src/chips/opl_chip_base.h +++ b/src/chips/opl_chip_base.h @@ -19,8 +19,8 @@ public: virtual void writeReg(uint16_t addr, uint8_t data) = 0; virtual int generate(int16_t *output, size_t frames) = 0; virtual int generateAndMix(int16_t *output, size_t frames) = 0; - virtual int generate(int32_t *output, size_t frames) = 0; - virtual int generateAndMix(int32_t *output, size_t frames) = 0; + virtual int generate32(int32_t *output, size_t frames) = 0; + virtual int generateAndMix32(int32_t *output, size_t frames) = 0; virtual const char* emulatorName() = 0; }; |