]> 4ch.mooo.com Git - 16.git/blob - 16/adplug/adplug/src/mid.h
wwww~
[16.git] / 16 / adplug / adplug / src / mid.h
1 /*
2  * Adplug - Replayer for many OPL2/OPL3 audio file formats.
3  * Copyright (C) 1999 - 2008 Simon Peter, <dn.tlp@gmx.net>, et al.
4  * 
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  * 
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Lesser General Public License for more details.
14  * 
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18  *
19  * mid.h - LAA, SCI, MID & CMF Player by Philip Hassey <philhassey@hotmail.com>
20  */
21
22 #include "player.h"
23
24 class CmidPlayer: public CPlayer
25 {
26 public:
27   static CPlayer *factory(Copl *newopl);
28
29   CmidPlayer(Copl *newopl);
30   ~CmidPlayer()
31     { if(data) delete [] data; }
32
33   bool load(const std::string &filename, const CFileProvider &fp);
34   bool update();
35   void rewind(int subsong);
36   float getrefresh();
37
38   std::string gettype();
39   std::string gettitle()
40     { return std::string(title); }
41   std::string getauthor()
42     { return std::string(author); }
43   std::string getdesc()
44     { return std::string(remarks); }
45   unsigned int getinstruments()
46     { return tins; }
47   unsigned int getsubsongs()
48     { return subsongs; }
49
50  protected:
51   static const unsigned char adlib_opadd[];
52   static const int ops[], map_chan[], fnums[], percussion_map[];
53
54   struct midi_channel {
55     int inum;
56     unsigned char ins[11];
57     int vol;
58     int nshift;
59     int on;
60   };
61
62   struct midi_track {
63     unsigned long tend;
64     unsigned long spos;
65     unsigned long pos;
66     unsigned long iwait;
67     int on;
68     unsigned char pv;
69   };
70
71   char *author,*title,*remarks,emptystr;
72   long flen;
73   unsigned long pos;
74   unsigned long sierra_pos; //sierras gotta be special.. :>
75   int subsongs;
76   unsigned char *data;
77
78   unsigned char adlib_data[256];
79   int adlib_style;
80   int adlib_mode;
81   unsigned char myinsbank[128][16], smyinsbank[128][16];
82   midi_channel ch[16];
83   int chp[18][3];
84
85   long deltas;
86   long msqtr;
87
88   midi_track track[16];
89   unsigned int curtrack;
90
91   float fwait;
92   unsigned long iwait;
93   int doing;
94
95   int type,tins,stins;
96
97  private:
98   bool load_sierra_ins(const std::string &fname, const CFileProvider &fp);
99   void midiprintf(const char *format, ...);
100   unsigned char datalook(long pos);
101   unsigned long getnexti(unsigned long num);
102   unsigned long getnext(unsigned long num);
103   unsigned long getval();
104   void sierra_next_section();
105   void midi_write_adlib(unsigned int r, unsigned char v);
106   void midi_fm_instrument(int voice, unsigned char *inst);
107   void midi_fm_percussion(int ch, unsigned char *inst);
108   void midi_fm_volume(int voice, int volume);
109   void midi_fm_playnote(int voice, int note, int volume);
110   void midi_fm_endnote(int voice);
111   void midi_fm_reset();
112 };