audio.h
2.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
/*
* NINTENDO64 SAMPLE PROGRAM
*
* FILE : audio.h
*
* Copyright (C) 1997, NINTENDO Co,Ltd.
*/
#define AUDIO_HEAP_SIZE 500000
#define NUM_ACMD_LISTS 2
#define MAX_RSP_CMDS 4096
#define NUM_OUTPUT_BUFFERS 3
#define MAX_SEQ_LENGTH 20000
#define MAX_VOICES 24
#define MAX_UPDATES 128
#define MAX_EVENTS 128
#define MAX_CHANNELS 16
#define NUM_FIELDS 1
/* 再生周波数 */
#define OUTPUT_RATE 44100
/* オーディオマネージャ用 */
#define AUDIO_PRIORITY 12
#define AUDIO_STACKSIZE 0x8000
/* n_audio 用 */
#define SAMPLES 184
#define EXTRA_SAMPLES 0
/* for DMA */
#define NUM_DMA_BUFFERS 128
#define DMA_BUFFER_LENGTH 512
#define NUM_DMA_MESSAGES 64
#define FRAME_LAG 1
/* オーディオバッファ構造体 */
typedef struct AudioInfo_s {
/* オーディオバッファ */
s16 *data;
/* オーディオフレームサイズ */
s16 frameSamples;
/* タスク構造体 */
MYScTask task;
} AudioInfo;
/* オーディオマネージャ構造体 */
typedef struct {
/* コマンドリストバッファ */
Acmd *ACMDList[NUM_ACMD_LISTS];
/* オーディオバッファ */
AudioInfo *audioInfo[NUM_OUTPUT_BUFFERS];
/* オーディオマネージャスレッド */
OSThread thread;
/* リトレース用 */
OSMesgQueue audioFrameMsgQ;
OSMesg audioFrameMsgBuf;
/* Gfx CPU 処理終了用 */
OSMesgQueue audioStartMsgQ;
OSMesg audioStartMsgBuf;
N_ALGlobals g;
} AMAudioMgr;
/* DMA BUFFER */
typedef struct
{
ALLink node;
u32 startAddr;
u32 lastFrame;
s8 *ptr;
} AMDMABuffer;
/* DMA STATE */
typedef struct
{
u8 initialized;
AMDMABuffer *firstUsed;
AMDMABuffer *firstFree;
} AMDMAState;
/*
* extern 宣言
*/
/* オーディオヒープ */
extern ALHeap hp;
/* シーケンスバンクファイル */
extern ALSeqFile *seqfile;
/* コンパクトシーケンスプレイヤー */
extern N_ALCSPlayer *seqp;
/* コンパクトシーケンス */
extern ALCSeq *seq;
/* オーディオマネージャ */
extern AMAudioMgr __am;
/* シーケンスデータへのポインタ */
extern u8 *seqptr;
/* サウンドプレイヤー */
extern N_ALSndPlayer *sndp;
/* サウンドへのポインタ */
extern ALSndId *sndid;
/*
* プロトタイプ宣言
*/
/* オーディオの初期化 */
void initAudio(void);