-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathzm16.txt
360 lines (292 loc) · 13.4 KB
/
zm16.txt
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
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
MEASURE16
付録
ZMUSIC用のC言語ライブラリに
ついて解説します。
16.1.ZMUSIC用C言語ライブラリの構成
ZMUSIC用のC言語ライブラリは以下の3つのファイルで構成されている。
ZMUSIC.L C言語用ライブラリ(ソースリストファイル名はZMLIB.HAS)
ZMUSIC.H C言語用インクルードファイル
ZMUSIC.DEF BC.X用DEFファイル
ZMLIB.HASからZMUSIC.Lを生成するには
A>HAS ZMLIB
A>LIB /U ZMUSIC.L ZMLIB.O
とする(HASはフリーソフトのハイスピードアセンブラ、LIBはCコンパイラPRO68kに
付属のライブラリアン)。
16.2.ZMUSIC.Hの利用法
自分のシステムの、インクルード・ファイルが格納してあるディレクトリに
ZMUSIC.Hをコピーする。
例
A>COPY ZMUSIC.H A:\INCLUDE
ZMUSIC.XをC言語のプログラムから使いたい場合は、そのプログラムの冒頭に
#INCLUDE <ZMUSIC.H>
の1行をつける。
なお、ZMUSIC.Hに含まれる関数の名前はMUSICZ.FNCとまったく同じである。
各関数の詳しい仕様はZMUSIC.H本体、またはMEASURE3のMUSICZ.FNCの項を参照のこと。
基本的にX-BASIC用外部関数であるMUSICZ.FNCにコンパチに作られているが、
一部の言語仕様の違いから互換でない関数もある。X-BASICでは配列の
要素数を関数側で自動認知することができるがC言語ではそれができない。そのため、
MUSICZ.FNCではパラメータの個数等を省略できた関数がZMUSIC.Hでは省略できない、
といった仕様変更のなされた関数がある(以下3つ)。
m_dirout()
m_exc()
m_roland()
またさらに、X-BASICではパラメータ個数を書かなくてもよかった関数も
C言語では書かせるような仕様に変更されたものがある(以下11個)。
sc55_reverb()
sc55_chorus()
sc55_part_setup()
sc55_drum_setup()
mt32_reverb()
mt32_part_setup()
mt32_drum_setup()
mt32_common()
mt32_patch()
mt32_partial()
u220_drum_inst()
MUSICZ.FNCにはなかったコマンドが新設されている。
m_wave_form2()
波形メモリ登録コマンド#2 (short int専用版/配列データ加工なし)
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ ZMUSIC.L関数一覧 ┃
┃ ┃
┃int m_alloc( int track_no, int buffer_size ); ┃
┃ ┃
┃int m_assign( int channel_no, int track_no ); ┃
┃ ┃
┃int m_vget( int tone_no, char *data_ptr ); ┃
┃ ┃
┃int m_vset( int tone_no, char *data_ptr ); ┃
┃ ┃
┃int m_tempo( int tempo ); /* tempo=-1でリクエスト */ ┃
┃ ┃
┃int m_trk( int track_no, char *MML_ptr ); ┃
┃ ┃
┃int m_free( int track_no ); ┃
┃ ┃
┃int m_play( int track_no1, int track_no2, int track_no3, int track_no4, ┃
┃ int track_no5, int track_no6, int track_no7, int track_no8, ┃
┃ int track_no9, int track_no10 ); ┃
┃ /* track_no1=0 で全トラック演奏開始 */ ┃
┃ /* track_no?=0 または 'NASI' 以降を無視する。 */ ┃
┃ ┃
┃int m_stat( int track_bit_pattern ); ┃
┃ /* track_bit_pattern=0 で全チャンネル検査 */ ┃
┃ ┃
┃int m_stop( int track_no1, int track_no2, int track_no3, int track_no4, ┃
┃ int track_no5, int track_no6, int track_no7, int track_no8, ┃
┃ int track_no9, int track_no10 ); ┃
┃ /* track_no1=0 で全トラック演奏停止 */ ┃
┃ /* track_no?=0 または 'NASI' 以降を無視する。 */ ┃
┃ ┃
┃int m_cont( int track_no1, int track_no2, int track_no3, int track_no4, ┃
┃ int track_no5, int track_no6, int track_no7, int track_no8, ┃
┃ int track_no9, int track_no10 ); ┃
┃ /* track_no1=0 で全トラック演奏継続 */ ┃
┃ /* track_no?=0 または 'NASI' 以降を無視する。 */ ┃
┃ ┃
┃void m_init( void ); ┃
┃ ┃
┃int m_atoi( int track_no ); ┃
┃ ┃
┃int m_assign2( char *channel, int track_no ); ┃
┃ ┃
┃void m_ch( char *device ); ┃
┃ ┃
┃int m_pcmset( int note_no, char *filename, ┃
┃ int pitch, int vol, int mix_note_no, int delay, ┃
┃ int cut, int reverse, int fade_in_out ); ┃
┃ /* int pitch以降のパラメータを省略する場合は 'NASI' とすること */ ┃
┃ ┃
┃void m_pcmplay( int note_no, int pan, int freq ); ┃
┃ ┃
┃void m_rec( void ); ┃
┃ ┃
┃void m_rstop( void ); ┃
┃ ┃
┃int m_save( char *filename ); ┃
┃ ┃
┃int m_trans( char *filename ); ┃
┃ ┃
┃int m_fmvset( int tone_no, char *data_ptr ); ┃
┃ ┃
┃int m_out( int d1, int d2, int d3, int d4, int d5, ┃
┃ int d6, int d7, int d8, int d9, int d10 ); ┃
┃ /* d?=-1 以降を無視する。 */ ┃
┃ ┃
┃int m_dirout( char *adrs, int size ); ┃
┃ /* sizeの省略不可 */ ┃
┃ ┃
┃int m_exc( char *adrs, int size ); ┃
┃ /* sizeの省略不可 */ ┃
┃ ┃
┃int m_roland( int devID, int modelID, char *adrs, int size ); ┃
┃ /* sizeの省略不可 */ ┃
┃ ┃
┃int m_total( void ); ┃
┃ ┃
┃int m_fadeout( int speed ); ┃
┃ ┃
┃int m_pcmcnf( char *filename ); ┃
┃ ┃
┃int sc55_v_reserve( char *adrs, int devID ); ┃
┃ /* size=16 */ ┃
┃ ┃
┃int sc55_reverb( char *adrs, int devID, int size ); ┃
┃ /* size=7 */ ┃
┃ ┃
┃int sc55_chorus( char *adrs, int devID, int size ); ┃
┃ /* size=8 */ ┃
┃ ┃
┃int sc55_part_setup( char part_no, char *adrs, int devID, int size ); ┃
┃ /* size=119 */ ┃
┃ ┃
┃int sc55_drum_setup( char map_no, char note_no, ┃
┃ char *adrs, int devID, int size ); ┃
┃ /* size=8 */ ┃
┃ ┃
┃int sc55_print( char *message, int devID ); ┃
┃ /* size=32 */ ┃
┃ ┃
┃int sc55_display( int *pattern, int devID ); ┃
┃ ┃
┃int m_adpcm_block( char *filename ); ┃
┃ ┃
┃int mt32_p_reserve( char *adrs, int devID ); ┃
┃ /* size=9 */ ┃
┃ ┃
┃int mt32_reverb( char *adrs, int devID, int size ); ┃
┃ /* size=3 */ ┃
┃ ┃
┃int mt32_part_setup( char *adrs, int devID, int size ); ┃
┃ /* size=9 */ ┃
┃ ┃
┃int mt32_drum_setup( char note_no, char *adrs, int devID, int size ); ┃
┃ /* size=4 */ ┃
┃ ┃
┃int mt32_common( char timbre_no, char *timbre_name, ┃
┃ char *adrs, int devID, int size ); ┃
┃ /* size=4 */ ┃
┃ ┃
┃int mt32_patch( char patch_no, char *adrs, int devID, int size ); ┃
┃ /* size=7 */ ┃
┃ ┃
┃int mt32_partial( char timbre_no, char partial_no, ┃
┃ char *adrs, int devID, int size ); ┃
┃ /* size=58 */ ┃
┃ ┃
┃int mt32_print( char *message, int devID ); ┃
┃ /* size=20 */ ┃
┃ ┃
┃int m_print( char *message ); ┃
┃ /* size=96 */ ┃
┃ ┃
┃int u220_setup( char *adrs, int devID ); ┃
┃ /* size=7 */ ┃
┃ ┃
┃int u220_common( char *adrs, int devID ); ┃
┃ /* size=17 */ ┃
┃ ┃
┃int u220_drum_setup( char *adrs, int devID ); ┃
┃ /* size=7 */ ┃
┃ ┃
┃int u220_part_setup( char part_no, char *adrs, int devID ); ┃
┃ /* size=13 */ ┃
┃ ┃
┃int u220_timbre( char timbre_no, char *timbre_name, ┃
┃ char *adrs, int devID ); ┃
┃ /* size=26 */ ┃
┃ ┃
┃int u220_drum_inst( char note_no, char *adrs, int devID, int size ); ┃
┃ /* size=20 */ ┃
┃ ┃
┃int u220_print( char *message, int devID ); ┃
┃ /* size=12 */ ┃
┃ ┃
┃int m1_midi_ch( char *midi_ch_list ); ┃
┃ /* size=8 */ ┃
┃ ┃
┃int m1_part_setup( char *track_param ); ┃
┃ /* size=40 */ ┃
┃ ┃
┃int m1_effect_setup( char *effect_param ); ┃
┃ /* size=25 */ ┃
┃ ┃
┃int m1_print( char *message ); ┃
┃ /* size=10 */ ┃
┃ ┃
┃int send_to_m1( int devID ); ┃
┃ ┃
┃int zmd_play( char *filename ); ┃
┃ ┃
┃void m_debug( char mode ); ┃
┃ ┃
┃int m_count( char count ); ┃
┃ ┃
┃int fm_master( char volume ); ┃
┃ ┃
┃int m_mute( int ch_no1, int ch_no2, int ch_no3, int ch_no4, ┃
┃ int ch_no5, int ch_no6, int ch_no7, int ch_no8, ┃
┃ int ch_no9, int ch_no10 ); ┃
┃ /* ch_no1=0 で全トラック演奏継続 */ ┃
┃ /* ch_no?=0 または 'NASI' 以降を無視する。 */ ┃
┃ ┃
┃int m_solo( int ch_no1, int ch_no2, int ch_no3, int ch_no4, ┃
┃ int ch_no5, int ch_no6, int ch_no7, int ch_no8, ┃
┃ int ch_no9, int ch_no10 ); ┃
┃ /* ch_no1=0 で全トラック演奏継続 */ ┃
┃ /* ch_no?=0 または 'NASI' 以降を無視する。 */ ┃
┃ ┃
┃int m_wave_form( char wave_no, char loop_type, int loop_point, ┃
┃ int *wave_data, int size ); ┃
┃ ┃
┃int m_wave_form2( char wave_no, char loop_type, int loop_point, ┃
┃ short int *wave_data, int size ); ┃
┃ ┃
┃int sc55_init( int devID ); ┃
┃ ┃
┃int mt32_init( int devID ); ┃
┃ ┃
┃void adpcm_to_pcm( char *source, int size, int *destination ); ┃
┃ /* destinationの配列サイズはsourceの4倍必要 ┃
┃ また、sizeはADPCMデータの個数 */ ┃
┃ ┃
┃void pcm_to_adpcm( int *source, int size, char *destination ); ┃
┃ /* destinationの配列サイズはsourceの1/4倍必要 ┃
┃ また、sizeはPCMデータの個数 */ ┃
┃ ┃
┃void exec_zms( char *zms_line ); ┃
┃ ┃
┃int m_inp( char inp_mode ); /* inp_mode≠0でループモード */ ┃
┃ ┃
┃int zm_ver( void ); ┃
┃ ┃
┃int m_trk2( char *MML_ptr, ┃
┃ int track_no1, int track_no2, int track_no3 ,int track_no4, ┃
┃ int track_no5, int track_no6, int track_no7 ,int track_no8 ); ┃
┃ /* track_no?=0 または 'NASI' 以降を無視する。 */ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
16.3.ZMUSIC.DEFの利用法
ZMUSICを利用したX-BASICのプログラムをコンパイルする時に使用する。
まず、自分のシステムの、BC.X(X-BASICをC言語へコンバートするプログラム、
C言語PRO68Kに付属)が格納してあるディレクトリにZMUSIC.DEFをコピーする。
例
A>COPY ZMUSIC.DEF A:\BC
そのディレクトリ内のBASIC.CNFというファイルを開き
FUNC=ZMUSIC
の1行を加えてセーブする。BASIC.CNF中に
FUNC=MUSIC
FUNC=MUSIC2
FUNC=MUSIC3
などが記述してある場合は、それらをすべて削除する(同名の関数が存在しているため
誤動作する可能性がある)。
16.4.ZMUSIC.Lの利用法
コンパイルする時にライブラリファイルとして利用するには、まず自分のシステムの
ライブラリファイルが格納してあるディレクトリにZMUSIC.Lをコピーする。
例
A>COPY ZMUSIC.L A:\LIB
コンパイルしてできるオブジェクトにZMUSIC.Lをリンクし実行ファイルを得るには、
例 ZMUSIC.Xを使用したX-BASICのプログラムをコンパイルする場合
A>CC ????.BAS ZMUSIC.L
例 ZMUSIC.Xを使用したC言語のプログラムをコンパイルする場合
A>CC ????.C ZMUSIC.L
のようにする。