int MidiDriver_DMEDIA::open() { int numinterfaces; int i; const char *var; char *portName; if (_isOpen) return MERR_ALREADY_OPEN; _isOpen = true; numinterfaces = mdInit(); if (numinterfaces <= 0) { fprintf(stderr, "No MIDI interfaces configured.\n"); perror("Cannot initialize libmd for sound output"); return -1; } if (getenv("RESIDUALVM_MIDIPORT")) { _deviceNum = atoi(getenv("RESIDUALVM_MIDIPORT")); _midiportName = mdGetName(_deviceNum); } else { var = ConfMan.get("dmedia_port").c_str(); if (strlen(var) > 0) { for (i = 0; i < numinterfaces; i++) { portName = mdGetName(i); if (strcmp(var, portName) == 0) { _deviceNum = i; _midiportName = portName; } } } } _midiPort = mdOpenOutPort(_midiportName); if (!_midiPort) { warning("Failed to open MIDI interface %s", _midiportName); return -1; } _fd = mdGetFd(_midiPort); if (!_fd) { warning("Failed to aquire filehandle for MIDI port %s", _midiportName); mdClosePort(_midiPort); return -1; } mdSetStampMode(_midiPort, MD_NOSTAMP); /* don't use Timestamps */ return 0; }
static void mus_midi_initialize(void) { if (midi_initialized == 0) { midi_ports = mdInit(); if (midi_ports == -1) #ifdef NO_SNDLIB fprintf(stderr, "startmidi not called?"); #else mus_error(MUS_MIDI_INIT_ERROR, "startmidi not called?"); #endif midi_initialized = 1; } }
MusicDevices DMediaMusicPlugin::getDevices() const { int numinterfaces; int i; char *portName; MusicDevices devices; // TODO: Return a different music type depending on the configuration numinterfaces = mdInit(); if (numinterfaces <= 0) { fprintf(stderr, "No MIDI interfaces configured.\n"); } for (i=0; i<numinterfaces; i++) { portName = mdGetName(0); fprintf(stderr, "device %i %s\n", i, portName); devices.push_back(MusicDevice(this, portName, MT_GM)); } return devices; }