我可以使用MusicPlayer的MusicTrackSetProperty(t,kSequenceTrackProperty_MuteStatus ...)方法轻松地对midi音轨进行静音/取消静音。但是,我还没有把我的智慧包含在如何启用/禁用轨道内的特定midi频道。轨道内的通道是否有静音/取消静音或禁用/启用属性?
这样的事情会在赛道上完成,还是我应该以某种方式操作midi合成音频单元?
创建端点对我没有好处,因为我只获得了发送给合成器的事件的副本,而不是我可以看到的用于过滤合成器的回调的回调。所以,我认为可能有些东西可以在音频单元图中调整,但具体到底是什么?
有人可能会建议使用kMusicSequenceLoadSMF_ChannelsToTracks标志打开midi文件,然后只需取消与该频道对应的曲目取消静音并将其余部分静音。我试过这样做,但是当我打开midi文件然后没有kMusicSequenceLoadSMF_ChannelsToTracks标志时,我实际上得到/更少/轨道。奇。也许我应该理解为什么会这样,是吧?这就是我对midi文件的看法:16条曲目,每条曲目包含6个midi频道。没有kMusicSequenceLoadSMF_ChannelsToTracks,我得到16个音轨,带有kMusicSequenceLoadSMF_ChannelsToTracks标志,12。不应该是16 * 6音轨吗?
感谢您的帮助。最适合你。 /杰
答案 0 :(得分:1)
你走在正确的轨道上。据我所知,kMusicSequenceLoadSMF_ChannelsToTracks将合并公共频道。因此,如果给出两个包含来自三个通道的音符的音轨,那么假设track1在通道1,2和3上有音符。而track2在通道3,4和5上有音符。然后使用kMusicSequenceLoadSMF_ChannelsToTracks标志将使用通道合并音符3从track1和track2到新曲目。使用该方法的曲目总数为5。这可能是要走的路,除非你能证明不是这样。否则,如果你真的需要分开东西,那么端点是一种有效的方法。您只需手动发送midi事件而不是建立连接(将轨道指向合成器)。在你的回调中,你应该解析midi并调用MusicDeviceMIDIEvent直接触发合成器。你可以在那里进行过滤。