在Swift 2.0中更改AVAudioPlayer的rate var时发生声音失真

我正在制作一个简单的audio播放应用程序。 它有大约10个audio文件,每个文件的正常播放速度为100次/分钟。 用户可以在调用play()函数之前input一个速度variables(70到140 bpm之间),该速度variables被赋予(速度/ 100)到AVAudioPlayer速率var。

@IBAction func playPause(sender: AnyObject) { if !isPlaying { let audioPath = NSBundle.mainBundle().pathForResource(selectedTrack, ofType: "mp3") do { try player = AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: audioPath!)) player.enableRate = true player.rate = Float(tempo) / 100 player.play() isPlaying = !isPlaying } catch { print ("play error") } } } 

以audio正常速度播放(100b.pm)的效果非常好。 但是,通过改变速度甚至每单一bpm单位,播放听起来真的很差。 速度转换听起来准确(即降低速度变化导致audio变慢,反之亦然),并且音调听起来像保持(尽pipe在持续音符中有点“摇晃”),但音质似乎受到主要方面的负面影响。 我也许会期望这个更为剧烈的利率变动(利率<50%或利率> 200%),但即使在99%和101%的情况下也是非常明显的。

我正在使用44k / 16bit .wav,然后尝试.mp3(各种质量),所有结果都一样。 我也看了这个,如果不相同,似乎相似(虽然查询从未解决)… AVAudioPlayer率变化引入人工制品/失真

使用其他软件(DAW和虚拟DJ软件)来更改这些文件的播放速度不会产生相同的exception情况,所以我的假设是,插入波形上额外数据点的algorithm可能不足以达到我的目的。

但如果有人能给我一个解决scheme,我会完全激动。