2016-08-22 65 views
5

Bir arka plan müziğinin sürekli olarak çalındığı ve çeşitli diğer seslerin kullanıcı etkileşimi temelinde oynatıldığı bir oyun (Swift 2.0, iOS9) oluşturdum.AVFoundation kullanarak hızlı 2.0'da sadece bir kulak kulaklıkta bir ses notu çalmanın bir yolu var mı?

Ama şimdi, eğer kulaklık kafa telefonları kullanıyorsa, sadece sağ veya sol kulak telefonunda belirli bir sesi çalmak istiyorum. Bu, AVFoundation kullanarak mümkün mü?

Herhangi bir yardım veya öneri çok takdir edilmektedir.

cevap

6

Bu sol veya sağ bir ses çalma şekli şöyledir.

import UIKit 
import AVFoundation 

class ViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
     testSound() 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    var audioPlayer = AVAudioPlayer() 
    let alertSound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("CheckoutScannerBeep", ofType: "mp3")!) // If sound not in an assest 
    //let alertSound = NSDataAsset(name: "CheckoutScannerBeep") // If sound is in an Asset 
    func testSound(){ 
     do { 
      //  audioPlayer = try AVAudioPlayer(data: (alertSound!.data), fileTypeHint: AVFileTypeMPEGLayer3) //If in asset 
      audioPlayer = try AVAudioPlayer(contentsOfURL: alertSound) //If not in asset 
      audioPlayer.pan = -1.0 //left headphone 
      //audioPlayer.pan = 1.0 // right headphone 
      audioPlayer.prepareToPlay() // make sure to add this line so audio will play 
      audioPlayer.play() 
     } catch { 
      print("error") 
     } 

    } 

} 
+0

Evet için sol kulak veya 1 için -1 olarak, bu çalıştı. Çok teşekkür ederim .. – Suhas

+0

Keşke bu iki kez daha fazlasını yapabilirdim .. Tüm yorumlar çok kullanışlıdır ve kodu çok okunabilir hale getirdi. Çok iyi bir cevap, tekrar teşekkürler. da, lütfen, bu bildirime duyulan ihtiyacı belirtiyorsunuz audioPlayer.prepareToPlay() – Suhas

1

bu işlevin

func headsetPluggedIn() -> Bool { 
    let route = AVAudioSession.sharedInstance().currentRoute 
    return (route.outputs).filter({ $0.portType == AVAudioSessionPortHeadphones }).count > 0 
} 

birlikte sesi oynamak Ve bu

gibi AVAudioPlayer en tava özelliğiyle kulak sola ses veya sağa değiştirmeden önce ses kulaklık ile çalınan olup olmadığını kontrol edebilirsiniz
myAudioPlayer.pan = 1 

seti bunun sağ kulağa

+0

Bu çok yardımcı oldu. Sesi çalmadan önce kulaklıkları kontrol etmeyi düşünmemiştim. Ama yaptığınız nokta çok mantıklı .. – Suhas