AudioToolbox MusicPlayer 改程序没有效果
Posted
技术标签:
【中文标题】AudioToolbox MusicPlayer 改程序没有效果【英文标题】:AudioToolbox MusicPlayer change program has no effect 【发布时间】:2013-11-13 02:12:06 【问题描述】:在这里训练的 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】:我在其他帖子中读到,我可以使用音乐播放器和朋友生成 midi。它提供程序更改。所以,我认为它是受支持的。在穷尽所有理论之后,我转向AUGraph
。我添加了一个我在网上找到的*.sf2文件,实例化了AUGraph
、两个AudioUnits
、一个MidiEndpointRef
和一个MidiClientRef
;根据这个tutorial。
在端点回调中,我不得不在samplerUnit
上使用MusicDeviceMIDIEvent
打开和关闭笔记,这似乎允许程序更改。而之前我只是将音符事件加载到MusicTrack
并播放/停止MusicPlayer
。
【讨论】:
以上是关于AudioToolbox MusicPlayer 改程序没有效果的主要内容,如果未能解决你的问题,请参考以下文章
Xcode - AudioToolbox/AudioToolbox.h 文件未找到
核心音频:不推荐使用 AUGraph 时如何通过 MusicPlayer 播放 MIDI MusicSequence?
RubyMotion 未加载 AudioToolbox 框架