nualstl.h
12 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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
/*======================================================================*/
/* NuSYS Audio Library for SoundTools Library & n_audio */
/* nualstl_n.h */
/* */
/* Copyright (C) 1997, NINTENDO Co,Ltd. */
/* */
/*======================================================================*/
/* $Id: nualstl.h,v 1.1.1.1 2002/10/30 02:07:09 blythe Exp $ */
/*======================================================================*/
#ifndef _NUALSTL_H_
#define _NUALSTL_H_
#ifdef _LANGUAGE_C_PLUS_PLUS
extern "C" {
#endif
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
/* DEFINE */
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
#define NU_AU_SEQPLAYER_NUM 2
#define NU_AU_FIFO_LENGTH 64
#define NU_AU_CHANNELS 24
#define NU_AU_SYN_UPDATE_MAX 256
/*--------------------------------------*/
/* AUDIO DMA DEFINE */
/*--------------------------------------*/
#define NU_AU_DMA_BUFFER_NUM 64 /* DMA転送バッファ数 */
#define NU_AU_DMA_BUFFER_SIZE 1024 /* DMAバッファサイズ */
/*--------------------------------------*/
/* SOUND DEFINE */
/*--------------------------------------*/
#define NU_AU_MGR_THREAD_PRI 70
#define NU_AU_MGR_THREAD_ID 6
#define NU_AU_CLIST_LEN 0x800 /* コマンドリストのバッファサイズ */
#define NU_AU_OUTPUT_RATE 32000 /* 周波数設定 */
#define NU_AU_MESG_MAX 4
#define NU_AU_HEAP_SIZE 0x50000 /* デフォルトのHEAPサイズ */
#define NU_AU_HEAP_ADDR (NU_GFX_FRAMEBUFFER_ADDR - NU_AU_HEAP_SIZE)
#define NU_AU_SONG_SIZE 0x4000
#define NU_AU_SAMPLE_SIZE 0x4000
#define NU_AU_SE_SIZE 0x4000
#define NU_AU_TASK_STOP 0 /* オーディオタスク実行停止 */
#define NU_AU_TASK_RUN 1 /* オーディオタスク実行可 */
#define NU_AU_SEQ_PLAYER0 0
#define NU_AU_SEQ_PLAYER1 1
#if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
#include <ultra64.h>
#include <PR/libmus.h>
#include <PR/libmus_data.h>
#ifdef N_AUDIO
#include <PR/n_libaudio_sc.h>
#include <PR/n_libaudio_sn_sc.h>
#endif /* N_AUDIO */
/*--------------------------------------*/
/* audio typedef */
/*--------------------------------------*/
/* シーケンスプレイヤー構造体 */
typedef struct st_Seqence {
musHandle handle;
u8* data_ptr; /* シーケンスデータ */
} NUAuSeqPlayer;
/*--------------------------------------*/
/* CALL BACK Function typedef */
/*--------------------------------------*/
typedef void (*NUAuPreNMIFunc)(NUScMsg,u32); /* PRENMIコールバック関数 */
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
/* extern variables */
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
/*--------------------------------------*/
/* audio variables */
/*--------------------------------------*/
extern u8 nuAuTaskStop;
extern u8 nuAuPreNMI;
extern NUAuPreNMIFunc nuAuPreNMIFunc;
extern void* nuAuEffect_ptr;
extern void* nuAuPtrBank_ptr;
extern NUScTask nuAuTask;
extern OSMesgQueue nuAuMesgQ;
extern NUAuSeqPlayer nuAuSeqPlayer[];
extern musConfig nuAuStlConfig;
extern NUScClient nuAuClient;
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
/* Global Function */
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
/*--------------------------------------*/
/* audio manager function */
/*--------------------------------------*/
extern s32 nuAuStlInit(void);
extern s32 nuAuStlMgrInit(musConfig* config);
extern void nuAuStlPtrBankInit(u32 pbk_size);
extern void nuAuStlPtrBankSet(u8* pbk_addr, u32 pbk_size, u8* wbk_addr);
extern void nuAuStlSeqPlayerInit(u32 player_no, u32 size);
extern void nuAuStlSeqPlayerDataSet(u32 player_no, u8 *seq_addr, u32 seq_size);
extern musHandle nuAuStlSeqPlayerPlay(u32 player_no);
extern void nuAuStlSndPlayerInit(u32 size);
extern u32 nuAuStlSndPlayerPlay(u32 sndNo);
extern u32 nuAuStlSndPlayerPlay2(u32 sndNo, s32 volume, s32 pan, s32 restartflag, s32 priority);
extern void nuAuStlSndPlayerDataSet(u8* snd_addr, u32 snd_size);
extern void nuAuPreNMIFuncSet(NUAuPreNMIFunc func);
extern void nuAuPreNMIProc(NUScMsg mesg_type, u32 frameCounter);
extern void nuAuStlSndPlayerSetData(u8 *snd_addr, u32 snd_size);
extern void* nuAuStlHeapAlloc(s32 length);
extern s32 nuAuStlHeapGetFree(void);
extern s32 nuAuStlHeapGetUsed(void);
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
/* MACRO */
/*----------------------------------------------------------------------*/
/*----------------------------------------------------------------------*/
/* コールバック関数の削除 */
#define nuAuPreNMIFuncRemove() nuAuPreNMIFuncSet(NULL)
/*----------------------------------------------------------------------*/
/* nuAuStlSeqPlayerGetState - シーケンスプレイヤーの状態を取得 */
/* IN: 無し */
/* RET: シーケンスプレイヤーが使用中のチャンネル数 */
/*----------------------------------------------------------------------*/
#define nuAuStlSeqPlayerGetState() \
MusAsk(MUSFLAG_SONGS)
/*----------------------------------------------------------------------*/
/* nuAuStlSeqPlayerStop - 全シーケンスの演奏停止 */
/* IN: speed 停止するまでのフレーム数 */
/*----------------------------------------------------------------------*/
#define nuAuStlSeqPlayerStop(speed) \
MusStop(MUSFLAG_SONGS, speed)
/*----------------------------------------------------------------------*/
/* nuAuStlSeqPlayerSetMasterVol - シーケンス全体のボリューム設定 */
/* IN: vol ボリューム (0 - 0x7fff) */
/*----------------------------------------------------------------------*/
#define nuAuStlSeqPlayerSetMasterVol(vol) \
MusSetMasterVolume(MUSFLAG_SONGS, vol)
/*----------------------------------------------------------------------*/
/* nuAuStlSeqPlayerGetSeqState - シーケンスの状態を取得 */
/* IN: player_no シーケンスプレイヤー番号 */
/* RET: 現在演奏中のチャンネル数 */
/*----------------------------------------------------------------------*/
#define nuAuStlSeqPlayerGetSeqState(player_no) \
MusHandleAsk(nuAuSeqPlayer[player_no].handle)
/*----------------------------------------------------------------------*/
/* nuAuStlSeqPlayerSeqStop - シーケンスの演奏停止 */
/* IN: player_no シーケンスプレイヤー番号 */
/* speed 停止するまでのフレーム数 */
/*----------------------------------------------------------------------*/
#define nuAuStlSeqPlayerSeqStop(player_no, speed) \
MusHandleStop(nuAuSeqPlayer[player_no].handle, speed)
/*----------------------------------------------------------------------*/
/* nuAuStlSeqPlayerSetSeqTempo - シーケンスのテンポ設定 */
/* IN: player_no シーケンスプレイヤー番号 */
/* tempo テンポ (0 - 0x100) */
/*----------------------------------------------------------------------*/
#define nuAuStlSeqPlayerSetSeqTempo(player_no, tempo) \
MusHandleSetTempo(nuAuSeqPlayer[player_no].handle, tempo)
/*----------------------------------------------------------------------*/
/* nuAuStlSeqPlayerSetSeqVol - シーケンスのボリューム設定 */
/* IN: player_no シーケンスプレイヤー番号 */
/* vol ボリュームスケール (0 - 0x100) */
/*----------------------------------------------------------------------*/
#define nuAuStlSeqPlayerSetSeqVol(player_no, vol) \
MusHandleSetVolume(nuAuSeqPlayer[player_no].handle, vol)
/*----------------------------------------------------------------------*/
/* nuAuStlSeqPlayerSetSeqPan - シーケンスのパン位置の設定 */
/* IN: player_no シーケンスプレイヤー番号 */
/* pan パンスケール */
/* 0=左 0x80=中央 0x100=右 */
/*----------------------------------------------------------------------*/
#define nuAuStlSeqPlayerSetSeqPan(player_no, pan) \
MusHandleSetPan(nuAuSeqPlayer[player_no].handle, pan )
/*----------------------------------------------------------------------*/
/* nuAuStlSndPlayerGetState - サウンドプレイヤーの状態を取得 */
/* IN: 無し */
/* RET: 現在演奏中のチャンネル数 */
/*----------------------------------------------------------------------*/
#define nuAuStlSndPlayerGetState() \
MusAsk(MUSFLAG_EFFECTS)
/*----------------------------------------------------------------------*/
/* nuAuStlSndPlayerStop - 全サウンドの再生を停止 */
/* IN: speed 停止するまでのフレーム数 */
/*----------------------------------------------------------------------*/
#define nuAuStlSndPlayerStop(speed) \
MusStop(MUSFLAG_EFFECTS, speed)
/*----------------------------------------------------------------------*/
/* nuAuStlSndPlayerSetMasterVol - サウンド全体のボリュームを設定 */
/* IN: vol ボリューム (0 - 0x7fff) */
/*----------------------------------------------------------------------*/
#define nuAuStlSndPlayerSetMasterVol(vol) \
MusSetMasterVolume(MUSFLAG_EFFECTS, vol)
/*----------------------------------------------------------------------*/
/* nuAuStlSndPlayerGetSndState - サウンドの状態を取得 */
/* IN: handle サウンド・ハンドラ */
/* 無し */
/* RET: 現在演奏中のチャンネル数 */
/*----------------------------------------------------------------------*/
#define nuAuStlSndPlayerGetSndState(handle) \
MusHandleAsk(handle)
/*----------------------------------------------------------------------*/
/* nuAuStlSndPlayerSndStop - サウンドの演奏停止 */
/* IN: handle サウンド・ハンドラ */
/* speed 停止するまでのフレーム数 */
/*----------------------------------------------------------------------*/
#define nuAuStlSndPlayerSndStop(handle, speed) \
MusHandleStop(handle, speed)
/*----------------------------------------------------------------------*/
/* nuAuStlSndPlayerSetSndVol - サウンドのボリューム設定 */
/* IN: handle サウンド・ハンドラ */
/* vol ボリュームスケール (0 - 0x100) */
/*----------------------------------------------------------------------*/
#define nuAuStlSndPlayerSetSndVol(handle, vol) \
MusHandleSetVolume(handle, vol)
/*----------------------------------------------------------------------*/
/* nuAuStlSndPlayerSetSndPan - サウンドのパン位置の設定 */
/* IN: handle サウンド・ハンドラ */
/* pan パンスケール */
/* 0=左 0x80=中央 0x100=右 */
/*----------------------------------------------------------------------*/
#define nuAuStlSndPlayerSetSndPan(handle, pan) \
MusHandleSetPan(handle, pan )
/*----------------------------------------------------------------------*/
/* nuAuStlSndPlayerSetSndPitch - サウンドのピッチを設定 */
/* IN: handle サウンド・ハンドラ */
/* pitch ピッチ値 (-6.0 - +6.0) */
/*----------------------------------------------------------------------*/
#define nuAuStlSndPlayerSetSndPitch(handle, pitch) \
MusHandleSetFreqOffset(handle, pitch)
/************************************************************************/
/* ベータ版との名前の変更の吸収(非推奨) */
/************************************************************************/
#define nuAuStlBankSet(pbk_addr, pbk_size, wbk_addr) \
{ \
nuAuStlPtrBankInit(pbk_size); \
nuAuStlPtrBankSet(pbk_addr, pbk_size, wbk_addr); \
}
/************************************************************************/
/* このマクロは以前のバージョンとの互換性の為にあります。 */
/* 将来的には無くすので、名前のほうを変更してください。 */
/************************************************************************/
#define nuAuStlSeqPlayerSetData(player_no, seq_addr, seq_size) \
nuAuStlSeqPlayerDataSet(player_no, seq_addr, seq_size)
#define nuAuStlSndPlayerSetData(snd_addr, snd_size) \
nuAuStlSndPlayerDataSet(snd_addr, snd_size)
#define nuAuStlPlayerInit(c, size) ((void)0);
#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */
#ifdef _LANGUAGE_C_PLUS_PLUS
}
#endif
#endif /* _NUALSTL_H__ */