22 #ifndef MADS_PHANTOM_SOUND_RSOUND_H 23 #define MADS_PHANTOM_SOUND_RSOUND_H 25 #include "audio/mt32gm.h" 26 #include "mads/core/native_sound_timer.h" 27 #include "mads/core/sound_manager.h" 35 #define RSOUND_CHANNEL_COUNT 9 60 int _pitchBendFadeStep = 0;
61 int _volumeFadeStep = 0;
67 int _keyOnDelayOverride = 0;
69 int _volumeFadeCounter = 0;
70 int _volumeFadeReload = 0;
71 int _pitchBendFadeCounter = 0;
72 int _panFadeCounter = 0;
73 int _panFadeReload = 0;
77 int _pitchBendFadeReload = 0;
78 int _pitchBendFadeCount = 0;
79 byte *_loopStartPtr =
nullptr;
80 byte *_pSrc =
nullptr;
81 byte *_innerLoopPtr =
nullptr;
82 byte *_outerLoopPtr =
nullptr;
83 uint16 _innerLoopCount = 0;
84 uint16 _outerLoopCount = 0;
85 byte *_soundData =
nullptr;
86 byte *_branchTarget =
nullptr;
99 void reset(byte *startPtr);
111 void load(byte *pData);
133 int _masterVolume = 255;
134 int _stateChangedFlag;
136 uint32 _driverCallbackDelta;
147 byte _heldNotes[RSOUND_CHANNEL_COUNT + 1][4];
164 byte _scriptVariables[32];
172 int _fadeCheckCounter;
190 int _clockCoarseTarget;
199 void pollAllChannels();
210 void pollActiveChannel(
Channel *channel);
216 int readScriptByte(byte *&pSrc);
224 uint16 readScriptWord(byte *&pSrc);
226 void resetAllChannels();
227 void resetChannels1to5();
234 void resetChannels4to9();
236 void checkFadingChannels();
237 void Channel_checkFade(
Channel *channel,
int midiChannel);
238 void Channel_flushHeldNotes(
Channel *channel);
243 byte *loadData(
int offset) {
244 return &_soundData[offset];
280 void resetChannelRange(
int first,
int last);
308 Channel *playSound(
int offset);
319 Channel *playSoundChannels1To5(
int offset);
326 Channel *playSoundAny(
int offset);
334 Channel *playSoundChannels5To8(
int offset);
341 Channel *playSoundChannels1To6(
int offset);
349 Channel *playSoundData(byte *pData,
int startingChannel,
int freeScanEnd,
int fallbackScanEnd);
354 bool isSoundActive(byte *pData);
356 int getRandomNumber();
359 void sendNoteOn(
int midiChannel,
int note,
int velocity);
360 void sendProgramChange(
int midiChannel,
int program);
361 void sendVolume(
int midiChannel,
int volume);
362 void sendVolumeCC(
int midiChannel,
int volume);
363 void resetPitchBend(
int midiChannel);
364 void sendPitchBend(
int midiChannel,
int value);
365 void sendPan(
int midiChannel,
int value);
366 void muteChannel(
int midiChannel);
373 void sendGmReset(
int count);
388 const byte *sendSysExData(
const byte *pData, uint maxLength);
391 const byte *sendSysEx(
int offset);
402 void sendSysExSequence();
415 void restorePatchMemory();
424 void sendReverbSysEx(
int mode,
int time,
int level);
426 static void timerCallback(
void *data);
435 virtual int command0();
445 void enableUpperChannels();
451 void resetAndGmResetUpperChannels();
458 virtual int command4() = 0;
459 virtual int command5() = 0;
469 Channel _channels[RSOUND_CHANNEL_COUNT];
478 static void validate();
490 int dataOffset,
int dataSize,
int sysExOffset);
499 void setVolume(
int volume)
override;
501 int getFrameCounter() {
502 return _frameCounter;
virtual void checkRandomAmbianceTrigger()
Definition: rsound.h:289
int _randomAmbianceTriggerFlag
Definition: rsound.h:258
void noOpHandler(int param)
Definition: rsound.h:432
virtual bool callFunction(uint16 targetOffset)
Definition: rsound.h:299
Definition: native_sound_timer.h:33
int _fadeCheckPeriod
Definition: rsound.h:269
Definition: sound_manager.h:40
Definition: anim_timer.h:27
void reset(byte *startPtr)
void noise() override
Definition: rsound.h:496