#include <rsound_phantom.h>
Public Member Functions | |
| RSound4 (Audio::Mixer *mixer) | |
| int | command (int commandId, int param) override |
Public Member Functions inherited from MADS::Phantom::RSound | |
| RSound (Audio::Mixer *mixer, const Common::Path &filename, int dataOffset, int dataSize, int sysExOffset) | |
| int | stop () override |
| int | poll () override |
| void | noise () override |
| void | setVolume (int volume) override |
| int | getFrameCounter () |
Public Member Functions inherited from MADS::SoundDriver | |
| SoundDriver (Audio::Mixer *mixer, const Common::Path &filename, int dataOffset, int dataSize) | |
Additional Inherited Members | |
Public Attributes inherited from MADS::Phantom::RSound | |
| Channel | _channels [9] |
| int | _frameCounter |
| bool | _isDisabled |
| int | _pollResult |
Protected Member Functions inherited from MADS::Phantom::RSound | |
| byte * | loadData (int offset) |
| void | resetChannelRange (int first, int last) |
| virtual void | checkRandomAmbianceTrigger () |
| void | resultCheck () |
| Channel * | playSound (int offset) |
| Channel * | playSoundChannels1To5 (int offset) |
| Channel * | playSoundAny (int offset) |
| Channel * | playSoundChannels5To8 (int offset) |
| Channel * | playSoundChannels1To6 (int offset) |
| Channel * | playSoundData (byte *pData, int startingChannel, int freeScanEnd, int fallbackScanEnd) |
| bool | isSoundActive (byte *pData) |
| int | getRandomNumber () |
| void | sendMidiByte (byte value) |
| void | sendStatus (int midiChannel, byte statusNibble) |
| void | sendNoteOn (int midiChannel, int note, int velocity) |
| void | sendProgramChange (int midiChannel, int program) |
| void | sendVolume (int midiChannel, int volume) |
| void | sendVolumeCC (int midiChannel, int volume) |
| void | resetPitchBend (int midiChannel) |
| void | sendPitchBend (int midiChannel, int value) |
| void | sendPan (int midiChannel, int value) |
| void | muteChannel (int midiChannel) |
| void | sendGmReset (int count) |
| void | sendSysExData (const byte *pData) |
| void | sendSysEx (int offset) |
| void | sendPatchInitSequence () |
| void | sendReverbSysEx (int mode, int time, int level) |
| void | noOpHandler (int param) |
| virtual int | command0 () |
| int | command1 () |
| int | command2 () |
| int | command3 () |
| void | enableUpperChannels () |
| void | resetAndGmResetUpperChannels () |
| int | command6 () |
| int | command7 () |
| int | command8 () |
| int | nullCommand () |
Protected Member Functions inherited from MADS::SoundDriver | |
| Common::MemoryReadStream | getDataStream (int offset) const |
Protected Attributes inherited from MADS::Phantom::RSound | |
| int | _commandParam |
| int | _randomAmbianceTriggerFlag |
| int | _fadeCheckPeriod |
Protected Attributes inherited from MADS::SoundDriver | |
| Audio::Mixer * | _mixer |
| Common::Array< byte > | _soundData |
| Common::Mutex | _driverMutex |
RSound4 (rsound.ph4)
Dispatch table layout (funcs_109CE/109E4/109FA/10A10/10A26 in the disassembly - same 5-bucket sparse-dispatch shape as RSound1-3, represented here as a single flat array): commands 0-8 (base class, except command4/5 - see RSound::command4/5) command 16 (this class) commands 24-27 (this class) command 32 (confirmed nullsub_1 - this driver has no command32-39 at all, unlike RSound1-3, which all had a populated 32+ bucket) commands 64-70 (this class); 71 is confirmed nullsub_1
command0/1/2/3/6/7/8 confirmed to match the shared RSound base exactly (no overrides needed) - including command3, which (unlike RSound3) is NOT aliased to command1's dispatch slot; this driver's dispatch table has a genuine, separate rsound_command3 entry matching the base class's command3() exactly.
command4() is a genuinely new shape: unlike every driver confirmed so far, it has NO isSoundActive() gate at all - it unconditionally resets channels 6-9 (0-based indices 5-8, confirmed via explicit Channel._activeCount/_volumeFadeStep-labeled writes in sub_107FC) via resetChannelRange(), then sends a full sendGmReset(9). A third distinct channel range for this reset (RSound1/RSound2 used 4-9, RSound3 used 5-9), reinforcing that this range is always driver-specific.
command1/command3 confirmed to match the shared RSound base exactly (no overrides needed) - sub_10838 (called at the top of both) is confirmed to be exactly "_fadeCheckPeriod = 1", and command5's four channel-enable targets are confirmed to be channels 5-8, matching enableUpperChannels() exactly.
|
overridevirtual |
Execute a player command. Most commands represent sounds to play, but some low number commands also provide control operations.
| commandId | Player ommand to execute. |
| param | Optional parameter used by a few commands |
Implements MADS::SoundDriver.