在 iOS 中将音频文件的播放速度降低 600%-900%(不影响音高)

Posted

技术标签:

【中文标题】在 iOS 中将音频文件的播放速度降低 600%-900%(不影响音高)【英文标题】:Decrease playback speed of audio file by 600%-900% (without affecting the pitch) in iOS 【发布时间】:2013-01-12 20:19:58 【问题描述】:

听起来应该像this

我试过了:

NSURL* url = [[NSBundle mainBundle] URLForResource:@"Justin Bieber - U Smile" withExtension:@"mp3"];

    self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:
                             url error:nil];
    self.player.volume = 1.0f;
    self.player.enableRate=YES;
    [self.player prepareToPlay];
    [self.player setNumberOfLoops:0];
    self.player.rate=0.16f;

    [self.player play];

但听起来很糟糕。

【问题讨论】:

【参考方案1】:

您要问的不是一项简单的任务,原因是音高与音频播放的速度有着内在的联系。例如,一个 100 Hz 的 10 秒正弦波,当减慢两倍时,将变成一个 20 秒 50 Hz 的波(Hz 与波速和您听到的音高有关)。为了在不影响音高的情况下将这个正弦波减慢两倍,一些算法必须计算出你插入的 10 秒音频中缺少什么声音,生成这个音频并将它与那里的声音相结合。这并不容易,事实上真的很难。

使用一些复杂的算法,好的音频编辑程序(例如 Logic Pro)可以做得相当好。然而,任何超过几倍的因素都会产生非常糟糕的结果,原因是很难生成以前不存在的音频并使其听起来不错。


但是,我会这样做

(以及我认为上面的链接听起来不错):

首先,从非常高质量的音频开始。避开 128 kpbs mp3,他们只是不会削减它。发出的声音信息越多,算法就越容易创造出听起来不错的东西。

接下来,研究将在 600 - 900% 的系数下运行良好的算法。看看这个:http://hypermammut.sourceforge.net/paulstretch/ - 它是开源的,所以你应该能够从中学到很多东西。此外,该算法特别适用于大规模因子。宾果游戏!

我想说,youtube 视频的最终结果中应用了某种效果(或几种效果)。我在上面链接的网站提到“光谱平滑”已应用于音频。此外,诸如混响之类的东西可能会给结果带来更好或更有趣的质感——一些可以玩弄的东西。


这不是一项小任务,尤其是要做好。不过应该很有趣/有趣 - 祝你好运!

【讨论】:

Paul 的 Extreme Sound Stretch(“paulstretch”)确实令人印象深刻,但不幸的是,它的软件许可不允许它用于封闭源代码的软件程序,例如某些人可能会提交给应用商店。【参考方案2】:

在***中,有一篇文章在一定程度上描述了您需要做什么:link。您需要进行时间缩放并相应地调整音高以补偿缩放效果。听起来不简单,也许你可以尝试在已经存在的开源过滤器项目中找到源代码。

【讨论】:

以上是关于在 iOS 中将音频文件的播放速度降低 600%-900%(不影响音高)的主要内容,如果未能解决你的问题,请参考以下文章

如何降低PCM数据的播放速度?

使用 AVPlayer 在 iOS 中音频流期间的播放速度

iPhone声音:在播放时调整音频文件的播放速度

如何在 Ruby 中将音频作为流播放

iOS开发系列--音频播放录音视频播放拍照视频录制

音频文件以错误的速度播放