good evening,
trying play note using coremidi library, problem that
don't have external midi device receive messages send.
have macbook pro macosx 10.6.8
horrible code (i don't have checked error , other things, but, guys first have make work) in following.
try send note_on message destination of entities of device of system.
conclusion because don't hear sound there no devices can play sound connected. (is correct?)
but.
know midi programs work fine within system. so, these programs (like tuxguitar) send midi messages?
functions/library have use dirty trivial job?
please share knowledge me.
code:#include <iostream> #include <iostream> #include <cstdlib> #include <coremidi/coremidi.h> #include <errno.h> using namespace std; #define messagesize 3 void playpacketlistonalldevices(midiportref midiout, const midipacketlist* pktlist) { // send midi message midi output devices connected computer: int devices = midigetnumberofdevices(); int i; for (i=0; i<=devices;i++) { midideviceref d = midigetdevice(i); int entities = mididevicegetnumberofentities(d); int j; for(j=0;j<=entities;j++){ midientityref e = mididevicegetentity(d,j); int destinations =midientitygetnumberofdestinations(e); int w; for (w=0;w<=destinations;w++){ cout<<"("<<i<<" "<<j<<" "<<w<< ")\n"; osstatus status; int dest = midigetdestination(w); if (status = midisend(midiout, dest, pktlist)) { printf("problem sendint midi data on port %d\n", (int)dest); exit(status); } } } } } int main(){ byte buffer[1024]; // storage space midi packets (max 65536) midipacketlist *packetlist = (midipacketlist*)buffer; midipacket *currentpacket = midipacketlistinit(packetlist); midiclientref midiclient = null; midiportref midiout = null; osstatus status; if (status = midiclientcreate(cfstr("testing"), null, null, &midiclient)) { printf("error trying create midi client structure: %d\n", status); exit(status); } if (status = midioutputportcreate(midiclient, cfstr("output"), &midiout)) { printf("error trying create midi output port: %d\n", status); exit(status); } miditimestamp timestamp = 0; // 0 mean play now. byte noteon[messagesize] = {0x90, 60, 90}; currentpacket = midipacketlistadd(packetlist, sizeof(buffer), currentpacket, timestamp, messagesize, noteon); cout<<"number of devices "<<(int)midigetnumberofdevices()<<"\n"; playpacketlistonalldevices(midiout, packetlist); return 0;}
Forums Macs Mac Programming
- iPhone
- Mac OS & System Software
- iPad
- Apple Watch
- Notebooks
- iTunes
- Apple ID
- iCloud
- Desktop Computers
- Apple Music
- Professional Applications
- iPod
- iWork
- Apple TV
- iLife
- Wireless
No comments:
Post a Comment