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
|