我在iOS 5上使用CoreAudio播放MIDI文件。我有一切设置,它的工作,一切都桃色,除非我想在播放播放期间从开始开始的序列。 要做到这一点我很自然地叫:iOS&CoreAudio:调用MusicPlayerSetTime()停止MusicPlayer
if (MusicPlayerSetTime(musicPlayer, (MusicTimeStamp)0.0) != noErr)
[NSException raise:@"playMIDI" format:@"Can't reset the player"];
我没有得到任何错误,但在进行此调用完全停止播放,而不是(如文档中说)继续在新的位置继续播放。 我已经试过这也(同类型等多种组合):
Boolean isPlaying = NO;
if (MusicPlayerIsPlaying(musicPlayer, &isPlaying) != noErr)
[NSException raise:@"playMIDI:" format:@"Can't get MusicPlayer play state"];
if (isPlaying) {
if (MusicPlayerStop(musicPlayer) != noErr)
[NSException raise:@"playMIDI:" format:@"Can't stop MusicPlayer"];
}
if (MusicPlayerSetSequence(musicPlayer, musicSequence) != noErr)
[NSException raise:@"playMIDI:" format:@"Can't set sequence for MusicPlayer"];
if (MusicPlayerSetTime(musicPlayer, (MusicTimeStamp)0.0) != noErr)
[NSException raise:@"playMIDI" format:@"Can't reset the player"];
if (MusicPlayerSetPlayRateScalar(musicPlayer, 1.0) != noErr)
[NSException raise:@"playMIDI" format:@"Can't set speed"];
if (MusicPlayerStart(musicPlayer) != noErr)
[NSException raise:@"playMIDI" format:@"Can't start MusicPlayer"];
没有快乐,同样的效果。
但是,如果我更改MusicSequence,那么新的MusicSequence播放效果会很好。所以我已经到了从同一个MIDI文件创建两个MusicSequence并从一个切换到另一个的极端了。没有快乐,iOS知道我想两次播放同一个文件并禁止它。我必须等到序列完全播放后才能再次播放。扑朔迷离。
有什么想法?
感谢
是的,我查了一下,音符从0开始(我用http://www.fourmilab.ch/ webtools/midicsv /转储文件的内容,并且我也与Aria Maestosa进行了检查)。我必须说,除了我在下面给出的解释外,我无法解释这种行为。 –
我已经与MusicPlayer摔跤了很多,所以我明白感觉不知所措!有关节奏,比赛率的不寻常情况?想不到别的。 –
midi文件非常简单,它很难有任何错误,但在这里,请自己判断:https://dl.dropbox.com/u/3916368/01010111.mid。让我知道你是否能够在第一次播放它后1秒内重新启动它。谢谢 –