Background - I saw a video titled "AVAudioEngine in Practice" from the following list of videos published at Apple's recent WWDC to apply sound effects to an audio. https://developer.apple.com/videos/wwdc/2014/
After that, I was successfully able to change the pitch of an audio with the following code:
//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() }
From what I understand, I used the AudioEngine to attach the AudioPlayerNode with the AudioEffect, which I in turn attached to the Output.
I am now curious about adding multiple sound effects to the audio. For instance, pitch change AND reverb. How would I go about adding multiple sound effects to the audio?
Also, would it make sense to attach and connect the nodes in viewDidLoad rather than how I have done it here in an IBAction ?
Just connect them.
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)
Background - I saw a video titled "Putting it all together - Intro to iOS App Development with Swift" from the following list of videos published at Udacity to apply sound effects to an audio.
https://youtu.be/XiQfjaYJjuQ
After that, I was successfully able to change the pitch of an audio with the following code:
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() }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With