更改速率时,AVAudioPlayer.currentTime提供错误的值

时间:2014-03-16 21:07:42

标签: ios objective-c avaudioplayer

当我更改rate之一的AVAudioPlayers,然后稍后再调用currentTime时,我的错误值就会重新出现。这是为什么?

例如,此代码不能像我期望的那样工作:

AVAudioPlayer* myAudio = //set up AVAudioPlayer
myAudio.enableRate = YES;
myAudio.rate = 1.2;

[myAudio play];

// Wait 3 seconds

myAudio.currentTime; //Returns a value significantly larger than 3.0 

1 个答案:

答案 0 :(得分:1)

当您致电AVAudioPlayer.currentTime时,如果rate1.0,则会返回播放音频的距离。当您更改rate时,currentTime返回的值会按比例更改。

换句话说,当您更改AVAudioPlayer.duration时,rate不会更改,而myAudioPlayer.currentTime / myAudioPlayer.duration将始终告诉您音频文件的哪个部分已播放。因此,如果您在播放音频文件的一半时评估该表达式,则无论速率如何,它都将大致返回0.5

这意味着,如果myAudio.rate < 1.0myAudio.currentTime将始终返回小于用户收听音频的时间的值。相反,如果myAudio.rate > 1.0myAudio.currentTime将始终返回的值长于用户收听的时间。

如果您想了解用户收听的时间,可以轻松计算:myAudio.currentTime / myAudio.rate