Skip to content

Commit 2ee32c7

Browse files
committed
Some audio work, CGX_Impl.hpp, CCube* fixes
1 parent 14824df commit 2ee32c7

31 files changed

Lines changed: 2115 additions & 647 deletions

config/GM8E01_00/splits.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1712,7 +1712,7 @@ MetroidPrime/ScriptObjects/CScriptMidi.cpp:
17121712
.data start:0x803E7048 end:0x803E7068
17131713
.sdata2 start:0x805ACEC8 end:0x805ACED8
17141714

1715-
MetroidPrime/ScriptObjects/CScriptStreamedAudio.cpp:
1715+
MetroidPrime/ScriptObjects/CScriptStreamedMusic.cpp:
17161716
.text start:0x8020BE1C end:0x8020C854
17171717
.rodata start:0x803D2778 end:0x803D2790
17181718
.data start:0x803E7068 end:0x803E70D0

config/GM8E01_00/symbols.txt

Lines changed: 49 additions & 49 deletions
Large diffs are not rendered by default.

config/GM8E01_01/splits.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1712,7 +1712,7 @@ MetroidPrime/ScriptObjects/CScriptMidi.cpp:
17121712
.data start:0x803E7228 end:0x803E7248
17131713
.sdata2 start:0x805AD0A8 end:0x805AD0B8
17141714

1715-
MetroidPrime/ScriptObjects/CScriptStreamedAudio.cpp:
1715+
MetroidPrime/ScriptObjects/CScriptStreamedMusic.cpp:
17161716
.text start:0x8020BE98 end:0x8020C8D0
17171717
.rodata start:0x803D2958 end:0x803D2970
17181718
.data start:0x803E7248 end:0x803E72B0

