在 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%(不影响音高)的主要内容,如果未能解决你的问题,请参考以下文章