AVAudioPlayer率

时间:2012-06-21 04:46:32

标签: ios avfoundation avaudioplayer avplayer audio-processing

所以我试图在iOS 5.1.1中以不同的速率播放声音文件,并且绝对没有运气。到目前为止,我已经尝试设置AVAudioPlayer的速率:

player = [[AVAudioPlayer alloc] initWithContentsOfURL:referenceURL error:&error];
player.enableRate = YES;
player.rate = 1.5;
player.numberOfLoops = 0;
player.delegate = self;
[player prepareToPlay];
[player play];

没有运气,声音只会忽略我给它的速度。我也试过AVPlayer:

avPlayer = [[AVPlayer alloc] initWithURL:referenceURL];
avPlayer.rate = 0.5;
[avPlayer play];

同样,它会播放但只是忽略我设置的速率。我尝试了很多不同的音频文件但是为了这个帖子我从这个目录中选择了Rooster-mono.wav:http://sig.sapp.org/sounds/wave/

在iOS 5.1.1上有没有人改变播放率?或者有人知道我在这里缺少什么吗?

我这样做是为了改变我的一些样本的音调,我意识到我可以通过使用RemoteIO或类似的东西来做到这一点,但这似乎完全矫正了我想要达到的目标(简单的播放速率调整)。

4 个答案:

答案 0 :(得分:8)

这里有一些我知道有用的代码,只是在我一直在努力的应用程序中重新测试过。正如您所提到的,使用setEnableRate:setRate:仅适用于iOS 5.0及更高版本。所以我使用respondsToSelector:在设备上测试设备是否接受请求:

_noticeAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Rooster-mono" ofType:@"wav"]]
                                                      error:nil];;
if ([_noticeAudio respondsToSelector:@selector(setEnableRate:)])
    _noticeAudio.enableRate = YES;
if ([_noticeAudio respondsToSelector:@selector(setRate:)])
    _noticeAudio.rate = 2.0;

在iOS 5设备上运行,它成功执行双倍速率。在iOS 4.3上运行,它以正常速度播放。

所以,你获得适当费率的唯一方法就是你的设备上有iOS 5。

答案 1 :(得分:8)

将代码修改为:

avPlayer = [[AVPlayer alloc] initWithURL:referenceURL];

[avPlayer play]; //call play first

avPlayer.rate = 0.5; //then set rate

答案 2 :(得分:3)

这是你如何做到的。

费率值在0.1f-2.0f之间

player = [[AVAudioPlayer alloc]
          initWithContentsOfURL:[NSURL fileURLWithPath:path]
          error:&err];
player.volume = 0.4f;
player.enableRate=YES;
[player prepareToPlay];
[player setNumberOfLoops:0];
player.rate=2.0f;
[player play];

答案 3 :(得分:1)

Swift 2.0

let player = AVPlayer(URL: url)
player.play()
player.rate = 0.9