// Create a new destination endpoint static VALUE t_create_destination(VALUE self, VALUE client_instance, VALUE destination_name) { MIDIEndpointRef destination; RbMIDIClient* client; Data_Get_Struct(client_instance, RbMIDIClient, client); CFStringRef destination_str = CFStringCreateWithCString(kCFAllocatorDefault, RSTRING(destination_name)->ptr, kCFStringEncodingASCII); MIDIDestinationCreate(client->client, destination_str, RbMIDIReadProc, NULL, &destination); VALUE destination_instance = rb_class_new_instance(0, 0, cEndpoint); if( destination_instance == Qnil ) { free_objects(); rb_fatal("Couldn't create an instance of Endpoint!"); } RbEndpoint* endpoint_struct; Data_Get_Struct(destination_instance, RbEndpoint, endpoint_struct); endpoint_struct->endpoint = destination; return destination_instance; }
// ---------------------------------------------------------- bool ofxAudioUnitMidiReceiver::createMidiDestination(std::string portName) // ---------------------------------------------------------- { OSStatus success = noErr; CFStringRef pName = CFStringCreateWithCString(kCFAllocatorDefault, portName.c_str(), kCFStringEncodingUTF8); success = MIDIDestinationCreate(_client, pName, ofxAudioUnitMidiReadProc, &_unit, &_endpoint); CFRelease(pName); return (success == noErr); }
MidiInputDeviceCoreMidi::MidiInputPortCoreMidi::MidiInputPortCoreMidi(MidiInputDeviceCoreMidi* pDevice) throw (MidiInputException) : MidiInputPort(pDevice, -1) { // create CoreMidi virtual destination MIDIDestinationCreate(pDevice->hCoreMidiClient, CFSTR("LinuxSampler_in"), ReadProc, this, &pDestination); if (!pDestination) throw MidiInputException("Error creating CoreMidi virtual destination"); this->portNumber = pPortID++; Parameters["NAME"] = new ParameterName(this); Parameters["CORE_MIDI_BINDINGS"] = new ParameterCoreMidiBindings(this); }
void OpenMIDIHardware(MADDriverRec *rec) { if(MIDIHardware || MIDIHardwareAlreadyOpen == FALSE) { OSStatus MIDIErr = MIDIClientCreate(CFSTR("PlayerPRO"), MADMIDINotifyProc, rec, &MADMIDICliRef); if(MIDIErr == noErr) { MIDIHardware = TRUE; MIDIHardwareAlreadyOpen = TRUE; MIDIErr = MIDIInputPortCreate(MADMIDICliRef, CFSTR("PlayerPRO Keyboard In"), MADMIDIPortProc, rec, &MADMIDIPortInRef); if (MIDIErr == noErr) { MIDIErr = MIDIDestinationCreate(MADMIDICliRef, CFSTR("PlayerPRO destination"), MADMIDIPortProc, rec, &MADMIDIKeyboardEndRef); } if (MIDIErr == noErr) { MIDIErr = MIDIPortConnectSource(MADMIDIPortInRef, MADMIDIKeyboardEndRef, rec); } } else MIDIHardware = FALSE; } }
//------------------------------------------------------------------------ bool TJackSynchro::Open() { OSStatus err; if ((fClient = jack_client_new("JackSynchro")) == 0) { fprintf (stderr, "jack server not running?\n"); return false; } jack_set_process_callback(fClient, Process, this); jack_set_sync_callback(fClient, SyncCallback, this); jack_on_shutdown(fClient, Shutdown, 0); if (jack_activate(fClient)) { fprintf (stderr, "cannot activate client"); return false; } DBUG(("MIDIClientCreate \n")); err = MIDIClientCreate(CFSTR("JAS Sync"), NotifyProc, NULL, &fMidiClient); if (!fClient) { printf("Can not open Midi client\n"); goto error; } err = MIDIDestinationCreate(fMidiClient, CFSTR("Jack Sync In"), ReadSyncProc, this, &fDestination); if (!fDestination) { printf("Can not open create destination \n"); goto error; } DBUG(("MIDIDestinationCreate OK\n")); DBUG(("MIDISourceCreate \n")); err = MIDISourceCreate(fMidiClient, CFSTR("Jack Sync Out"), &fSource); if (!fSource) { printf("Can not open create source \n"); goto error; } return true; error: Close(); return false; }
//------------------------------------------------------------------------ bool TJackSynchro::AddMidiBus(int i) { OSStatus err; MIDIEndpointRef input = NULL; MIDIEndpointRef output = NULL; char inputStr [64]; char outputStr [64]; // Up to MAX_MIDI_BUS busses if (i >= MAX_MIDI_BUS) return false; sprintf(outputStr, "Jack MIDI In%ld", i); sprintf(inputStr, "Jack MIDI Out%ld", i); CFStringRef coutputStr = CFStringCreateWithCString(NULL, outputStr, CFStringGetSystemEncoding()); CFStringRef cinputStr = CFStringCreateWithCString(NULL, inputStr, CFStringGetSystemEncoding()); err = MIDIDestinationCreate(fMidiClient, coutputStr, fReadProc[i - 1], this, &output); if (!output) { printf("Can not open create destination \n"); goto error; } err = MIDISourceCreate(fMidiClient, cinputStr, &input); if (!input) { printf("Can not open create source \n"); goto error; } fMidiInput.push_back(input); fMidiOuput.push_back(output); CFRelease(coutputStr); CFRelease(cinputStr); return true; error: if (input) MIDIEndpointDispose(input); if (output) MIDIEndpointDispose(output); return false; }