10
|
1 /*
|
|
2 --> The Protracker Enums
|
|
3 -> For MikMod 3.0
|
|
4 */
|
|
5
|
|
6 #ifndef _PTFORM_H_
|
|
7 #define _PTFORM_H_
|
|
8
|
|
9 #ifdef __cplusplus
|
|
10 extern "C" {
|
|
11 #endif
|
|
12
|
|
13
|
|
14 extern UWORD mytab[12],logtab[104];
|
|
15 extern UBYTE VibratoTable[32],avibtab[128];
|
|
16 extern SBYTE PanbrelloTable[256];
|
|
17 extern ULONG lintab[768];
|
|
18
|
|
19
|
|
20 /**************************************************************************
|
|
21 ****** Unitrack stuff: ****************************************************
|
|
22 **************************************************************************/
|
|
23
|
|
24 // The UniTrack stuff is generally for internal use only, but would be
|
|
25 // required in making a tracker or a module player tha scrolls pattern
|
|
26 // data.
|
|
27
|
|
28 // prototypes:
|
|
29
|
|
30 extern void UniSetRow(UBYTE *t);
|
|
31 extern UBYTE UniGetByte(void);
|
|
32 extern UBYTE *UniFindRow(UBYTE *t,UWORD row);
|
|
33 extern void UniReset(void);
|
|
34 extern void UniWrite(UBYTE data);
|
|
35 extern void UniNewline(void);
|
|
36 extern UBYTE *UniDup(void);
|
|
37 extern void UniSkipOpcode(UBYTE op);
|
|
38 extern BOOL UniInit(void);
|
|
39 extern void UniCleanup(void);
|
|
40 extern UWORD TrkLen(UBYTE *t);
|
|
41 extern BOOL MyCmp(UBYTE *a, UBYTE *b, UWORD l);
|
|
42 extern void UniInstrument(UBYTE ins);
|
|
43 extern void UniNote(UBYTE note);
|
|
44 extern void UniPTEffect(UBYTE eff, UBYTE dat);
|
|
45 extern void UniVolEffect(UWORD eff, UBYTE dat);
|
|
46
|
|
47
|
|
48 // Enumaerated UniMod Commands
|
|
49
|
|
50 enum
|
|
51 { UNI_NOTE = 1,
|
|
52 UNI_INSTRUMENT,
|
|
53 UNI_PTEFFECT0,
|
|
54 UNI_PTEFFECT1,
|
|
55 UNI_PTEFFECT2,
|
|
56 UNI_PTEFFECT3,
|
|
57 UNI_PTEFFECT4,
|
|
58 UNI_PTEFFECT5,
|
|
59 UNI_PTEFFECT6,
|
|
60 UNI_PTEFFECT7,
|
|
61 UNI_PTEFFECT8,
|
|
62 UNI_PTEFFECT9,
|
|
63 UNI_PTEFFECTA,
|
|
64 UNI_PTEFFECTB,
|
|
65 UNI_PTEFFECTC,
|
|
66 UNI_PTEFFECTD,
|
|
67 UNI_PTEFFECTE,
|
|
68 UNI_PTEFFECTF,
|
|
69 UNI_S3MEFFECTA,
|
|
70 UNI_S3MEFFECTD,
|
|
71 UNI_S3MEFFECTE,
|
|
72 UNI_S3MEFFECTF,
|
|
73 UNI_S3MEFFECTI,
|
|
74 UNI_S3MEFFECTQ,
|
|
75 UNI_S3MEFFECTR,
|
|
76 UNI_S3MEFFECTT,
|
|
77 UNI_S3MEFFECTU,
|
|
78 UNI_KEYOFF,
|
|
79 UNI_KEYFADE,
|
|
80 UNI_VOLEFFECTS,
|
|
81 UNI_XMEFFECT4,
|
|
82 UNI_XMEFFECTA,
|
|
83 UNI_XMEFFECTE1,
|
|
84 UNI_XMEFFECTE2,
|
|
85 UNI_XMEFFECTEA,
|
|
86 UNI_XMEFFECTEB,
|
|
87 UNI_XMEFFECTG,
|
|
88 UNI_XMEFFECTH,
|
|
89 UNI_XMEFFECTL,
|
|
90 UNI_XMEFFECTP,
|
|
91 UNI_XMEFFECTX1,
|
|
92 UNI_XMEFFECTX2,
|
|
93 UNI_ITEFFECTG, // Porta to Note .. no kick=0;
|
|
94 UNI_ITEFFECTH, // IT specific Vibrato
|
|
95 UNI_ITEFFECTI, // IT tremor (xy not incremeneted)
|
|
96 UNI_ITEFFECTM, // Set Channel Volume
|
|
97 UNI_ITEFFECTN, // Slide / Fineslide Channel Volume
|
|
98 UNI_ITEFFECTP, // Slide / Fineslide Channel Panning
|
|
99 UNI_ITEFFECTU, // IT fine vibrato
|
|
100 UNI_ITEFFECTW, // Slide / Fineslide Global volume
|
|
101 UNI_ITEFFECTY, // The Satanic Panbrello
|
|
102 UNI_ITEFFECTS0,
|
|
103 UNI_LAST
|
|
104 };
|
|
105
|
|
106
|
|
107 // IT / S3M Extended SS effects:
|
|
108
|
|
109 enum
|
|
110 { SS_GLISSANDO = 1,
|
|
111 SS_FINETUNE,
|
|
112 SS_VIBWAVE,
|
|
113 SS_TREMWAVE,
|
|
114 SS_PANWAVE,
|
|
115 SS_FRAMEDELAY,
|
|
116 SS_S7EFFECTS,
|
|
117 SS_PANNING,
|
|
118 SS_SURROUND,
|
|
119 SS_HIOFFSET,
|
|
120 SS_PATLOOP,
|
|
121 SS_NOTECUT,
|
|
122 SS_NOTEDELAY,
|
|
123 SS_PATDELAY
|
|
124 };
|
|
125
|
|
126
|
|
127 // IT Volume column effects
|
|
128
|
|
129 enum
|
|
130 { VOL_VOLUME = 1,
|
|
131 VOL_PANNING,
|
|
132 VOL_VOLSLIDE,
|
|
133 VOL_PITCHSLIDEDN,
|
|
134 VOL_PITCHSLIDEUP,
|
|
135 VOL_PORTAMENTO,
|
|
136 VOL_VIBRATO
|
|
137 };
|
|
138
|
|
139
|
|
140 /**************************************************************************
|
|
141 ****** Instrument stuff: **************************************************
|
|
142 **************************************************************************/
|
|
143
|
|
144
|
|
145 // Instrument format flags
|
|
146 #define IF_OWNPAN 1
|
|
147 #define IF_PITCHPAN 2
|
|
148
|
|
149 // Envelope flags:
|
|
150
|
|
151 #define EF_ON 1
|
|
152 #define EF_SUSTAIN 2
|
|
153 #define EF_LOOP 4
|
|
154 #define EF_VOLENV 8
|
|
155
|
|
156 // New Note Action Flags
|
|
157
|
|
158 #define NNA_CUT 0
|
|
159 #define NNA_CONTINUE 1
|
|
160 #define NNA_OFF 2
|
|
161 #define NNA_FADE 3
|
|
162
|
|
163 #define DCT_OFF 0
|
|
164 #define DCT_NOTE 1
|
|
165 #define DCT_SAMPLE 2
|
|
166 #define DCT_INST 3
|
|
167
|
|
168 #define DCA_CUT 0
|
|
169 #define DCA_OFF 1
|
|
170 #define DCA_FADE 2
|
|
171
|
|
172 #define KEY_KICK 0
|
|
173 #define KEY_OFF 1
|
|
174 #define KEY_FADE 2
|
|
175 #define KEY_KILL 3
|
|
176
|
|
177 #define AV_IT 1 // IT vs. XM vibrato info
|
|
178
|
|
179
|
|
180 typedef struct ENVPT
|
|
181 { SWORD pos;
|
|
182 SWORD val;
|
|
183 } ENVPT;
|
|
184
|
|
185
|
|
186 typedef struct INSTRUMENT
|
|
187 {
|
|
188 UBYTE flags;
|
|
189
|
|
190 UBYTE samplenumber[120];
|
|
191 UBYTE samplenote[120];
|
|
192
|
|
193 UBYTE nnatype;
|
|
194 UBYTE dca; // duplicate check action
|
|
195 UBYTE dct; // duplicate check type
|
|
196 UBYTE globvol;
|
|
197 UWORD panning; // instrument-based panning var
|
|
198
|
|
199 UBYTE pitpansep; // pitch pan separation (0 to 255)
|
|
200 UBYTE pitpancenter; // pitch pan center (0 to 119)
|
|
201 UBYTE rvolvar; // random volume varations (0 - 100%)
|
|
202 UBYTE rpanvar; // random panning varations (0 - 100%)
|
|
203
|
|
204 UWORD volfade;
|
|
205
|
|
206 UBYTE volflg; // bit 0: on 1: sustain 2: loop
|
|
207 UBYTE volpts;
|
|
208 UBYTE volsusbeg;
|
|
209 UBYTE volsusend;
|
|
210 UBYTE volbeg;
|
|
211 UBYTE volend;
|
|
212 ENVPT volenv[32];
|
|
213
|
|
214 UBYTE panflg; // bit 0: on 1: sustain 2: loop
|
|
215 UBYTE panpts;
|
|
216 UBYTE pansusbeg;
|
|
217 UBYTE pansusend;
|
|
218 UBYTE panbeg;
|
|
219 UBYTE panend;
|
|
220 ENVPT panenv[32];
|
|
221
|
|
222 UBYTE pitflg; // bit 0: on 1: sustain 2: loop
|
|
223 UBYTE pitpts;
|
|
224 UBYTE pitsusbeg;
|
|
225 UBYTE pitsusend;
|
|
226 UBYTE pitbeg;
|
|
227 UBYTE pitend;
|
|
228 ENVPT pitenv[32];
|
|
229
|
|
230 // UBYTE vibtype;
|
|
231 // UBYTE vibsweep;
|
|
232 // UBYTE vibdepth;
|
|
233 // UBYTE vibrate;
|
|
234
|
|
235 CHAR *insname;
|
|
236
|
|
237 } INSTRUMENT;
|
|
238
|
|
239
|
|
240
|
|
241 /**************************************************************************
|
|
242 ****** Player stuff: ******************************************************
|
|
243 **************************************************************************/
|
|
244
|
|
245 typedef struct ENVPR
|
|
246 { UBYTE flg; // envelope flag
|
|
247 UBYTE pts; // number of envelope points
|
|
248 UBYTE susbeg; // envelope sustain index begin
|
|
249 UBYTE susend; // envelope sustain index end
|
|
250 UBYTE beg; // envelope loop begin
|
|
251 UBYTE end; // envelope loop end
|
|
252 SWORD p; // current envelope counter
|
|
253 UWORD a; // envelope index a
|
|
254 UWORD b; // envelope index b
|
|
255 ENVPT *env; // envelope points
|
|
256 } ENVPR;
|
|
257
|
|
258
|
|
259
|
|
260 // Struct MP_VOICE - Used by NNA only player (audio control. AUDTMP is
|
|
261 // used for full effects control).
|
|
262 typedef struct MP_VOICE
|
|
263 { INSTRUMENT *i;
|
|
264 SAMPLE *s;
|
|
265 UBYTE sample; // which instrument number
|
|
266
|
|
267 SWORD volume; // output volume (vol + sampcol + instvol)
|
|
268 UWORD panning; // panning position
|
|
269 SBYTE chanvol; // channel's "global" volume
|
|
270 UWORD fadevol; // fading volume rate
|
|
271 UWORD period; // period to play the sample at
|
|
272
|
|
273 UBYTE volflg; // volume envelope settings
|
|
274 UBYTE panflg; // panning envelope settings
|
|
275 UBYTE pitflg; // pitch envelope settings
|
|
276
|
|
277 UBYTE keyoff; // if true = fade out and stuff
|
|
278 UBYTE kick; // if true = sample has to be restarted
|
|
279 UBYTE note; // the audible note (as heard, direct rep of period)
|
|
280 UBYTE nna; // New note action type + master/slave flags
|
|
281 SWORD handle; // which sample-handle
|
|
282 SLONG start; // The start byte index in the sample
|
|
283
|
|
284
|
|
285 // ----------------------------------
|
|
286 // Below here is info NOT in MP_CONTROL!!
|
|
287 // ----------------------------------
|
|
288
|
|
289 ENVPR venv;
|
|
290 ENVPR penv;
|
|
291 ENVPR cenv;
|
|
292
|
|
293 UWORD avibpos; // autovibrato pos
|
|
294 UWORD aswppos; // autovibrato sweep pos
|
|
295
|
|
296 ULONG totalvol; // total volume of channel (before global mixings)
|
|
297
|
|
298 BOOL mflag;
|
|
299 SWORD masterchn;
|
|
300 struct MP_CONTROL *master;// index of "master" effects channel
|
|
301 } MP_VOICE;
|
|
302
|
|
303
|
|
304 typedef struct MP_CONTROL
|
|
305 { INSTRUMENT *i;
|
|
306 SAMPLE *s;
|
|
307 UBYTE sample; // which sample number
|
|
308 UBYTE note; // the audible note (as heard, direct rep of period)
|
|
309 SWORD outvolume; // output volume (vol + sampcol + instvol)
|
|
310 SBYTE chanvol; // channel's "global" volume
|
|
311 UWORD fadevol; // fading volume rate
|
|
312 UWORD panning; // panning position
|
|
313 UBYTE kick; // if true = sample has to be restarted
|
|
314 UBYTE muted; // if set, channel not played
|
|
315 UWORD period; // period to play the sample at
|
|
316 UBYTE nna; // New note action type + master/slave flags
|
|
317
|
|
318 UBYTE volflg; // volume envelope settings
|
|
319 UBYTE panflg; // panning envelope settings
|
|
320 UBYTE pitflg; // pitch envelope settings
|
|
321
|
|
322 UBYTE keyoff; // if true = fade out and stuff
|
|
323 SWORD handle; // which sample-handle
|
|
324 UBYTE notedelay; // (used for note delay)
|
|
325 SLONG start; // The starting byte index in the sample
|
|
326
|
|
327 struct MP_VOICE *slave;// Audio Slave of current effects control channel
|
|
328 UBYTE slavechn; // Audio Slave of current effects control channel
|
|
329 UBYTE anote; // the note that indexes the audible (note seen in tracker)
|
|
330 SWORD ownper;
|
|
331 SWORD ownvol;
|
|
332 UBYTE dca; // duplicate check action
|
|
333 UBYTE dct; // duplicate check type
|
|
334 UBYTE *row; // row currently playing on this channel
|
|
335 SBYTE retrig; // retrig value (0 means don't retrig)
|
|
336 ULONG speed; // what finetune to use
|
|
337 SWORD volume; // amiga volume (0 t/m 64) to play the sample at
|
|
338
|
|
339 SBYTE tmpvolume; // tmp volume
|
|
340 UWORD tmpperiod; // tmp period
|
|
341 UWORD wantedperiod; // period to slide to (with effect 3 or 5)
|
|
342 UBYTE pansspd; // panslide speed
|
|
343 UWORD slidespeed; //
|
|
344 UWORD portspeed; // noteslide speed (toneportamento)
|
|
345
|
|
346 UBYTE s3mtremor; // s3m tremor (effect I) counter
|
|
347 UBYTE s3mtronof; // s3m tremor ontime/offtime
|
|
348 UBYTE s3mvolslide; // last used volslide
|
|
349 UBYTE s3mrtgspeed; // last used retrig speed
|
|
350 UBYTE s3mrtgslide; // last used retrig slide
|
|
351
|
|
352 UBYTE glissando; // glissando (0 means off)
|
|
353 UBYTE wavecontrol; //
|
|
354
|
|
355 SBYTE vibpos; // current vibrato position
|
|
356 UBYTE vibspd; // "" speed
|
|
357 UBYTE vibdepth; // "" depth
|
|
358
|
|
359 SBYTE trmpos; // current tremolo position
|
|
360 UBYTE trmspd; // "" speed
|
|
361 UBYTE trmdepth; // "" depth
|
|
362
|
|
363 UBYTE fslideupspd;
|
|
364 UBYTE fslidednspd;
|
|
365 UBYTE fportupspd; // fx E1 (extra fine portamento up) data
|
|
366 UBYTE fportdnspd; // fx E2 (extra fine portamento dn) data
|
|
367 UBYTE ffportupspd; // fx X1 (extra fine portamento up) data
|
|
368 UBYTE ffportdnspd; // fx X2 (extra fine portamento dn) data
|
|
369
|
|
370 ULONG hioffset; // last used high order of sample offset
|
|
371 UWORD soffset; // last used low order of sample-offset (effect 9)
|
|
372
|
|
373 UBYTE sseffect; // last used Sxx effect
|
|
374 UBYTE ssdata; // last used Sxx data info
|
|
375 UBYTE chanvolslide; // last used channel volume slide
|
|
376
|
|
377 UBYTE panbwave; // current panbrello waveform
|
|
378 UBYTE panbpos; // current panbrello position
|
|
379 SBYTE panbspd; // "" speed
|
|
380 UBYTE panbdepth; // "" depth
|
|
381
|
|
382 UWORD newsamp; // set to 1 upon a sample / inst change
|
|
383 UBYTE voleffect; // Volume Column Effect Memory as used by Impulse Tracker
|
|
384 UBYTE voldata; // Volume Column Data Memory
|
|
385 } MP_CONTROL;
|
|
386
|
|
387
|
|
388 /******************************************************
|
|
389 ******** MikMod UniMod type: **************************
|
|
390 *******************************************************/
|
|
391
|
|
392 // UniMod flags
|
|
393 #define UF_XMPERIODS 1 // XM periods / finetuning
|
|
394 #define UF_LINEAR 2 // LINEAR periods (UF_XMPERIODS must be set as well)
|
|
395 #define UF_INST 4 // Instruments are used
|
|
396 #define UF_NNA 8 // New Note Actions used (set numvoices rather than numchn)
|
|
397
|
|
398
|
|
399 typedef struct UNIMOD
|
|
400 {
|
|
401 // This section of elements are all file-storage related.
|
|
402 // all of this information can be found in the UNIMOD disk format.
|
|
403 // For further details about there variables, see the MikMod Docs.
|
|
404
|
|
405 UWORD flags; // See UniMod Flags above
|
|
406 UBYTE numchn; // number of module channels
|
|
407 UBYTE numvoices; // max # voices used for full NNA playback
|
|
408 UWORD numpos; // number of positions in this song
|
|
409 UWORD numpat; // number of patterns in this song
|
|
410 UWORD numtrk; // number of tracks
|
|
411 UWORD numins; // number of instruments
|
|
412 UWORD numsmp; // number of samples
|
|
413 UWORD reppos; // restart position
|
|
414 UBYTE initspeed; // initial song speed
|
|
415 UBYTE inittempo; // initial song tempo
|
|
416 UBYTE initvolume; // initial global volume (0 - 128)
|
|
417 UWORD panning[64]; // 64 panning positions
|
|
418 UBYTE chanvol[64]; // 64 channel positions
|
|
419 CHAR *songname; // name of the song
|
|
420 CHAR *composer; // name of the composer
|
|
421 CHAR *comment; // module comments
|
|
422 UBYTE **tracks; // array of numtrk pointers to tracks
|
|
423 UWORD *patterns; // array of Patterns [pointers to tracks for each channel].
|
|
424 UWORD *pattrows; // array of number of rows for each pattern
|
|
425 UWORD *positions; // all positions
|
|
426 INSTRUMENT *instruments; // all instruments
|
|
427 SAMPLE *samples; // all samples
|
|
428
|
|
429 // following are the player-instance variables. They are in no way file
|
|
430 // storage related - they are for internal replay use only.
|
|
431
|
|
432 // All following variables can be modified at any time.
|
|
433
|
|
434 CHAR *modtype; // string type of module loaded
|
|
435 UBYTE bpm; // current beats-per-minute speed
|
|
436 UWORD sngspd; // current song speed
|
|
437 SWORD volume; // song volume (0-128) (or user volume)
|
|
438 BOOL extspd; // extended speed flag (default enabled)
|
|
439 BOOL panflag; // panning flag (default enabled)
|
|
440 BOOL loop; // loop module ? (default disabled)
|
|
441 BOOL forbid; // if true, no player update!
|
|
442
|
|
443 // The following variables are considered useful for reading, and should
|
|
444 // should not be directly modified by the end user.
|
|
445
|
|
446 MP_CONTROL *control; // Effects Channel information (pf->numchn alloc'ed)
|
|
447 MP_VOICE *voice; // Audio Voice information (md_numchn alloc'ed)
|
|
448 UWORD numrow; // number of rows on current pattern
|
|
449 UWORD vbtick; // tick counter (counts from 0 to sngspd)
|
|
450 UWORD patpos; // current row number
|
|
451 SWORD sngpos; // current song position. This should not
|
|
452 // be modified directly. Use MikMod_NextPosition,
|
|
453 // MikMod_PrevPosition, and MikMod_SetPosition.
|
|
454
|
|
455 // The following variables should not be modified, and have information
|
|
456 // that is pretty useless outside the internal player, so just ignore :)
|
|
457
|
|
458 UBYTE globalslide; // global volume slide rate
|
|
459 UWORD pat_reppos; // patternloop position
|
|
460 UWORD pat_repcnt; // times to loop
|
|
461 UWORD patbrk; // position where to start a new pattern
|
|
462 UBYTE patdly; // patterndelay counter (command memory)
|
|
463 UBYTE patdly2; // patterndelay counter (real one)
|
|
464 SWORD posjmp; // flag to indicate a position jump is needed...
|
|
465 // changed since 1.00: now also indicates the
|
|
466 // direction the position has to jump to:
|
|
467 // 0: Don't do anything
|
|
468 // 1: Jump back 1 position
|
|
469 // 2: Restart on current position
|
|
470 // 3: Jump forward 1 position
|
|
471
|
|
472 } UNIMOD;
|
|
473
|
|
474
|
|
475 /***************************************************
|
|
476 ****** Loader stuff: *******************************
|
|
477 ****************************************************/
|
|
478
|
|
479 // loader structure:
|
|
480
|
|
481 typedef struct MLOADER
|
|
482 { struct MLOADER *next;
|
|
483 CHAR *type;
|
|
484 CHAR *version;
|
|
485 BOOL (*Init)(void);
|
|
486 BOOL (*Test)(void);
|
|
487 BOOL (*Load)(void);
|
|
488 void (*Cleanup)(void);
|
|
489 CHAR *(*LoadTitle)(void);
|
|
490 } MLOADER;
|
|
491
|
|
492 // public loader variables:
|
|
493
|
|
494 extern FILE *modfp;
|
|
495 extern UWORD finetune[16];
|
|
496 extern UNIMOD of; // static unimod loading space
|
|
497 extern UWORD npertab[60]; // used by the original MOD loaders
|
|
498
|
|
499 // main loader prototypes:
|
|
500
|
|
501 void ML_InfoLoader(void);
|
|
502 void ML_RegisterLoader(MLOADER *ldr);
|
|
503 UNIMOD *MikMod_LoadSongFP(FILE *fp, int maxchan);
|
|
504 UNIMOD *MikMod_LoadSong(CHAR *filename, int maxchan);
|
|
505 void MikMod_FreeSong(UNIMOD *mf);
|
|
506
|
|
507
|
|
508 // other loader prototypes: (used by the loader modules)
|
|
509
|
|
510 BOOL InitTracks(void);
|
|
511 void AddTrack(UBYTE *tr);
|
|
512 BOOL ReadComment(UWORD len);
|
|
513 BOOL AllocPositions(int total);
|
|
514 BOOL AllocPatterns(void);
|
|
515 BOOL AllocTracks(void);
|
|
516 BOOL AllocInstruments(void);
|
|
517 BOOL AllocSamples(void);
|
|
518 CHAR *DupStr(CHAR *s, UWORD len);
|
|
519
|
|
520
|
|
521 // Declare external loaders:
|
|
522
|
|
523 extern MLOADER load_uni; // Internal UniMod Loader (Current version of UniMod only)
|
|
524 extern MLOADER load_mod; // Standard 31-instrument Module loader (Protracker, StarTracker, FastTracker, etc)
|
|
525 extern MLOADER load_m15; // 15-instrument (SoundTracker and Ultimate SoundTracker)
|
|
526 extern MLOADER load_mtm; // Multi-Tracker Module (by Renaissance)
|
|
527 extern MLOADER load_s3m; // ScreamTracker 3 (by Future Crew)
|
|
528 extern MLOADER load_stm; // ScreamTracker 2 (by Future Crew)
|
|
529 extern MLOADER load_ult; // UltraTracker
|
|
530 extern MLOADER load_xm; // FastTracker 2 (by Trition)
|
|
531 extern MLOADER load_it; // Impulse Tracker (by Jeffrey Lim)
|
|
532 extern MLOADER load_669; // 669 and Extended-669 (by Tran / Renaissance)
|
|
533 extern MLOADER load_dsm; // DSIK internal module format
|
|
534 extern MLOADER load_med; // MMD0 and MMD1 Amiga MED modules (by OctaMED)
|
|
535 extern MLOADER load_far; // Farandole Composer Module
|
|
536
|
|
537 // used to convert c4spd to linear XM periods (IT loader).
|
|
538 extern UWORD getlinearperiod(UBYTE note, ULONG fine);
|
|
539 extern ULONG getfrequency(UBYTE flags, ULONG period);
|
|
540
|
|
541
|
|
542 #define MP_HandleTick Player_HandleTick
|
|
543 #define ML_LoadFN(x,y) MikMod_LoadSong(x,y)
|
|
544 #define ML_LoadFP(x,y) MikMod_LoadSongFP(x,y)
|
|
545 #define MP_PlayStart(x) Player_Start(x)
|
|
546 #define MP_PlayStop Player_Stop
|
|
547
|
|
548
|
|
549 // MikMod Player Prototypes:
|
|
550 // ===========================================================
|
|
551 // This batch of prototypes affects the currently ACTIVE module
|
|
552 // set with MikMod_PlayStart)
|
|
553
|
|
554 extern void Player_Start(UNIMOD *mf);
|
|
555 extern BOOL Player_Active(void);
|
|
556 extern void Player_Stop(void);
|
|
557 extern void Player_TogglePause(void);
|
|
558 extern void Player_NextPosition(void);
|
|
559 extern void Player_PrevPosition(void);
|
|
560 extern void Player_SetPosition(UWORD pos);
|
|
561 extern void Player_Mute(SLONG arg1, ...);
|
|
562 extern void Player_UnMute(SLONG arg1, ...);
|
|
563 extern void Player_ToggleMute(SLONG arg1, ...);
|
|
564 extern BOOL Player_Muted(int chan);
|
|
565 extern void Player_HandleTick(void);
|
|
566 extern void Player_SetVolume(int volume);
|
|
567 extern UNIMOD *Player_GetUnimod(void);
|
|
568
|
|
569 extern BOOL Player_Init(UNIMOD *mf); // internal use only [by loader]
|
|
570 extern void Player_Exit(UNIMOD *mf); // internal use only [by loader]
|
|
571
|
|
572 // This batch of prototypes adheres closely to the old MikMod 2.10
|
|
573 // naming, and affects ANY specified module (need not be active,
|
|
574 // only loaded and initialized)
|
|
575
|
|
576 extern BOOL MP_Playing(UNIMOD *mf);
|
|
577 extern void MP_TogglePause(UNIMOD *mf);
|
|
578 extern void MP_NextPosition(UNIMOD *mf);
|
|
579 extern void MP_PrevPosition(UNIMOD *mf);
|
|
580 extern void MP_SetPosition(UNIMOD *mf, UWORD pos);
|
|
581 extern void MP_Mute(UNIMOD *mf, SLONG arg1, ...);
|
|
582 extern void MP_UnMute(UNIMOD *mf, SLONG arg1, ...);
|
|
583 extern void MP_ToggleMute(UNIMOD *mf, SLONG arg1, ...);
|
|
584 extern BOOL MP_Muted(UNIMOD *mf, int chan);
|
|
585
|
|
586 #ifdef __cplusplus
|
|
587 }
|
|
588 #endif
|
|
589
|
|
590 #endif
|
|
591
|