音频工具箱音乐播放器更改程序不起作用



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。 我被难住了...任何人?

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

正是在端点回调中,我不得不使用似乎允许程序更改的samplerUnit上的MusicDeviceMIDIEvent打开和关闭注释。 而以前我只是将音符事件加载到MusicTrack中并播放/停止MusicPlayer.

最新更新