Переключение звука системы - быстро

Я хочу сделать так, чтобы можно было нажимать кнопку, которая будет многократно воспроизводить системный звук снова и снова (без наложения звуков) до тех пор, пока кнопка не будет нажата снова - по сути, кнопка будет переключать повторное воспроизведение звука система сервисов звука вкл / выкл.

Если кто-нибудь знает, как это сделать, я буду очень признателен.

Спасибо

1 ответ

Для этого используйте AVAudioplayer с бесконечным повторением, а затем приостановить / воспроизвести его при нажатии кнопки. Сначала создайте переменную audioPlayer вне любой функции:

var audioPlayer : AVAudioPlayer!

Затем инициализируйте audioPlayer внутри viewDidLoad:

override func viewDidLoad() {
    super.viewDidLoad()

    guard let url = Bundle.main.path(forResource: "myOwnSound", ofType: "wav") else { //your own file name AND extension type of course
       print("file not found")
       return
    }
    do {
        try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
        try AVAudioSession.sharedInstance().setActive(true)
        try audioPlayer = AVAudioPlayer(contentsOf: URL(string: url)!)
        audioPlayer!.prepareToPlay()
        audioPlayer.numberOfLoops = -1
    } catch let error as NSError {
        print("error while initialising sound: \(error)")
    }
}

Затем внутри функции, связанной с вашей кнопкой, в моем случае я назвал эту функцию buttonPressed:

@IBAction func buttonPress(_ sender:AnyObject){
    if audioPlayer.isPlaying {
       audioPlayer.pause()
    }
    else {
       audioPlayer.play()
    }
}

Ты можешь использовать AVFoundation а также AVAudioPlayer управлять музыкой и звуком внутри вашего приложения

Импортировать следующие

import AVFoundation

Создайте свойство AVAudioPlayer для управления воспроизведением / остановкой и добавьте следующий код в область вашей музыкальной кнопки

 var player : AVAudioPlayer?

@IBAction func openListAction(_ sender: UIButton) {
       // moveToGame()
        if sender.isSelected {
            sender.isSelected = false
            player?.stop()
        }
        else {
            sender.isSelected = true
            let bundle = Bundle.init(for: self.classForCoder)
            let path = bundle.path(forResource: "soundFileName", ofType : "soundFileExtension")! //.mp3, .caf etc
            let url = URL(fileURLWithPath : path)
            do {
                player = try AVAudioPlayer(contentsOf: url)
                player?.play()

            } catch {
                print ("Error to load music")
            }
        }
    }
Другие вопросы по тегам