Common::Error WindowsMusicPlugin::createInstance(MidiDriver **mididriver, MidiDriver::DeviceHandle dev) const { int devIndex = 0; bool found = false; if (dev) { MusicDevices i = getDevices(); for (MusicDevices::iterator d = i.begin(); d != i.end(); d++) { if (d->getCompleteId().equals(MidiDriver::getDeviceString(dev, MidiDriver::kDeviceId))) { found = true; break; } devIndex++; } } *mididriver = new MidiDriver_WIN(found ? devIndex : 0); return Common::kNoError; }
MidiDriver::DeviceHandle MidiDriver::getDeviceHandle(const Common::String &identifier) { const MusicPlugin::List p = MusicMan.getPlugins(); if (p.begin() == p.end()) error("MidiDriver::getDeviceHandle: Music plugins must be loaded prior to calling this method"); for (MusicPlugin::List::const_iterator m = p.begin(); m != p.end(); m++) { MusicDevices i = (**m)->getDevices(); for (MusicDevices::iterator d = i.begin(); d != i.end(); d++) { // The music driver id isn't unique, but it will match // driver's first device. This is useful when selecting // the driver from the command line. if (identifier.equals(d->getMusicDriverId()) || identifier.equals(d->getCompleteId()) || identifier.equals(d->getCompleteName())) { return d->getHandle(); } } } return 0; }
Common::String MidiDriver::getDeviceString(DeviceHandle handle, DeviceStringType type) { if (handle) { const MusicPlugin::List p = MusicMan.getPlugins(); for (MusicPlugin::List::const_iterator m = p.begin(); m != p.end(); m++) { MusicDevices i = (**m)->getDevices(); for (MusicDevices::iterator d = i.begin(); d != i.end(); d++) { if (handle == d->getHandle()) { if (type == kDriverName) return d->getMusicDriverName(); else if (type == kDriverId) return d->getMusicDriverId(); else if (type == kDeviceId) return d->getCompleteId(); else return Common::String("auto"); } } } } return Common::String("auto"); }