Невозможно воспроизвести аудиофайл без сбоя приложения на устройстве под управлением ios 13 - PullRequest
0 голосов
/ 04 октября 2019

У меня есть приложение, которое люди используют для получения заказов, и оно должно издавать непрерывный звук до тех пор, пока сотрудники не займутся этим. Это работало в течение двух месяцев, а потом просто начало сильно падать. По какой-то причине он отлично работает на iPad, но не на айфонах, работающих под управлением последней операционной системы.

Когда этот фрагмент кода вызывается, он вылетает:

guard let path = Bundle.main.path(forResource: "alert.mp3", ofType: nil) else { return }
let url = URL(fileURLWithPath: path)
do {
    self.alertSoundEffect = try AVAudioPlayer(contentsOf: url)
} catch let err {
    print("err: \(err)")
}

DispatchQueue.main.async {
    self.alertSoundEffect.numberOfLoops = -1
    self.alertSoundEffect.prepareToPlay()
    self.alertSoundEffect.play()
}

Исправление, которое можно объявить онлайнПеременная alertSoundEffect выглядит следующим образом:

 private var alertSoundEffect : AVAudioPlayer!

не работает вообще.

Я пытался переместить все, кроме строки:

self.alertSoundEffect.play()

в viewDidLoad, как я думал, может бытьэтот код не может быть вызван более одного раза, но это не помогло.

В частности, компилятор выделяет эту строку в случае сбоя:

self.alertSoundEffect = try AVAudioPlayer(contentsOf: url)

Я попытался использовать try AVAudioPlayer, гдеон принимает объект данных в качестве параметра или с включением типа аудиофайла для воспроизведения, но это ничего не меняет.

Когда я пытаюсь делегировать AVAudioPlayer и объявляю его так:

self.alertSoundEffect.delegate = self

прямо перед тем, как первые строки кода, которыми я поделился над Xcode, подсвечивают эту строку вместо надежного сбоя.

Что еще мне следует попробовать?

Ответы [ 2 ]

0 голосов
/ 08 октября 2019

Если вы инициализируете свой AVAudioPlayer как var неправильныйMusicPlayer: AVAudioPlayer = AVAudioPlayer () ИЛИ неправильныйMusicPlayer = AVAudioPlayer () в любом методе, пожалуйста, удалите его и просто объявите как var неправильныйMusicPlayer: AVAudioPlayer!.

1002 iOS 100 *

10013.1 Сбой в AVAudio Player

0 голосов
/ 04 октября 2019

Полагаю, ваш path неправ. Попробуйте это:

guard let path = Bundle.main.path(forResource: "alert", ofType: "mp3") else { return }

Кроме того, если ваш аудиофайл короткий, например, менее 30 с, постарайтесь не вызывать self.alertSoundEffect.prepareToPlay(). Просто позвоните self.alertSoundEffect.play() прямо сейчас.

Начиная с iOS 13, это вызывало ошибку в моем приложении, так как у меня есть звуки уведомлений, длительностью 3-10 секунд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...