6

所以我试图在 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

4 回答 4

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。

于 2012-06-21T09:59:28.663 回答
8

将代码修改为:

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

[avPlayer play]; //call play first

avPlayer.rate = 0.5; //then set rate
于 2012-07-24T10:13:24.383 回答
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];
于 2013-06-07T15:04:32.227 回答
1

斯威夫特 2.0

let player = AVPlayer(URL: url)
player.play()
player.rate = 0.9
于 2016-03-08T15:21:59.803 回答