00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef VOICE_H
00024 #define VOICE_H
00025
00026 #include "siddefs-fp.h"
00027 #include "WaveformGenerator.h"
00028 #include "EnvelopeGenerator.h"
00029
00030 namespace reSIDfp
00031 {
00032
00041 class Voice
00042 {
00043 private:
00044 WaveformGenerator* waveformGenerator;
00045
00046 EnvelopeGenerator* envelopeGenerator;
00047
00048 public:
00063 RESID_INLINE
00064 int output(const WaveformGenerator* ringModulator) const
00065 {
00066 return waveformGenerator->output(ringModulator) * envelopeGenerator->output();
00067 }
00068
00072 Voice() :
00073 waveformGenerator(new WaveformGenerator()),
00074 envelopeGenerator(new EnvelopeGenerator()) {}
00075
00076 ~Voice()
00077 {
00078 delete waveformGenerator;
00079 delete envelopeGenerator;
00080 }
00081
00082 WaveformGenerator* wave() const { return waveformGenerator; }
00083
00084 EnvelopeGenerator* envelope() const { return envelopeGenerator; }
00085
00086
00087
00088
00089
00095 void writeCONTROL_REG(unsigned char control)
00096 {
00097 waveformGenerator->writeCONTROL_REG(control);
00098 envelopeGenerator->writeCONTROL_REG(control);
00099 }
00100
00104 void reset()
00105 {
00106 waveformGenerator->reset();
00107 envelopeGenerator->reset();
00108 }
00109 };
00110
00111 }
00112
00113 #endif