0

ここでトレーニング中の MIDI 初心者... iOS を実行しているデバイスで MIDI ノートを再生するために MusicPlayer/MusicSequence/MusicTrack を使用しています。ノートは問題なく再生されます。演奏する楽器を変えるのに苦労しています。私が理解できる限り、これはそれを行う方法です:

-(void) setInstrument:(MIDIInstruments) program channel:(int) channel MusicTrack:(MusicTrack*) track time:(float) time {
    if(channel < 0 || channel > 15 || program >=MIDI_INSTRUMENT_COUNT || time < 0) {
        return;
    }

    MIDIChannelMessage programChange = { ((UInt8)0xC) << 4 | ((UInt8)channel), ((UInt8)program), 0, 0};

    OSStatus result = MusicTrackNewMIDIChannelEvent(*track, time, &programChange);
    if(result != noErr) {
        [NSException raise:@"Set Instrument" format:@"Failed to set instrument error: %@", [NSError errorWithDomain:NSOSStatusErrorDomain code:result userInfo:nil]];
    }
}

この場合、チャネルは 0 または 1 です。有効なインストゥルメント列挙の範囲でいくつかのインストゥルメントを試しました。時間は 0.0 で、MusicTrack は有効で、約 30 秒のノート イベントがあります。チャネル イベントを設定する呼び出しは、noErr を返します。私は困惑しています...誰か?

4

1 に答える 1