• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: MIDI synth vs. MusicDevice
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: MIDI synth vs. MusicDevice


  • Subject: Re: MIDI synth vs. MusicDevice
  • From: William Stewart <email@hidden>
  • Date: Mon, 27 Jun 2005 10:47:19 -0700

I think MIDIReceived is meant to be MIDISend?

Also, in the SDK there is an example "PlaySoftMIDI" that simply plays a few notes on Apple's DLSMusicDevice - this is Apple's soft synth, and the terminology is used badly! We tend now to talk about AU Instruments (rather than Music Devices) to distinguish software AUs from hardware...

Bill

On 26/06/2005, at 12:14 PM, Antoine Misout wrote:


On 26-Jun-05, at 1:52 PM, Max Horn wrote:


Hi there,

I guess my previous question was too long and complicated, so here again in short form:

* Is there a way I can address a "real" MIDI synth like a MusicDevice (the Apple DLS softsynth in particular) ?

* Is there any way I can have a single code path that lets the user somehow choose whether to output my MIDI data to the DLS softsynth, or to a (user specified) real MIDI device ?

* If not (i.e. if I have to write one code set for the MidiSynth and one to address the 'real' MIDI devices): Is there any small (or not so small) example code out there which I could look at? Maybe even another game with MIDI output... ?


Cheers,

Max




Here's some sample code to help you get started:

// sending midi events to an audiounit
// ie dls synth
// very simple once you have the component instance
MusicDeviceMIDIEvent( (MusicDeviceComponent) mAudioUnit,
status, data1, data2, offsetToChange );



// sending midi events to an external midi device // by creating a virtual midi source

@interface MidiClass : NSObject
{
    MIDIClientRef    mClient;
    MIDIPortRef        mOutPort;
    MIDIEndpointRef    mSink;
}
@end

- (id) init
{
if ((self = [super init]))
{
// create client
OSStatus err;
err = MIDIClientCreate( (CFStringRef)([[NSProcessInfo processInfo] globallyUniqueString]),
midiNotifyCallback,
self,
&mClient);
if (err != noErr || !mClient)
{
[self release];
return nil;
}


// create output & connect dests
err = MIDIOutputPortCreate( mClient,
(CFStringRef)(NSString*) (@"pp_port"),
&mOutPort);
if (err != noErr || !mOutPort)
{
[self release];
return nil;
}


err = MIDISourceCreate( mClient,
(CFStringRef)(NSString*) (@"pp_source"),
&mSink);
if (err != noErr || !mSink)
{
[self release];
return nil;
}
}
retrun self;
}



- (void) dealloc { if (mSink) MIDIEndpointDispose(mSink); if (mOutPort) MIDIPortDispose(mOutPort); if (mClient) MIDIClientDispose(mClient);

    [super dealloc];
}


- (void) sendMidi // adapt as needed { struct { UInt32 numPackets; MIDIPacket packets[kMaxNotes*2]; } packetList; packetList.numPackets = 0;

        // force immediate turn off
        int i;
        MIDIPacket *packet = packetList.packets;

for (i = 0; i < kMaxNotes; i++)
{
packet->timeStamp = 0;
packet->length = 3;
packet->data[0] = kMidiMessage_NoteOn | 0; // channel
packet->data[1] = i; // note
packet->data[2] = 0; // vol


            packetList.numPackets++;
            packet = MIDIPacketNext(packet);
        }


for (i = 0; i < kMaxNotes; i++)
if (midi note i is on)
{
packet->timeStamp = 1;
packet->length = 3;
packet->data[0] = kMidiMessage_NoteOn | 0; // channel
packet->data[1] = i; // note
packet->data[2] = 100; // vol


                packetList.numPackets++;
                packet = MIDIPacketNext(packet);
            }

//NSLog(@"Sending notes, %i packets.\n", packetList.numPackets);
MIDIReceived(mSink, (MIDIPacketList*)&packetList);
}


Hope this helps..
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Coreaudio-api mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden


--
mailto:email@hidden
tel: +1 408 974 4056
________________________________________________________________________ __
"Much human ingenuity has gone into finding the ultimate Before.
The current state of knowledge can be summarized thus:
In the beginning, there was nothing, which exploded" - Terry Pratchett
________________________________________________________________________ __


_______________________________________________
Do not post admin requests to the list. They will be ignored.
Coreaudio-api mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden


References: 
 >MIDI synth vs. MusicDevice (From: Max Horn <email@hidden>)
 >Re: MIDI synth vs. MusicDevice (From: Antoine Misout <email@hidden>)

  • Prev by Date: Re: cross development
  • Next by Date: Re: AU Carbon View Drawing Question
  • Previous by thread: Re: MIDI synth vs. MusicDevice
  • Next by thread: AudioUnit editor window
  • Index(es):
    • Date
    • Thread