iPhone SDK: 使用核心音频AVAudioPlayer改变播放速度

4

我希望能够以1.5倍或2.0倍的速度回放使用AVAudioRecorder录制的音频。在AVAudioPlayer中,我没有看到任何支持此功能的内容。如果可能的话,请提供一些建议和代码,说明如何使用iPhone 3.x SDK实现此目标。降低音调以补偿增加的播放速度并不是我过分关注的问题,但如果能够这样做会更理想。

3个回答

3
改变采样率的作用就像快速播放录音机一样,所有声音都会变高。如果要保持音调不变,需要建立一个包含AUPitch效果的音频单元图表,并按比例降低与增加采样率相同的升高率。

2
请参考这个问题。换句话说,您需要使用不同的API,例如音频队列服务。如果您想尝试简单的hack,请尝试将音频文件的采样率属性加倍。虽然可能不起作用,但请注意,调整播放速度并保持相同音高要求相当高的CPU性能。您需要使用一种可用的技术之一,称为“时间拉伸”。此外,如果您还没有意识到,在iPhone上进行复杂的音频处理是非常困难的,因为苹果的文档通常非常糟糕或不存在。

那么,如果我以8000的采样率进行录制,理论上将采样率更改为12000进行播放应该会导致1.5倍的速度吗? - memmons
是的,如果它可以采用任意采样率而不仅仅是常见的采样率(44100、22050等),我认为它可以,但我还没有尝试过。 - Justin Peel
我会尝试一下,并在今天发布结果。 - memmons

1

如果你想加快或减慢音频播放速度,avAudioPlayer 中有一个内置方法。你试过 AudioPlayer Rate 属性吗?在 Swift 中,它应该是这样的 -

    audioP = try! AVAudioPlayer(contentsOf: URL(fileURLWithPath: selectedPath), fileTypeHint: "caf")
    audioP.enableRate = true
    audioP.prepareToPlay()
    audioP.rate = 1.5
    audioP.play()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接