configure.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1023,7 +1023,7 @@ def MatchingFor(*versions):
10231023
),
10241024
Object(NonMatching, "MetroidPrime/CWorldTransManager.cpp"),
10251025
Object(NonMatching, "MetroidPrime/ScriptObjects/CScriptMidi.cpp"),
1026-
Object(NonMatching, "MetroidPrime/ScriptObjects/CScriptStreamedAudio.cpp"),
1026+
Object(NonMatching, "MetroidPrime/ScriptObjects/CScriptStreamedMusic.cpp"),
10271027
Object(NonMatching, "MetroidPrime/CRagDoll.cpp"),
10281028
Object(NonMatching, "MetroidPrime/Player/CGameOptions.cpp"),
10291029
Object(

include/Kyoto/Audio/CAudioGroupSet.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ class CAudioGroupSet {
5151
void Reload();
5252
void FreeSampleBuffer();
5353
void FreeAllBuffers();
54+
const rstl::string& GetName() const { return x10_groupSetName; }
5455

5556
private:
5657
rstl::string x0_baseDir;

include/Kyoto/Audio/CAudioSys.hpp

Lines changed: 44 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,15 @@
44
#include "musyx/musyx.h"
55
#include "types.h"
66

7+
#include "dolphin/dtk.h"
8+
79
#include "rstl/map.hpp"
810
#include "rstl/rc_ptr.hpp"
911
#include "rstl/string.hpp"
1012
#include "rstl/vector.hpp"
1113

1214
#include "Kyoto/Math/CVector3f.hpp"
15+
#include "Kyoto/TToken.hpp"
1316

1417
class CAudioGroupSet;
1518
class CSimplePool;
@@ -20,8 +23,15 @@ enum ETRKSampleRate {
2023
// TODO
2124
};
2225

26+
enum ETRKPlayState {
27+
kTPS_Stopped,
28+
kTPS_Playing,
29+
};
30+
2331
enum ETRKRepeatMode {
24-
// TODO
32+
kTRM_NoRepeat,
33+
kTRM_RepeatOne,
34+
kTRM_RepeatAll,
2535
};
2636

2737
class CAudioSys {
@@ -65,30 +75,58 @@ class CAudioSys {
6575
uchar x29_prio;
6676
};
6777

68-
class CTrkData {};
78+
class CTrkData {
79+
public:
80+
CTrkData(const rstl::string& name) : x50_inUse(true), x54_name(name) {}
81+
82+
bool GetIsTrackInUse() const { return x50_inUse; }
83+
void SetIsTrackInUse(bool v) { x50_inUse = v; }
84+
DTKTrack* GetTrack() { return &x0_track; }
85+
char* GetFileName() { return const_cast< char* >(x54_name.data()); }
86+
87+
DTKTrack x0_track;
88+
bool x50_inUse;
89+
rstl::string x54_name;
90+
};
6991

7092
CAudioSys(uchar, uchar, uchar, uchar, uint);
7193
~CAudioSys();
7294

7395
static void SysSetVolume(uchar, ushort, uchar);
7496
static void SysSetSfxVolume(uchar, ushort, uchar, uchar);
7597
static bool SysLoadGroupSet(CSimplePool*, uint);
98+
static bool SysLoadGroupSet(TLockedToken< CAudioGroupSet >, rstl::string, uint);
7699
static const rstl::string& SysGetGroupSetName(uint);
77100
static bool SysPushGroupIntoARAM(const rstl::string& name, uchar);
78101
static void SysPopGroupFromARAM();
79102
static void SysUnloadGroupSet(const rstl::string& name);
80-
static void SysUnloadSampleData(const rstl::string& name);
103+
static bool SysUnloadSampleData(const rstl::string& name);
104+
static bool SysIsGroupSetLoaded(const rstl::string& name);
105+
static rstl::ncrc_ptr< CAudioGroupSet > FindGroupSet(const rstl::string& name);
106+
static rstl::ncrc_ptr< CTrkData > FindTrack(const rstl::string& name);
81107

82108
static void SetDefaultVolumeScale(short);
83109
static void SetVolumeScale(short);
110+
static void SetVerbose(bool verbose) { mVerbose = verbose; }
111+
static void EnableProLogic2(bool enabled) { mProLogic2 = enabled; }
112+
static void TrkFlushTracks();
113+
static void TrkSetState(ETRKPlayState);
114+
static ETRKPlayState TrkGetState();
115+
static void TrkSetVolume(uchar, uchar);
116+
static void TrkSetRepeatMode(ETRKRepeatMode);
117+
static void TrkNextTrack();
118+
static int TrkQueueTrack(const rstl::string&, void (*)(unsigned long), uint);
119+
84120
static void SetStereoMode(const bool mode);
85121
static void SetSurroundMode(const ESurroundModes mode);
122+
static ESurroundModes GetSurroundMode() { return mSurroundMode; }
86123
static void TrkSetSampleRate(ETRKSampleRate);
87124

88125
static short GetDefaultVolumeScale();
89126
static bool GetVerbose();
90127

91-
static SND_VOICEID SfxStart(const SND_FXID, const uchar, const uchar, const uchar);
128+
static SND_VOICEID SfxStart(const SND_FXID, const uchar vol, const uchar pan,
129+
const uchar prio);
92130
static void SfxStop(SND_VOICEID handle);
93131
static void SfxCtrl(const SND_VOICEID handle, const uchar ctrl, const uchar val);
94132
static SND_VOICEID SfxCheck(SND_VOICEID handle);
@@ -144,8 +182,8 @@ class CAudioSys {
144182
static uint mMaxAramUsage;
145183
static uint mCurrentAramUsage;
146184
static bool mProLogic2;
147-
static ushort mVolumeScale;
148-
static ushort mDefaultVolumeScale;
185+
static short mVolumeScale;
186+
static short mDefaultVolumeScale;
149187
static const uchar kMaxVolume;
150188
static const uchar kEmitterMedPriority;
151189
static const ushort kVolumeTable[];

include/Kyoto/Audio/CDSPStreamManager.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,5 +54,6 @@ class CDSPStreamManager {
5454
DVDFileInfo x80_dvdFile;
5555
uchar xbc_pad[4];
5656
};
57+
CHECK_SIZEOF(CDSPStreamManager, 0xC0);
5758

5859
#endif // _CDSPSTREAMMANAGER

include/Kyoto/Audio/CStaticAudioPlayer.hpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,10 @@ class CStaticAudioPlayer {
2525
static void RunDMACallback(FAudioCallback);
2626
static void CancelDMACallback(FAudioCallback);
2727
void Decode(const ushort* bufIn, ushort* bufOut, int numSamples);
28-
void DecodeMonoAndMix(const ushort* bufIn, ushort* bufOut, const int curSample,
29-
const int sampleEnd, const int sampleStart, ushort vol, g72x_state& state);
30-
void SetVolume(uchar vol);
28+
void DecodeMonoAndMix(ushort* bufIn, ushort* bufOut, int numSamples,
29+
int curSample, int sampleEnd, int sampleStart,
30+
int vol, g72x_state& state);
31+
void SetVolume(char vol);
3132

3233
private:
3334
rstl::string x0_filepath;

include/Kyoto/Audio/CStreamAudioManager.hpp

Lines changed: 63 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,28 +5,80 @@
55

66
#include "rstl/string.hpp"
77

8+
struct SDSPStreamCacheEntry {
9+
rstl::string x0_fileName;
10+
int x10_playState;
11+
int x14_volume;
12+
float x18_fadeIn;
13+
float x1c_fadeOut;
14+
int x20_handle;
15+
float x24_fadeFactor;
16+
bool x28_music;
17+
18+
SDSPStreamCacheEntry();
19+
SDSPStreamCacheEntry(int playState, const rstl::string& fileName, int volume, float fadeIn,
20+
float fadeOut, int handle, bool music);
21+
};
22+
23+
class CStreamedAudioManager {
24+
public:
25+
static bool AreStringsNotEqual(const char* lhs, const char* rhs);
26+
};
27+
828
class CStreamAudioManager {
929
public:
30+
enum ESoftwareChannel {
31+
kSC_OneShot = 0,
32+
kSC_Default = 1,
33+
};
34+
1035
static void Update(float dt);
1136
static void StopAll();
1237
static void StopOneShot();
13-
static void SetMusicVolume(uint);
14-
static void SetSfxVolume(uint);
38+
static void SetMusicVolume(uint vol);
39+
static void SetSfxVolume(uint vol);
40+
static void SetMusicUnmute(bool unmute);
1541

16-
static void FadeBackIn(int, float);
17-
static void TemporaryFadeOut(int, float);
42+
static void FadeInSoftwareAudio(ESoftwareChannel chan, float fadeTime);
43+
static void FadeOutSoftwareAudio(ESoftwareChannel chan, float fadeTime);
1844

19-
static void Start(int, const rstl::string&, int, bool, float, float);
20-
static void Stop(int, const rstl::string&);
45+
static void PlaySoftwareAudio(ESoftwareChannel chan, const rstl::string& fileName, int volume,
46+
bool music, float fadeIn, float fadeOut);
47+
static void StopSoftwareAudio(ESoftwareChannel chan, const rstl::string& fileName);
2148

22-
static void sub_803653f8(float);
23-
static void sub_80365424(float);
24-
static void sub_8036590c(float);
49+
static void SetDefaultAudio(const rstl::string& fileName, float fadeIn, float fadeOut,
50+
unsigned char volume);
51+
static void SetCurrentAudio(const rstl::string& fileName, float fadeIn, float fadeOut,
52+
unsigned char volume);
2553

26-
static void SetDefaultAudio(const rstl::string&, float, float, unsigned char);
27-
static void SetCurrentAudio(const rstl::string&, float, float, unsigned char);
54+
static void fn_803653F8(float fadeTime);
55+
static void fn_80365424(float fadeTime);
56+
static void fn_8036590C(float fadeTime);
2857

2958
private:
59+
static void HandleMusicUnmute();
60+
static void StopAudio();
61+
static void StopAllStreams();
62+
static void InternalSetVolume(float vol);
63+
static void UpdateSoftwareChannels(float dt);
64+
static void UpdateSoftwareChannel(ESoftwareChannel chan, float dt);
65+
static void StopStreaming(int idx);
66+
static int GetTargetDSPVolume(int fileVol, bool music);
67+
static void PlayTrack(const rstl::string& fileName);
68+
69+
static rstl::string mDefaultAudioFile;
70+
static rstl::string mCurrentAudioFile;
71+
static rstl::string mNewAudioFile;
72+
73+
static int mCurrentState;
74+
static float mCurrentVolume;
75+
static float mTargetVolume;
76+
static int mGlobalVolume;
77+
static int mForegroundVolume;
78+
static bool mEnable;
79+
static bool mForegroundEnable;
80+
static float mVolumeIncrement;
81+
static float mVolumeIncrement2;
3082
};
3183

3284
#endif // _CSTREAMAUDIOMANAGER

include/Kyoto/Graphics/CCubeMaterial.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ class CCubeMaterial {
2828
public:
2929
explicit CCubeMaterial(const void* data) : x0_data(data) {}
3030
static void ResetCachedMaterials();
31+
static void EnsureViewDepStateCached(const CCubeSurface* surface);
3132
static void EnsureTevsDirect();
3233
static void KillCachedViewDepState();
3334

@@ -36,6 +37,7 @@ class CCubeMaterial {
3637
bool IsFlagSet(const EStateFlags flag) const { return (GetFlags() & flag) != 0; }
3738
void SetCurrent(const CModelFlags& flags, const CCubeSurface& surface,
3839
const CCubeModel& mode) const;
40+
void SetCurrentBlack() const;
3941
uint GetTextureCount() const { return *reinterpret_cast< const u32* >(GetData() + 4); }
4042
uint GetVertexDesc() const {
4143
return reinterpret_cast< const uint* >(x0_data)[GetTextureCount() + 2];
@@ -47,6 +49,9 @@ class CCubeMaterial {
4749

4850
private:
4951
static void SetupBlendMode(uint blendFactors, const CModelFlags& flags, bool alphaTest);
52+
static uint HandleReflection(bool usesTevReg2, GXTexMapID indTexSlot, int indMtxScaleExp,
53+
uint finalTevCount, uint texCount, uint tcgCount,
54+
uint finalKColorCount, uint& finalCCFlags, uint& finalACFlags);
5055

5156
static CVector3f sViewingFrom;
5257
const void* x0_data;

0 commit comments

Comments
 (0)