Вопрос:

Есть ли способ воспроизвести звуковую ноту только в одном ухе наушников в swift 2.0 с помощью AVFoundation?

ios swift ios9 avfoundation core-audio

650 просмотра

2 ответа

51 Репутация автора

Я создал игру (Swift 2.0, iOS9), в которой фоновая музыка воспроизводится непрерывно, а различные другие звуки воспроизводятся на основе взаимодействия с пользователем.

Но сейчас я бы хотел воспроизвести определенный звук только в правом или левом наушнике, если плеер использует наушники. Возможно ли это с помощью AVFoundation?

Автор: Suhas Источник Размещён: 22.08.2016 09:12

Ответы (2)


7 плюса

3497 Репутация автора

Решение

Это то, как вы будете воспроизводить звук слева или справа.

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()
    }

    var audioPlayer = AVAudioPlayer()
    let alertSound = NSURL(fileURLWithPath: Bundle.main.path(forResource: "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(contentsOf: alertSound as URL) //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")
        }

    }

}
Автор: MwcsMac Размещён: 22.08.2016 09:47

1 плюс

3122 Репутация автора

С помощью этой функции вы можете проверить, воспроизводится ли звук через наушники.

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

И вы можете изменить звук на левое или правое ухо с помощью свойства панорамирования AVAudioPlayer, как это

myAudioPlayer.pan = 1

установите значение -1 для левого уха или 1 для правого уха

Автор: Sam_M Размещён: 22.08.2016 10:40
Вопросы из категории :
32x32