AudioToolbox MusicPlayer更改程序无效

时间:2013-11-13 02:12:07

标签: ios midi audiotoolbox

训练中的MIDI菜鸟...... 我一直在使用MusicPlayer / MusicSequence / MusicTrack在运行iOS的设备上播放MIDI音符。笔记很好。我正在努力改变正在演奏的乐器。据我所知,这是怎么做的:

-(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。我很难过......任何人?

1 个答案:

答案 0 :(得分:0)

我在其他帖子中读过,我可以使用音乐播放器和朋友生成midi。它提供了程序更改。所以,我认为它得到了支持。在用尽所有理论之后,我转向AUGraph。我添加了一个我在网上找到的* .sf2文件,实例化了AUGraph,两个AudioUnits,一个MidiEndpointRef和一个MidiClientRef;根据这个tutorial

在端点回调中,我必须使用似乎允许程序更改的MusicDeviceMIDIEvent上的samplerUnit打开和关闭笔记。而在我将音符事件加载到MusicTrack并播放/停止MusicPlayer之前。