1 /*
2   Adplug - Replayer for many OPL2/OPL3 audio file formats.
3   Copyright (C) 1999 - 2003 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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
18 
19   fmc.h - FMC loader by Riven the Mage <riven@ok.ru>
20 */
21 
22 #include "protrack.h"
23 
24 class CfmcLoader: public CmodPlayer
25 {
26 	public:
27 		static CPlayer *factory(Copl *newopl);
28 
CfmcLoader(Copl * newopl)29 		CfmcLoader(Copl *newopl) : CmodPlayer(newopl) { };
30 
31 		bool	load(const std::string &filename, const CFileProvider &fp);
32 		float	getrefresh();
33 
34 		std::string	gettype();
35 		std::string	gettitle();
36 		std::string	getinstrument(unsigned int n);
37 		unsigned int	getinstruments();
38 
39 	private:
40 
41 		struct fmc_event
42 		{
43 			unsigned char   byte0;
44 			unsigned char   byte1;
45 			unsigned char   byte2;
46 		};
47 
48 		struct fmc_header
49 		{
50 			char            id[4];
51 			char            title[21];
52 			unsigned char   numchan;
53 		} header;
54 
55 		struct fmc_instrument
56 		{
57 			unsigned char   synthesis;
58 			unsigned char   feedback;
59 
60 			unsigned char   mod_attack;
61 			unsigned char   mod_decay;
62 			unsigned char   mod_sustain;
63 			unsigned char   mod_release;
64 			unsigned char   mod_volume;
65 			unsigned char   mod_ksl;
66 			unsigned char   mod_freq_multi;
67 			unsigned char   mod_waveform;
68 			unsigned char   mod_sustain_sound;
69 			unsigned char   mod_ksr;
70 			unsigned char   mod_vibrato;
71 			unsigned char   mod_tremolo;
72 			unsigned char   car_attack;
73 			unsigned char   car_decay;
74 			unsigned char   car_sustain;
75 			unsigned char   car_release;
76 			unsigned char   car_volume;
77 			unsigned char   car_ksl;
78 			unsigned char   car_freq_multi;
79 			unsigned char   car_waveform;
80 			unsigned char   car_sustain_sound;
81 			unsigned char   car_ksr;
82 			unsigned char   car_vibrato;
83 			unsigned char   car_tremolo;
84 
85 			signed char     pitch_shift;
86 
87 			char            name[21];
88 		} instruments[32];
89 
90 		void            buildinst(unsigned char i);
91 };
92