22 #include "audio/audiostream.h" 23 #include "audio/mixer.h" 24 #include "audio/softsynth/sid.h" 25 #include "common/debug.h" 34 const uint8_t *trackDataPtr;
36 const uint8_t *patternDataPtr;
38 uint8_t instrumentIndex;
47 uint8_t portaTargetNote;
58 uint8_t sustainRelease;
62 uint8_t arpeggioIndex;
63 uint8_t arpeggioSpeed;
64 uint8_t arpeggioCounter;
65 uint8_t arpeggioNoteOffsetIndex;
70 uint8_t vibratoDirection;
71 int16_t vibratoCurrentOffset;
76 uint8_t hardRestartValue;
77 uint8_t hardRestartDelay;
78 uint8_t hardRestartCounter;
79 bool hardRestartActive;
90 uint8_t whatever2_vibDirToggle;
93 uint16_t portaStepRaw;
97 uint8_t something_else[3];
103 uint8_t arpTableIndex;
104 uint8_t arpSpeedHiNibble;
109 uint16_t stuff_freq_porta_vib;
110 uint16_t stuff_freq_base;
111 uint16_t stuff_freq_hard_restart;
112 uint8_t stuff_arp_counter;
113 uint8_t stuff_arp_note_index;
116 uint8_t things_vib_state;
117 uint16_t things_vib_depth;
118 uint8_t things_vib_delay_reload;
119 uint8_t things_vib_delay_ctr;
121 uint8_t currentNoteSlideTarget;
124 uint8_t glideDownTimer;
133 uint8_t pwLo()
const {
return something_else[0]; }
134 uint8_t pwHi()
const {
return something_else[2]; }
135 void setPwLo(uint8_t val) { something_else[0] = val; }
136 void setPwHi(uint8_t val) { something_else[2] = val; }
139 trackDataPtr =
nullptr;
141 patternDataPtr =
nullptr;
159 arpeggioNoteOffsetIndex = 0;
163 vibratoDirection = 0;
164 vibratoCurrentOffset = 0;
166 hardRestartValue = 0;
167 hardRestartDelay = 0;
168 hardRestartCounter = 0;
169 hardRestartActive =
false;
181 whatever2_vibDirToggle = 0;
183 memset(something_else, 0,
sizeof(something_else));
186 arpSpeedHiNibble = 0;
187 stuff_freq_porta_vib = 0;
189 stuff_freq_hard_restart = 0;
190 stuff_arp_counter = 0;
191 stuff_arp_note_index = 0;
192 things_vib_state = 0;
193 things_vib_depth = 0;
194 things_vib_delay_reload = 0;
195 things_vib_delay_ctr = 0;
196 currentNoteSlideTarget = 0;
206 float _cyclesPerSample;
207 double _cycleCounter;
210 enum PlayState { STOPPED,
213 PlayState _playState;
214 uint8_t _targetTuneIndex;
217 uint8_t _globalTempo;
218 uint8_t _globalTempoCounter;
221 VoiceState _voiceState[3];
224 uint8_t _tempControl3;
230 void startMusic(
int tuneIndex = 1);
233 int readBuffer(int16 *buffer,
const int numSamples)
override;
237 int getRate()
const override {
return _sampleRate; }
240 void SID_Write(
int reg, uint8_t data);
243 void handleChangeTune(
int tuneIndex);
244 void handleResetVoices();
245 void playVoice(
int voiceIndex,
bool tempoTick);
246 void applyNote(VoiceState &v,
int sidOffset,
const uint8_t *instA0,
const uint8_t *instA1,
int voiceIndex);
247 void applyContinuousEffects(VoiceState &v,
int sidOffset,
const uint8_t *instA0,
const uint8_t *instA1);
248 void applyHardRestart(VoiceState &v,
int sidOffset,
const uint8_t *instA0,
const uint8_t *instA1);
bool endOfData() const override
Definition: c64.music.h:236
bool isStereo() const override
Definition: c64.music.h:235
Definition: c64.music.h:29
Definition: audiostream.h:50
int getRate() const override
Definition: c64.music.h:237
int readBuffer(int16 *buffer, const int numSamples) override