2015-04-08 4 views
7

Ich habe eine App, die eine Audiodatei aufnimmt und dann wiedergibt. Derzeit wird die Audiowiedergabe über den Ohrhörer wiedergegeben. Könnte mir jemand sagen, wie schnell Swift damit umgehen würde, um stattdessen den Lautsprecher aus dem Lautsprecher zu holen?Erzwinge Audiodatei-Wiedergabe über iPhone Lautsprecher mit Swift

Unten ist eine eine der Instanzen ich die Audiodatei abzuspielen bin mit:

@IBAction func playAudioVader(sender: UIButton) { 
    playAudioWithVariablePitch(-1000) 
    } 

    func playAudioWithVariablePitch(pitch: Float){ 
    audioPlayer.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() 

} 

    override func viewDidLoad() { 

    super.viewDidLoad() 

    audioPlayer = AVAudioPlayer(contentsOfURL:receivedAudio.filePathURL, error: nil) 
    audioPlayer.enableRate = true 
    audioEngine = AVAudioEngine() 
    audioFile = AVAudioFile(forReading:receivedAudio.filePathURL, error: nil) 


} 
+0

In Stackoverflow Sie einen Code von teilen sollten, was Sie versucht, um Hilfe zu holen ... –

+0

Dort traurig über das! Ich hoffe, das gibt Ihnen eine bessere Vorstellung davon, was ich erreichen möchte. – Unconquered82

Antwort

11

EDIT Juli 2017: Siehe Husam Antwort für den Swift 2.0-Lösung.

Ab Swift 1.2 verwenden Sie overrideOutputAudioPort und AVAudioSessionPortOverride. Es kann durch etwas zu tun, wie diese umgesetzt werden:

if !session.overrideOutputAudioPort(AVAudioSessionPortOverride.Speaker, error:&error) { 
    println("could not set output to speaker") 
    if let e = error { 
     println(e.localizedDescription) 
    } 
} 

Ich bin auf einer App arbeiten, die das jetzt verwendet, und ich habe eine Funktion setSessionPlayandRecord genannt, das wie folgt aussieht:

func setSessionPlayAndRecord() { 
    let session:AVAudioSession = AVAudioSession.sharedInstance() 
    var error: NSError? 
    if !session.setCategory(AVAudioSessionCategoryPlayAndRecord, error:&error) { 
     println("could not set session category") 
     if let e = error { 
      println(e.localizedDescription) 
     } 
    } 
    if !session.overrideOutputAudioPort(AVAudioSessionPortOverride.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) 
     } 
    } 
} 
+0

Nevermind .. Ich verstehe, was Sie jetzt sagen, und ich habe es funktioniert. Vielen Dank für die Antwort! Ich wünschte, ich hätte mehr Repräsentanten, also könnte ich das verdammt nochmal rausholen! Du Typ/Mädels rocken! – Unconquered82

11

Swift

2.0-Code
func setSessionPlayerOn() 
{ 
    do { 
     try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord) 
    } catch _ { 
    } 
    do { 
     try AVAudioSession.sharedInstance().setActive(true) 
    } catch _ { 
    } 
    do { 
     try AVAudioSession.sharedInstance().overrideOutputAudioPort(AVAudioSessionPortOverride.Speaker) 
    } catch _ { 
    } 
} 
func setSessionPlayerOff() 
{ 
    do { 
     try AVAudioSession.sharedInstance().setActive(false) 
    } catch _ { 
    } 
}