iOS アプリの MIDI 実装に PGMidi を使用しています。それはうまくいきます。ただし、特定のケースでメッセージが届かないという報告を 2 件受け取りました。1 つ目は、PC 上の Ableton Live を使用したワイヤレスです。Ableton を搭載した Mac では、ワイヤレスで正常に動作することがわかっています。もう 1 つの状況は、Line6 Mobilizer II の場合です。デバイスは MIDI ポートに表示されますが、MIDI メッセージは登録されません。
PCで認識できないデータに何か問題があると思いますか? これが何であるかについてのアイデアはありますか?
これが基本的なMIDI送信のものです(ほとんどPGMidiから直接)
-(void)noteOn:(NSUInteger)voice note:(NSUInteger)note{
if(voice == 1){
UInt8 status = 144 + (UInt8)chordMIDIChannel;
const UInt8 noteOn[] = { status, (UInt8)note, chordMIDIVelocity };
if(chordMIDIDest)[chordMIDIDest sendBytes:noteOn size:sizeof(noteOn)];
else [midi virtualPortSend:noteOn size:sizeof(noteOn)];
}else{
UInt8 status = 144 + (UInt8)leadMIDIChannel;
const UInt8 noteOn[] = { status, (UInt8)note, leadMIDIVelocity };
if(leadMIDIDest)[leadMIDIDest sendBytes:noteOn size:sizeof(noteOn)];
else[midi virtualPortSend:noteOn size:sizeof(noteOn)];
}
}
PGMidiDestination 送信バイト:
- (void) sendBytes:(const UInt8*)bytes size:(UInt32)size
{
assert(size < 65536);
Byte packetBuffer[size+100];
MIDIPacketList *packetList = (MIDIPacketList*)packetBuffer;
MIDIPacket *packet = MIDIPacketListInit(packetList);
packet = MIDIPacketListAdd(packetList, sizeof(packetBuffer), packet, 0, size, bytes);
[self sendPacketList:packetList];
}
- (void) sendPacketList:(const MIDIPacketList *)packetList
{
// Send it
OSStatus s = MIDISend(midi.outputPort, endpoint, packetList);
NSLogError(s, @"Sending MIDI");
}