mirror of https://github.com/zeldaret/mm.git
				
				
				
			
		
			
				
	
	
		
			148 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			148 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			C
		
	
	
	
| #ifndef AUDIO_LOAD_H
 | |
| #define AUDIO_LOAD_H
 | |
| 
 | |
| #include "soundfont.h"
 | |
| #include "PR/os.h"
 | |
| #include "PR/os_message.h"
 | |
| #include "PR/ultratypes.h"
 | |
| #include "stddef.h"
 | |
| #include "stdint.h"
 | |
| #include "unk.h"
 | |
| 
 | |
| typedef s32 (*DmaHandler)(OSPiHandle* handle, OSIoMesg* mb, s32 direction);
 | |
| 
 | |
| typedef enum SampleBankTableType {
 | |
|     /* 0 */ SEQUENCE_TABLE,
 | |
|     /* 1 */ FONT_TABLE,
 | |
|     /* 2 */ SAMPLE_TABLE
 | |
| } SampleBankTableType;
 | |
| 
 | |
| typedef struct AudioTableHeader {
 | |
|     /* 0x00 */ s16 numEntries;
 | |
|     /* 0x02 */ s16 unkMediumParam;
 | |
|     /* 0x04 */ uintptr_t romAddr;
 | |
|     /* 0x08 */ char pad[0x8];
 | |
| } AudioTableHeader; // size = 0x10
 | |
| 
 | |
| typedef struct AudioTableEntry {
 | |
|     /* 0x0 */ uintptr_t romAddr;
 | |
|     /* 0x4 */ size_t size;
 | |
|     /* 0x8 */ s8 medium;
 | |
|     /* 0x9 */ s8 cachePolicy;
 | |
|     /* 0xA */ s16 shortData1;
 | |
|     /* 0xC */ s16 shortData2;
 | |
|     /* 0xE */ s16 shortData3;
 | |
| } AudioTableEntry; // size = 0x10
 | |
| 
 | |
| typedef struct AudioTable {
 | |
|     /* 0x00 */ AudioTableHeader header;
 | |
|     /* 0x10 */ AudioTableEntry entries[1]; // (dynamic size)
 | |
| } AudioTable; // size >= 0x20
 | |
| 
 | |
| typedef enum AudioLoadStatus {
 | |
|     /* 0 */ LOAD_STATUS_NOT_LOADED,
 | |
|     /* 1 */ LOAD_STATUS_IN_PROGRESS,
 | |
|     /* 2 */ LOAD_STATUS_COMPLETE,
 | |
|     /* 3 */ LOAD_STATUS_DISCARDABLE,
 | |
|     /* 4 */ LOAD_STATUS_MAYBE_DISCARDABLE,
 | |
|     /* 5 */ LOAD_STATUS_PERMANENT
 | |
| } AudioLoadStatus;
 | |
| 
 | |
| typedef enum AudioCacheType {
 | |
|     /* 0 */ CACHE_TEMPORARY,
 | |
|     /* 1 */ CACHE_PERSISTENT,
 | |
|     /* 2 */ CACHE_EITHER,
 | |
|     /* 3 */ CACHE_PERMANENT
 | |
| } AudioCacheType;
 | |
| 
 | |
| typedef enum AudioCacheLoadType {
 | |
|     /* 0 */ CACHE_LOAD_PERMANENT,
 | |
|     /* 1 */ CACHE_LOAD_PERSISTENT,
 | |
|     /* 2 */ CACHE_LOAD_TEMPORARY,
 | |
|     /* 3 */ CACHE_LOAD_EITHER,
 | |
|     /* 4 */ CACHE_LOAD_EITHER_NOSYNC
 | |
| } AudioCacheLoadType;
 | |
| 
 | |
| typedef struct AudioAsyncLoad {
 | |
|     /* 0x00 */ s8 status;
 | |
|     /* 0x01 */ s8 delay;
 | |
|     /* 0x02 */ s8 medium;
 | |
|     /* 0x04 */ u8* ramAddr;
 | |
|     /* 0x08 */ uintptr_t curDevAddr;
 | |
|     /* 0x0C */ u8* curRamAddr;
 | |
|     /* 0x10 */ size_t bytesRemaining;
 | |
|     /* 0x14 */ size_t chunkSize;
 | |
|     /* 0x18 */ s32 unkMediumParam;
 | |
|     /* 0x1C */ u32 retMsg;
 | |
|     /* 0x20 */ OSMesgQueue* retQueue;
 | |
|     /* 0x24 */ OSMesgQueue msgQueue;
 | |
|     /* 0x3C */ OSMesg msg;
 | |
|     /* 0x40 */ OSIoMesg ioMesg;
 | |
| } AudioAsyncLoad; // size = 0x58
 | |
| 
 | |
