From b691c43c44ff180d10e7d4a9afc83b98551ff586 Mon Sep 17 00:00:00 2001 From: daoge_cmd <3523206925@qq.com> Date: Sun, 1 Mar 2026 12:16:08 +0800 Subject: Initial commit --- Minecraft.Client/Xbox/Audio/SoundEngine.h | 110 ++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 Minecraft.Client/Xbox/Audio/SoundEngine.h (limited to 'Minecraft.Client/Xbox/Audio/SoundEngine.h') diff --git a/Minecraft.Client/Xbox/Audio/SoundEngine.h b/Minecraft.Client/Xbox/Audio/SoundEngine.h new file mode 100644 index 00000000..e2f22869 --- /dev/null +++ b/Minecraft.Client/Xbox/Audio/SoundEngine.h @@ -0,0 +1,110 @@ +#pragma once +class Mob; +class Options; +using namespace std; +#include "..\..\..\Minecraft.World\SoundTypes.h" + +#ifdef _XBOX +extern IXAudio2* g_pXAudio2; // pointer to XAudio2 instance used by QNet and XACT +extern IXAudio2MasteringVoice* g_pXAudio2MasteringVoice; // pointer to XAudio2 mastering voice +#endif + +class SoundEngine : public ConsoleSoundEngine +{ +#ifdef _XBOX + //static const unsigned char *ucSoundNames[eSoundType_MAX][32]; + static const int MAX_POLYPHONY = 30; // 4J added + static const int MAX_SAME_SOUNDS_PLAYING = 8; // 4J added + static IXACT3Engine *m_pXACT3Engine; + static X3DAUDIO_HANDLE m_xact3dInstance; + static X3DAUDIO_DSP_SETTINGS m_DSPSettings; + static X3DAUDIO_EMITTER m_emitter; + static X3DAUDIO_LISTENER m_listeners[4]; + static int m_validListenerCount; + + static X3DAUDIO_DISTANCE_CURVE m_VolumeCurve; + static X3DAUDIO_DISTANCE_CURVE_POINT m_VolumeCurvePoints[2]; + + static X3DAUDIO_DISTANCE_CURVE m_DragonVolumeCurve; + static X3DAUDIO_DISTANCE_CURVE_POINT m_DragonVolumeCurvePoints[2]; + + static X3DAUDIO_DISTANCE_CURVE m_VolumeCurveNoDecay; + static X3DAUDIO_DISTANCE_CURVE_POINT m_VolumeCurvePointsNoDecay[2]; + + static IXACT3WaveBank *m_pWaveBank; + static IXACT3WaveBank *m_pWaveBank2; + static IXACT3WaveBank *m_pStreamedWaveBank; + static IXACT3WaveBank *m_pStreamedWaveBankAdditional; + static IXACT3SoundBank *m_pSoundBank; + static IXACT3SoundBank *m_pSoundBank2; + + static CRITICAL_SECTION m_CS; + + struct soundInfo + { + // 4J-PB - adding the cue index so we can limit the number of the same sounds playing (rain) + XACTINDEX idx; + int iSoundBank; + eSOUND_TYPE eSoundID; + float x, y, z; + float volume; + float pitch; + IXACT3Cue *pCue; + bool updatePos; + }; + + void update3DPosition( soundInfo *pInfo, bool bPlaceEmitterAtListener = false, bool bIsCDMusic = false); + static vectorcurrentSounds; + + int noMusicDelay; + Random *random; + + // 4J Added +#endif + +#ifdef _XBOX + char * m_chMusicName; + soundInfo m_MusicInfo; + + XACTINDEX m_musicIDX; + bool m_bStreamingMusicReady; + bool m_bStreamingWaveBank1Ready; + bool m_bStreamingWaveBank2Ready; + + // to handle volume changes + XACTCATEGORY m_xactSFX; + XACTCATEGORY m_xactMusic; +#endif +public: + SoundEngine(); + virtual void destroy(); + virtual void play(int iSound, float x, float y, float z, float volume, float pitch); + virtual void playStreaming(const wstring& name, float x, float y , float z, float volume, float pitch, bool bMusicDelay=true); + virtual void playUI(int iSound, float volume, float pitch); + virtual void playMusicTick(); + virtual void updateMusicVolume(float fVal); + virtual void updateSystemMusicPlaying(bool isPlaying); + virtual void updateSoundEffectVolume(float fVal); + virtual void init(Options *); + virtual void tick(shared_ptr *players, float a); // 4J - updated to take array of local players rather than single one + virtual void add(const wstring& name, File *file); + virtual void addMusic(const wstring& name, File *file); + virtual void addStreaming(const wstring& name, File *file); +#ifndef __PS3__ + static void setXACTEngine( IXACT3Engine *pXACT3Engine); + void CreateStreamingWavebank(const char *pchName, IXACT3WaveBank **ppStreamedWaveBank); + void CreateSoundbank(const char *pchName, IXACT3SoundBank **ppSoundBank); + +#endif // __PS3__ + virtual char *ConvertSoundPathToName(const wstring& name, bool bConvertSpaces=false); + bool isStreamingWavebankReady(); // 4J Added +#ifdef _XBOX + bool isStreamingWavebankReady(IXACT3WaveBank *pWaveBank); +#endif + int initAudioHardware(int iMinSpeakers) { return iMinSpeakers;} + +private: +#ifndef __PS3__ + static void XACTNotificationCallback( const XACT_NOTIFICATION* pNotification ); +#endif // __PS3__ +}; \ No newline at end of file -- cgit v1.2.3