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

时间:2013-01-12 20:19:58

标签: ios objective-c audio avaudioplayer playback

听起来应该是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];

但听起来很糟糕。

2 个答案:

答案 0 :(得分:2)

你问的不是一个简单的任务,原因是音调本身与音频播放的速度有关。例如,100赫兹的10秒正弦波,当减速2倍时,将成为20秒50赫兹波(赫兹与波速和您听到的音高有关)。要在不影响音高的情况下将此正弦波减慢两倍,某些算法必须确定您插入的10秒音频中缺少的声音,生成此音频并将其与那里的音频进行网格化。这并不容易,事实上它真的很难。

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


然而,这就是我要去做的事情

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

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

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

我会说某种效果(或一对)已应用于YouTube视频中的最终结果。我上面链接的网站提到“光谱平滑”已应用于音频。像混响这样的东西可能会给结果带来更好或更有趣的纹理 - 有些东西可以玩。


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

答案 1 :(得分:0)

在维基百科中,有一篇文章描述了您需要做的事情:link。您需要进行时间缩放并相应地调整音高以补偿缩放效果。听起来不是一件容易的事,也许你可以尝试在已经存在的开源过滤器项目中找到源代码。