Swift

2015-04-08 35 views
7

'u kullanarak iPhone ses hoparlörü üzerinden ses dosyası oynatmayı zorla Bir ses dosyası kaydeden ve sonra oynatılan bir Uygulamam var. Şu anda ses çalma, kulaklık hoparlöründen çalıyor. Birisi bana Swift'in sesini hoparlörden çıkarmak için nasıl kodlayacağını söyleyebilir miydi? AşağıdaSwift

Ben ses dosyasını çalmak için kullanıyorum örnekleri bir tanesidir:

@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

... Orada –

+0

, kusura bakma! Umarım bu, neyi başarmaya çalıştığım konusunda daha iyi bir fikir verir. – Unconquered82

cevap

11

DÜZENLEME Temmuz 2017: Swift 2.0 çözümü için Husam cevabı bakın.

Swift 1.2'den, overrideOutputAudioPort ve AVAudioSessionPortOverride kullanın. Böyle bir şey yaparak uygulanabilir:

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

Şimdi bu kullanan bir uygulama üzerinde çalışıyorum ve ben gibi görünüyor setSessionPlayandRecord adlı bir işlev vardır:

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 .. Şimdi ne söylediğinizi anlıyorum ve çalışıyorum. Cevabınız için çok teşekkür ederim! Keşke daha fazla temsilci olsaydım, oradan uzak dururdum! Sizler adamlar! – Unconquered82

11

Swift 2.0 Kod yardım almak için, denemiş ne bazı kodlar paylaşmalıdır stackoverflow olarak

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 _ { 
    } 
}