在这里训练..。我一直在使用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。我是stumped...Anyone?
发布于 2013-12-08 01:11:45
我在其他文章中读到过,我可以通过音乐播放器和朋友来生成midi。它提供程序更改。所以,我认为它是支持的。在用尽了所有的理论之后,我转向了AUGraph。我添加了一个在线找到的*.sf2文件,实例化了AUGraph、两个AudioUnits、一个MidiEndpointRef和一个MidiClientRef;根据这个教程。
在端点回调中,我不得不在samplerUnit上使用似乎允许程序更改的samplerUnit打开和关闭注释。而在此之前,我只是将便笺事件加载到MusicTrack中,并播放/停止MusicPlayer。
https://stackoverflow.com/questions/19943936
复制相似问题