alCSeqPlayer.htm
5.91 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
<HTML>
<HEAD>
<TITLE>HTML 文書</TITLE>
<META NAME="GENERATOR" CONTENT="Internet Assistant for Microsoft Word 2.03j">
</HEAD>
<BODY>
<P>
<B><FONT FACE="Arial">alCSeqPlayer (3P)<BR>
</FONT></B>
<P>
<B>関数名<BR>
</B>
<P>
alCSeqPlayer
<P>
→ NINTENDO64コンパクトMIDIシーケンスプレイヤールーチン
<BR>
<P>
<B>構文<BR>
</B>
<P>
#include <libaudio.h>
<P>
void alCSPNew(ALCSPlayer *seqp, ALSeqpConfig *config);
<P>
void alCSPDelete(ALCSPlayer *seqp);
<P>
void alCSPSetSeq(ALCSPlayer *seqp, ALCSeq *seq);
<P>
ALCSeq *alCSPGetSeq(ALCSPlayer *seqp);
<P>
void alCSPSetBank(ALCSPlayer *seqp, ALBank *b);
<P>
s32 alCSPGetState(ALCSPlayer *seqp);
<P>
void alCSPPlay(ALCSPlayer *seqp);
<P>
void alCSPStop(ALCSPlayer *seqp);
<P>
void alCSPSetBank(ALCSPlayer *seqp, ALBank *b);
<P>
void alCSPSetTempo(ALCSPlayer *seqp, s32 tempo);
<P>
s32 alCSPGetTempo(ALCSPlayer *seqp);
<P>
s16 alCSPGetVol(ALCSPlayer *seqp);
<P>
void alCSPSetVol(ALCSPlayer *seqp, s16 vol);
<P>
void alCSPSetChlProgram(ALCSPlayer *seqp, u8 chan,
u8 prog);
<P>
s32 alCSPGetChlProgram(ALCSPlayer *seqp, u8 chan);
<P>
void alCSPSetChlFXMix(ALCSPlayer *seqp, u8 chan,
u8 fxmix);
<P>
u8 alCSPGetChlFXMix(ALCSPlayer *seqp, u8 chan);
<P>
void alCSPSetChlPan(ALCSPlayer *seqp, u8 chan, ALPan
pan);
<P>
ALPan alCSPGetChlPan(ALCSPlayer *seqp, u8 chan);
<P>
void alCSPSetChlVol(ALCSPlayer *seqp,u8 chan, u8
vol);
<P>
u8 alCSPGetChlVol(ALCSPlayer *seqp, u8 chan);
<P>
void alCSPSetChlPriority(ALCSPlayer *seqp, u8 chan,
<P>
u8 priority);
<P>
u8 alCSPGetChlPriority(ALCSPlayer *seqp, u8 chan);
<P>
void alCSPSendMidi(ALCSPlayer *seqp, long ticks,
u8 status,
<P>
u8 byte1, u8 byte2);<BR>
<P>
<B>説明<BR>
</B>
<P>
NINTEDNO64オーディオライブラリは、関数名がalSeqpで始まるType0のMIDIシーケンスプレイヤーとalCSPで始まるコンパクトMIDIシーケンスプレイヤーのどちらかを使うことにより、MIDIシーケンスの再生をサポートします。
<P>
このman pageは、コンパクトMIDIシーケンスプレイヤーの詳細を説明します。Type0のMIDIシーケンスプレイヤーの詳細については、alSeqpPlayerのman
pageを見てください。2つのMIDIDプレイヤーの原理的な違いは、ループ処理とデータの圧縮です。詳細は、NINTENDO64プログラムマニュアルのオーディオライブラリの章とオーディオフォーマットの章で説明されています。
<BR>
<P>
シーケンスプレイヤーは、シーケンスの再生処理をしますが、実際のシーケンスデータは、シーケンスによって処理されます。(alCSeq参照)
<BR>
<P>
圧縮シーケンスプレイヤーを使うには、最初にALCSPlayer構造体を初期化する必要があります。これは、<A HREF="alCSPNew.htm">alCSPNew</A>の呼び出しにより行われます。
<BR>
<P>
ALCSPlayer構造体の初期化後、<A HREF="alCSPSetBank.htm">alCSPSetBank</A>と<A HREF="alCSPSetSeq.htm">alCSPSetSeq</A>を呼び出して、バンクとシーケンスを設定する必要があります。
<BR>
<P>
シーケンスプレイヤーの演奏を開始するには <A HREF="alCSPPlay.htm">alCSPPlay</A>を呼び出し、シーケンスプレイヤーを停止するには
<A HREF="alCSPStop.htm">alCSPStop</A>を呼び出します。シーケンスプレイヤーは、一度に1つのシーケンスだけを扱うことが出来ます。別のシーケンスの演奏の前には演奏中のシーケンスを止めなければなりません。シーケンスの演奏中には、バンクの切り替えを行ってはなりません。alCSPGetStateを用いることによりシーケンスプレイヤーが完全に停止したかどうかを確認することが出来ます。<A HREF="alCSPStop.htm">alCSPStop</A>を呼び出すと、全てのシーケンスの処理が止まり、全ての音符をオフにします。
<BR>
<P>
シーケンスが停止したときに、巻き戻されずにカレント位置を保持します。これにより、<A HREF="alCSPPlay.htm">alCSPPlay</A>を呼び出すことでシーケンス演奏を停止位置から再開することが出来ます。<A HREF="alCSPStop.htm">alCSPStop</A>呼び出しにより停止したサスティン中の音符は再開されることはなく、新しい音符だけが処理されます。
<BR>
<P>
もし、シーケンスを巻き戻したり、シーケンスの別の位置に設定したいときには、<A HREF="alCSeqNewMarker.htm">alCSeqNewMarker</A>を呼び出して好みの位置にALCSeqMarkerマーカーを設定し、<A HREF="alCSeqSetLoc.htm">alCSeqSetLoc</A>を呼び出してシーケンスを巻き戻したり、位置を変更したりすることができます。これらの関数コールは、チャンネル再生状態に影響を与えないので、チャンネルパラメータ(例えば、プログラム、ボリューム、パンなど)はそのシーケンスの位置に合わせて設定をしなければならないことに注意してください。
<BR>
<P>
チャンネルパラメータは、それぞれの独立した関数呼び出しまたは、alCSPSendMidiにより、対応するMIDIデータを送信することで行うことが出来ます。alCSPSendMidiにより、音楽をリアルタイムに生成することが出来ます。
<BR>
<P>
圧縮MIDIシーケンスプレイヤーは、Type0のMIDIシーケンスプレイヤーがAPIを用いて生成するループのサポートは行いません。圧縮MIDIシーケンスプレイヤーを用いて音楽をループさせるには、シーケンス内部にループポイントを埋め込まなければなりません。ループポイントの詳細については、プログラミングマニュアルのオーディオライブラリの章に書かれています。
<BR>
<P>
<B>参照<BR>
</B>
<P>
<A HREF="alCSeq.htm">alCSeq(3P)</A>, <A HREF="alCSPNew.htm">alCSPNew(3P)</A>,
<A HREF="alCSPDelete.htm">alCSPDelete(3P)</A> , <A HREF="alCSPSetSeq.htm">alCSPSetSeq(3P)</A>,
<P>
<A HREF="alCSPGetSeq.htm">alCSPGetSeq(3P)</A>, <A HREF="alCSPPlay.htm">alCSPPlay(3P)</A>,
<A HREF="alCSPStop.htm">alCSPStop(3P)</A>, <A HREF="alCSPSetBank.htm">alCSPSetBank(3P)</A>,
<P>
<A HREF="alCSPSetTempo.htm">alCSPSetTempo(3P)</A>, <A HREF="alCSPGetTempo.htm">alCSPGetTempo(3P)</A>,
<A HREF="alCSPGetVol.htm">alCSPGetVol(3P)</A>, <A HREF="alCSPSetVol.htm">alCSPSetVol(3P),</A>
<P>
<A HREF="alCSPSetChlProgram.htm">alCSPSetChlProgram(3P)</A>, <A HREF="alCSPGetChlProgram.htm">alCSPGetChlProgram(3P)</A>,
<A HREF="alCSPSetChlFXMix.htm">alCSPSetChlFXMix(3P),</A>
<P>
<A HREF="alCSPGetChlFXMix.htm">alCSPGetChlFXMix(3P)</A>, <A HREF="alCSPSetChlPan.htm">alCSPSetChlPan(3P)</A>,
<A HREF="alCSPGetChlPan.htm">alCSPGetChlPan(3P)</A>,
<P>
<A HREF="alCSPSetChlVol.htm">alCSPSetChlVol(3P)</A>, <A HREF="alCSPGetChlVol.htm">alCSPGetChlVol(3P)</A>,
<A HREF="alCSPSetChlPriority.htm">alCSPSetChlPriority(3P)</A>,
<P>
<A HREF="alCSPGetChlPriority.htm">alCSPGetChlPriority(3P)</A>,
alCSPSendMidi(3P)<BR>
<P>
</BODY>
</HTML>