因为
MusicPlayerSetSequence(_player, sequence);
MusicSequenceSetAUGraph(sequence, _processingGraph);
仍然会导致播放器停止,仍然可以听到稍微休息一下。 所以不是更新musicSequence
,我说干就干,改变了轨道,而不是,这不会造成任何中断的内容:
MusicTrack currentTrack;
MusicTrack currentTrack2;
MusicSequenceGetIndTrack(musicSequence, 0, ¤tTrack);
MusicSequenceGetIndTrack(musicSequence, 1, ¤tTrack2);
MusicTrackClear(currentTrack, 0, _trackLen);
MusicTrackClear(currentTrack2, 0, _trackLen);
MusicSequence tmpSequence;
switch (number) {
case 0:
tmpSequence = musicSequence1;
break;
case 1:
tmpSequence = musicSequence2;
break;
case 2:
tmpSequence = musicSequence3;
break;
case 3:
tmpSequence = musicSequence4;
break;
default:
tmpSequence = musicSequence1;
break;
}
MusicTrack tmpTrack;
MusicTrack tmpTrack2;
MusicSequenceGetIndTrack(tmpSequence, 0, &tmpTrack);
MusicSequenceGetIndTrack(tmpSequence, 1, &tmpTrack2);
MusicTimeStamp trackLen = 0;
UInt32 trackLenLenLen = sizeof(trackLen);
MusicTrackGetProperty(tmpTrack, kSequenceTrackProperty_TrackLength, &trackLen, &trackLenLenLen);
_trackLen = trackLen;
MusicTrackCopyInsert(tmpTrack, 0, _trackLen, currentTrack, 0);
MusicTrackCopyInsert(tmpTrack2, 0, _trackLen, currentTrack2, 0);
节点没有断开,没有更新的图形,没有停止播放。
嘿 - 你是否放弃了合并曲目的方法?我终于找到了一些时间让它工作。你的文件有点隐藏 - 不知道为什么。下面是一个关于你的MIDI文件/ sf2 +一个随机midi/sf2的例子(我有过)(http://dl.dropbox.com/u/34715839/MusicPlayerTracksFromFiles.zip) - 干杯 – 2012-08-10 04:31:54
哦 - 这里有个bug设置跟踪循环时的文件:使用的trackLen值来自sourceTrack。在设置循环长度之前,应该从目标轨道重新计算此值。此外,发现最简单的.mid文件的奇怪是由于它有2首曲目 - 第一首是空的 - 所以复制该曲目==沉默。 – 2012-08-10 07:54:41
不,我没有,我找到了自己的解决方案,并提出了另一个答案(http://stackoverflow.com/questions/11706042)。但感谢无论如何,我相信你的代码将帮助我优化我的。我仍然试图弄清楚你是如何循环序列的,因为它没有在正确的时间循环。我做 - '如果(时间> = trackLen)MusicPlayerSetTime(_player,0);' – chedda 2012-08-10 08:54:30