AVAudioPlayer выдает лаг в Swift 4.2 - PullRequest
0 голосов
/ 23 ноября 2018

да, я не первый с этим вопросом, но все, что я нашел, мне уже 4 года, и я не могу найти решение этой проблемы.Возможно, я просто не понимаю решения.

Проблема:

Каждый раз, когда я запускаю приложение на устройстве и вызываю свой «звуковой» файл, он на короткое время отстает.Я пытался установить звук на задний план, но он все еще отстает.Также я установил опцию Capabilitis для фоновых режимов (Audio, AirPlay и Картинка в картинке) в настройках проекта приложения.

По любой причине вызов «звука» на «заднем плане» работает в симуляторе из XCode без каких-либо задержек.

Я использую этот код для вызова звукового файла в формате m4a:

var SoundCollect: AVAudioPlayer?

func SoundCollectStaff() {

do {

        if let fileURL = Bundle.main.path(forResource: "collect", ofType: "m4a") {

            SoundCollect = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: fileURL))

            SoundCollect?.prepareToPlay()
            SoundCollect?.play()

        } else {

         print("no file found")
        }

} catch let error {
    print("error failed with: \(error.localizedDescription)")
    }
}

и этот код для установки звука в фоновый режим

func SetSoundinBackground() {

    do {

        try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [.mixWithOthers, .allowAirPlay])
        try AVAudioSession.sharedInstance().setActive(true)
        print("Session is Active")

    } catch {
        print(error)
    }

}

путем вызова функции SetSoundinBackground (), которую я получаю на устройстве следующим Error: Error Domain=NSOSStatusErrorDomain Code=-50 "(null)"

Спасибо за любую помощь и советы!

1 Ответ

0 голосов
/ 24 ноября 2018

хорошо решение кажется простым.Я добавил это в свою функцию SoundCollectStaff ():

DispatchQueue.global().async { SoundCollect.play() }

...