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

Posted

技术标签:

【中文标题】iPhone SDK:使用核心音频 AVAudioPlayer 更改播放速度【英文标题】:iPhone SDK: Change playback speed using core audio AVAudioPlayer 【发布时间】:2010-03-11 18:58:34 【问题描述】:

我希望能够以 1.5x 或 2.0x 的速度播放我使用 AVAudioRecorder 录制的音频。我在 AVAudioPlayer 中看不到任何支持它的东西。如果可能的话,我会很感激一些关于如何使用 iPhone 3.x SDK 完成此操作的代码的建议。我并不太担心降低音调以补偿播放速度的提高,但能够这样做将是最佳选择。

【问题讨论】:

【参考方案1】:

如果您播放得更快,更改采样率应该就像磁带录音机一样。一切都变得更高了。要保持音高不变,您需要设置一个包含 AUPitch 效果的音频单元图,并以与增加采样率相同的比例降低音高。

【讨论】:

【参考方案2】:

见this question。换句话说,您将不得不使用不同的 API,例如音频队列服务。如果您想尝试简单的 hack,可以尝试将音频文件的采样率属性加倍。虽然它可能行不通。另外,请注意,在保持相同音高的同时调整播放速度对 CPU 的要求很高。您需要使用一种称为"time stretching" 的可用技术。另外,如果您现在还没有意识到,在 iPhone 上用音频做复杂的事情是一件很痛苦的事情,因为 Apple 的文档通常要么非常糟糕,要么根本不存在。

【讨论】:

那么,如果我以 8000 的采样率录制,那么理论上将采样率更改为 12000 进行播放应该会产生 1.5 倍的速度? 是的,如果它将采用任意采样率,而不仅仅是常见的采样率(44100、22050 等)。我认为它会,但我还没有尝试过。 我会试一试并在今天发布结果。【参考方案3】:

如果您想更快或更慢地播放音频,avAudioPlayer 中有一个内置方法。您是否尝试过 AudioPlayer Rate 属性?在 Swift 中会是这样 -

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

【讨论】:

以上是关于iPhone SDK:使用核心音频 AVAudioPlayer 更改播放速度的主要内容,如果未能解决你的问题,请参考以下文章

使其他音频安静的音效 iOS AVAudio

使用 iPhone SDK 播放音频

使用 iPhone SDK 剪切音频文件

iPhone SDK:如何使用 AVAudioPlayer 标准化音频播放?

在应用程序终止之前获取 AVAudio 录音 URL

如何在 iphone sdk 中合并音频和视频