diff options
Diffstat (limited to 'src/chips')
-rw-r--r-- | src/chips/dosbox_opl3.cpp | 28 | ||||
-rw-r--r-- | src/chips/dosbox_opl3.h | 2 | ||||
-rw-r--r-- | src/chips/nuked_opl3.cpp | 24 | ||||
-rw-r--r-- | src/chips/nuked_opl3.h | 2 | ||||
-rw-r--r-- | src/chips/nuked_opl3_v174.cpp | 24 | ||||
-rw-r--r-- | src/chips/nuked_opl3_v174.h | 2 | ||||
-rw-r--r-- | src/chips/opl_chip_base.h | 2 |
7 files changed, 84 insertions, 0 deletions
diff --git a/src/chips/dosbox_opl3.cpp b/src/chips/dosbox_opl3.cpp index b696343..57b1412 100644 --- a/src/chips/dosbox_opl3.cpp +++ b/src/chips/dosbox_opl3.cpp @@ -78,6 +78,34 @@ int DosBoxOPL3::generateAndMix(int16_t *output, size_t frames) return (int)frames; } +int DosBoxOPL3::generate(int32_t *output, size_t frames) +{ + DBOPL::Handler *chip_r = reinterpret_cast<DBOPL::Handler*>(m_chip); + ssize_t left = (ssize_t)frames; + while(left > 0) + { + ssize_t frames_i = left; + chip_r->GenerateArr(output, &frames_i); + output += (frames_i * 2); + left -= frames_i; + } + return (int)frames; +} + +int DosBoxOPL3::generateAndMix(int32_t *output, size_t frames) +{ + DBOPL::Handler *chip_r = reinterpret_cast<DBOPL::Handler*>(m_chip); + ssize_t left = (ssize_t)frames; + while(left > 0) + { + ssize_t frames_i = left; + chip_r->GenerateArrMix(output, &frames_i); + output += (frames_i * 2); + left -= frames_i; + } + return (int)frames; +} + const char *DosBoxOPL3::emulatorName() { return "DosBox 0.74 OPL3"; diff --git a/src/chips/dosbox_opl3.h b/src/chips/dosbox_opl3.h index 46c20fa..05682ae 100644 --- a/src/chips/dosbox_opl3.h +++ b/src/chips/dosbox_opl3.h @@ -17,6 +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 const char *emulatorName() override; }; diff --git a/src/chips/nuked_opl3.cpp b/src/chips/nuked_opl3.cpp index 0898907..16cc73b 100644 --- a/src/chips/nuked_opl3.cpp +++ b/src/chips/nuked_opl3.cpp @@ -61,6 +61,30 @@ int NukedOPL3::generateAndMix(int16_t *output, size_t frames) return (int)frames; } +int NukedOPL3::generate(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]; + } + return (int)frames; +} + +int NukedOPL3::generateAndMix(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]; + } + return (int)frames; +} + const char *NukedOPL3::emulatorName() { return "Nuked OPL3 (v 1.8)"; diff --git a/src/chips/nuked_opl3.h b/src/chips/nuked_opl3.h index db665fe..144fb23 100644 --- a/src/chips/nuked_opl3.h +++ b/src/chips/nuked_opl3.h @@ -17,6 +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 const char *emulatorName() override; }; diff --git a/src/chips/nuked_opl3_v174.cpp b/src/chips/nuked_opl3_v174.cpp index 7188e83..59f7953 100644 --- a/src/chips/nuked_opl3_v174.cpp +++ b/src/chips/nuked_opl3_v174.cpp @@ -61,6 +61,30 @@ int NukedOPL3v174::generateAndMix(int16_t *output, size_t frames) return (int)frames; } +int NukedOPL3v174::generate(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]; + } + return (int)frames; +} + +int NukedOPL3v174::generateAndMix(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]; + } + return (int)frames; +} + const char *NukedOPL3v174::emulatorName() { return "Nuked OPL3 (v 1.7.4)"; diff --git a/src/chips/nuked_opl3_v174.h b/src/chips/nuked_opl3_v174.h index cf23187..b9a0466 100644 --- a/src/chips/nuked_opl3_v174.h +++ b/src/chips/nuked_opl3_v174.h @@ -17,6 +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 const char *emulatorName() override; }; diff --git a/src/chips/opl_chip_base.h b/src/chips/opl_chip_base.h index aa6934b..1aaddf8 100644 --- a/src/chips/opl_chip_base.h +++ b/src/chips/opl_chip_base.h @@ -19,6 +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 const char* emulatorName() = 0; }; |