aboutsummaryrefslogtreecommitdiff
path: root/src/chips/opl_chip_base.h
diff options
context:
space:
mode:
authorJP Cimalando <jpcima@users.noreply.github.com>2018-06-19 16:12:27 +0200
committerJP Cimalando <jpcima@users.noreply.github.com>2018-06-19 16:25:36 +0200
commit3013fbb93b06e8d30b6b54c324340d6dccad7f3b (patch)
tree8ffbd8d896849ffd418bccf5d429f74e7f63c6d2 /src/chips/opl_chip_base.h
parent70c83caace9911dc5d8b80c1653c96b073f88e4a (diff)
downloadlibADLMIDI-3013fbb93b06e8d30b6b54c324340d6dccad7f3b.tar.gz
libADLMIDI-3013fbb93b06e8d30b6b54c324340d6dccad7f3b.tar.bz2
libADLMIDI-3013fbb93b06e8d30b6b54c324340d6dccad7f3b.zip
get chip base on level with OPNMIDI
Diffstat (limited to 'src/chips/opl_chip_base.h')
-rw-r--r--src/chips/opl_chip_base.h30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/chips/opl_chip_base.h b/src/chips/opl_chip_base.h
index 5721a81..879d6da 100644
--- a/src/chips/opl_chip_base.h
+++ b/src/chips/opl_chip_base.h
@@ -13,15 +13,33 @@
class VResampler;
#endif
+#if defined(ADLMIDI_AUDIO_TICK_HANDLER)
+extern void adl_audioTickHandler(void *instance, uint32_t chipId, uint32_t rate);
+#endif
+
class OPLChipBase
{
+public:
+ enum { nativeRate = 49716 };
protected:
+ uint32_t m_id;
uint32_t m_rate;
public:
OPLChipBase();
virtual ~OPLChipBase();
+ uint32_t chipId() const { return m_id; }
+ void setChipId(uint32_t id) { m_id = id; }
+
+ virtual bool canRunAtPcmRate() const = 0;
+ virtual bool isRunningAtPcmRate() const = 0;
+ virtual bool setRunningAtPcmRate(bool r) = 0;
+#if defined(ADLMIDI_AUDIO_TICK_HANDLER)
+ virtual void setAudioTickHandlerInstance(void *instance) = 0;
+#endif
+
virtual void setRate(uint32_t rate) = 0;
+ virtual uint32_t effectiveRate() const = 0;
virtual void reset() = 0;
virtual void writeReg(uint16_t addr, uint8_t data) = 0;
@@ -49,13 +67,25 @@ public:
OPLChipBaseT();
virtual ~OPLChipBaseT();
+ bool isRunningAtPcmRate() const override;
+ bool setRunningAtPcmRate(bool r) override;
+#if defined(ADLMIDI_AUDIO_TICK_HANDLER)
+ void setAudioTickHandlerInstance(void *instance);
+#endif
+
virtual void setRate(uint32_t rate) override;
+ uint32_t effectiveRate() const override;
virtual void reset() override;
void generate(int16_t *output, size_t frames) override;
void generateAndMix(int16_t *output, size_t frames) override;
void generate32(int32_t *output, size_t frames) override;
void generateAndMix32(int32_t *output, size_t frames) override;
private:
+ bool m_runningAtPcmRate;
+#if defined(ADLMIDI_AUDIO_TICK_HANDLER)
+ void *m_audioTickHandlerInstance;
+#endif
+ void nativeTick(int16_t *frame);
void setupResampler(uint32_t rate);
void resetResampler();
void resampledGenerate(int32_t *output);