当我更改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
答案 0 :(得分:1)
当您致电AVAudioPlayer.currentTime
时,如果rate
为1.0
,则会返回播放音频的距离。当您更改rate
时,currentTime
返回的值会按比例更改。
换句话说,当您更改AVAudioPlayer.duration
时,rate
不会更改,而myAudioPlayer.currentTime / myAudioPlayer.duration
将始终告诉您音频文件的哪个部分已播放。因此,如果您在播放音频文件的一半时评估该表达式,则无论速率如何,它都将大致返回0.5
。
这意味着,如果myAudio.rate < 1.0
,myAudio.currentTime
将始终返回小于用户收听音频的时间的值。相反,如果myAudio.rate > 1.0
,myAudio.currentTime
将始终返回的值长于用户收听的时间。
如果您想了解用户收听的时间,可以轻松计算:myAudio.currentTime / myAudio.rate
。