我正在开发一个简单的音频播放应用程序。它大约有 10 个音频文件,每个文件的正常播放速度为每分钟 100 节拍。用户可以输入一个节奏变量(70 到 140 b.p.m. 之间),该变量在调用 play() 函数之前被分配给 (tempo/100) AVAudioPlayer 速率变量...
@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 单位的速度,播放的声音也很差。节奏转换听起来很准确(即降低节奏变量会导致音频变慢,反之亦然),并且音调听起来像是保持不变(尽管在持续音符中有点“摇摆”),但声音的质量似乎受到了重大负面影响。我可能期望这种情况发生在更极端的速率变化(速率200%)时,但即使在 99% 和 101% 时,它也是完全明显的。
我使用的是 44k/16 位 .wav,然后尝试了 .mp3(各种质量),结果都相同。我也看过这个,即使不一样,看起来也很相似(尽管查询从未得到解决)...AVAudioPlayer 速率变化会引入伪影/失真 https://stackoverflow.com/questions/31128172/avaudioplayer-rate-change-introduces-artifacts-distortion
使用其他软件(DAW 和虚拟 DJ 软件)更改这些文件的播放速度不会产生相同的异常,因此我的假设是,在波形上插入额外数据点的算法对于我的目的来说可能不够强大。
但如果有人能给我一个解决方案,我会非常兴奋。
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)