使用苹果新的AudioEngine更改AudioPlayer声音的音调

13

我正在尝试让苹果的新音频引擎与我的当前音频设置配合使用。具体而言,我正在尝试使用Audio Engine改变音调,根据这篇文章,这似乎是可能的。

我还研究了其他改变音调的解决方案,包括Dirac和ObjectAL,但不幸的是,它们在使用Swift方面存在很大问题。

我的问题是如何使用苹果的新音频引擎改变音频文件的音调。我能够使用AVAudioPlayer播放声音,但我不知道如何在audioEngine中引用该文件。在链接页面上的代码中,有一个“格式”指向音频文件,但我不知道如何创建格式或它的作用。

我使用以下简单代码播放音频:

let path = NSBundle.mainBundle().pathForResource(String(randomNumber), ofType:"m4r")
let fileURL = NSURL(fileURLWithPath: path!)
player = AVAudioPlayer(contentsOfURL: fileURL, error: nil)
player.prepareToPlay()
player.play()
1个回答

17

你需要使用AVAudioPlayerNode而不是AVAudioPlayer。

engine = AVAudioEngine()
playerNode = AVAudioPlayerNode()
engine.attachNode(playerNode)

然后您可以附加一个AVAudioUnitTimePitch。

var mixer = engine.mainMixerNode;
auTimePitch = AVAudioUnitTimePitch()
auTimePitch.pitch = 1200 // In cents. The default value is 1.0. The range of values is -2400 to 2400
auTimePitch.rate = 2 //The default value is 1.0. The range of supported values is 1/32 to 32.0.
engine.attachNode(auTimePitch)
engine.connect(playerNode, to: auTimePitch, format: mixer.outputFormatForBus(0))
engine.connect(auTimePitch, to: mixer, format: mixer.outputFormatForBus(0))

这对我毫无意义。我在哪里告诉文件我想播放哪个? - Charles
scheduleFile 是要使用的函数。https://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVAudioPlayerNode_Class/index.html#//apple_ref/occ/cl/AVAudioPlayerNode - Gene De Lisa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接