mirror of https://github.com/zeldaret/mm.git
				
				
				
			
		
			
				
	
	
		
			44 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
| #ifndef AUDIO_LIST_H
 | |
| #define AUDIO_LIST_H
 | |
| 
 | |
| #include "PR/ultratypes.h"
 | |
| 
 | |
| // A node in a circularly linked list. Each node is either a head or an item:
 | |
| // - Items can be either detached (prev = NULL), or attached to a list.
 | |
| //   'value' points to something of interest.
 | |
| // - List heads are always attached; if a list is empty, its head points
 | |
| //   to itself. 'count' contains the size of the list.
 | |
| // If the list holds notes, 'pool' points back to the pool where it lives.
 | |
| // Otherwise, that member is NULL.
 | |
| typedef struct AudioListItem {
 | |
|     /* 0x0 */ struct AudioListItem* prev;
 | |
|     /* 0x4 */ struct AudioListItem* next;
 | |
|     union {
 | |
|         /* 0x8 */ void* value; // either Note* or SequenceLayer*
 | |
|         /* 0x8 */ s32 count;
 | |
|     } u;
 | |
|     /* 0xC */ struct NotePool* pool;
 | |
| } AudioListItem; // size = 0x10
 | |
| 
 | |
| typedef struct NotePool {
 | |
|     /* 0x00 */ AudioListItem disabled;
 | |
|     /* 0x10 */ AudioListItem decaying;
 | |
|     /* 0x20 */ AudioListItem releasing;
 | |
|     /* 0x30 */ AudioListItem active;
 | |
| } NotePool; // size = 0x40
 | |
| 
 | |
| // playback.c functions
 | |
| 
 | |
| void AudioList_InitNoteLists(NotePool* pool);
 | |
| void AudioList_InitNoteFreeList(void);
 | |
| void AudioList_ClearNotePool(NotePool* pool);
 | |
| void AudioList_FillNotePool(NotePool* pool, s32 count);
 | |
| void AudioList_Remove(AudioListItem* item);
 | |
| 
 | |
| // seqplayer.c functions
 | |
| 
 | |
| void AudioList_PushBack(AudioListItem* list, AudioListItem* item);
 | |
| void* AudioList_PopBack(AudioListItem* list);
 | |
| 
 | |
| #endif
 |