在Swift 2.0中更改AVAudioPlayer的速率变量时声音失真

时间:2016-06-07 18:51:16

标签: ios swift audio swift2 avaudioplayer

我正在制作一个简单的音频播放应用。它有大约10个音频文件,每个文件的正常播放速度为每分钟100次。用户能够在调用play()函数之前输入一个速度变量(介于70和140 b.p.m.之间),该变量被赋予(tempo / 100)到AVAudioPlayer rate 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")
        }
     }
}

以音频的正常速度(100b.p.m)播放效果非常好。然而,通过甚至单个bpm单位改变速度,回放听起来确实很差。速度转换听起来很准确(即降低速度变化导致音频减慢,反之亦然),并且音高听起来就像它保持一样(尽管在持续音符中有点“颤抖”),但声音的质量似乎在很大程度上受到了负面影响。我可能期望这会有更极端的费率变化(费率<50%或费率> 200%),但即使在99%和101%也是如此。

我使用44k / 16bit .wav,然后尝试.mp3(各种品质),都具有相同的结果。我也看过这个,看起来有点相似(尽管查询从未解决)...... AVAudioPlayer rate change introduces artifacts/distortion

使用其他软件(DAW和虚拟DJ软件)更改这些文件的播放速度不会产生相同的异常,因此我的假设是,在波形上插入额外数据点的算法可能不够强大我的目的。

但如果有人能给我一个解决方案,那我就完全被激怒了。

0 个答案:

没有答案