【问题标题】:Using sound effects with AudioEngine通过 AudioEngine 使用音效
【发布时间】:2014-10-09 14:03:42
【问题描述】:

背景 - 我在 Apple 最近的 WWDC 上发布的以下视频列表中看到了一个名为“实践中的 AVAudioEngine”的视频,以将音效应用于音频。 https://developer.apple.com/videos/wwdc/2014/

之后,我成功地使用以下代码更改了音频的音高:

 //Audio Engine is initialized in viewDidLoad()
 audioEngine = AVAudioEngine()
 //The following Action is called on clicking a button
 @IBAction func chipmunkPlayback(sender: UIButton) {
        var pitchPlayer = AVAudioPlayerNode()
        var timePitch = AVAudioUnitTimePitch()
        timePitch.pitch = 1000

        audioEngine.attachNode(pitchPlayer)
        audioEngine.attachNode(timePitch)

        audioEngine.connect(pitchPlayer, to: timePitch, format: myAudioFile.processingFormat)
        audioEngine.connect(timePitch, to: audioEngine.outputNode, format: myAudioFile.processingFormat)

        pitchPlayer.scheduleFile(myAudioFile, atTime: nil, completionHandler: nil)
        audioEngine.startAndReturnError(&er)

        pitchPlayer.play()

    }

据我了解,我使用 AudioEngine 将 AudioPlayerNode 与 AudioEffect 附加在一起,然后我将其附加到输出。

我现在对在音频中添加多种音效感到好奇。例如,音高变化和混响。我将如何为音频添加多种音效?

另外,在 viewDidLoad 中附加和连接节点而不是我在 IBAction 中的方式是否有意义?

【问题讨论】:

    标签: ios swift avaudioengine avaudioplayernode


    【解决方案1】:

    只需连接它们。

    engine.connect(playerNode, to: reverbNode, format: format)
    engine.connect(reverbNode, to: distortionNode, format: format)
    engine.connect(distortionNode, to: delayNode, format: format)
    engine.connect(delayNode, to: mixer, format: format)
    

    【讨论】:

    • 一切似乎都有关联。你为什么推荐那个代码?
    • 在给出的 OP 示例中,未连接多个节点。 “我现在对添加多种音效很好奇”所以我给了他答案。感谢您对我的正确答案投反对票。
    • 对不起。错过了。
    【解决方案2】:

    背景 - 我从 Udacity 发布的以下视频列表中看到了一个名为“将所有内容放在一起 - 使用 Swift 进行 iOS 应用开发简介”的视频,以将音效应用于音频。

    https://youtu.be/XiQfjaYJjuQ

    之后,我成功地使用以下代码更改了音频的音高:

    func playAudioWithVariablePith(pitch: Float){
            audioPlayer.stop()
            audioEngine.stop()
            audioEngine.reset()
    
            let audioPlayerNode = AVAudioPlayerNode()
            audioEngine.attachNode(audioPlayerNode)
    
            let changePitchEffect = AVAudioUnitTimePitch()
            changePitchEffect.pitch = pitch
    
            audioEngine.attachNode(changePitchEffect)
    
            audioEngine.connect(audioPlayerNode, to: changePitchEffect, format: nil)
    
            audioEngine.connect(changePitchEffect, to: audioEngine.outputNode, format: nil)
    
            audioPlayerNode.scheduleFile(audioFile, atTime: nil, completionHandler: nil)
    
            try! audioEngine.start()
    
            audioPlayerNode.play()
    
        }
    

    【讨论】:

    • 如何设置音频引擎或播放器节点的当前时间?
    猜你喜欢
    • 2015-10-30
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    • 1970-01-01
    • 2012-07-26
    • 1970-01-01
    • 2014-02-20
    • 2023-03-14
    相关资源
    最近更新 更多