2

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");
}
4

1 に答える 1

0

通常、コードは正しいように見えますが、使用しているエンドポイントで何かが起こっていると思われます。

簡単なテストは、システム上のすべてのエンドポイントにデータを送信し、何が起こるかを確認することです。そうすれば、それが自分のデータなのかエンドポイントの構成なのかがわかります。

sendPacketList 関数のコードを (一時的に) これに置き換えて、これらの宛先でデータを取得できるかどうかを確認します。

    // Send it everywhere
    for (ItemCount index = 0; index < MIDIGetNumberOfDestinations(); ++index)
    {
        MIDIEndpointRef outputEndpoint = MIDIGetDestination(index);

        if (outputEndpoint)
        {
            OSStatus s = MIDISend(midi.outputPort, outputEndpoint, packetList);
            // check s for errors
        }
    }

上記のコードを使用して、MIDI ネットワークの宛先と MIDI Mobilizer II デバイスに送信しましたが、うまくいきました。

于 2013-03-07T07:50:27.897 に答える