Mercurial > audlegacy
comparison Plugins/Input/adplug/core/adplug.cpp @ 359:8df427a314a8 trunk
[svn] Adlib synthesizer (AdPlug) support.
author | chainsaw |
---|---|
date | Fri, 30 Dec 2005 16:31:39 -0800 |
parents | |
children | eb41901d38f5 |
comparison
equal
deleted
inserted
replaced
358:70075730e187 | 359:8df427a314a8 |
---|---|
1 /* | |
2 * Adplug - Replayer for many OPL2/OPL3 audio file formats. | |
3 * Copyright (C) 1999 - 2005 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 * adplug.cpp - CAdPlug utility class, by Simon Peter <dn.tlp@gmx.net> | |
20 */ | |
21 | |
22 #include <string> | |
23 #include <binfile.h> | |
24 | |
25 #include "adplug.h" | |
26 #include "debug.h" | |
27 | |
28 /***** Replayer includes *****/ | |
29 | |
30 #include "hsc.h" | |
31 #include "amd.h" | |
32 #include "a2m.h" | |
33 #include "imf.h" | |
34 #include "sng.h" | |
35 #include "adtrack.h" | |
36 #include "bam.h" | |
37 #include "d00.h" | |
38 #include "dfm.h" | |
39 #include "hsp.h" | |
40 #include "ksm.h" | |
41 #include "mad.h" | |
42 #include "mid.h" | |
43 #include "mkj.h" | |
44 #include "cff.h" | |
45 #include "dmo.h" | |
46 #include "s3m.h" | |
47 #include "dtm.h" | |
48 #include "fmc.h" | |
49 #include "mtk.h" | |
50 #include "rad.h" | |
51 #include "raw.h" | |
52 #include "sa2.h" | |
53 #include "bmf.h" | |
54 #include "flash.h" | |
55 #include "hybrid.h" | |
56 #include "hyp.h" | |
57 #include "psi.h" | |
58 #include "rat.h" | |
59 #include "lds.h" | |
60 #include "u6m.h" | |
61 #include "rol.h" | |
62 #include "xsm.h" | |
63 #include "dro.h" | |
64 | |
65 /***** Defines *****/ | |
66 | |
67 #define VERSION "1.5.1" // AdPlug library version string | |
68 | |
69 /***** CAdPlug *****/ | |
70 | |
71 // List of all players that come with the standard AdPlug distribution | |
72 const CPlayerDesc CAdPlug::allplayers[] = { | |
73 CPlayerDesc(ChscPlayer::factory, "HSC-Tracker", ".hsc\0"), | |
74 CPlayerDesc(CsngPlayer::factory, "SNGPlay", ".sng\0"), | |
75 CPlayerDesc(CimfPlayer::factory, "Apogee IMF", ".imf\0.wlf\0.adlib\0"), | |
76 CPlayerDesc(Ca2mLoader::factory, "Adlib Tracker 2", ".a2m\0"), | |
77 CPlayerDesc(CadtrackLoader::factory, "Adlib Tracker", ".sng\0"), | |
78 CPlayerDesc(CamdLoader::factory, "AMUSIC", ".amd\0"), | |
79 CPlayerDesc(CbamPlayer::factory, "Bob's Adlib Music", ".bam\0"), | |
80 CPlayerDesc(Cd00Player::factory, "Packed EdLib", ".d00\0"), | |
81 CPlayerDesc(CdfmLoader::factory, "Digital-FM", ".dfm\0"), | |
82 CPlayerDesc(ChspLoader::factory, "HSC Packed", ".hsp\0"), | |
83 CPlayerDesc(CksmPlayer::factory, "Ken Silverman Music", ".ksm\0"), | |
84 CPlayerDesc(CmadLoader::factory, "Mlat Adlib Tracker", ".mad\0"), | |
85 CPlayerDesc(CmidPlayer::factory, "MIDI", ".mid\0.cmf\0.sci\0.laa\0"), | |
86 CPlayerDesc(CmkjPlayer::factory, "MKJamz", ".mkj\0"), | |
87 CPlayerDesc(CcffLoader::factory, "Boomtracker", ".cff\0"), | |
88 CPlayerDesc(CdmoLoader::factory, "TwinTeam", ".dmo\0"), | |
89 CPlayerDesc(Cs3mPlayer::factory, "Scream Tracker 3", ".s3m\0"), | |
90 CPlayerDesc(CdtmLoader::factory, "DeFy Adlib Tracker", ".dtm\0"), | |
91 CPlayerDesc(CfmcLoader::factory, "Faust Music Creator", ".sng\0"), | |
92 CPlayerDesc(CmtkLoader::factory, "MPU-401 Trakker", ".mtk\0"), | |
93 CPlayerDesc(CradLoader::factory, "Reality Adlib Tracker", ".rad\0"), | |
94 CPlayerDesc(CrawPlayer::factory, "RdosPlay RAW", ".raw\0"), | |
95 CPlayerDesc(Csa2Loader::factory, "Surprise! Adlib Tracker", ".sat\0.sa2\0"), | |
96 CPlayerDesc(CxadbmfPlayer::factory, "BMF Adlib Tracker", ".xad\0"), | |
97 CPlayerDesc(CxadflashPlayer::factory, "Flash", ".xad\0"), | |
98 CPlayerDesc(CxadhybridPlayer::factory, "Hybrid", ".xad\0"), | |
99 CPlayerDesc(CxadhypPlayer::factory, "Hypnosis", ".xad\0"), | |
100 CPlayerDesc(CxadpsiPlayer::factory, "PSI", ".xad\0"), | |
101 CPlayerDesc(CxadratPlayer::factory, "rat", ".xad\0"), | |
102 CPlayerDesc(CldsPlayer::factory, "LOUDNESS Sound System", ".lds\0"), | |
103 CPlayerDesc(Cu6mPlayer::factory, "Ultima 6 Music", ".m\0"), | |
104 CPlayerDesc(CrolPlayer::factory, "Adlib Visual Composer", ".rol\0"), | |
105 CPlayerDesc(CxsmPlayer::factory, "eXtra Simple Music", ".xsm\0"), | |
106 CPlayerDesc(CdroPlayer::factory, "DOSBox Raw OPL", ".dro\0"), | |
107 CPlayerDesc() | |
108 }; | |
109 | |
110 const CPlayers &CAdPlug::init_players(const CPlayerDesc pd[]) | |
111 { | |
112 static CPlayers initplayers; | |
113 unsigned int i; | |
114 | |
115 for(i = 0; pd[i].factory; i++) | |
116 initplayers.push_back(&pd[i]); | |
117 | |
118 return initplayers; | |
119 } | |
120 | |
121 const CPlayers CAdPlug::players = CAdPlug::init_players(CAdPlug::allplayers); | |
122 CAdPlugDatabase *CAdPlug::database = 0; | |
123 | |
124 CPlayer *CAdPlug::factory(const std::string &fn, Copl *opl, const CPlayers &pl, | |
125 const CFileProvider &fp) | |
126 { | |
127 CPlayer *p; | |
128 CPlayers::const_iterator i; | |
129 unsigned int j; | |
130 | |
131 AdPlug_LogWrite("*** CAdPlug::factory(\"%s\",opl,fp) ***\n", fn.c_str()); | |
132 | |
133 // Try a direct hit by file extension | |
134 for(i = pl.begin(); i != pl.end(); i++) | |
135 for(j = 0; (*i)->get_extension(j); j++) | |
136 if(fp.extension(fn, (*i)->get_extension(j))) { | |
137 AdPlug_LogWrite("Trying direct hit: %s\n", (*i)->filetype.c_str()); | |
138 if((p = (*i)->factory(opl))) | |
139 if(p->load(fn, fp)) { | |
140 AdPlug_LogWrite("got it!\n"); | |
141 AdPlug_LogWrite("--- CAdPlug::factory ---\n"); | |
142 return p; | |
143 } else | |
144 delete p; | |
145 } | |
146 | |
147 // Try all players, one by one | |
148 for(i = pl.begin(); i != pl.end(); i++) { | |
149 AdPlug_LogWrite("Trying: %s\n", (*i)->filetype.c_str()); | |
150 if((p = (*i)->factory(opl))) | |
151 if(p->load(fn, fp)) { | |
152 AdPlug_LogWrite("got it!\n"); | |
153 AdPlug_LogWrite("--- CAdPlug::factory ---\n"); | |
154 return p; | |
155 } else | |
156 delete p; | |
157 } | |
158 | |
159 // Unknown file | |
160 AdPlug_LogWrite("End of list!\n"); | |
161 AdPlug_LogWrite("--- CAdPlug::factory ---\n"); | |
162 return 0; | |
163 } | |
164 | |
165 void CAdPlug::set_database(CAdPlugDatabase *db) | |
166 { | |
167 database = db; | |
168 } | |
169 | |
170 std::string CAdPlug::get_version() | |
171 { | |
172 return std::string(VERSION); | |
173 } | |
174 | |
175 void CAdPlug::debug_output(const std::string &filename) | |
176 { | |
177 AdPlug_LogFile(filename.c_str()); | |
178 AdPlug_LogWrite("CAdPlug::debug_output(\"%s\"): Redirected.\n",filename.c_str()); | |
179 } |