Esempio n. 1
0
// 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;
}
Esempio n. 2
0
// ----------------------------------------------------------
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);
    }
Esempio n. 4
0
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;
	}
}
Esempio n. 5
0
//------------------------------------------------------------------------
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;
}
Esempio n. 6
0
//------------------------------------------------------------------------
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;
}