audio.h
4.13 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
/*============================================================================
NINTENDO64 TECHNICAL SUPPORT CENTER
NINTENDO64 SAMPLE PROGRAM 2
Copyright (C) 1997, NINTENDO Co,Ltd.
============================================================================*/
#ifndef _AUDIO_H_
#define _AUDIO_H_
/*------------------------- debug flag ----------------------------*/
#ifdef _AUDIO_DEBUG_
/*
以下のフラグを使用する場合は_AUDIO_DEBUG_フラグを有効にする
必要があります
*/
#undef _AUDIO_DEBUG_DMA_ /* DMA起動数の表示 */
#undef _AUDIO_DEBUG_PROC_ /* CPU占有率の表示 */
#endif /* _AUDIO_DEBUG */
/*------------------------- define --------------------------------*/
/*
コンパクトMIDI形式のデータを使用する場合は
このフラグを使用してください。
Type0 MIDIシーケンスプレイヤーを使用する場合は
unddefしてください
*/
#undef _AUDIO_COMPACTMIDI_
/*
この部分のパラメータは適宜変更する必要があります。
適当だとうまく動作しません。
*/
#define AUDIO_HEAP_SIZE 500000 /* ヒープ領域のサイズ */
#define AUDIO_CLIST_SIZE_MAX 5000 /* コマンドリストのバッファサイズ */
#define AUDIO_BUFFER_MAX 0x2000 /* シンセサイザ用バッファサイズ */
#define AUDIO_OUTPUT_RATE 44100 /* 周波数設定 */
#define AUDIO_VVOICE_MAX 64 /* 最大仮想ボイス数 */
#define AUDIO_PVOICE_MAX 32 /* 最大物理ボイス数 */
#define AUDIO_UPDATE_MAX 64 /* シンセサイザのパラメータ更新最大数 */
/* シーケンスプレイヤーのパラメータ設定 */
#define AUDIO_SEQ_VVOICE_MAX 64 /* 最大仮想ボイス数 */
#define AUDIO_SEQ_EVTCOUNT_MAX 64 /* イベント数 */
#define AUDIO_SEQ_CHANNEL_MAX 16 /* MIDIチャンネル数(普通は16) */
/* サウンドプレイヤーのパラメータ設定 */
#define AUDIO_SND_VOICE_MAX 32 /* 最大サウンド数 */
#define AUDIO_SND_EVTCOUNT_MAX 64 /* 最大イベント数 */
#define AUDIO_MESGS_MAX 8
/*
シーケンスデータバッファ
シーケンスデータファイルのうち最大値を設定
固定的にデータバッファを割り当てる
必要なら動的に割り当てるように変更してちょ
*/
#define AUDIO_SEQDATA_SIZE_MAX 0x10000
#define AUDIO_EXTRA_SAMPLES 80
/*
シーケンスプレイヤーで使用するDMA用のバッファ数
キャッシュ的に使用される仕組みでAUDIO_BUFFER_USE_FRAME数経過すると
消去される。実際にどの程度のDMAbuffer数・サイズが必要かは
ソフトにより異なるので、調べる必要がある。
*/
#define AUDIO_DMA_BUFFER_NUM 32 /* DMA buffer数 */
#define AUDIO_DMA_BUFFER_SIZE 2048 /* DMA buffer size */
#define AUDIO_DMA_QUEUE_SIZE 32 /* DMA message queue size */
#define AUDIO_BUFFER_USE_FRAME 2 /* DMABufferをクリアーするフレーム間隔 */
#define AUDIO_STACKSIZE 0x2000 /* audio thread stack size */
#define AUDIO_THREAD_PRI 50
#define AUDIO_THREAD_ID 5
#define AUDIO_NUM_FIELDS 1 /* リトレース間隔(1 or 2)*/
/*------------------------- values --------------------------------*/
/* シーケンスプレイヤー構造体 */
typedef struct {
ALSeqpConfig seqconfig;
#ifdef _AUDIO_COMPACTMIDI_
ALCSPlayer seqplayer; /* シーケンスプレイヤー構造体 */
ALCSeq sequence;
#else
ALSeqPlayer seqplayer; /* シーケンスプレイヤー構造体 */
ALSeq sequence;
#endif /*_AUDIO_COMPACTMIDI_ */
u8 *seqdata_ptr; /* シーケンスデータ */
u32 seqno; /* シーケンスNo. */
u32 state; /* シーケンスプレイヤーの状態 */
} Audio_seqplayer;
extern Audio_seqplayer seqplayer[2];
/*------------------------- functions --------------------------------*/
void auRomRead(u32 , void* , u32);
extern void auAudioInit(void);
extern void auReadMidiData(u32, u32);
extern void auReadSoundData(u32, u32);
extern void auReadSeqFileHeader(u32);
extern void auReadSeqFile(s32);
extern void auCleanDMABuffers(void);
extern void auCreateAudioThread(NNSched* );
extern void auSeqPlayerInit(u8* , u8*, u8*, u8*, u8*);
extern void auSeqPlayerSetFile(u32,s32);
extern int auSeqPlayerPlay(u32);
extern s32 auSeqPlayerState(u32);
extern void auSeqPlayerStop(u32);
extern void auSndPlayerInit(u8* ,u8* ,u8*);
extern void auSndPlay(u32);
extern void auSndStop(u32);
extern s32 auSndGetState(u32);
#endif /* _AUDIO_H_ */