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; }