Per*_*tum 3 null ios swift avaudioengine avaudioplayernode
该应用程序运行正常,但一旦我点击chipmunkButton应用程序崩溃并提供以下错误:
错误:AVAudioPlayerNode.mm:678: - [AVAudioPlayerNode scheduleFile:atTime:completionHandler:]:必需条件为false:file!= nil 2015-05-10 17:24:25.269 Pitch Perfect [50278:1897012]***终止app由于未被捕获的异常'com.apple.coreaudio.avfaudio',原因:'必要条件为false:file!= nil'
import UIKit
import AVFoundation
class PlaySoundsViewController: UIViewController {
var audioRecording = AVAudioPlayer()
var receivedAudio:RecordedAudio!
var audioEngine:AVAudioEngine!
var audioFile:AVAudioFile!
func setupAudioPlayerWithFile(file:NSString, type:NSString) -> AVAudioPlayer {
//1
var path = NSBundle.mainBundle().pathForResource(file as String, ofType: type as String)
var url = NSURL.fileURLWithPath(path!)
//2
var error: NSError?
//3
var audioPlayer:AVAudioPlayer?
audioPlayer = AVAudioPlayer(contentsOfURL: url, error: &error)
//4
return audioPlayer!
}
override func viewDidLoad() {
super.viewDidLoad()
audioRecording = AVAudioPlayer(contentsOfURL: receivedAudio.filePathUrl, error: nil)
audioRecording.enableRate = true
audioEngine = AVAudioEngine()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func slowButton(sender: UIButton) {
playButtons()
audioRecording.rate = 0.5
}
@IBAction func fastSound(sender: UIButton) {
audioRecording.rate = 2.0
playButtons()
}
@IBAction func chipmunkButton(sender: UIButton) {
playAudioWithVariablePitch(1000)
}
func playAudioWithVariablePitch(pitch: Float) {
audioRecording.stop()
audioEngine.stop()
audioEngine.reset()
var audioPlayerNode = AVAudioPlayerNode()
audioEngine.attachNode(audioPlayerNode)
var 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)
audioEngine.startAndReturnError(nil)
audioPlayerNode.play()
}
@IBAction func stopButton(sender: UIButton) {
audioRecording.stop()
}
func playButtons() {
audioRecording.stop()
audioRecording.currentTime = 0
audioRecording.play()
}
}
Run Code Online (Sandbox Code Playgroud)
非常小学.只需阅读错误信息!你是说:
var audioFile:AVAudioFile!
Run Code Online (Sandbox Code Playgroud)
这意味着audioFile零.那么,你之后永远不会碰audioFile,所以它从零开始并保持为零.因此,当你到达这一行时,你会崩溃:
audioPlayerNode.scheduleFile(audioFile, atTime: nil, completionHandler: nil)
Run Code Online (Sandbox Code Playgroud)
......完全是因为audioFile没有.
| 归档时间: |
|
| 查看次数: |
3431 次 |
| 最近记录: |