我有一个应用程序记录,然后播放音频文件.目前,通过耳机扬声器播放音频.有人能告诉我
Swift如何处理编码以强制音频输出扬声器吗?
下面是我用来播放音频文件的一个实例:
@IBAction func playAu@R_404_410@Vader(sender: UIButton) { playAu@R_404_410@WithVariablePitch(-1000) } func playAu@R_404_410@WithVariablePitch(pitch: Float){ au@R_404_410@Player.stop() au@R_404_410@Engine.stop() au@R_404_410@Engine.reset() var au@R_404_410@PlayerNode = AVAu@R_404_410@PlayerNode() au@R_404_410@Engine.attachNode(au@R_404_410@PlayerNode) var changePitchEffect = AVAu@R_404_410@UnitTimePitch() changePitchEffect.pitch = pitch au@R_404_410@Engine.attachNode(changePitchEffect) au@R_404_410@Engine.connect(au@R_404_410@PlayerNode,to: changePitchEffect,format: nil) au@R_404_410@Engine.connect(changePitchEffect,to: au@R_404_410@Engine.outputNode,format: nil) au@R_404_410@PlayerNode.scheduleFile(au@R_404_410@File,atTime: nil,completionHandler: nil) au@R_404_410@Engine.startAndReturnError(nil) au@R_404_410@PlayerNode.play() } override func viewDidLoad() { super.viewDidLoad() au@R_404_410@Player = AVAu@R_404_410@Player(contentsOfURL:receivedAu@R_404_410@.filePathURL,error: nil) au@R_404_410@Player.enableRate = true au@R_404_410@Engine = AVAu@R_404_410@Engine() au@R_404_410@File = AVAu@R_404_410@File(forReading:receivedAu@R_404_410@.filePathURL,error: nil) }
解决方法
编辑2017年7月:请参阅Husam对Swift 2.0解决方案的回答.
从Swift 1.2开始,您使用overrideOutputAu@R_404_410@Port和AVAu@R_404_410@SessionPortOverride.它可以通过这样的方式实现:
if !session.overrideOutputAu@R_404_410@Port(AVAu@R_404_410@SessionPortOverride.Speaker,error:&error) { println("could not set output to speaker") if let e = error { println(e.localizedDescription) } }
我正在开发一个现在使用它的应用程序,我有一个名为setSessionPlayandRecord的函数,它看起来像:
func setSessionPlayAndRecord() { let session:AVAu@R_404_410@Session = AVAu@R_404_410@Session.sharedInstance() var error: NSError? if !session.setCategory(AVAu@R_404_410@SessionCategoryPlayAndRecord,error:&error) { println("could not set session category") if let e = error { println(e.localizedDescription) } } if !session.overrideOutputAu@R_404_410@Port(AVAu@R_404_410@SessionPortOverride.Speaker,error:&error) { println("could not set output to speaker") if let e = error { println(e.localizedDescription) } } if !session.setActive(true,error: &error) { println("could not make session active") if let e = error { println(e.localizedDescription) } } }