int MidiDriver_MT32::open() { assert(!_driver); debugC(kDebugLevelMT32Driver, "MT32: starting driver"); // Setup midi driver MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_MIDI | MDT_PREFER_MT32); MusicType musicType = MidiDriver::getMusicType(dev); switch (musicType) { case MT_MT32: _nativeMT32 = true; break; case MT_GM: if (ConfMan.getBool("native_mt32")) { _nativeMT32 = true; } break; default: break; } _driver = MidiDriver::createMidi(dev); if (!_driver) return 255; if (_nativeMT32) _driver->property(MidiDriver::PROP_CHANNEL_MASK, 0x03FE); int ret = _driver->open(); if (ret) return ret; if (_nativeMT32) _driver->sendMT32Reset(); else _driver->sendGMReset(); return 0; }
TestExitStatus MidiTests::playMidiMusic() { Testsuite::clearScreen(); Common::String info = "Testing Midi Sound output.\n" "Here, We generate some Music by using the Midi Driver selected in the GUI.\n" "You should expect to hear that. The initialization may take some time.\n"; if (Testsuite::handleInteractiveInput(info, "OK", "Skip", kOptionRight)) { Testsuite::logPrintf("Info! Skipping test : Play Midi Music\n"); return kTestSkipped; } MidiDriver::DeviceHandle dev = MidiDriver::detectDevice(MDT_MIDI | MDT_ADLIB); // Create a driver instance MidiDriver *driver = MidiDriver::createMidi(dev); // Create a SMF parser MidiParser *smfParser = MidiParser::createParser_SMF(); // Open the driver int errCode = driver->open(); if (errCode) { Common::String errMsg = driver->getErrorName(errCode); Testsuite::writeOnScreen(errMsg, Common::Point(0, 100)); Testsuite::logPrintf("Error! %s", errMsg.c_str()); return kTestFailed; } Testsuite::logDetailedPrintf("Info! Midi: Succesfully opened the driver\n"); Common::MemoryWriteStreamDynamic ws(DisposeAfterUse::YES); loadMusicInMemory(&ws); // start playing if (smfParser->loadMusic(ws.getData(), ws.size())) { smfParser->setTrack(0); smfParser->setMidiDriver(driver); smfParser->setTimerRate(driver->getBaseTempo()); driver->setTimerCallback(smfParser, MidiParser::timerCallback); Testsuite::logDetailedPrintf("Info! Midi: Parser Successfully loaded Music data.\n"); if (smfParser->isPlaying()) { Testsuite::writeOnScreen("Playing Midi Music, Click to end.", Common::Point(0, 100)); Testsuite::logDetailedPrintf("Info! Midi: Playing music!\n"); } } // Play until track ends or an exit is requested. waitForMusicToPlay(smfParser); // Done. Clean up. smfParser->unloadMusic(); driver->setTimerCallback(NULL, NULL); driver->close(); delete smfParser; delete driver; if (Testsuite::handleInteractiveInput("Were you able to hear the music as described?", "Yes", "No", kOptionRight)) { Testsuite::logDetailedPrintf("Error! Midi: Can't play Music\n"); return kTestFailed; } return kTestPassed; }