Ticket #8860: midicfg_New.patch
File midicfg_New.patch, 92.5 KB (added by , 14 years ago) |
---|
-
backends/midi/alsa.cpp
269 269 } 270 270 271 271 MusicDevices getDevices() const; 272 Common::Error createInstance(MidiDriver **mididriver ) const;272 Common::Error createInstance(MidiDriver **mididriver, MidiDriver::DeviceHandle = 0) const; 273 273 }; 274 274 275 275 #define perm_ok(pinfo,bits) ((snd_seq_port_info_get_capability(pinfo) & (bits)) == (bits)) … … 315 315 return devices; 316 316 } 317 317 318 Common::Error AlsaMusicPlugin::createInstance(MidiDriver **mididriver ) const {318 Common::Error AlsaMusicPlugin::createInstance(MidiDriver **mididriver, MidiDriver::DeviceHandle) const { 319 319 *mididriver = new MidiDriver_ALSA(); 320 320 321 321 return Common::kNoError; 322 322 } 323 323 324 MidiDriver *MidiDriver_ALSA_create() {325 MidiDriver *mididriver;326 327 AlsaMusicPlugin p;328 p.createInstance(&mididriver);329 330 return mididriver;331 }332 333 324 //#if PLUGIN_ENABLED_DYNAMIC(ALSA) 334 325 //REGISTER_PLUGIN_DYNAMIC(ALSA, PLUGIN_TYPE_MUSIC, AlsaMusicPlugin); 335 326 //#else -
backends/midi/camd.cpp
177 177 } 178 178 179 179 MusicDevices getDevices() const; 180 Common::Error createInstance(MidiDriver **mididriver ) const;180 Common::Error createInstance(MidiDriver **mididriver, MidiDriver::DeviceHandle = 0) const; 181 181 }; 182 182 183 183 MusicDevices CamdMusicPlugin::getDevices() const { … … 188 188 return devices; 189 189 } 190 190 191 Common::Error CamdMusicPlugin::createInstance(MidiDriver **mididriver ) const {191 Common::Error CamdMusicPlugin::createInstance(MidiDriver **mididriver, MidiDriver::DeviceHandle) const { 192 192 *mididriver = new MidiDriver_CAMD(); 193 193 194 194 return Common::kNoError; 195 195 } 196 196 197 MidiDriver *MidiDriver_CAMD_create() {198 MidiDriver *mididriver;199 200 CamdMusicPlugin p;201 p.createInstance(&mididriver);202 203 return mididriver;204 }205 206 197 //#if PLUGIN_ENABLED_DYNAMIC(CAMD) 207 198 //REGISTER_PLUGIN_DYNAMIC(CAMD, PLUGIN_TYPE_MUSIC, CamdMusicPlugin); 208 199 //#else -
backends/midi/coreaudio.cpp
218 218 } 219 219 220 220 MusicDevices getDevices() const; 221 Common::Error createInstance(MidiDriver **mididriver ) const;221 Common::Error createInstance(MidiDriver **mididriver, MidiDriver::DeviceHandle = 0) const; 222 222 }; 223 223 224 224 MusicDevices CoreAudioMusicPlugin::getDevices() const { … … 229 229 return devices; 230 230 } 231 231 232 Common::Error CoreAudioMusicPlugin::createInstance(MidiDriver **mididriver ) const {232 Common::Error CoreAudioMusicPlugin::createInstance(MidiDriver **mididriver, MidiDriver::DeviceHandle) const { 233 233 *mididriver = new MidiDriver_CORE(); 234 234 235 235 return Common::kNoError; 236 236 } 237 237 238 MidiDriver *MidiDriver_CORE_create() {239 MidiDriver *mididriver;240 241 CoreAudioMusicPlugin p;242 p.createInstance(&mididriver);243 244 return mididriver;245 }246 247 238 //#if PLUGIN_ENABLED_DYNAMIC(COREAUDIO) 248 239 //REGISTER_PLUGIN_DYNAMIC(COREAUDIO, PLUGIN_TYPE_MUSIC, CoreAudioMusicPlugin); 249 240 //#else -
backends/midi/coremidi.cpp
190 190 } 191 191 192 192 MusicDevices getDevices() const; 193 Common::Error createInstance(MidiDriver **mididriver ) const;193 Common::Error createInstance(MidiDriver **mididriver, MidiDriver::DeviceHandle = 0) const; 194 194 }; 195 195 196 196 MusicDevices CoreMIDIMusicPlugin::getDevices() const { … … 201 201 return devices; 202 202 } 203 203 204 Common::Error CoreMIDIMusicPlugin::createInstance(MidiDriver **mididriver ) const {204 Common::Error CoreMIDIMusicPlugin::createInstance(MidiDriver **mididriver, MidiDriver::DeviceHandle) const { 205 205 *mididriver = new MidiDriver_CoreMIDI(); 206 206 207 207 return Common::kNoError; 208 208 } 209 209 210 MidiDriver *MidiDriver_CoreMIDI_create() {211 MidiDriver *mididriver;212 213 CoreMIDIMusicPlugin p;214 p.createInstance(&mididriver);215 216 return mididriver;217 }218 219 210 //#if PLUGIN_ENABLED_DYNAMIC(COREMIDI) 220 211 //REGISTER_PLUGIN_DYNAMIC(COREMIDI, PLUGIN_TYPE_MUSIC, CoreMIDIMusicPlugin); 221 212 //#else -
backends/midi/dmedia.cpp
199 199 } 200 200 201 201 MusicDevices getDevices() const; 202 Common::Error createInstance(MidiDriver **mididriver ) const;202 Common::Error createInstance(MidiDriver **mididriver, MidiDriver::DeviceHandle = 0) const; 203 203 }; 204 204 205 205 MusicDevices DMediaMusicPlugin::getDevices() const { … … 224 224 return devices; 225 225 } 226 226 227 Common::Error DMediaMusicPlugin::createInstance(MidiDriver **mididriver ) const {227 Common::Error DMediaMusicPlugin::createInstance(MidiDriver **mididriver, MidiDriver::DeviceHandle) const { 228 228 *mididriver = new MidiDriver_DMEDIA(); 229 229 230 230 return Common::kNoError; 231 231 } 232 232 233 MidiDriver *MidiDriver_DMEDIA_create() {234 MidiDriver *mididriver;235 236 DMediaMusicPlugin p;237 p.createInstance(&mididriver);238 239 return mididriver;240 }241 242 233 //#if PLUGIN_ENABLED_DYNAMIC(DMEDIA) 243 234 //REGISTER_PLUGIN_DYNAMIC(DMEDIA, PLUGIN_TYPE_MUSIC, DMediaMusicPlugin); 244 235 //#else -
backends/midi/seq.cpp
184 184 } 185 185 186 186 MusicDevices getDevices() const; 187 Common::Error createInstance(MidiDriver **mididriver ) const;187 Common::Error createInstance(MidiDriver **mididriver, MidiDriver::DeviceHandle = 0) const; 188 188 }; 189 189 190 190 MusicDevices SeqMusicPlugin::getDevices() const { … … 195 195 return devices; 196 196 } 197 197 198 Common::Error SeqMusicPlugin::createInstance(MidiDriver **mididriver ) const {198 Common::Error SeqMusicPlugin::createInstance(MidiDriver **mididriver, MidiDriver::DeviceHandle) const { 199 199 *mididriver = new MidiDriver_SEQ(); 200 200 201 201 return Common::kNoError; 202 202 } 203 203 204 MidiDriver *MidiDriver_SEQ_create() {205 MidiDriver *mididriver;206 207 SeqMusicPlugin p;208 p.createInstance(&mididriver);209 210 return mididriver;211 }212 213 204 //#if PLUGIN_ENABLED_DYNAMIC(SEQ) 214 205 //REGISTER_PLUGIN_DYNAMIC(SEQ, PLUGIN_TYPE_MUSIC, SeqMusicPlugin); 215 206 //#else -
backends/midi/stmidi.cpp
127 127 } 128 128 129 129 MusicDevices getDevices() const; 130 Common::Error createInstance(MidiDriver **mididriver) 131 const; 130 Common::Error createInstance(MidiDriver **mididriver, MidiDriver::DeviceHandle = 0) const; 132 131 }; 133 132 134 133 MusicDevices StMidiMusicPlugin::getDevices() const { … … 139 138 return devices; 140 139 } 141 140 142 Common::Error StMidiMusicPlugin::createInstance(MidiDriver **mididriver ) const {141 Common::Error StMidiMusicPlugin::createInstance(MidiDriver **mididriver, MidiDriver::DeviceHandle) const { 143 142 *mididriver = new MidiDriver_STMIDI(); 144 143 145 144 return Common::kNoError; 146 145 } 147 146 148 MidiDriver *MidiDriver_STMIDI_create() {149 MidiDriver *mididriver;150 151 StMidiMusicPlugin p;152 p.createInstance(&mididriver);153 154 return mididriver;155 }156 157 147 //#if PLUGIN_ENABLED_DYNAMIC(STMIDI) 158 148 //REGISTER_PLUGIN_DYNAMIC(STMIDI, PLUGIN_TYPE_MUSIC, StMidiMusicPlugin); 159 149 //#else -
backends/midi/timidity.cpp
530 530 } 531 531 532 532 MusicDevices getDevices() const; 533 Common::Error createInstance(MidiDriver **mididriver ) const;533 Common::Error createInstance(MidiDriver **mididriver, MidiDriver::DeviceHandle = 0) const; 534 534 }; 535 535 536 536 MusicDevices TimidityMusicPlugin::getDevices() const { … … 539 539 return devices; 540 540 } 541 541 542 Common::Error TimidityMusicPlugin::createInstance(MidiDriver **mididriver ) const {542 Common::Error TimidityMusicPlugin::createInstance(MidiDriver **mididriver, MidiDriver::DeviceHandle) const { 543 543 *mididriver = new MidiDriver_TIMIDITY(); 544 544 545 545 return Common::kNoError; 546 546 } 547 547 548 MidiDriver *MidiDriver_TIMIDITY_create() {549 MidiDriver *mididriver;550 551 TimidityMusicPlugin p;552 p.createInstance(&mididriver);553 554 return mididriver;555 }556 557 548 //#if PLUGIN_ENABLED_DYNAMIC(TIMIDITY) 558 549 //REGISTER_PLUGIN_DYNAMIC(TIMIDITY, PLUGIN_TYPE_MUSIC, TimidityMusicPlugin); 559 550 //#else -
backends/midi/windows.cpp
30 30 31 31 #include "sound/musicplugin.h" 32 32 #include "sound/mpu401.h" 33 #include "common/config-manager.h" 33 34 34 35 #include <mmsystem.h> 35 36 … … 46 47 HANDLE _streamEvent; 47 48 HMIDIOUT _mo; 48 49 bool _isOpen; 50 int _device; 49 51 50 52 void check_error(MMRESULT result); 51 53 52 54 public: 53 MidiDriver_WIN( ) : _isOpen(false) { }55 MidiDriver_WIN(int deviceIndex) : _isOpen(false), _device(deviceIndex) { } 54 56 int open(); 55 57 void close(); 56 58 void send(uint32 b); … … 62 64 return MERR_ALREADY_OPEN; 63 65 64 66 _streamEvent = CreateEvent(NULL, true, true, NULL); 65 MMRESULT res = midiOutOpen((HMIDIOUT *)&_mo, MIDI_MAPPER, (DWORD_PTR)_streamEvent, 0, CALLBACK_EVENT);67 MMRESULT res = midiOutOpen((HMIDIOUT *)&_mo, _device, (DWORD_PTR)_streamEvent, 0, CALLBACK_EVENT); 66 68 if (res != MMSYSERR_NOERROR) { 67 69 check_error(res); 68 70 CloseHandle(_streamEvent); … … 158 160 } 159 161 160 162 MusicDevices getDevices() const; 161 Common::Error createInstance(MidiDriver **mididriver ) const;163 Common::Error createInstance(MidiDriver **mididriver, MidiDriver::DeviceHandle = 0) const; 162 164 }; 163 165 164 166 MusicDevices WindowsMusicPlugin::getDevices() const { 165 167 MusicDevices devices; 166 // TODO: Return a different music type depending on the configuration 167 // TODO: List the available devices 168 devices.push_back(MusicDevice(this, "", MT_GM)); 168 int numDevs = midiOutGetNumDevs(); 169 MIDIOUTCAPS tmp; 170 171 for (int i = 0; i < numDevs; i++) { 172 if (midiOutGetDevCaps(i, &tmp, sizeof(MIDIOUTCAPS)) != MMSYSERR_NOERROR) 173 break; 174 // There is no way to detect the "MusicType" so I just set it to MT_GM 175 // The user will have to manually select his MT32 type device and his GM type device. 176 devices.push_back(MusicDevice(this, tmp.szPname, MT_GM)); 177 } 169 178 return devices; 170 179 } 171 180 172 Common::Error WindowsMusicPlugin::createInstance(MidiDriver **mididriver) const { 173 *mididriver = new MidiDriver_WIN(); 181 Common::Error WindowsMusicPlugin::createInstance(MidiDriver **mididriver, MidiDriver::DeviceHandle dev) const { 182 int devIndex = 0; 183 bool found = false; 174 184 185 if (dev) { 186 MusicDevices i = getDevices(); 187 for (MusicDevices::iterator d = i.begin(); d != i.end(); d++) { 188 if (d->getCompleteId().equals(MidiDriver::getDeviceString(dev, MidiDriver::kDeviceId))) { 189 found = true; 190 break; 191 } 192 devIndex++; 193 } 194 } 195 196 *mididriver = new MidiDriver_WIN(found ? devIndex : 0); 175 197 return Common::kNoError; 176 198 } 177 199 178 MidiDriver *MidiDriver_WIN_create() {179 MidiDriver *mididriver;180 181 WindowsMusicPlugin p;182 p.createInstance(&mididriver);183 184 return mididriver;185 }186 187 200 //#if PLUGIN_ENABLED_DYNAMIC(WINDOWS) 188 201 //REGISTER_PLUGIN_DYNAMIC(WINDOWS, PLUGIN_TYPE_MUSIC, WindowsMusicPlugin); 189 202 //#else -
backends/midi/ypa1.cpp
117 117 } 118 118 119 119 MusicDevices getDevices() const; 120 Common::Error createInstance(MidiDriver **mididriver ) const;120 Common::Error createInstance(MidiDriver **mididriver, MidiDriver::DeviceHandle = 0) const; 121 121 }; 122 122 123 123 MusicDevices YamahaPa1MusicPlugin::getDevices() const { … … 128 128 return devices; 129 129 } 130 130 131 Common::Error YamahaPa1MusicPlugin::createInstance(MidiDriver **mididriver ) const {131 Common::Error YamahaPa1MusicPlugin::createInstance(MidiDriver **mididriver, MidiDriver::DeviceHandle) const { 132 132 *mididriver = new MidiDriver_YamahaPa1(); 133 133 134 134 return Common::kNoError; 135 135 } 136 136 137 MidiDriver *MidiDriver_YamahaPa1_create() {138 MidiDriver *mididriver;139 140 YamahaPa1MusicPlugin p;141 p.createInstance(&mididriver);142 143 return mididriver;144 }145 146 137 //#if PLUGIN_ENABLED_DYNAMIC(YPA1) 147 138 //REGISTER_PLUGIN_DYNAMIC(YPA1, PLUGIN_TYPE_MUSIC, YamahaPa1MusicPlugin); 148 139 //#else -
backends/midi/zodiac.cpp
135 135 } 136 136 137 137 MusicDevices getDevices() const; 138 Common::Error createInstance(MidiDriver **mididriver ) const;138 Common::Error createInstance(MidiDriver **mididriver, MidiDriver::DeviceHandle = 0) const; 139 139 }; 140 140 141 141 MusicDevices ZodiacMusicPlugin::getDevices() const { … … 146 146 return devices; 147 147 } 148 148 149 Common::Error ZodiacMusicPlugin::createInstance(MidiDriver **mididriver ) const {149 Common::Error ZodiacMusicPlugin::createInstance(MidiDriver **mididriver, MidiDriver::DeviceHandle) const { 150 150 *mididriver = new MidiDriver_Zodiac(); 151 151 152 152 return Common::kNoError; 153 153 } 154 154 155 MidiDriver *MidiDriver_Zodiac_create() {156 MidiDriver *mididriver;157 158 ZodiacMusicPlugin p;159 p.createInstance(&mididriver);160 161 return mididriver;162 }163 164 155 //#if PLUGIN_ENABLED_DYNAMIC(ZODIAC) 165 156 //REGISTER_PLUGIN_DYNAMIC(ZODIAC, PLUGIN_TYPE_MUSIC, ZodiacMusicPlugin); 166 157 //#else -
base/commandLine.cpp
364 364 END_OPTION 365 365 366 366 DO_OPTION('e', "music-driver") 367 if (MidiDriver:: findMusicDriver(option) == 0)367 if (MidiDriver::getMusicType(MidiDriver::getDeviceHandle(option)) == MT_NULL) 368 368 usage("Unrecognized music driver '%s'", option); 369 369 END_OPTION 370 370 -
base/plugins.cpp
167 167 // Music plugins 168 168 // TODO: Use defines to disable or enable each MIDI driver as a 169 169 // static/dynamic plugin, like it's done for the engines 170 LINK_PLUGIN(AUTO) 170 171 LINK_PLUGIN(NULL) 171 172 #if defined(WIN32) && !defined(_WIN32_WCE) && !defined(__SYMBIAN32__) 172 173 LINK_PLUGIN(WINDOWS) -
common/util.cpp
305 305 { GUIO_MIDIPCJR, "midiPCJr" }, 306 306 { GUIO_MIDIADLIB, "midiAdLib" }, 307 307 { GUIO_MIDITOWNS, "midiTowns" }, 308 { GUIO_MIDI, "midiMidi" }, 308 { GUIO_MIDIMT32, "midiMt32" }, 309 { GUIO_MIDIGM, "midiGM" }, 309 310 310 311 { GUIO_NONE, 0 } 311 312 }; -
common/util.h
223 223 GUIO_MIDICMS = (1 << 7), 224 224 GUIO_MIDIPCJR = (1 << 8), 225 225 GUIO_MIDIADLIB = (1 << 9), 226 GUIO_MIDITOWNS = (1 << 10), 227 GUIO_MIDI = (1 << 11) 226 GUIO_MIDITOWNS = (1 << 10), 227 GUIO_MIDIMT32 = (1 << 11), 228 GUIO_MIDIGM = (1 << 12) 228 229 }; 229 230 230 231 bool checkGameGUIOption(GameGUIOption option, const String &str); -
engines/agi/agi.cpp
583 583 } else if (getPlatform() == Common::kPlatformCoCo3) { 584 584 _soundemu = SOUND_EMU_COCO3; 585 585 } else { 586 switch (MidiDriver:: detectMusicDriver(MDT_PCSPK | MDT_PCJR | MDT_ADLIB | MDT_MIDI)) {587 case M D_PCSPK:586 switch (MidiDriver::getMusicType(MidiDriver::detectDevice(MDT_PCSPK))) { 587 case MT_PCSPK: 588 588 _soundemu = SOUND_EMU_PC; 589 589 break; 590 case M D_PCJR:590 case MT_PCJR: 591 591 _soundemu = SOUND_EMU_PCJR; 592 592 break; 593 case M D_ADLIB:593 case MT_ADLIB: 594 594 _soundemu = SOUND_EMU_NONE; 595 595 break; 596 596 default: -
engines/agi/preagi.cpp
68 68 // drivers, and I'm not sure what they are. For now, they might 69 69 // as well be called "PC Speaker" and "Not PC Speaker". 70 70 71 switch (MidiDriver:: detectMusicDriver(MDT_PCSPK)) {72 case M D_PCSPK:71 switch (MidiDriver::getMusicType(MidiDriver::detectDevice(MDT_PCSPK))) { 72 case MT_PCSPK: 73 73 _soundemu = SOUND_EMU_PC; 74 74 break; 75 75 default: -
engines/agi/sound_midi.cpp
71 71 } 72 72 73 73 SoundGenMIDI::SoundGenMIDI(AgiEngine *vm, Audio::Mixer *pMixer) : SoundGen(vm, pMixer), _parser(0), _isPlaying(false), _passThrough(false), _isGM(false) { 74 MidiDriverType midiDriver = MidiDriver::detectMusicDriver(MDT_MIDI | MDT_ADLIB);75 _driver = MidiDriver::createMidi( midiDriver);74 DeviceHandle dev = MidiDriver::detectDevice(MDT_MIDI | MDT_ADLIB); 75 _driver = MidiDriver::createMidi(dev); 76 76 77 77 memset(_channel, 0, sizeof(_channel)); 78 78 memset(_channelVolume, 255, sizeof(_channelVolume)); -
engines/agos/agos.cpp
557 557 (getPlatform() == Common::kPlatformPC)) { 558 558 559 559 // Setup midi driver 560 MidiDriver Type midiDriver = MidiDriver::detectMusicDriver(MDT_ADLIB | MDT_MIDI);561 _nativeMT32 = (( midiDriver == MD_MT32) || ConfMan.getBool("native_mt32"));560 MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_ADLIB | MDT_MIDI | MDT_PREFER_MIDI | (getGameType() == GType_SIMON1 ? MDT_PREFER_MT32 : MDT_PREFER_GM)); 561 _nativeMT32 = ((MidiDriver::getMusicType(dev) == MT_MT32) || ConfMan.getBool("native_mt32")); 562 562 563 _driver = MidiDriver::createMidi( midiDriver);563 _driver = MidiDriver::createMidi(dev); 564 564 565 565 if (_nativeMT32) { 566 566 _driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE); -
engines/draci/draci.cpp
127 127 _dubbingArchive = new SoundArchive(dubbingPath, kDubbingFrequency); 128 128 _sound = new Sound(_mixer); 129 129 130 MidiDriver Type midiDriver = MidiDriver::detectMusicDriver(MDT_MIDI | MDT_ADLIB | MDT_PREFER_MIDI);131 bool native_mt32 = (( midiDriver == MD_MT32) || ConfMan.getBool("native_mt32"));132 //bool adlib = ( midiDriver == MD_ADLIB);130 MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_MIDI | MDT_ADLIB | MDT_PREFER_MIDI); 131 bool native_mt32 = ((MidiDriver::getMusicType(dev) == MT_MT32) || ConfMan.getBool("native_mt32")); 132 //bool adlib = (MidiDriver::getMusicType(dev) == MT_ADLIB); 133 133 134 _midiDriver = MidiDriver::createMidi( midiDriver);134 _midiDriver = MidiDriver::createMidi(dev); 135 135 if (native_mt32) 136 136 _midiDriver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE); 137 137 -
engines/gob/gob.cpp
345 345 } 346 346 347 347 bool GobEngine::initGameParts() { 348 _noMusic = MidiDriver::parseMusicDriver(ConfMan.get("music_driver")) == MD_NULL;349 348 // just detect some devices some of which will be always there if the music is not disabled 349 _noMusic = MidiDriver::detectDevice(MDT_PCSPK | MDT_MIDI | MDT_ADLIB) ? false : true; 350 350 _saveLoad = 0; 351 351 352 352 _global = new Global(this); -
engines/groovie/music.cpp
386 386 _midiParser = MidiParser::createParser_XMIDI(); 387 387 388 388 // Create the driver 389 MidiDriver Type driver = detectMusicDriver(MDT_MIDI | MDT_ADLIB | MDT_PREFER_MIDI);390 _driver = createMidi(d river);389 MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_MIDI | MDT_ADLIB | MDT_PREFER_MIDI); 390 _driver = createMidi(dev); 391 391 this->open(); 392 392 393 393 // Set the parser's driver … … 402 402 } 403 403 404 404 // Load the Global Timbre Library 405 if ( driver == MD_ADLIB) {405 if (MidiDriver::getMusicType(dev) == MT_ADLIB) { 406 406 // MIDI through AdLib 407 _musicType = M D_ADLIB;407 _musicType = MT_ADLIB; 408 408 loadTimbres(gtlName + ".ad"); 409 409 410 410 // Setup the percussion channel … … 412 412 if (_timbres[i].bank == 0x7F) 413 413 setTimbreAD(9, _timbres[i]); 414 414 } 415 } else if (( driver == MD_MT32) || ConfMan.getBool("native_mt32")) {415 } else if ((MidiDriver::getMusicType(dev) == MT_MT32) || ConfMan.getBool("native_mt32")) { 416 416 // MT-32 417 _musicType = M D_MT32;417 _musicType = MT_MT32; 418 418 loadTimbres(gtlName + ".mt"); 419 419 } else { 420 420 // GM … … 455 455 for (int i = 0; i < numTimbres; i++) { 456 456 if ((_timbres[i].bank == _chanBanks[chan]) && 457 457 (_timbres[i].patch == patch)) { 458 if (_musicType == M D_ADLIB) {458 if (_musicType == MT_ADLIB) { 459 459 setTimbreAD(chan, _timbres[i]); 460 } else if (_musicType == M D_MT32) {460 } else if (_musicType == MT_MT32) { 461 461 setTimbreMT(chan, _timbres[i]); 462 462 } 463 463 return; … … 682 682 _midiParser = MidiParser::createParser_SMF(); 683 683 684 684 // Create the driver 685 MidiDriver Type driver = detectMusicDriver(MDT_MIDI | MDT_ADLIB | MDT_PREFER_MIDI);686 _driver = createMidi(d river);685 MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_MIDI | MDT_ADLIB | MDT_PREFER_MIDI); 686 _driver = createMidi(dev); 687 687 this->open(); 688 688 689 689 // Set the parser's driver -
engines/groovie/script.cpp
86 86 } 87 87 88 88 // Initialize the music type variable 89 int midiDriver = MidiDriver::detectMusicDriver(MDT_MIDI | MDT_ADLIB | MDT_PREFER_MIDI);90 if ( midiDriver == MD_ADLIB) {89 MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_MIDI | MDT_ADLIB | MDT_PREFER_MIDI); 90 if (MidiDriver::getMusicType(dev) == MT_ADLIB) { 91 91 // MIDI through AdLib 92 92 setVariable(0x100, 0); 93 } else if (( midiDriver == MD_MT32) || ConfMan.getBool("native_mt32")) {93 } else if ((MidiDriver::getMusicType(dev) == MT_MT32) || ConfMan.getBool("native_mt32")) { 94 94 // MT-32 95 95 setVariable(0x100, 2); 96 96 } else { -
engines/kyra/kyra_v1.cpp
106 106 107 107 if (!_flags.useDigSound) { 108 108 // We prefer AdLib over MIDI, since generally AdLib is better supported 109 MidiDriver Type midiDriver = MidiDriver::detectMusicDriver(MDT_PCSPK | MDT_MIDI | MDT_ADLIB);109 MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_PCSPK | MDT_MIDI | MDT_ADLIB | MDT_PREFER_MIDI | MDT_PREFER_MT32); 110 110 111 111 if (_flags.platform == Common::kPlatformFMTowns) { 112 112 if (_flags.gameID == GI_KYRA1) … … 120 120 _sound = new SoundTownsPC98_v2(this, _mixer); 121 121 } else if (_flags.platform == Common::kPlatformAmiga) { 122 122 _sound = new SoundAmiga(this, _mixer); 123 } else if ( midiDriver == MD_ADLIB) {123 } else if (MidiDriver::getMusicType(dev) == MT_ADLIB) { 124 124 _sound = new SoundAdLibPC(this, _mixer); 125 125 } else { 126 126 Sound::kType type; 127 127 128 if ( midiDriver == MD_PCSPK)128 if (MidiDriver::getMusicType(dev) == MT_PCSPK) 129 129 type = Sound::kPCSpkr; 130 else if ( midiDriver == MD_MT32 || ConfMan.getBool("native_mt32"))130 else if (MidiDriver::getMusicType(dev) == MT_MT32 || ConfMan.getBool("native_mt32")) 131 131 type = Sound::kMidiMT32; 132 132 else 133 133 type = Sound::kMidiGM; 134 134 135 135 MidiDriver *driver = 0; 136 136 137 if ( midiDriver == MD_PCSPK) {137 if (MidiDriver::getMusicType(dev) == MT_PCSPK) { 138 138 driver = new MidiDriver_PCSpeaker(_mixer); 139 139 } else { 140 driver = MidiDriver::createMidi( midiDriver);140 driver = MidiDriver::createMidi(dev); 141 141 if (type == Sound::kMidiMT32) 142 142 driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE); 143 143 } -
engines/lure/sound.cpp
50 50 _soundData = NULL; 51 51 _paused = false; 52 52 53 MidiDriver Type midiDriver = MidiDriver::detectMusicDriver(MDT_MIDI | MDT_ADLIB | MDT_PREFER_MIDI);54 _isRoland = midiDriver != MD_ADLIB;55 _nativeMT32 = (( midiDriver == MD_MT32) || ConfMan.getBool("native_mt32"));53 MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_MIDI | MDT_ADLIB | MDT_PREFER_MIDI); 54 _isRoland = MidiDriver::getMusicType(dev) != MT_ADLIB; 55 _nativeMT32 = ((MidiDriver::getMusicType(dev) == MT_MT32) || ConfMan.getBool("native_mt32")); 56 56 57 57 Common::set_to(_channelsInUse, _channelsInUse + NUM_CHANNELS, false); 58 58 59 _driver = MidiDriver::createMidi( midiDriver);59 _driver = MidiDriver::createMidi(dev); 60 60 int statusCode = _driver->open(); 61 61 if (statusCode) { 62 62 warning("Sound driver returned error code %d", statusCode); -
engines/m4/m4.cpp
156 156 // Initialize backend 157 157 _screen = new M4Surface(true); // Special form for creating screen reference 158 158 159 MidiDriver Type midiDriver = MidiDriver::detectMusicDriver(MDT_MIDI | MDT_ADLIB | MDT_PREFER_MIDI);160 bool native_mt32 = (( midiDriver == MD_MT32) || ConfMan.getBool("native_mt32"));159 MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_MIDI | MDT_ADLIB | MDT_PREFER_MIDI); 160 bool native_mt32 = ((MidiDriver::getMusicType(dev) == MT_MT32) || ConfMan.getBool("native_mt32")); 161 161 162 _driver = MidiDriver::createMidi( midiDriver);162 _driver = MidiDriver::createMidi(dev); 163 163 if (native_mt32) 164 164 _driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE); 165 165 -
engines/made/made.cpp
97 97 98 98 _script = new ScriptInterpreter(this); 99 99 100 MidiDriver Type midiDriver = MidiDriver::detectMusicDriver(MDT_MIDI | MDT_ADLIB | MDT_PREFER_MIDI);101 bool native_mt32 = (( midiDriver == MD_MT32) || ConfMan.getBool("native_mt32"));102 //bool adlib = ( midiDriver == MD_ADLIB);100 MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_MIDI | MDT_ADLIB | MDT_PREFER_MIDI); 101 bool native_mt32 = ((MidiDriver::getMusicType(dev) == MT_MT32) || ConfMan.getBool("native_mt32")); 102 //bool adlib = (MidiDriver::getMusicType(dev) == MT_ADLIB); 103 103 104 MidiDriver *driver = MidiDriver::createMidi( midiDriver);104 MidiDriver *driver = MidiDriver::createMidi(dev); 105 105 if (native_mt32) 106 106 driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE); 107 107 -
engines/mohawk/sound.cpp
27 27 28 28 #include "common/util.h" 29 29 30 #include "sound/musicplugin.h" 30 31 #include "sound/audiostream.h" 31 32 #include "sound/decoders/mp3.h" 32 33 #include "sound/decoders/raw.h" 33 34 #include "sound/decoders/wave.h" 34 35 35 36 36 namespace Mohawk { 37 37 38 38 Sound::Sound(MohawkEngine* vm) : _vm(vm) { … … 79 79 80 80 // Let's get our MIDI parser/driver 81 81 _midiParser = MidiParser::createParser_SMF(); 82 _midiDriver = MidiDriver::createMidi(MidiDriver::detect MusicDriver(MDT_ADLIB|MDT_MIDI));82 _midiDriver = MidiDriver::createMidi(MidiDriver::detectDevice(MDT_ADLIB|MDT_MIDI)); 83 83 84 84 // Set up everything! 85 85 _midiDriver->open(); -
engines/parallaction/parallaction_br.cpp
61 61 _disk = new DosDisk_br(this); 62 62 } 63 63 _disk->setLanguage(2); // NOTE: language is now hardcoded to English. Original used command-line parameters. 64 MidiDriver Type midiDriver = MidiDriver::detectMusicDriver(MDT_MIDI | MDT_ADLIB | MDT_PREFER_MIDI);65 MidiDriver *driver = MidiDriver::createMidi( midiDriver);64 MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_MIDI | MDT_ADLIB | MDT_PREFER_MIDI); 65 MidiDriver *driver = MidiDriver::createMidi(dev); 66 66 _soundManI = new DosSoundMan_br(this, driver); 67 67 } else { 68 68 _disk = new AmigaDisk_br(this); -
engines/parallaction/parallaction_ns.cpp
24 24 */ 25 25 26 26 #include "common/system.h" 27 28 27 #include "common/config-manager.h" 29 28 30 29 #include "parallaction/parallaction.h" … … 167 166 _disk->init(); 168 167 169 168 if (getPlatform() == Common::kPlatformPC) { 170 MidiDriver Type midiDriver = MidiDriver::detectMusicDriver(MDT_MIDI | MDT_ADLIB | MDT_PREFER_MIDI);171 MidiDriver *driver = MidiDriver::createMidi( midiDriver);169 MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_MIDI | MDT_ADLIB | MDT_PREFER_MIDI); 170 MidiDriver *driver = MidiDriver::createMidi(dev); 172 171 _soundManI = new DosSoundMan_ns(this, driver); 173 172 _soundManI->setMusicVolume(ConfMan.getInt("music_volume")); 174 173 } else { -
engines/queen/music.cpp
34 34 35 35 #include "sound/midiparser.h" 36 36 37 37 38 namespace Queen { 38 39 39 40 extern MidiDriver *C_Player_CreateAdLibMidiDriver(Audio::Mixer *); … … 45 46 _queuePos = _lastSong = _currentSong = 0; 46 47 queueClear(); 47 48 48 MidiDriver Type midiDriver = MidiDriver::detectMusicDriver(MDT_MIDI | MDT_ADLIB | MDT_PREFER_MIDI);49 _adlib = ( midiDriver == MD_ADLIB);50 _nativeMT32 = (( midiDriver == MD_MT32) || ConfMan.getBool("native_mt32"));49 MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_MIDI | MDT_ADLIB | MDT_PREFER_MIDI | MDT_PREFER_MT32); 50 _adlib = (MidiDriver::getMusicType(dev) == MT_ADLIB); 51 _nativeMT32 = ((MidiDriver::getMusicType(dev) == MT_MT32) || ConfMan.getBool("native_mt32")); 51 52 52 53 const char *musicDataFile; 53 54 if (vm->resource()->isDemo()) { … … 72 73 // } 73 74 _driver = C_Player_CreateAdLibMidiDriver(vm->_mixer); 74 75 } else { 75 _driver = MidiDriver::createMidi( midiDriver);76 _driver = MidiDriver::createMidi(dev); 76 77 if (_nativeMT32) { 77 78 _driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE); 78 79 } -
engines/saga/music.cpp
47 47 _masterVolume = 0; 48 48 _nativeMT32 = ConfMan.getBool("native_mt32"); 49 49 50 _driverType = MidiDriver::detectMusicDriver(MDT_MIDI | MDT_ADLIB | MDT_PREFER_MIDI);51 _driver = MidiDriver::createMidi( _driverType);50 MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_MIDI | MDT_ADLIB | MDT_PREFER_MIDI); 51 _driver = MidiDriver::createMidi(dev); 52 52 if (isMT32()) 53 53 _driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE); 54 54 -
engines/saga/music.h
52 52 void setVolume(int volume); 53 53 int getVolume() { return _masterVolume; } 54 54 55 bool isAdlib() { return _driverType == M D_ADLIB; }56 bool isMT32() { return _driverType == M D_MT32 || _nativeMT32; }55 bool isAdlib() { return _driverType == MT_ADLIB; } 56 bool isMT32() { return _driverType == MT_MT32 || _nativeMT32; } 57 57 void setGM(bool isGM) { _isGM = isGM; } 58 58 59 59 //MidiDriver interface implementation … … 78 78 79 79 MidiChannel *_channel[16]; 80 80 MidiDriver *_driver; 81 M idiDriverType _driverType;81 MusicType _driverType; 82 82 byte _channelVolume[16]; 83 83 bool _isGM; 84 84 bool _nativeMT32; -
engines/sci/sound/drivers/fb01.cpp
128 128 }; 129 129 130 130 MidiPlayer_Fb01::MidiPlayer_Fb01(SciVersion version) : MidiPlayer(version), _playSwitch(true), _masterVolume(15), _timerParam(NULL), _timerProc(NULL) { 131 MidiDriver Type midiType = MidiDriver::detectMusicDriver(MDT_MIDI);132 _driver = createMidi( midiType);131 MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_MIDI); 132 _driver = createMidi(dev); 133 133 134 134 _sysExBuf[0] = 0x43; 135 135 _sysExBuf[1] = 0x75; -
engines/sci/sound/drivers/midi.cpp
119 119 }; 120 120 121 121 MidiPlayer_Midi::MidiPlayer_Midi(SciVersion version) : MidiPlayer(version), _playSwitch(true), _masterVolume(15), _isMt32(false), _hasReverb(false), _isOldPatchFormat(true) { 122 MidiDriver Type midiType = MidiDriver::detectMusicDriver(MDT_MIDI);123 _driver = createMidi( midiType);122 MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_MIDI); 123 _driver = createMidi(dev); 124 124 125 if ( midiType == MD_MT32 || ConfMan.getBool("native_mt32"))125 if (MidiDriver::getMusicType(dev) == MT_MT32 || ConfMan.getBool("native_mt32")) 126 126 _isMt32 = true; 127 127 128 128 _sysExBuf[0] = 0x41; -
engines/sci/sound/iterator/core.cpp
223 223 /* API implementation */ 224 224 225 225 Common::Error SfxPlayer::init(ResourceManager *resMan, int expected_latency) { 226 MidiDriverType musicDriver = MidiDriver::detect MusicDriver(MDT_PCSPK | MDT_ADLIB);226 MidiDriverType musicDriver = MidiDriver::detectDevice(MDT_PCSPK | MDT_ADLIB); 227 227 228 228 switch (musicDriver) { 229 229 case MD_ADLIB: -
engines/sci/sound/music.cpp
61 61 // SCI sound init 62 62 _dwTempo = 0; 63 63 64 MidiDriverType midiType;65 66 64 // Default to MIDI in SCI32 games, as many don't have AdLib support. 67 65 // WORKAROUND: Default to MIDI in Amiga SCI1_EGA+ games as we don't support those patches yet. 68 66 // We also don't yet support the 7.pat file of SCI1+ Mac games or SCI0 Mac patches, so we 69 67 // default to MIDI in those games to let them run. 70 68 Common::Platform platform = g_sci->getPlatform(); 69 uint32 dev = MidiDriver::detectDevice((getSciVersion() >= SCI_VERSION_2 || platform == Common::kPlatformMacintosh || (platform == Common::kPlatformAmiga && getSciVersion() >= SCI_VERSION_1_EGA)) ? (MDT_PCSPK | MDT_ADLIB | MDT_MIDI | MDT_PREFER_MIDI) : (MDT_PCSPK | MDT_ADLIB | MDT_MIDI)); 71 70 72 if (getSciVersion() >= SCI_VERSION_2 || platform == Common::kPlatformMacintosh || (platform == Common::kPlatformAmiga && getSciVersion() >= SCI_VERSION_1_EGA)) 73 midiType = MidiDriver::detectMusicDriver(MDT_PCSPK | MDT_ADLIB | MDT_MIDI | MDT_PREFER_MIDI); 74 else 75 midiType = MidiDriver::detectMusicDriver(MDT_PCSPK | MDT_ADLIB | MDT_MIDI); 76 77 switch (midiType) { 78 case MD_ADLIB: 71 switch (MidiDriver::getMusicType(dev)) { 72 case MT_ADLIB: 79 73 // FIXME: There's no Amiga sound option, so we hook it up to AdLib 80 74 if (g_sci->getPlatform() == Common::kPlatformAmiga) 81 75 _pMidiDrv = MidiPlayer_Amiga_create(_soundVersion); 82 76 else 83 77 _pMidiDrv = MidiPlayer_AdLib_create(_soundVersion); 84 78 break; 85 case M D_PCJR:79 case MT_PCJR: 86 80 _pMidiDrv = MidiPlayer_PCJr_create(_soundVersion); 87 81 break; 88 case M D_PCSPK:82 case MT_PCSPK: 89 83 _pMidiDrv = MidiPlayer_PCSpeaker_create(_soundVersion); 90 84 break; 91 85 default: -
engines/scumm/detection.cpp
896 896 } 897 897 } 898 898 899 dg.setGUIOptions(x->game.guioptions | MidiDriver::m idiDriverFlags2GUIO(x->game.midi));899 dg.setGUIOptions(x->game.guioptions | MidiDriver::musicType2GUIO(x->game.midi)); 900 900 dg.appendGUIOptions(getGameGUIOptionsDescriptionLanguage(x->language)); 901 901 902 902 detectedGames.push_back(dg); -
engines/scumm/detection_tables.h
224 224 {"indy3", "VGA", "vga", GID_INDY3, 3, 0, MDT_PCSPK | MDT_ADLIB, GF_OLD256 | GF_FEW_LOCALS, Common::kPlatformPC, GUIO_NOSPEECH | GUIO_NOMIDI}, 225 225 {"indy3", "FM-TOWNS", 0, GID_INDY3, 3, 0, MDT_TOWNS, GF_OLD256 | GF_FEW_LOCALS | GF_AUDIOTRACKS, Common::kPlatformFMTowns, GUIO_NOSPEECH | GUIO_NOMIDI}, 226 226 227 {"loom", "EGA", "ega", GID_LOOM, 3, 0, MDT_PCSPK | MDT_CMS | MDT_ADLIB | MDT_MIDI , 0, UNK, GUIO_NOSPEECH},227 {"loom", "EGA", "ega", GID_LOOM, 3, 0, MDT_PCSPK | MDT_CMS | MDT_ADLIB | MDT_MIDI | MDT_PREFER_MIDI | MDT_PREFER_MT32, 0, UNK, GUIO_NOSPEECH}, 228 228 {"loom", "No AdLib", "ega", GID_LOOM, 3, 0, MDT_PCSPK | MDT_CMS, 0, UNK, GUIO_NOSPEECH | GUIO_NOMIDI}, 229 229 #ifdef USE_RGB_COLOR 230 230 {"loom", "PC-Engine", 0, GID_LOOM, 3, 0, MDT_NONE, GF_AUDIOTRACKS | GF_OLD256 | GF_16BIT_COLOR, Common::kPlatformPCEngine, GUIO_NOSPEECH | GUIO_NOMIDI}, … … 234 234 235 235 {"pass", 0, 0, GID_PASS, 4, 0, MDT_PCSPK | MDT_ADLIB, GF_16COLOR, Common::kPlatformPC, GUIO_NOSPEECH | GUIO_NOMIDI}, 236 236 237 {"monkey", "VGA", "vga", GID_MONKEY_VGA, 4, 0, MDT_PCSPK | MDT_ADLIB | MDT_MIDI , 0, UNK, GUIO_NOSPEECH},238 {"monkey", "EGA", "ega", GID_MONKEY_EGA, 4, 0, MDT_PCSPK | MDT_CMS | MDT_ADLIB | MDT_MIDI , GF_16COLOR, Common::kPlatformPC, GUIO_NOSPEECH},237 {"monkey", "VGA", "vga", GID_MONKEY_VGA, 4, 0, MDT_PCSPK | MDT_ADLIB | MDT_MIDI | MDT_PREFER_MIDI | MDT_PREFER_MT32, 0, UNK, GUIO_NOSPEECH}, 238 {"monkey", "EGA", "ega", GID_MONKEY_EGA, 4, 0, MDT_PCSPK | MDT_CMS | MDT_ADLIB | MDT_MIDI | MDT_PREFER_MIDI | MDT_PREFER_MT32, GF_16COLOR, Common::kPlatformPC, GUIO_NOSPEECH}, 239 239 {"monkey", "No AdLib", "ega", GID_MONKEY_EGA, 4, 0, MDT_PCSPK, GF_16COLOR, Common::kPlatformAtariST, GUIO_NOSPEECH | GUIO_NOMIDI}, 240 240 {"monkey", "Demo", "ega", GID_MONKEY_EGA, 4, 0, MDT_PCSPK | MDT_ADLIB, GF_16COLOR, Common::kPlatformPC, GUIO_NOSPEECH | GUIO_NOMIDI}, 241 241 {"monkey", "CD", 0, GID_MONKEY, 5, 0, MDT_ADLIB, GF_AUDIOTRACKS, UNK, GUIO_NOSPEECH | GUIO_NOMIDI}, 242 242 {"monkey", "FM-TOWNS", 0, GID_MONKEY, 5, 0, MDT_ADLIB, GF_AUDIOTRACKS, Common::kPlatformFMTowns, GUIO_NOSPEECH | GUIO_NOMIDI}, 243 243 {"monkey", "SEGA", 0, GID_MONKEY, 5, 0, MDT_NONE, GF_AUDIOTRACKS, Common::kPlatformSegaCD, GUIO_NOSPEECH | GUIO_NOMIDI}, 244 244 245 {"monkey2", 0, 0, GID_MONKEY2, 5, 0, MDT_ADLIB | MDT_MIDI , 0, UNK, GUIO_NOSPEECH},245 {"monkey2", 0, 0, GID_MONKEY2, 5, 0, MDT_ADLIB | MDT_MIDI | MDT_PREFER_MIDI | MDT_PREFER_MT32, 0, UNK, GUIO_NOSPEECH}, 246 246 247 {"atlantis", "" , 0, GID_INDY4, 5, 0, MDT_ADLIB | MDT_MIDI , 0, UNK, GUIO_NONE},248 {"atlantis", "Floppy", 0, GID_INDY4, 5, 0, MDT_ADLIB | MDT_MIDI , 0, UNK, GUIO_NOSPEECH},247 {"atlantis", "" , 0, GID_INDY4, 5, 0, MDT_ADLIB | MDT_MIDI | MDT_PREFER_MIDI | MDT_PREFER_MT32, 0, UNK, GUIO_NONE}, 248 {"atlantis", "Floppy", 0, GID_INDY4, 5, 0, MDT_ADLIB | MDT_MIDI | MDT_PREFER_MIDI | MDT_PREFER_MT32, 0, UNK, GUIO_NOSPEECH}, 249 249 250 {"tentacle", "", 0, GID_TENTACLE, 6, 0, MDT_ADLIB | MDT_MIDI , GF_USE_KEY, UNK, GUIO_NONE},251 {"tentacle", "Floppy", 0, GID_TENTACLE, 6, 0, MDT_ADLIB | MDT_MIDI , GF_USE_KEY, UNK, GUIO_NOSPEECH},250 {"tentacle", "", 0, GID_TENTACLE, 6, 0, MDT_ADLIB | MDT_MIDI | MDT_PREFER_MIDI | MDT_PREFER_GM, GF_USE_KEY, UNK, GUIO_NONE}, 251 {"tentacle", "Floppy", 0, GID_TENTACLE, 6, 0, MDT_ADLIB | MDT_MIDI | MDT_PREFER_MIDI | MDT_PREFER_GM, GF_USE_KEY, UNK, GUIO_NOSPEECH}, 252 252 253 {"samnmax", "", 0, GID_SAMNMAX, 6, 0, MDT_ADLIB | MDT_MIDI , GF_USE_KEY, UNK, GUIO_NONE},254 {"samnmax", "Floppy", 0, GID_SAMNMAX, 6, 0, MDT_ADLIB | MDT_MIDI , GF_USE_KEY, UNK, GUIO_NOSPEECH},253 {"samnmax", "", 0, GID_SAMNMAX, 6, 0, MDT_ADLIB | MDT_MIDI | MDT_PREFER_MIDI | MDT_PREFER_GM, GF_USE_KEY, UNK, GUIO_NONE}, 254 {"samnmax", "Floppy", 0, GID_SAMNMAX, 6, 0, MDT_ADLIB | MDT_MIDI | MDT_PREFER_MIDI | MDT_PREFER_GM, GF_USE_KEY, UNK, GUIO_NOSPEECH}, 255 255 256 256 #ifdef ENABLE_SCUMM_7_8 257 257 {"ft", 0, 0, GID_FT, 7, 0, MDT_NONE, 0, UNK, GUIO_NOMIDI}, -
engines/scumm/scumm.cpp
1634 1634 #endif 1635 1635 1636 1636 void ScummEngine::setupMusic(int midi) { 1637 MidiDriver Type midiDriver = MidiDriver::detectMusicDriver(midi);1638 _native_mt32 = (( midiDriver == MD_MT32) || ConfMan.getBool("native_mt32"));1637 MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(midi); 1638 _native_mt32 = ((MidiDriver::getMusicType(dev) == MT_MT32) || ConfMan.getBool("native_mt32")); 1639 1639 1640 switch ( midiDriver) {1641 case M D_NULL:1640 switch (MidiDriver::getMusicType(dev)) { 1641 case MT_NULL: 1642 1642 _musicType = MDT_NONE; 1643 1643 break; 1644 case M D_PCSPK:1645 case M D_PCJR:1644 case MT_PCSPK: 1645 case MT_PCJR: 1646 1646 _musicType = MDT_PCSPK; 1647 1647 break; 1648 case MD_CMS:1648 //case MT_CMS: 1649 1649 #if 1 1650 1650 _musicType = MDT_ADLIB; 1651 1651 #else 1652 1652 _musicType = MDT_CMS; // Still has number of bugs, disable by default 1653 1653 #endif 1654 1654 break; 1655 case M D_TOWNS:1655 case MT_TOWNS: 1656 1656 _musicType = MDT_TOWNS; 1657 1657 break; 1658 case M D_ADLIB:1658 case MT_ADLIB: 1659 1659 _musicType = MDT_ADLIB; 1660 1660 break; 1661 1661 default: … … 1707 1707 if (!_mixer->isReady()) { 1708 1708 warning("Sound mixer initialization failed"); 1709 1709 if (_musicType == MDT_ADLIB || _musicType == MDT_PCSPK || _musicType == MDT_CMS) { 1710 midiDriver = MD_NULL;1710 dev = 0; 1711 1711 _musicType = MDT_NONE; 1712 1712 warning("MIDI driver depends on sound mixer, switching to null MIDI driver"); 1713 1713 } … … 1735 1735 } else if (_game.platform == Common::kPlatformAmiga && _game.version <= 4) { 1736 1736 _musicEngine = new Player_V4A(this, _mixer); 1737 1737 } else if (_game.id == GID_MANIAC && _game.version == 1) { 1738 _musicEngine = new Player_V1(this, _mixer, midiDriver != MD_PCSPK);1738 _musicEngine = new Player_V1(this, _mixer, MidiDriver::getMusicType(dev) != MT_PCSPK); 1739 1739 } else if (_game.version <= 2) { 1740 _musicEngine = new Player_V2(this, _mixer, midiDriver != MD_PCSPK);1740 _musicEngine = new Player_V2(this, _mixer, MidiDriver::getMusicType(dev) != MT_PCSPK); 1741 1741 } else if ((_musicType == MDT_PCSPK) && (_game.version > 2 && _game.version <= 4)) { 1742 _musicEngine = new Player_V2(this, _mixer, midiDriver != MD_PCSPK);1742 _musicEngine = new Player_V2(this, _mixer, MidiDriver::getMusicType(dev) != MT_PCSPK); 1743 1743 } else if (_musicType == MDT_CMS) { 1744 1744 _musicEngine = new Player_V2CMS(this, _mixer); 1745 1745 } else if (_game.platform == Common::kPlatform3DO && _game.heversion <= 62) { … … 1749 1749 MidiDriver *adlibMidiDriver = 0; 1750 1750 1751 1751 if (_musicType != MDT_ADLIB) 1752 nativeMidiDriver = MidiDriver::createMidi( midiDriver);1752 nativeMidiDriver = MidiDriver::createMidi(dev); 1753 1753 if (nativeMidiDriver != NULL && _native_mt32) 1754 1754 nativeMidiDriver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE); 1755 1755 bool multi_midi = ConfMan.getBool("multi_midi") && _musicType != MDT_NONE && (midi & MDT_ADLIB); 1756 1756 if (_musicType == MDT_ADLIB || multi_midi) { 1757 adlibMidiDriver = MidiDriver _ADLIB_create();1757 adlibMidiDriver = MidiDriver::createMidi(MidiDriver::detectDevice(MDT_ADLIB)); 1758 1758 adlibMidiDriver->property(MidiDriver::PROP_OLD_ADLIB, (_game.features & GF_SMALL_HEADER) ? 1 : 0); 1759 1759 } 1760 1760 … … 1769 1769 // YM2162 driver can't handle midi->getPercussionChannel(), NULL shouldn't init MT-32/GM/GS 1770 1770 if ((midi != MDT_TOWNS) && (midi != MDT_NONE)) { 1771 1771 _imuse->property(IMuse::PROP_NATIVE_MT32, _native_mt32); 1772 if ( midiDriver != MD_MT32) // MT-32 Emulation shouldn't be GM/GS initialized1772 if (MidiDriver::getMusicType(dev) != MT_MT32) // MT-32 Emulation shouldn't be GM/GS initialized 1773 1773 _imuse->property(IMuse::PROP_GS, _enable_gs); 1774 1774 } 1775 1775 if (_game.heversion >= 60 || midi == MDT_TOWNS) { -
engines/sky/sky.cpp
259 259 260 260 _systemVars.gameVersion = _skyDisk->determineGameVersion(); 261 261 262 MidiDriver Type midiDriver = MidiDriver::detectMusicDriver(MDT_ADLIB | MDT_MIDI | MDT_PREFER_MIDI);263 if ( midiDriver == MD_ADLIB) {262 MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_ADLIB | MDT_MIDI | MDT_PREFER_MIDI | MDT_PREFER_MT32); 263 if (MidiDriver::getMusicType(dev) == MT_ADLIB) { 264 264 _systemVars.systemFlags |= SF_SBLASTER; 265 265 _skyMusic = new AdLibMusic(_mixer, _skyDisk); 266 266 } else { 267 267 _systemVars.systemFlags |= SF_ROLAND; 268 if (( midiDriver == MD_MT32) || ConfMan.getBool("native_mt32"))269 _skyMusic = new MT32Music(MidiDriver::createMidi( midiDriver), _skyDisk);268 if ((MidiDriver::getMusicType(dev) == MT_MT32) || ConfMan.getBool("native_mt32")) 269 _skyMusic = new MT32Music(MidiDriver::createMidi(dev), _skyDisk); 270 270 else 271 _skyMusic = new GmMusic(MidiDriver::createMidi( midiDriver), _skyDisk);271 _skyMusic = new GmMusic(MidiDriver::createMidi(dev), _skyDisk); 272 272 } 273 273 274 274 if (isCDVersion()) { -
engines/tinsel/tinsel.cpp
856 856 if (cd_num >= 0) 857 857 _system->openCD(cd_num); 858 858 859 MidiDriver Type midiDriver = MidiDriver::detectMusicDriver(MDT_MIDI | MDT_ADLIB | MDT_PREFER_MIDI);860 bool native_mt32 = (( midiDriver == MD_MT32) || ConfMan.getBool("native_mt32"));861 //bool adlib = ( midiDriver == MD_ADLIB);859 MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_MIDI | MDT_ADLIB | MDT_PREFER_MIDI); 860 bool native_mt32 = ((MidiDriver::getMusicType(dev) == MT_MT32) || ConfMan.getBool("native_mt32")); 861 //bool adlib = (MidiDriver::getMusicType(dev) == MT_ADLIB); 862 862 863 _driver = MidiDriver::createMidi( midiDriver);863 _driver = MidiDriver::createMidi(dev); 864 864 if (native_mt32) 865 865 _driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE); 866 866 -
engines/touche/midi.cpp
92 92 } 93 93 94 94 int MidiPlayer::open() { 95 MidiDriver Type midiDriver = MidiDriver::detectMusicDriver(MDT_MIDI | MDT_ADLIB | MDT_PREFER_MIDI);96 _nativeMT32 = (( midiDriver == MD_MT32) || ConfMan.getBool("native_mt32"));97 _driver = MidiDriver::createMidi( midiDriver);95 MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_MIDI | MDT_ADLIB | MDT_PREFER_MIDI); 96 _nativeMT32 = ((MidiDriver::getMusicType(dev) == MT_MT32) || ConfMan.getBool("native_mt32")); 97 _driver = MidiDriver::createMidi(dev); 98 98 int ret = _driver->open(); 99 99 if (ret == 0) { 100 100 _parser = MidiParser::createParser_SMF(); -
gui/options.cpp
40 40 #include "graphics/scaler.h" 41 41 42 42 #include "sound/mididrv.h" 43 #include "sound/musicplugin.h" 43 44 #include "sound/mixer.h" 44 45 #include "sound/fmopl.h" 45 46 … … 99 100 _aspectCheckbox = 0; 100 101 _enableAudioSettings = false; 101 102 _midiPopUp = 0; 103 _mt32DevicePopUp = 0; 104 _gmDevicePopUp = 0; 102 105 _oplPopUp = 0; 103 106 _outputRatePopUp = 0; 104 107 _enableMIDISettings = false; … … 133 136 } 134 137 } 135 138 139 template<class T> bool prdEqualsDeviceProperty(MusicDevices::iterator d, T lookupProp, Common::MemFunc0<T, MusicDevice> devicePropFunc) { 140 return lookupProp == devicePropFunc(&*d); 141 } 142 143 bool prdMidiDefault(MusicDevices::iterator d, Common::String dom, bool, MusicPlugin::List::const_iterator&) { 144 return !(dom == Common::ConfigManager::kApplicationDomain && d->getMusicType() == MT_TOWNS) ? true : false; 145 } 146 147 bool prdMidiSpec(MusicDevices::iterator d, Common::String, bool isAutoPlugin, MusicPlugin::List::const_iterator &m) { 148 if (isAutoPlugin) 149 m++; 150 return ((d->getMusicType() >= MT_GM) || isAutoPlugin) ? true : false; 151 } 152 136 153 void OptionsDialog::open() { 137 154 Dialog::open(); 138 155 … … 191 208 } 192 209 193 210 // Audio options 194 if (_midiPopUp) { 195 // Music driver 196 MidiDriverType id = MidiDriver::parseMusicDriver(ConfMan.get("music_driver", _domain)); 197 _midiPopUp->setSelectedTag(id); 211 if (!loadMusicDeviceSetting(_midiPopUp, "music_driver", prdMidiDefault)) 212 _midiPopUp->setSelected(0); 213 214 if (!loadMusicDeviceSetting(_mt32DevicePopUp, "mt32_device", prdMidiSpec)) { 215 if (_domain.equals(Common::ConfigManager::kApplicationDomain)) { 216 if (!loadMusicDeviceSetting(_mt32DevicePopUp, "", prdMidiSpec, MT_MT32)) 217 _mt32DevicePopUp->setSelected(0); 218 } else { 219 _mt32DevicePopUp->setSelected(0); 220 } 198 221 } 199 222 223 if (!loadMusicDeviceSetting(_gmDevicePopUp, "gm_device", prdMidiSpec)) { 224 if (_domain.equals(Common::ConfigManager::kApplicationDomain)) { 225 if (!loadMusicDeviceSetting(_gmDevicePopUp, "", prdMidiSpec, MT_GM)) 226 _gmDevicePopUp->setSelected(0); 227 } else { 228 _gmDevicePopUp->setSelected(0); 229 } 230 } 231 200 232 if (_oplPopUp) { 201 233 OPL::Config::DriverId id = MAX<OPL::Config::DriverId>(OPL::Config::parse(ConfMan.get("opl_driver", _domain)), 0); 202 234 _oplPopUp->setSelectedTag(id); … … 332 364 } 333 365 334 366 // Audio options 335 if (_midiPopUp) { 336 if (_enableAudioSettings) { 337 const MidiDriverDescription *md = MidiDriver::getAvailableMidiDrivers(); 338 while (md->name && md->id != (int)_midiPopUp->getSelectedTag()) 339 md++; 340 if (md->name) 341 ConfMan.set("music_driver", md->name, _domain); 342 else 343 ConfMan.removeKey("music_driver", _domain); 344 } else { 345 ConfMan.removeKey("music_driver", _domain); 346 } 347 } 367 saveMusicDeviceSetting(_midiPopUp, "music_driver", prdMidiDefault); 368 saveMusicDeviceSetting(_mt32DevicePopUp, "mt32_device", prdMidiSpec); 369 saveMusicDeviceSetting(_gmDevicePopUp, "gm_device", prdMidiSpec); 348 370 349 371 if (_oplPopUp) { 350 372 if (_enableAudioSettings) { … … 495 517 496 518 void OptionsDialog::setAudioSettingsState(bool enabled) { 497 519 _enableAudioSettings = enabled; 498 499 520 _midiPopUpDesc->setEnabled(enabled); 500 521 _midiPopUp->setEnabled(enabled); 522 _mt32DevicePopUpDesc->setEnabled(_domain.equals(Common::ConfigManager::kApplicationDomain) ? enabled : false); 523 _mt32DevicePopUp->setEnabled(_domain.equals(Common::ConfigManager::kApplicationDomain) ? enabled : false); 524 _gmDevicePopUpDesc->setEnabled(_domain.equals(Common::ConfigManager::kApplicationDomain) ? enabled : false); 525 _gmDevicePopUp->setEnabled(_domain.equals(Common::ConfigManager::kApplicationDomain) ? enabled : false); 501 526 502 uint32 allFlags = MidiDriver::m idiDriverFlags2GUIO((uint32)-1);527 uint32 allFlags = MidiDriver::musicType2GUIO((uint32)-1); 503 528 504 529 if (_domain != Common::ConfigManager::kApplicationDomain && // global dialog 505 530 (_guioptions & allFlags) && // No flags are specified 506 531 !(_guioptions & Common::GUIO_MIDIADLIB)) { 507 532 _oplPopUpDesc->setEnabled(false); 508 533 _oplPopUp->setEnabled(false); … … 623 648 624 649 void OptionsDialog::addAudioControls(GuiObject *boss, const Common::String &prefix) { 625 650 // The MIDI mode popup & a label 626 _midiPopUpDesc = new StaticTextWidget(boss, prefix + "auMidiPopupDesc", _( "Music driver:"), _("Specifies output sound device or sound card emulator"));651 _midiPopUpDesc = new StaticTextWidget(boss, prefix + "auMidiPopupDesc", _(_domain == Common::ConfigManager::kApplicationDomain ? "Preferred Device:" : "Music Device:"), _(_domain == Common::ConfigManager::kApplicationDomain ? "Specifies preferred sound device or sound card emulator" : "Specifies output sound device or sound card emulator")); 627 652 _midiPopUp = new PopUpWidget(boss, prefix + "auMidiPopup", _("Specifies output sound device or sound card emulator")); 628 653 654 _mt32DevicePopUpDesc = new StaticTextWidget(boss, prefix + "auPrefMt32PopupDesc", _("MT32 Device:"), _("Specifies default sound device for Roland MT-32/LAPC1/CM32l/CM64 output")); 655 _mt32DevicePopUp = new PopUpWidget(boss, prefix + "auPrefMt32Popup"); 656 _gmDevicePopUpDesc = new StaticTextWidget(boss, prefix + "auPrefGmPopupDesc", _("GM Device:"), _("Specifies default sound device for General Midi output")); 657 _gmDevicePopUp = new PopUpWidget(boss, prefix + "auPrefGmPopup"); 658 629 659 // Populate it 630 const MidiDriverDescription *md = MidiDriver::getAvailableMidiDrivers(); 631 uint32 allFlags = MidiDriver::midiDriverFlags2GUIO((uint32)-1); 660 uint32 allFlags = MidiDriver::musicType2GUIO((uint32)-1); 632 661 633 while (md->name) { 634 if (_domain == Common::ConfigManager::kApplicationDomain || // global dialog 635 !(_guioptions & allFlags) || // No flags are specified 636 _guioptions & (MidiDriver::midiDriverFlags2GUIO(md->flags))) // flag is present 637 _midiPopUp->appendEntry(_(md->description), md->id); 638 md++; 662 const MusicPlugin::List p = MusicMan.getPlugins(); 663 int musicId = 0; 664 int midiId = 0; 665 for (MusicPlugin::List::const_iterator m = p.begin(); m != p.end(); m++) { 666 MusicDevices i = (**m)->getDevices(); 667 for (MusicDevices::iterator d = i.begin(); d != i.end(); d++) { 668 if ((_domain == Common::ConfigManager::kApplicationDomain && d->getMusicType() != MT_TOWNS) || // global dialog - skip useless FM-Towns option there 669 (_domain != Common::ConfigManager::kApplicationDomain && !(_guioptions & allFlags)) || // No flags are specified 670 _guioptions & (MidiDriver::musicType2GUIO(d->getMusicType()))) // flag is present 671 _midiPopUp->appendEntry(d->getCompleteName(), musicId++); 672 if (d->getMusicType() >= MT_GM || m == p.begin()) { 673 _mt32DevicePopUp->appendEntry(d->getCompleteName(), midiId); 674 _gmDevicePopUp->appendEntry(d->getCompleteName(), midiId++); 675 } 676 } 639 677 } 640 678 679 if (!_domain.equals(Common::ConfigManager::kApplicationDomain)) { 680 _mt32DevicePopUpDesc->setEnabled(false); 681 _mt32DevicePopUp->setEnabled(false); 682 _gmDevicePopUpDesc->setEnabled(false); 683 _gmDevicePopUp->setEnabled(false); 684 } 685 641 686 // The OPL emulator popup & a label 642 687 _oplPopUpDesc = new StaticTextWidget(boss, prefix + "auOPLPopupDesc", _("AdLib emulator:"), _("AdLib is used for music in many games")); 643 688 _oplPopUp = new PopUpWidget(boss, prefix + "auOPLPopup", _("AdLib is used for music in many games")); … … 745 790 _enableVolumeSettings = true; 746 791 } 747 792 793 bool OptionsDialog::loadMusicDeviceSetting(PopUpWidget *popup, Common::String setting, MidiSettingsExtraPred pred, MusicType preferredType) { 794 if (!popup || !popup->isEnabled()) 795 return true; 796 797 if (ConfMan.hasKey(setting, _domain) || preferredType) { 798 const Common::String drv = ConfMan.get(setting, _domain); 799 const MusicPlugin::List p = MusicMan.getPlugins(); 800 int id = 0; 801 for (MusicPlugin::List::const_iterator m = p.begin(); m != p.end() && id != -1; m++) { 802 MusicDevices i = (**m)->getDevices(); 803 for (MusicDevices::iterator d = i.begin(); d != i.end(); d++) { 804 if ((setting.empty() && preferredType) ? prdEqualsDeviceProperty(d, preferredType, Common::mem_fun(&MusicDevice::getMusicType)) : prdEqualsDeviceProperty(d, drv, Common::mem_fun(&MusicDevice::getCompleteId))) { 805 popup->setSelected(id); 806 id = -1; 807 break; 808 } else if (pred(d, _domain, m == p.begin(), m)) { 809 id++; 810 } 811 } 812 } 813 if (id != -1) 814 // midi device turned off or whatever 815 return false; 816 } else { 817 return false; 818 } 819 820 return true; 821 } 822 823 void OptionsDialog::saveMusicDeviceSetting(PopUpWidget *popup, Common::String setting, MidiSettingsExtraPred pred) { 824 if (!popup || !_enableAudioSettings) 825 return; 826 827 const MusicPlugin::List p = MusicMan.getPlugins(); 828 uint32 id = 0; 829 bool found = false; 830 for (MusicPlugin::List::const_iterator m = p.begin(); m != p.end() && !found; m++) { 831 MusicDevices i = (**m)->getDevices(); 832 for (MusicDevices::iterator d = i.begin(); d != i.end(); d++) { 833 if (id == popup->getSelectedTag()) { 834 ConfMan.set(setting, d->getCompleteId(), _domain); 835 found = true; 836 break; 837 } else if (pred(d, _domain, m == p.begin(), m)) { 838 id++; 839 } 840 } 841 } 842 843 if (!found) 844 ConfMan.removeKey(setting, _domain); 845 } 846 748 847 int OptionsDialog::getSubtitleMode(bool subtitles, bool speech_mute) { 749 848 if (_guioptions & Common::GUIO_NOSUBTITLES) 750 849 return kSubtitlesSpeech; // Speech only -
gui/options.h
28 28 #include "gui/dialog.h" 29 29 #include "gui/TabWidget.h" 30 30 #include "common/str.h" 31 #include "sound/musicplugin.h" 31 32 32 33 #ifdef SMALL_SCREEN_DEVICE 33 34 #include "gui/KeysDialog.h" … … 78 79 void setVolumeSettingsState(bool enabled); 79 80 void setSubtitleSettingsState(bool enabled); 80 81 82 typedef bool (MidiSettingsExtraPred)(MusicDevices::iterator, Common::String, bool, MusicPlugin::List::const_iterator&); 83 bool loadMusicDeviceSetting(PopUpWidget *popup, Common::String setting, MidiSettingsExtraPred pred, MusicType preferredType = MT_NULL); 84 void saveMusicDeviceSetting(PopUpWidget *popup, Common::String setting, MidiSettingsExtraPred pred); 85 81 86 TabWidget *_tabWidget; 82 87 int _graphicsTabId; 83 88 … … 104 109 StaticTextWidget *_outputRatePopUpDesc; 105 110 PopUpWidget *_outputRatePopUp; 106 111 112 StaticTextWidget *_mt32DevicePopUpDesc; 113 PopUpWidget *_mt32DevicePopUp; 114 StaticTextWidget *_gmDevicePopUpDesc; 115 PopUpWidget *_gmDevicePopUp; 116 117 118 107 119 // 108 120 // MIDI controls 109 121 // -
gui/themes/default.inc
615 615 "/> " 616 616 "</layout> " 617 617 "<layout type='horizontal' padding='0,0,0,0' spacing='10' center='true'> " 618 "<widget name='auPrefMt32PopupDesc' " 619 "type='OptionsLabel' " 620 "/> " 621 "<widget name='auPrefMt32Popup' " 622 "type='PopUp' " 623 "/> " 624 "</layout> " 625 "<layout type='horizontal' padding='0,0,0,0' spacing='10' center='true'> " 626 "<widget name='auPrefGmPopupDesc' " 627 "type='OptionsLabel' " 628 "/> " 629 "<widget name='auPrefGmPopup' " 630 "type='PopUp' " 631 "/> " 632 "</layout> " 633 "<layout type='horizontal' padding='0,0,0,0' spacing='10' center='true'> " 618 634 "<widget name='auOPLPopupDesc' " 619 635 "type='OptionsLabel' " 620 636 "/> " … … 1370 1386 "/> " 1371 1387 "</layout> " 1372 1388 "<layout type='horizontal' padding='0,0,0,0' spacing='6' center='true'> " 1389 "<widget name='auPrefMt32PopupDesc' " 1390 "type='OptionsLabel' " 1391 "/> " 1392 "<widget name='auPrefMt32Popup' " 1393 "type='PopUp' " 1394 "/> " 1395 "</layout> " 1396 "<layout type='horizontal' padding='0,0,0,0' spacing='6' center='true'> " 1397 "<widget name='auPrefGmPopupDesc' " 1398 "type='OptionsLabel' " 1399 "/> " 1400 "<widget name='auPrefGmPopup' " 1401 "type='PopUp' " 1402 "/> " 1403 "</layout> " 1404 "<layout type='horizontal' padding='0,0,0,0' spacing='6' center='true'> " 1373 1405 "<widget name='auOPLPopupDesc' " 1374 1406 "type='OptionsLabel' " 1375 1407 "/> " -
gui/themes/scummclassic/classic_layout.stx
232 232 /> 233 233 </layout> 234 234 <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'> 235 <widget name = 'auPrefMt32PopupDesc' 236 type = 'OptionsLabel' 237 /> 238 <widget name = 'auPrefMt32Popup' 239 type = 'PopUp' 240 /> 241 </layout> 242 <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'> 243 <widget name = 'auPrefGmPopupDesc' 244 type = 'OptionsLabel' 245 /> 246 <widget name = 'auPrefGmPopup' 247 type = 'PopUp' 248 /> 249 </layout> 250 <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'> 235 251 <widget name = 'auOPLPopupDesc' 236 252 type = 'OptionsLabel' 237 253 /> -
gui/themes/scummclassic/classic_layout_lowres.stx
230 230 /> 231 231 </layout> 232 232 <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '6' center = 'true'> 233 <widget name = 'auPrefMt32PopupDesc' 234 type = 'OptionsLabel' 235 /> 236 <widget name = 'auPrefMt32Popup' 237 type = 'PopUp' 238 /> 239 </layout> 240 <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '6' center = 'true'> 241 <widget name = 'auPrefGmPopupDesc' 242 type = 'OptionsLabel' 243 /> 244 <widget name = 'auPrefGmPopup' 245 type = 'PopUp' 246 /> 247 </layout> 248 <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '6' center = 'true'> 233 249 <widget name = 'auOPLPopupDesc' 234 250 type = 'OptionsLabel' 235 251 /> -
gui/themes/scummmodern/scummmodern_layout.stx
247 247 /> 248 248 </layout> 249 249 <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'> 250 <widget name = 'auPrefMt32PopupDesc' 251 type = 'OptionsLabel' 252 /> 253 <widget name = 'auPrefMt32Popup' 254 type = 'PopUp' 255 /> 256 </layout> 257 <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'> 258 <widget name = 'auPrefGmPopupDesc' 259 type = 'OptionsLabel' 260 /> 261 <widget name = 'auPrefGmPopup' 262 type = 'PopUp' 263 /> 264 </layout> 265 <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '10' center = 'true'> 250 266 <widget name = 'auOPLPopupDesc' 251 267 type = 'OptionsLabel' 252 268 /> -
gui/themes/scummmodern/scummmodern_layout_lowres.stx
228 228 /> 229 229 </layout> 230 230 <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '6' center = 'true'> 231 <widget name = 'auPrefMt32PopupDesc' 232 type = 'OptionsLabel' 233 /> 234 <widget name = 'auPrefMt32Popup' 235 type = 'PopUp' 236 /> 237 </layout> 238 <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '6' center = 'true'> 239 <widget name = 'auPrefGmPopupDesc' 240 type = 'OptionsLabel' 241 /> 242 <widget name = 'auPrefGmPopup' 243 type = 'PopUp' 244 /> 245 </layout> 246 <layout type = 'horizontal' padding = '0, 0, 0, 0' spacing = '6' center = 'true'> 231 247 <widget name = 'auOPLPopupDesc' 232 248 type = 'OptionsLabel' 233 249 /> -
po/POTFILES
21 21 engines/scumm/dialogs.cpp 22 22 engines/mohawk/dialogs.cpp 23 23 24 sound/mididrv.cpp 24 sound/musicplugin.cpp 25 sound/null.cpp 26 sound/softsynth/mt32.cpp 27 sound/softsynth/adlib.cpp 28 sound/softsynth/ym2612.cpp 25 29 26 30 backends/keymapper/remap-dialog.cpp 27 31 backends/platform/ds/arm9/source/dsoptions.cpp -
sound/mididrv.cpp
27 27 #include "common/config-manager.h" 28 28 #include "common/str.h" 29 29 #include "common/system.h" 30 #include "common/translation.h"31 30 #include "common/util.h" 32 31 #include "sound/mididrv.h" 32 #include "sound/musicplugin.h" 33 #include "common/translation.h" 33 34 34 static const uint32 GUIOMapping[] = {35 MDT_PCSPK, Common::GUIO_MIDIPCSPK,36 MDT_CMS, Common::GUIO_MIDICMS,37 MDT_PCJR, Common::GUIO_MIDIPCJR,38 MDT_ADLIB, Common::GUIO_MIDIADLIB,39 MDT_TOWNS, Common::GUIO_MIDITOWNS,40 MDT_MIDI, Common::GUIO_MIDI,41 0, 042 };43 44 uint32 MidiDriver::midiDriverFlags2GUIO(uint32 flags) {45 uint32 res = 0;46 47 for (int i = 0; GUIOMapping[i] || GUIOMapping[i + 1]; i += 2) {48 if (flags & GUIOMapping[i])49 res |= GUIOMapping[i + 1];50 }51 52 return res;53 }54 55 /** Internal list of all available 'midi' drivers. */56 static const MidiDriverDescription s_musicDrivers[] = {57 58 // The flags for the "auto" & "null" drivers indicate that they are anything59 // you want it to be.60 {"auto", _s("<default>"), MD_AUTO, MDT_MIDI | MDT_PCSPK | MDT_ADLIB | MDT_TOWNS},61 {"null", _s("No music"), MD_NULL, MDT_MIDI | MDT_PCSPK | MDT_ADLIB | MDT_TOWNS},62 63 #if defined(WIN32) && !defined(_WIN32_WCE) && !defined(__SYMBIAN32__)64 {"windows", _s("Windows MIDI"), MD_WINDOWS, MDT_MIDI},65 #endif66 67 #if defined(UNIX) && defined(USE_ALSA)68 {"alsa", _s("ALSA"), MD_ALSA, MDT_MIDI},69 #endif70 71 #if defined(__MINT__)72 {"stmidi", _s("Atari ST MIDI"), MD_STMIDI, MDT_MIDI},73 #endif74 75 #if defined(UNIX) && !defined(__BEOS__) && !defined(MACOSX) && !defined(__MAEMO__) && !defined(__MINT__)76 {"seq", _s("SEQ"), MD_SEQ, MDT_MIDI},77 #endif78 79 #if defined(IRIX)80 {"dmedia", _s("DMedia"), MD_DMEDIA, MDT_MIDI},81 #endif82 83 #if defined(__amigaos4__)84 {"camd", _s("CAMD"), MD_CAMD, MDT_MIDI},85 #endif86 87 #if defined(MACOSX)88 {"core", _s("CoreAudio"), MD_COREAUDIO, MDT_MIDI},89 // {"coreaudio", "CoreAudio", MD_COREAUDIO, MDT_MIDI},90 {"coremidi", _s("CoreMIDI"), MD_COREMIDI, MDT_MIDI},91 #endif92 93 #if defined(PALMOS_MODE)94 # if defined(COMPILE_CLIE)95 {"ypa1", _s("Yamaha Pa1"), MD_YPA1, MDT_MIDI},96 # elif defined(COMPILE_ZODIAC) && (!defined(ENABLE_SCUMM) || !defined(PALMOS_ARM))97 {"zodiac", _s("Tapwave Zodiac"), MD_ZODIAC, MDT_MIDI},98 # endif99 #endif100 101 #ifdef USE_FLUIDSYNTH102 {"fluidsynth", _s("FluidSynth"), MD_FLUIDSYNTH, MDT_MIDI},103 #endif104 #ifdef USE_MT32EMU105 {"mt32", _s("MT-32 Emulation"), MD_MT32, MDT_MIDI},106 #endif107 108 // The flags for the "adlib" driver indicates that it can do AdLib and MIDI.109 {"adlib", _s("AdLib"), MD_ADLIB, MDT_ADLIB},110 {"pcspk", _s("PC Speaker"), MD_PCSPK, MDT_PCSPK},111 {"pcjr", _s("IBM PCjr"), MD_PCJR, MDT_PCSPK | MDT_PCJR},112 {"cms", _s("Creative Music System"), MD_CMS, MDT_CMS},113 {"towns", _s("FM Towns"), MD_TOWNS, MDT_TOWNS},114 #if defined(UNIX)115 {"timidity", _s("TiMidity"), MD_TIMIDITY, MDT_MIDI},116 #endif117 118 {0, 0, MD_NULL, MDT_NONE}119 };120 121 35 const byte MidiDriver::_mt32ToGm[128] = { 122 36 // 0 1 2 3 4 5 6 7 8 9 A B C D E F 123 37 0, 1, 0, 2, 4, 4, 5, 3, 16, 17, 18, 16, 16, 19, 20, 21, // 0x … … 142 56 101, 103, 100, 120, 117, 113, 99, 128, 128, 128, 128, 124, 123, 128, 128, 128, // 7x 143 57 }; 144 58 145 const MidiDriverDescription *MidiDriver::getAvailableMidiDrivers() { 146 return s_musicDrivers; 147 } 59 static const uint32 GUIOMapping[] = { 60 MT_PCSPK, Common::GUIO_MIDIPCSPK, 61 /*MDT_CMS, Common::GUIO_MIDICMS,*/ 62 MT_PCJR, Common::GUIO_MIDIPCJR, 63 MT_ADLIB, Common::GUIO_MIDIADLIB, 64 MT_TOWNS, Common::GUIO_MIDITOWNS, 65 MT_GM, Common::GUIO_MIDIGM, 66 MT_MT32, Common::GUIO_MIDIMT32, 67 0, 0 68 }; 148 69 149 const MidiDriverDescription *MidiDriver::findMusicDriver(const Common::String &str) { 150 if (str.empty()) 151 return 0; 70 uint32 MidiDriver::musicType2GUIO(uint32 musicType) { 71 uint32 res = 0; 152 72 153 const char *s = str.c_str(); 154 int len = 0; 155 const MidiDriverDescription *md = s_musicDrivers; 73 for (int i = 0; GUIOMapping[i] || GUIOMapping[i + 1]; i += 2) { 74 if (musicType == GUIOMapping[i] || musicType == (uint32)-1) 75 res |= GUIOMapping[i + 1]; 76 } 156 77 157 // Scan for string end or a colon 158 while (s[len] != 0 && s[len] != ':') 159 len++; 78 return res; 79 } 160 80 161 while (md->name) { 162 // Compare the string passed to us with the current table entry. 163 // We ignore any characters following an (optional) colon ':' 164 // contained in str. 165 if (!scumm_strnicmp(md->name, s, len)) { 166 return md; 81 bool MidiDriver::_forceTypeMT32 = false; 82 83 MusicType MidiDriver::getMusicType(MidiDriver::DeviceHandle handle) { 84 if (_forceTypeMT32) 85 return MT_MT32; 86 87 if (handle) { 88 const MusicPlugin::List p = MusicMan.getPlugins(); 89 for (MusicPlugin::List::const_iterator m = p.begin(); m != p.end(); m++) { 90 MusicDevices i = (**m)->getDevices(); 91 for (MusicDevices::iterator d = i.begin(); d != i.end(); d++) { 92 if (handle == d->getHandle()) 93 return d->getMusicType(); 94 } 167 95 } 168 md++;169 96 } 170 171 return 0;97 98 return MT_NULL; 172 99 } 173 100 174 static MidiDriverType getDefaultMIDIDriver() { 175 #if defined(WIN32) && !defined(_WIN32_WCE) && !defined(__SYMBIAN32__) 176 return MD_WINDOWS; 177 #elif defined(MACOSX) 178 return MD_COREAUDIO; 179 #elif defined(PALMOS_MODE) 180 #if defined(COMPILE_CLIE) 181 return MD_YPA1; 182 #elif defined(COMPILE_ZODIAC) 183 return MD_ZODIAC; 184 #else 185 return MD_NULL; 186 #endif 187 #else 188 return MD_NULL; 189 #endif 190 } 101 Common::String MidiDriver::getDeviceString(DeviceHandle handle, DeviceStringType type) { 102 if (handle) { 103 const MusicPlugin::List p = MusicMan.getPlugins(); 104 for (MusicPlugin::List::const_iterator m = p.begin(); m != p.end(); m++) { 105 MusicDevices i = (**m)->getDevices(); 106 for (MusicDevices::iterator d = i.begin(); d != i.end(); d++) { 107 if (handle == d->getHandle()) { 108 if (type == kDriverName) 109 return d->getMusicDriverName(); 110 else if (type == kDriverId) 111 return d->getMusicDriverId(); 112 else if (type == kDeviceId) 113 return d->getCompleteId(); 114 else 115 return Common::String("auto"); 116 } 117 } 118 } 119 } 191 120 192 MidiDriverType MidiDriver::parseMusicDriver(const Common::String &str) { 193 const MidiDriverDescription *md = findMusicDriver(str); 194 if (md) 195 return md->id; 196 return MD_AUTO; 121 return Common::String("auto"); 197 122 } 198 123 199 MidiDriverType MidiDriver::detectMusicDriver(int flags) { 200 MidiDriverType musicDriver; 124 MidiDriver::DeviceHandle MidiDriver::detectDevice(int flags) { 125 // Query the selected music device (defaults to MT_AUTO device). 126 DeviceHandle hdl = getDeviceHandle(ConfMan.get("music_driver")); 201 127 202 // Query the selected music driver (defaults to MD_AUTO). 203 const MidiDriverDescription *md = findMusicDriver(ConfMan.get("music_driver")); 128 _forceTypeMT32 = false; 204 129 205 130 // Check whether the selected music driver is compatible with the 206 131 // given flags. 207 if (!md || !(md->flags & flags)) 208 musicDriver = MD_AUTO; 209 else 210 musicDriver = md->id; 132 switch (getMusicType(hdl)) { 133 case MT_PCSPK: 134 case MT_PCJR: 135 if (flags & MDT_PCSPK) 136 return hdl; 137 break; 211 138 212 // If the selected driver is MD_AUTO, we try to determine 213 // a suitable and "optimal" music driver. 214 if (musicDriver == MD_AUTO) { 139 case MT_ADLIB: 140 if (flags & MDT_ADLIB) 141 return hdl; 142 break; 143 144 case MT_TOWNS: 145 if (flags & MDT_TOWNS) 146 return hdl; 147 break; 215 148 216 if (flags & MDT_PREFER_MIDI) { 217 // A MIDI music driver is preferred. Of course this implies 218 // that MIDI is actually listed in flags, so we verify that. 219 assert(flags & MDT_MIDI); 149 case MT_GM: 150 case MT_GS: 151 case MT_MT32: 152 if (flags & MDT_MIDI) 153 return hdl; 154 case MT_NULL: 155 if (getDeviceString(hdl, MidiDriver::kDriverId).equals("null")) 156 return 0; 220 157 221 // Query the default MIDI driver. It's possible that there 222 // is none, in which case we revert to AUTO mode. 223 musicDriver = getDefaultMIDIDriver(); 224 if (musicDriver == MD_NULL) 225 musicDriver = MD_AUTO; 226 } 158 default: 159 break; 160 } 227 161 228 if (musicDriver == MD_AUTO) { 229 // MIDI is not preferred, or no default MIDI device is available. 230 // In this case we first try the alternate drivers before checking 231 // for a 'real' MIDI driver. 162 // If the selected driver did not match the flags setting, 163 // we try to determine a suitable and "optimal" music driver. 164 const MusicPlugin::List p = MusicMan.getPlugins(); 165 // If only MDT_MIDI but not MDT_PREFER_MIDI is set we prefer the other devices (which will always be 166 // detected since they are hard coded and cannot be disabled. 167 for (int l = (flags & MDT_PREFER_MIDI) ? 1 : 0; l < 2; l++) { 168 if ((flags & MDT_MIDI) && (l == 1)) { 169 // If a preferred MT32 or GM device has been selected that device gets returned 170 hdl = getDeviceHandle(ConfMan.get((flags & MDT_PREFER_MT32) ? "mt32_device" : ((flags & MDT_PREFER_GM) ? "gm_device" : "auto"), Common::ConfigManager::kApplicationDomain)); 171 if (getMusicType(hdl) != MT_NULL) { 172 if (flags & MDT_PREFER_MT32) 173 // If we have a preferred MT32 device we disable the gm/mt32 mapping (more about this in mididrv.h) 174 _forceTypeMT32 = true; 232 175 233 if (flags & MDT_TOWNS) 234 musicDriver = MD_TOWNS; 235 else if (flags & MDT_ADLIB) 236 musicDriver = MD_ADLIB; 237 else if (flags & MDT_PCSPK) 238 musicDriver = MD_PCJR; 239 else if (flags & MDT_MIDI) 240 musicDriver = getDefaultMIDIDriver(); 241 else 242 musicDriver = MD_NULL; 176 return hdl; 177 } 178 179 // If we have no specific device selected (neither in the scummvm nor in the game domain) 180 // and no preferred MT32 or GM device selected we arrive here. 181 // If MT32 is preferred we try for the first available device with music type 'MT_MT32' (usually the mt32 emulator) 182 if (flags & MDT_PREFER_MT32) { 183 for (MusicPlugin::List::const_iterator m = p.begin(); m != p.end(); m++) { 184 MusicDevices i = (**m)->getDevices(); 185 for (MusicDevices::iterator d = i.begin(); d != i.end(); d++) { 186 if (getMusicType(hdl) == MT_MT32) 187 return hdl; 188 } 189 } 190 } 191 192 // Now we default to the first available device with music type 'MT_GM' 193 for (MusicPlugin::List::const_iterator m = p.begin(); m != p.end(); m++) { 194 MusicDevices i = (**m)->getDevices(); 195 for (MusicDevices::iterator d = i.begin(); d != i.end(); d++) { 196 if (getMusicType(hdl) == MT_GM || getMusicType(hdl) == MT_GS) 197 return hdl; 198 } 199 } 200 } 201 202 MusicType tp = MT_NULL; 203 if (flags & MDT_TOWNS) 204 tp = MT_TOWNS; 205 else if (flags & MDT_ADLIB) 206 tp = MT_ADLIB; 207 else if (flags & MDT_PCSPK) 208 tp = MT_PCSPK; 209 else 210 tp = MT_NULL; 211 212 for (MusicPlugin::List::const_iterator m = p.begin(); m != p.end(); m++) { 213 MusicDevices i = (**m)->getDevices(); 214 for (MusicDevices::iterator d = i.begin(); d != i.end(); d++) { 215 if (d->getMusicType() == tp) 216 return d->getHandle(); 217 } 243 218 } 244 219 } 245 220 246 return musicDriver;221 return hdl; 247 222 } 248 223 249 MidiDriver *MidiDriver::createMidi(MidiDriverType midiDriver) { 250 switch (midiDriver) { 251 case MD_NULL: return MidiDriver_NULL_create(); 252 253 case MD_ADLIB: return MidiDriver_ADLIB_create(); 254 255 case MD_TOWNS: return MidiDriver_YM2612_create(); 256 257 // Right now PC Speaker and PCjr are handled 258 // outside the MidiDriver architecture, so 259 // don't create anything for now. 260 case MD_PCSPK: 261 case MD_CMS: 262 case MD_PCJR: return NULL; 263 264 #ifdef USE_FLUIDSYNTH 265 case MD_FLUIDSYNTH: return MidiDriver_FluidSynth_create(); 266 #endif 267 268 #ifdef USE_MT32EMU 269 case MD_MT32: return MidiDriver_MT32_create(); 270 #endif 271 272 #if defined(PALMOS_MODE) 273 #if defined(COMPILE_CLIE) 274 case MD_YPA1: return MidiDriver_YamahaPa1_create(); 275 #elif defined(COMPILE_ZODIAC) && (!defined(ENABLE_SCUMM) || !defined(PALMOS_ARM)) 276 case MD_ZODIAC: return MidiDriver_Zodiac_create(); 277 #endif 278 #endif 279 280 #if defined(WIN32) && !defined(_WIN32_WCE) && !defined(__SYMBIAN32__) 281 case MD_WINDOWS: return MidiDriver_WIN_create(); 282 #endif 283 #if defined(__MINT__) 284 case MD_STMIDI: return MidiDriver_STMIDI_create(); 285 #endif 286 #if defined(UNIX) && !defined(__BEOS__) && !defined(MACOSX) && !defined(__MAEMO__) && !defined(__MINT__) 287 case MD_SEQ: return MidiDriver_SEQ_create(); 288 #endif 289 #if defined(UNIX) 290 case MD_TIMIDITY: return MidiDriver_TIMIDITY_create(); 291 #endif 292 #if defined(IRIX) 293 case MD_DMEDIA: return MidiDriver_DMEDIA_create(); 294 #endif 295 #if defined(MACOSX) 296 case MD_COREAUDIO: return MidiDriver_CORE_create(); 297 case MD_COREMIDI: return MidiDriver_CoreMIDI_create(); 298 #endif 299 #if defined(UNIX) && defined(USE_ALSA) 300 case MD_ALSA: return MidiDriver_ALSA_create(); 301 #endif 302 #if defined(__amigaos4__) 303 case MD_CAMD: return MidiDriver_CAMD_create(); 304 #endif 305 default: 306 error("Invalid midi driver selected"); 224 MidiDriver *MidiDriver::createMidi(MidiDriver::DeviceHandle handle) { 225 MidiDriver *driver = 0; 226 const MusicPlugin::List p = MusicMan.getPlugins(); 227 for (MusicPlugin::List::const_iterator m = p.begin(); m != p.end(); m++) { 228 if (getDeviceString(handle, MidiDriver::kDriverId).equals((**m)->getId())) 229 (**m)->createInstance(&driver, handle); 307 230 } 231 return driver; 232 } 308 233 309 return NULL; 234 MidiDriver::DeviceHandle MidiDriver::getDeviceHandle(const Common::String &identifier) { 235 const MusicPlugin::List p = MusicMan.getPlugins(); 236 for (MusicPlugin::List::const_iterator m = p.begin(); m != p.end(); m++) { 237 MusicDevices i = (**m)->getDevices(); 238 for (MusicDevices::iterator d = i.begin(); d != i.end(); d++) { 239 if (identifier.equals(d->getCompleteId()) || identifier.equals(d->getCompleteName())) 240 return d->getHandle(); 241 } 242 } 243 244 return getDeviceHandle("auto"); 310 245 } -
sound/mididrv.h
30 30 #include "common/timer.h" 31 31 32 32 class MidiChannel; 33 class MusicDevice; 34 33 35 namespace Audio { 34 36 class Mixer; 35 37 } … … 43 45 * 44 46 * @todo Rename MidiDriverType to MusicDriverType 45 47 */ 46 enum MidiDriverType {47 // Pseudo drivers48 MD_AUTO,49 MD_NULL,50 48 51 // Windows 52 MD_WINDOWS, 53 54 // Atari ST 55 MD_STMIDI, 56 57 // Linux 58 MD_ALSA, 59 MD_SEQ, 60 61 // Mac OS X 62 MD_QTMUSIC, 63 MD_COREAUDIO, 64 MD_COREMIDI, 65 66 // PalmOS 67 MD_YPA1, 68 MD_ZODIAC, 69 70 // IRIX 71 MD_DMEDIA, 72 73 // AMIGAOS4 74 MD_CAMD, 75 76 // MIDI softsynths 77 MD_FLUIDSYNTH, 78 MD_MT32, 79 80 // "Fake" MIDI devices 81 MD_ADLIB, 82 MD_PCSPK, 83 MD_CMS, 84 MD_PCJR, 85 MD_TOWNS, 86 MD_TIMIDITY 49 /** 50 * Music types that music drivers can implement and engines can rely on. 51 */ 52 enum MusicType { 53 MT_NULL = 0, // Null / Auto 54 MT_PCSPK = 1, // PC Speaker 55 MT_PCJR = 2, // PCjr 56 MT_ADLIB = 3, // AdLib 57 MT_TOWNS = 4, // FM-TOWNS 58 MT_GM = 5, // General MIDI 59 MT_MT32 = 6, // MT-32 60 MT_GS = 7 // Roland GS 87 61 }; 88 62 89 63 /** 90 * A set of flags to be passed to detect MusicDriver() which can be used to64 * A set of flags to be passed to detectDevice() which can be used to 91 65 * specify what kind of music driver is preferred / accepted. 92 66 * 93 67 * The flags (except for MDT_PREFER_MIDI) indicate whether a given driver 94 68 * type is acceptable. E.g. the TOWNS music driver could be returned by 95 * detect MusicDriverif and only if MDT_TOWNS is specified.69 * detectDevice if and only if MDT_TOWNS is specified. 96 70 * 97 71 * @todo Rename MidiDriverFlags to MusicDriverFlags 98 72 */ … … 104 78 MDT_ADLIB = 1 << 3, // AdLib: Maps to MD_ADLIB 105 79 MDT_TOWNS = 1 << 4, // FM-TOWNS: Maps to MD_TOWNS 106 80 MDT_MIDI = 1 << 5, // Real MIDI 107 MDT_PREFER_MIDI = 1 << 6 // Real MIDI output is preferred 81 MDT_PREFER_MIDI = 1 << 6, // Real MIDI output is preferred 82 MDT_PREFER_MT32 = 1 << 7, // MT-32 output is preferred 83 MDT_PREFER_GM = 1 << 8 // GM output is preferred 108 84 }; 109 85 110 86 /** … … 114 90 * 115 91 * @todo Rename MidiDriverType to MusicDriverType 116 92 */ 117 struct MidiDriverDescription {118 const char *name;119 const char *description;120 MidiDriverType id; // A unique ID for each driver121 int flags; // Capabilities of this driver122 };123 93 124 94 /** 125 95 * Abstract MIDI Driver Class … … 128 98 */ 129 99 class MidiDriver { 130 100 public: 131 /** Find the music driver matching the given driver name/description. */ 132 static const MidiDriverDescription *findMusicDriver(const Common::String &str); 101 typedef uint32 DeviceHandle; 133 102 134 /** Get the id of the music driver matching the given driver name, or MD_AUTO if there is no match. */ 135 static MidiDriverType parseMusicDriver(const Common::String &str); 103 enum DeviceStringType { 104 kDriverName, 105 kDriverId, 106 kDeviceId 107 }; 136 108 137 static uint32 m idiDriverFlags2GUIO(uint32 flags);109 static uint32 musicType2GUIO(uint32 musicType); 138 110 111 /** Create music driver matching the given device handle, or MT_AUTO if there is no match. */ 112 static MidiDriver *createMidi(DeviceHandle handle); 113 114 /** Returnd device handle based on the present devices and the flags parameter. 115 / * Returns NULl if the matching device is the null or auto device. */ 116 static DeviceHandle detectDevice(int flags); 117 139 118 /** 140 * Get a list of all available MidiDriver types. 141 * @return list of all available midi drivers, terminated by a zero entry 119 * Find the music driver matching the given driver name/description. 142 120 */ 143 static const MidiDriverDescription *getAvailableMidiDrivers();121 static DeviceHandle getDeviceHandle(const Common::String &identifier); 144 122 145 static MidiDriver *createMidi(MidiDriverType midiDriver); 123 /** Get the music type matching the given device handle, or MT_AUTO if there is no match. */ 124 static MusicType getMusicType(DeviceHandle handle); 146 125 147 static MidiDriverType detectMusicDriver(int flags); 126 /** Get the device string matching the given device handle and the given type. */ 127 static Common::String getDeviceString(DeviceHandle handle, DeviceStringType type); 148 128 129 private: 130 // If detectDevice() detects MT32 and we have a preferred MT32 device 131 // we use this to force getMusicType() to return MT_MT32 so that we don't 132 // have to rely on the 'True Roland MT-32' config manager setting (since nobody 133 // would possibly think about activating 'True Roland MT-32' when he has set 134 // 'Music Driver' to '>default>') 135 static bool _forceTypeMT32; 149 136 150 137 public: 151 138 virtual ~MidiDriver() { } … … 274 261 virtual void sysEx_customInstrument(uint32 type, const byte *instr) = 0; 275 262 }; 276 263 277 278 // Factory functions, for faster compile279 extern MidiDriver *MidiDriver_NULL_create();280 extern MidiDriver *MidiDriver_ADLIB_create();281 extern MidiDriver *MidiDriver_WIN_create();282 extern MidiDriver *MidiDriver_STMIDI_create();283 extern MidiDriver *MidiDriver_SEQ_create();284 extern MidiDriver *MidiDriver_TIMIDITY_create();285 extern MidiDriver *MidiDriver_QT_create();286 extern MidiDriver *MidiDriver_CORE_create();287 extern MidiDriver *MidiDriver_CoreMIDI_create();288 extern MidiDriver *MidiDriver_ALSA_create();289 extern MidiDriver *MidiDriver_DMEDIA_create();290 extern MidiDriver *MidiDriver_CAMD_create();291 extern MidiDriver *MidiDriver_YM2612_create();292 #ifdef USE_FLUIDSYNTH293 extern MidiDriver *MidiDriver_FluidSynth_create();294 264 #endif 295 #ifdef USE_MT32EMU296 extern MidiDriver *MidiDriver_MT32_create();297 #endif298 extern MidiDriver *MidiDriver_YamahaPa1_create();299 extern MidiDriver *MidiDriver_Zodiac_create();300 301 #endif -
sound/musicplugin.cpp
24 24 */ 25 25 26 26 #include "sound/musicplugin.h" 27 #include "common/hash-str.h" 28 #include "common/translation.h" 27 29 28 30 MusicDevice::MusicDevice(MusicPluginObject const *musicPlugin, Common::String name, MusicType mt) : 29 _musicDriverName( musicPlugin->getName()), _musicDriverId(musicPlugin->getId()),30 _name( name), _type(mt) {31 _musicDriverName(_(musicPlugin->getName())), _musicDriverId(musicPlugin->getId()), 32 _name(_(name)), _type(mt) { 31 33 } 32 34 33 35 Common::String MusicDevice::getCompleteName() { … … 46 48 47 49 return name; 48 50 } 51 52 Common::String MusicDevice::getCompleteId() { 53 Common::String id = _musicDriverId; 54 if (!_name.empty()) { 55 id += "_"; 56 id += _name; 57 } 58 59 return id; 60 } 61 62 MidiDriver::DeviceHandle MusicDevice::getHandle() { 63 if (_musicDriverId.equals("auto") || _musicDriverId.equals("null")) 64 return 0; 65 return (MidiDriver::DeviceHandle)Common::hashit(getCompleteId().c_str()); 66 } -
sound/musicplugin.h
29 29 #include "sound/mididrv.h" 30 30 #include "common/list.h" 31 31 32 /**33 * Music types that music drivers can implement and engines can rely on.34 */35 enum MusicType {36 MT_PCSPK = 1, // PC Speaker37 MT_PCJR = 2, // PCjr38 MT_ADLIB = 3, // AdLib39 MT_TOWNS = 4, // FM-TOWNS40 MT_GM = 5, // General MIDI41 MT_MT32 = 6, // MT-3242 MT_GS = 7 // Roland GS43 };44 45 32 class MusicPluginObject; 46 33 47 34 /** … … 63 50 * device name (if it isn't the default one) and the name of the driver. 64 51 */ 65 52 Common::String getCompleteName(); 53 54 /** 55 * Returns a user readable string that contains the name of the current 56 * device name (if it isn't the default one) and the id of the driver. 57 */ 58 Common::String getCompleteId(); 66 59 60 MidiDriver::DeviceHandle getHandle(); 61 67 62 private: 68 63 Common::String _name; 69 64 Common::String _musicDriverName; … … 94 89 virtual MusicDevices getDevices() const = 0; 95 90 96 91 /** 97 * Tries to instantiate a MIDI Driver instance based on the settings of 98 * the currently active ConfMan target. That is, the MusicPluginObject 99 * should query the ConfMan singleton for the device name, port, etc. 92 * Tries to instantiate a MIDI Driver instance based on the device 93 * previously detected via MidiDriver::detectDevice() 100 94 * 101 95 * @param mididriver Pointer to a pointer which the MusicPluginObject sets 102 96 * to the newly create MidiDriver, or 0 in case of an error 97 * 98 * @param dev Pointer to a device to be used then creating the driver instance. 99 * Default value of zero for driver types without devices. 100 * 103 101 * @return a Common::Error describing the error which occurred, or kNoError 104 102 */ 105 virtual Common::Error createInstance(MidiDriver **mididriver ) const = 0;103 virtual Common::Error createInstance(MidiDriver **mididriver, MidiDriver::DeviceHandle = 0) const = 0; 106 104 }; 107 105 108 106 -
sound/null.cpp
24 24 25 25 #include "sound/musicplugin.h" 26 26 #include "sound/mpu401.h" 27 #include "common/translation.h" 27 28 28 29 /* NULL driver */ 29 30 class MidiDriver_NULL : public MidiDriver_MPU401 { … … 37 38 38 39 class NullMusicPlugin : public MusicPluginObject { 39 40 public: 40 const char *getName() const {41 return "No music";41 virtual const char *getName() const { 42 return _s("No music"); 42 43 } 43 44 44 const char *getId() const {45 virtual const char *getId() const { 45 46 return "null"; 46 47 } 47 48 48 MusicDevices getDevices() const;49 Common::Error createInstance(MidiDriver **mididriver) const;49 virtual MusicDevices getDevices() const; 50 virtual Common::Error createInstance(MidiDriver **mididriver, MidiDriver::DeviceHandle = 0) const; 50 51 }; 51 52 52 Common::Error NullMusicPlugin::createInstance(MidiDriver **mididriver ) const {53 Common::Error NullMusicPlugin::createInstance(MidiDriver **mididriver, MidiDriver::DeviceHandle) const { 53 54 *mididriver = new MidiDriver_NULL(); 54 55 55 56 return Common::kNoError; … … 57 58 58 59 MusicDevices NullMusicPlugin::getDevices() const { 59 60 MusicDevices devices; 60 // TODO: return a different music type? 61 devices.push_back(MusicDevice(this, "", MT_GM)); 61 devices.push_back(MusicDevice(this, _s(""), MT_NULL)); 62 62 return devices; 63 63 } 64 64 65 MidiDriver *MidiDriver_NULL_create() { 66 MidiDriver *mididriver; 65 class AutoMusicPlugin : public NullMusicPlugin { 66 public: 67 const char *getName() const { 68 return _s("<default>"); 69 } 67 70 68 NullMusicPlugin p; 69 p.createInstance(&mididriver); 71 const char *getId() const { 72 return "auto"; 73 } 74 }; 70 75 71 return mididriver;72 }73 74 #ifdef DISABLE_ADLIB75 MidiDriver *MidiDriver_ADLIB_create() {76 return MidiDriver_NULL_create();77 }78 #endif79 80 76 //#if PLUGIN_ENABLED_DYNAMIC(NULL) 81 77 //REGISTER_PLUGIN_DYNAMIC(NULL, PLUGIN_TYPE_MUSIC, NullMusicPlugin); 82 78 //#else 79 REGISTER_PLUGIN_STATIC(AUTO, PLUGIN_TYPE_MUSIC, AutoMusicPlugin); 83 80 REGISTER_PLUGIN_STATIC(NULL, PLUGIN_TYPE_MUSIC, NullMusicPlugin); 84 81 //#endif -
sound/softsynth/adlib.cpp
27 27 #include "common/util.h" 28 28 #include "sound/fmopl.h" 29 29 #include "sound/musicplugin.h" 30 #include "common/translation.h" 30 31 31 32 #ifdef DEBUG_ADLIB 32 33 static int tick; … … 1586 1587 class AdLibEmuMusicPlugin : public MusicPluginObject { 1587 1588 public: 1588 1589 const char *getName() const { 1589 return "AdLib Emulator";1590 return _s("AdLib Emulator"); 1590 1591 } 1591 1592 1592 1593 const char *getId() const { … … 1594 1595 } 1595 1596 1596 1597 MusicDevices getDevices() const; 1597 Common::Error createInstance(MidiDriver **mididriver ) const;1598 Common::Error createInstance(MidiDriver **mididriver, MidiDriver::DeviceHandle = 0) const; 1598 1599 }; 1599 1600 1600 1601 MusicDevices AdLibEmuMusicPlugin::getDevices() const { … … 1603 1604 return devices; 1604 1605 } 1605 1606 1606 Common::Error AdLibEmuMusicPlugin::createInstance(MidiDriver **mididriver ) const {1607 Common::Error AdLibEmuMusicPlugin::createInstance(MidiDriver **mididriver, MidiDriver::DeviceHandle) const { 1607 1608 *mididriver = new MidiDriver_ADLIB(g_system->getMixer()); 1608 1609 1609 1610 return Common::kNoError; 1610 1611 } 1611 1612 1612 MidiDriver *MidiDriver_ADLIB_create() {1613 MidiDriver *mididriver;1614 1615 AdLibEmuMusicPlugin p;1616 p.createInstance(&mididriver);1617 1618 return mididriver;1619 }1620 1621 1613 //#if PLUGIN_ENABLED_DYNAMIC(ADLIB) 1622 1614 //REGISTER_PLUGIN_DYNAMIC(ADLIB, PLUGIN_TYPE_MUSIC, AdLibEmuMusicPlugin); 1623 1615 //#else -
sound/softsynth/fluidsynth.cpp
230 230 } 231 231 232 232 MusicDevices getDevices() const; 233 Common::Error createInstance(MidiDriver **mididriver ) const;233 Common::Error createInstance(MidiDriver **mididriver, MidiDriver::DeviceHandle = 0) const; 234 234 }; 235 235 236 236 MusicDevices FluidSynthMusicPlugin::getDevices() const { … … 239 239 return devices; 240 240 } 241 241 242 Common::Error FluidSynthMusicPlugin::createInstance(MidiDriver **mididriver ) const {242 Common::Error FluidSynthMusicPlugin::createInstance(MidiDriver **mididriver, MidiDriver::DeviceHandle) const { 243 243 *mididriver = new MidiDriver_FluidSynth(g_system->getMixer()); 244 244 245 245 return Common::kNoError; 246 246 } 247 247 248 MidiDriver *MidiDriver_FluidSynth_create() {249 MidiDriver *mididriver;250 251 FluidSynthMusicPlugin p;252 p.createInstance(&mididriver);253 254 return mididriver;255 }256 257 248 //#if PLUGIN_ENABLED_DYNAMIC(FLUIDSYNTH) 258 249 //REGISTER_PLUGIN_DYNAMIC(FLUIDSYNTH, PLUGIN_TYPE_MUSIC, FluidSynthMusicPlugin); 259 250 //#else -
sound/softsynth/mt32.cpp
39 39 #include "common/system.h" 40 40 #include "common/util.h" 41 41 #include "common/archive.h" 42 #include "common/translation.h" 42 43 43 44 #include "graphics/fontman.h" 44 45 #include "graphics/surface.h" … … 323 324 } 324 325 325 326 _initialising = true; 326 drawMessage(-1, "Initialising MT-32 Emulator");327 drawMessage(-1, _s("Initialising MT-32 Emulator")); 327 328 if (!_synth->open(prop)) 328 329 return MERR_DEVICE_NOT_AVAILABLE; 329 330 _initialising = false; … … 537 538 class MT32EmuMusicPlugin : public MusicPluginObject { 538 539 public: 539 540 const char *getName() const { 540 return "MT-32 Emulator";541 return _s("MT-32 Emulator"); 541 542 } 542 543 543 544 const char *getId() const { … … 545 546 } 546 547 547 548 MusicDevices getDevices() const; 548 Common::Error createInstance(MidiDriver **mididriver ) const;549 Common::Error createInstance(MidiDriver **mididriver, MidiDriver::DeviceHandle = 0) const; 549 550 }; 550 551 551 552 MusicDevices MT32EmuMusicPlugin::getDevices() const { … … 554 555 return devices; 555 556 } 556 557 557 Common::Error MT32EmuMusicPlugin::createInstance(MidiDriver **mididriver) const { 558 *mididriver = new MidiDriver_MT32(g_system->getMixer()); 559 560 return Common::kNoError; 561 } 562 563 MidiDriver *MidiDriver_MT32_create() { 564 // HACK: It will stay here until engine plugin loader overhaul 558 Common::Error MT32EmuMusicPlugin::createInstance(MidiDriver **mididriver, MidiDriver::DeviceHandle) const { 565 559 if (ConfMan.hasKey("extrapath")) 566 560 SearchMan.addDirectory("extrapath", ConfMan.get("extrapath")); 567 561 568 MidiDriver *mididriver;562 *mididriver = new MidiDriver_MT32(g_system->getMixer()); 569 563 570 MT32EmuMusicPlugin p; 571 p.createInstance(&mididriver); 572 573 return mididriver; 564 return Common::kNoError; 574 565 } 575 566 576 567 //#if PLUGIN_ENABLED_DYNAMIC(MT32) -
sound/softsynth/ym2612.cpp
27 27 #include "sound/softsynth/ym2612.h" 28 28 #include "common/util.h" 29 29 #include "sound/musicplugin.h" 30 #include "common/translation.h" 30 31 31 32 //////////////////////////////////////// 32 33 // … … 758 759 class TownsEmuMusicPlugin : public MusicPluginObject { 759 760 public: 760 761 const char *getName() const { 761 return "FM Towns Emulator";762 return _s("FM Towns Emulator"); 762 763 } 763 764 764 765 const char *getId() const { … … 766 767 } 767 768 768 769 MusicDevices getDevices() const; 769 Common::Error createInstance(MidiDriver **mididriver ) const;770 Common::Error createInstance(MidiDriver **mididriver, MidiDriver::DeviceHandle = 0) const; 770 771 }; 771 772 772 773 MusicDevices TownsEmuMusicPlugin::getDevices() const { … … 775 776 return devices; 776 777 } 777 778 778 Common::Error TownsEmuMusicPlugin::createInstance(MidiDriver **mididriver ) const {779 Common::Error TownsEmuMusicPlugin::createInstance(MidiDriver **mididriver, MidiDriver::DeviceHandle) const { 779 780 *mididriver = new MidiDriver_YM2612(g_system->getMixer()); 780 781 781 782 return Common::kNoError; 782 783 } 783 784 784 MidiDriver *MidiDriver_YM2612_create() {785 MidiDriver *mididriver;786 787 TownsEmuMusicPlugin p;788 p.createInstance(&mididriver);789 790 return mididriver;791 }792 793 785 //#if PLUGIN_ENABLED_DYNAMIC(TOWNS) 794 786 //REGISTER_PLUGIN_DYNAMIC(TOWNS, PLUGIN_TYPE_MUSIC, TownsEmuMusicPlugin); 795 787 //#else