mm/include/audio/list.h

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