Swift – Stop avaudioplayer

Я пытаюсь создать звуковую плату в приложении и разработал эффективный способ использования тегов для управления воспроизведением звуков. Однако теперь я пытаюсь интегрировать кнопку паузы, которая может использоваться с .stop() на AVAudioPlayer однако я получаю сообщение об ошибке с моим текущим кодом:

EXC_BAD_ACCESS

Это то, что я использую в данный момент, любые идеи?

 import UIKit import AVFoundation let soundFilenames = ["sound","sound2","sound3"] var audioPlayers = [AVAudioPlayer]() class SecondViewController: UIViewController { var audioPlayer = AVAudioPlayer() override func viewDidLoad() { super.viewDidLoad() for sound in soundFilenames { do { let url = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource(sound, ofType: "mp3")!) let audioPlayer = try AVAudioPlayer(contentsOfURL: url) audioPlayers.append(audioPlayer) } catch { //Catch error thrown audioPlayers.append(AVAudioPlayer()) } } } @IBAction func buttonPressed(sender: UIButton) { let audioPlayer = audioPlayers[sender.tag] audioPlayer.play() } @IBAction func stop(sender: UIButton) { audioPlayer.stop() } } 

Ваш аудиоплеер в режиме остановки не является игроком. Вы должны назначить его в функции buttonPressed.

 @IBAction func buttonPressed(sender: UIButton) { audioPlayer = audioPlayers[sender.tag] audioPlayer.play() } 

Кстати, вы можете отметить audioPlayer как «?» свойства, это будет более эффективно при инициализации этого контроллера.

 class SecondViewController: UIViewController { var audioPlayer: AVAudioPlayer? let enableMuiltPlayers = false .... @IBAction func buttonPressed(sender: UIButton) { if sender.tag < audioPlayers.count else { print("out of range") return } if enableMuiltPlayers { audioPlayers[sender.tag].play() } else { audioPlayer?.stop() //set the current playing player audioPlayer = audioPlayers[sender.tag] audioPlayer?.play() } } @IBAction func stop(sender: UIButton) { let wantToStopAll = false if enableMuiltPlayers && wantToStopAll { stopAll() } else { audioPlayer?.stop() } audioPlayer = nil } } 

остановить все:

 fun stopAll() { for player in audioPlayers { player.stop() } } 

У вашего кода могут быть другие ошибки, но есть одна уверенность:

Вы не должны создавать экземпляр AVAudioPlayer с помощью инициализатора по умолчанию AVAudioPlayer() .

Измените эту строку:

  var audioPlayer = AVAudioPlayer() 

чтобы:

  var playingAudioPlayer: AVAudioPlayer? 

И измените эту часть:

  } catch { //Catch error thrown audioPlayers.append(AVAudioPlayer()) } 

к чему-то вроде этого:

  } catch { //Catch error thrown fatalError("Sound resource: \(sound) could not be found") } 

(Последняя часть очень важна для решения проблемы. Но я обнаружил, что это стало всего лишь дублированием некоторой части ответа Хао после того, как я ее отредактировал …)

И start метод:

  @IBAction func start(sender: UIButton) { let audioPlayer = audioPlayers[sender.tag] audioPlayer.start() playingAudioPlayer = audioPlayer } 

И stop должна быть:

  @IBAction func start(sender: UIButton) { playingAudioPlayer?.stop() } 
  • как передать значение UITextField в файле swift to .m?
  • Ошибки восстановления / сброса данных ядра
  • Как определить обратную связь отношения «один к одному» с помощью Realm?
  • Firebase продолжают прослушивать события в фоновом режиме
  • Как восстановить и проверить автоматически возобновляемые подписки?
  • повторное использование ячейки в представлении таблицы не так? мои строки получают повторяющиеся значения при прокрутке на моем UITableView
  • Как присоединиться к нескольким вызовам watchSingleEvent () и выполнить действие, когда все вызовы завершены?
  • Почему моя выбранная ячейка UITableView не отображает аксессуар галочки?
  • Аналог Swift для Java Runnable
  • Отметка видимой области MKMapView
  • didReceiveNotificationRequest: withContentHandler - время выполнения?
  • Interesting Posts

    Идентификатор пакета отличается от предыдущего идентификатора связки

    iAd-тестирование ADBannerViewDelegate bannerViewActionDidFinish:

    Невозможно загрузить изображение, сделанное 4S, но может 5S

    Добавление тега «Жест», который вызывает метод в другом классе

    как я могу группировать и группировать Core Animations для разных объектов?

    iOS> Как изменить текст удаленного уведомления, полученного в фоновом режиме?

    FireBase iOS Messaging не может получить токен APNS

    Воспроизведение звука на iPad с помощью AudioToolbox

    ios – все изображения с помощью Haneke мерцают при перезагрузке данных

    Установка начального значения UILABEL

    ld: рамки не найдены Reveal

    Быстрое восстановление расходных материалов в приложении

    Выполнение действия при одновременном нажатии двух кнопок

    Есть ли способ прочитать данные упражнений Apple Watch с набором для здоровья?

    Просмотр вида Контроллер остается активным (в фоновом режиме)

    Давайте будем гением компьютера.