//_________________________________________________________ // Find the device model associated to a MIDIEndpointRef Boolean GetModel (MIDIEndpointRef device, char* gmodel, int strlen) { int i,j,k, n,m,o,p; MIDIDeviceRef dev; MIDIEntityRef ref; CFStringRef pmodel; OSStatus err; n = MIDIGetNumberOfDevices(); for (i = 0; i < n; i++) { dev = MIDIGetDevice(i); err = MIDIObjectGetStringProperty(dev, kMIDIPropertyModel, &pmodel); if (err == noErr) { if (!CFStringGetCString(pmodel, gmodel, strlen, 0)) { fprintf(stderr, "GetModel error : string too long\n"); return false; } CFRelease(pmodel); m = MIDIDeviceGetNumberOfEntities(dev); for (j = 0; j < m; j++) { ref = MIDIDeviceGetEntity(dev,j); o = MIDIEntityGetNumberOfSources(ref); p = MIDIEntityGetNumberOfDestinations(ref); for (k = 0; k < o; k++) { if (MIDIEntityGetSource(ref,k) == device) return true; } for (k = 0; k < p; k++) { if (MIDIEntityGetDestination(ref,k) == device) return true; } } } } return false; }
void MidiApple::openDevices() { qDebug("openDevices"); m_inputDevices.clear(); // How many MIDI devices do we have? ItemCount deviceCount = MIDIGetNumberOfDevices(); // Iterate through all MIDI devices for (ItemCount i = 0 ; i < deviceCount ; ++i) { // Grab a reference to current device MIDIDeviceRef device = MIDIGetDevice(i); char * deviceName = getName(device); QString qsDeviceName = QString::fromUtf8((char*)(deviceName)); qDebug("Device name:%s",deviceName); // Is this device online? (Currently connected?) SInt32 isOffline = 0; MIDIObjectGetIntegerProperty(device, kMIDIPropertyOffline, &isOffline); qDebug(" is online: %s", (isOffline ? "No" : "Yes")); // How many entities do we have? ItemCount entityCount = MIDIDeviceGetNumberOfEntities(device); // Iterate through this device's entities for (ItemCount j = 0 ; j < entityCount ; ++j) { // Grab a reference to an entity MIDIEntityRef entity = MIDIDeviceGetEntity(device, j); qDebug(" Entity: %s", getName(entity)); // Iterate through this device's source endpoints (MIDI In) ItemCount sourceCount = MIDIEntityGetNumberOfSources(entity); for ( ItemCount k = 0 ; k < sourceCount ; ++k ) { // Grab a reference to a source endpoint MIDIEndpointRef source = MIDIEntityGetSource(entity, k); char * name = getName(source); qDebug(" Source: '%s'", name); QString sourceName = qsDeviceName + ":" + QString::fromUtf8((char*)(name)); qDebug(" Source name: '%s'", sourceName.toLatin1().constData() ); m_inputDevices.insert(sourceName, source); openMidiReference(source,sourceName,true); } // Iterate through this device's destination endpoints (MIDI Out) ItemCount destCount = MIDIEntityGetNumberOfDestinations(entity); for ( ItemCount k = 0 ; k < destCount ; ++k ) { // Grab a reference to a destination endpoint MIDIEndpointRef dest = MIDIEntityGetDestination(entity, k); char * name = getName(dest); qDebug(" Destination: '%s'", name); QString destinationName = qsDeviceName + ":" + QString::fromUtf8((char*)(name)); qDebug(" Destination name: '%s'", destinationName.toLatin1().constData() ); m_outputDevices.insert(destinationName, dest); openMidiReference(dest,destinationName,false); } } qDebug("------"); } printQStringKeys("m_inputDevices:",m_inputDevices); printQStringKeys("m_outputDevices:",m_outputDevices); }
JNIEXPORT jint JNICALL Java_com_apple_audio_midi_MIDIEntity_MIDIEntityGetNumberOfSources (JNIEnv *, jclass, jint entity) { return (jint)MIDIEntityGetNumberOfSources((MIDIEntityRef)entity); }
void MidiEnumeratorPrivate::rescan() { qDebug() << Q_FUNC_INFO; bool changed = false; QList <MidiOutputDevice*> destroyOutputs(m_outputDevices); QList <MidiInputDevice*> destroyInputs(m_inputDevices); /* Find out which devices are still present */ ItemCount numDevices = MIDIGetNumberOfDevices(); for (ItemCount devIndex = 0; devIndex < numDevices; devIndex++) { MIDIDeviceRef dev = MIDIGetDevice(devIndex); ItemCount numEntities = MIDIDeviceGetNumberOfEntities(dev); for (ItemCount entIndex = 0; entIndex < numEntities; entIndex++) { MIDIEntityRef entity = MIDIDeviceGetEntity(dev, entIndex); /* Get the entity's UID */ QVariant uid = extractUID(entity); if (uid.isValid() == false) continue; QString name = extractName(entity); qDebug() << Q_FUNC_INFO << "Found device:" << name << "UID:" << uid.toString(); ItemCount destCount = MIDIEntityGetNumberOfDestinations(entity); if (destCount > 0) { MidiOutputDevice* dev = outputDevice(uid); if (dev == NULL) { CoreMidiOutputDevice* dev = new CoreMidiOutputDevice( uid, name, entity, m_client, this); m_outputDevices << dev; changed = true; } else { destroyOutputs.removeAll(dev); } } ItemCount srcCount = MIDIEntityGetNumberOfSources(entity); if (srcCount > 0) { MidiInputDevice* dev = inputDevice(uid); if (dev == NULL) { CoreMidiInputDevice* dev = new CoreMidiInputDevice( uid, name, entity, m_client, this); m_inputDevices << dev; changed = true; } else { destroyInputs.removeAll(dev); } } } } foreach (MidiOutputDevice* dev, destroyOutputs) { m_outputDevices.removeAll(dev); delete dev; changed = true; }
unsigned long MidiDeviceUtil::GetMidiSourcesCount(int deviceIndex, int entityIndex) { MIDIEntityRef entity = GetMidiEntity(deviceIndex, entityIndex); return MIDIEntityGetNumberOfSources(entity); }