| typedef struct AudioSlowLoad {
 | |
|     /* 0x00 */ u8 medium;
 | |
|     /* 0x01 */ u8 seqOrFontId;
 | |
|     /* 0x02 */ u16 instId;
 | |
|     /* 0x04 */ s32 unkMediumParam;
 | |
|     /* 0x08 */ uintptr_t curDevAddr;
 | |
|     /* 0x0C */ u8* curRamAddr;
 | |
|     /* 0x10 */ u8* ramAddr;
 | |
|     /* 0x14 */ s32 status;
 | |
|     /* 0x18 */ size_t bytesRemaining;
 | |
|     /* 0x1C */ s8* isDone; // TODO: rename in OoT and sync up here. This is an external status while (s32 status) is an internal status
 | |
|     /* 0x20 */ Sample sample;
 | |
|     /* 0x30 */ OSMesgQueue msgqueue;
 | |
|     /* 0x48 */ OSMesg msg;
 | |
|     /* 0x4C */ OSIoMesg ioMesg;
 | |
| } AudioSlowLoad; // size = 0x64
 | |
| 
 | |
| typedef struct SampleDma {
 | |
|     /* 0x0 */ u8* ramAddr;
 | |
|     /* 0x4 */ uintptr_t devAddr;
 | |
|     /* 0x8 */ u16 sizeUnused;
 | |
|     /* 0xA */ u16 size;
 | |
|     /* 0xC */ u8 unused;
 | |
|     /* 0xD */ u8 reuseIndex; // position in sSampleDmaReuseQueue1/2, if ttl == 0
 | |
|     /* 0xE */ u8 ttl;        // Time To Live: duration after which the DMA can be discarded
 | |
| } SampleDma; // size = 0x10
 | |
| 
 | |
| typedef struct AudioPreloadReq {
 | |
|     /* 0x00 */ u32 endAndMediumKey;
 | |
|     /* 0x04 */ Sample* sample;
 | |
|     /* 0x08 */ u8* ramAddr;
 | |
|     /* 0x0C */ u32 encodedInfo;
 | |
|     /* 0x10 */ s32 isFree;
 | |
| } AudioPreloadReq; // size = 0x14
 | |
| 
 | |
| void AudioLoad_DecreaseSampleDmaTtls(void);
 | |
| void* AudioLoad_DmaSampleData(uintptr_t devAddr, size_t size, s32 arg2, u8* dmaIndexRef, s32 medium);
 | |
| void AudioLoad_InitSampleDmaBuffers(s32 numNotes);
 | |
| s32 AudioLoad_IsFontLoadComplete(s32 fontId);
 | |
| s32 AudioLoad_IsSeqLoadComplete(s32 seqId);
 | |
| void AudioLoad_SetFontLoadStatus(s32 fontId, s32 loadStatus);
 | |
| void AudioLoad_SetSeqLoadStatus(s32 seqId, s32 loadStatus);
 | |
| void AudioLoad_SyncLoadSeqParts(s32 seqId, s32 arg1, s32 arg2, OSMesgQueue* arg3);
 | |
| s32 AudioLoad_SyncLoadInstrument(s32 fontId, s32 instId, s32 drumId);
 | |
| void AudioLoad_AsyncLoadSeq(s32 seqId, s32 arg1, s32 retData, OSMesgQueue* retQueue);
 | |
| void AudioLoad_AsyncLoadSampleBank(s32 sampleBankId, s32 arg1, s32 retData, OSMesgQueue* retQueue);
 | |
| void AudioLoad_AsyncLoadFont(s32 fontId, s32 arg1, s32 retData, OSMesgQueue* retQueue);
 | |
| u8* AudioLoad_GetFontsForSequence(s32 seqId, u32* outNumFonts);
 | |
| void AudioLoad_DiscardSeqFonts(s32 seqId);
 | |
| void func_8018FA60(u32 tableType, u32 id, s32 type, s32 data);
 | |
| s32 AudioLoad_SyncInitSeqPlayer(s32 playerIndex, s32 seqId, s32 arg2);
 | |
| s32 AudioLoad_SyncInitSeqPlayerSkipTicks(s32 playerIndex, s32 seqId, s32 skipTicks);
 | |
| void AudioLoad_ProcessLoads(s32 resetStatus);
 | |
| void AudioLoad_SetDmaHandler(DmaHandler callback);
 | |
| void AudioLoad_Init(void* heap, size_t heapSize);
 | |
| void AudioLoad_InitSlowLoads(void);
 | |
| s32 AudioLoad_SlowLoadSample(s32 fontId, s32 instId, s8* isDone);
 | |
| s32 AudioLoad_SlowLoadSeq(s32 seqId, u8* ramAddr, s8* isDone);
 | |
| void AudioLoad_InitAsyncLoads(void);
 | |
| void AudioLoad_LoadPermanentSamples(void);
 | |
| void AudioLoad_ScriptLoad(s32 tableType, s32 id, s8* isDone);
 | |
| void AudioLoad_ProcessScriptLoads(void);
 | |
| void AudioLoad_InitScriptLoads(void);
 | |
| 
 | |
| #endif
 |