AVPlayer по-прежнему не воспроизводит звуки (без ошибок - следуют другие удачные решения) - PullRequest
0 голосов
/ 09 ноября 2019

Я проверил сообщение о переполнении стека и понял, как добавить звуки. Дело в том, что когда я пытаюсь его выполнить, не выдается никаких ошибок, но звук не воспроизводится. Я создал функцию, которая принимает имя звукового файла и формат. Возможно, я делаю что-то не так.

Вариант использования: у меня есть переменная, которая отслеживает состояние представления. Если состояние 1,2 или 3, просмотрите изменения - тактильный двигатель запущен, и звук активирован соответственно. Но звуковая часть просто не работает.

ПРИМЕЧАНИЕ. Не работает в беззвучном режиме

import UIKit
import AVFoundation

class HomeController: UIViewController {

    //MARK: INITIALIZE VIEWS
    #code where views are initialised 

    var stateTrack: Int! {
        didSet{
            updateStates()
        }
    }

    var player: AVAudioPlayer?

    //MARK: MAIN: VIEW DID LOAD

    override func viewDidLoad() {
        super.viewDidLoad()
        configureViews()
    }

    //MARK: FUNCTIONS: HANDLERS

    @objc func handleProfileView(){
        print("Profile button pressed")
        stateTrack = 1
    }

    @objc func handleConnect(){
        print("Connect button pressed")
        stateTrack = 2
    }

    @objc func handleHow(){
        print("How button pressed")
        stateTrack = 3
    }

    //MARK: FUNCTIONS: CORE UI

    fileprivate func configureViews() {
        #view configuration occurs here
    }

    fileprivate func updateStates() {
        if self.stateTrack == 0 {

       #do something with the view

        } else if self.stateTrack == 1 {

       #do something with the view            
            generateHaptics(stateValue: 1)
            playSound(resourceName: "fail", format: "mp3")

        } else if self.stateTrack == 2 {

        #do something with the view            
            generateHaptics(stateValue: 2)
            playSound(resourceName: "search", format: "wav")

        } else if self.stateTrack == 3 {

            #do something with the view            
            generateHaptics(stateValue: 3)
            playSound(resourceName: "success", format: "wav")
        }
    }

    fileprivate func generateHaptics(stateValue: Int){
        let generator = UINotificationFeedbackGenerator()
        if stateValue == 1{
            generator.notificationOccurred(.error)
        }
        else if stateValue == 2{
            generator.notificationOccurred(.warning)
        }
        else{
            generator.notificationOccurred(.success)
        }
    }

    fileprivate func playSound(resourceName: String, format: String) {
        guard let url = Bundle.main.url(forResource: resourceName, withExtension: format) else { return }
        do {
            try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default)
            try AVAudioSession.sharedInstance().setActive(true)
            player = try AVAudioPlayer(contentsOf: url)
            guard let player = player else { return }
            player.play()

        } catch let error {
            print(error.localizedDescription)
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...