使用 Apple 新的 AudioEngine 改变 AudioPlayer 声音的 Pitch

Posted

技术标签:

【中文标题】使用 Apple 新的 AudioEngine 改变 AudioPlayer 声音的 Pitch【英文标题】:Using Apple's new AudioEngine to change Pitch of AudioPlayer sound 【发布时间】:2014-09-06 21:28:21 【问题描述】:

我目前正在尝试让 Apple 的新音频引擎与我当前的音频设置配合使用。具体来说,我正在尝试使用音频引擎更改音高,这显然可以根据this post。

我还研究了其他音高改变解决方案,包括 Dirac 和 ObjectAL,但不幸的是,在使用我正在使用的 Swift 时,两者似乎都非常混乱。

我的问题是如何使用 Apple 的新音频引擎更改音频文件的音高。我可以使用 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】:

您使用的是 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))

【讨论】:

这对我来说毫无意义。我在哪里告诉我要播放的文件? scheduleFile 是要使用的功能。 developer.apple.com/library/ios/documentation/AVFoundation/…

以上是关于使用 Apple 新的 AudioEngine 改变 AudioPlayer 声音的 Pitch的主要内容,如果未能解决你的问题,请参考以下文章

如何捕捉 SKScene 暂停或 audioEngine 停止的时刻?

apple watch怎么改铃声

如何使用新的 Apple ID 更新 Xcode?

cocos2dx 同时快速播放停止多个音效闪退问题

如何通过命令行构建和部署 Xcode 项目到新的 Apple 的 TestFlight

将新的 Apple Framework 类适配到以前的 iOS SDK