SwiftUI при появлении AVAudioPlayer воспроизводится несколько раз

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

Функция включения и воспроизведения музыки.

      if let path = Bundle.main.path(forResource: sound, ofType: type) {
    do {
        backgroundPlayer = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: path))
        backgroundPlayer?.play()
    } catch {
        print("BACKGROUND MUSIC ERROR")
    }
}

При появлении вызова функции
      .onAppear {
    audioController.backgroundMusic(sound: "bg", type: "wav")
}

Изменить: пример кода ...

      import SwiftUI
import AVKit

struct ContentView: View {
    @ObservedObject var audioController = AudioController()

    var body: some View {
         Text("Hello, world!")
             .onAppear {
                 audioController.playBackgroundMusic(sound: "bg", type: "wav")
             }
    }
}

class AudioController: ObservableObject {
     var player: AVAudioPlayer?    

     func playBackgroundMusic(sound: String, type: String) {
        if let path = Bundle.main.path(forResource: sound, ofType: type) {
            do {
                player = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: path))
                player?.play()
            } catch {
                print("BACKGROUND MUSIC ERROR")
            }
        }
    }
}

2 ответа

вы можете попробовать что-то вроде этого:

      func playBackgroundMusic(sound: String, type: String) {
    if !(player?.isPlaying ?? false) {
        if let path = Bundle.main.path(forResource: sound, ofType: type) {
            do {
                player = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: path))
                player?.play()
            } catch {
                print("BACKGROUND MUSIC ERROR")
            }
        }
    }
}

Выяснилось, что на самом деле это просто ошибка «симулятора», когда приложение открывается из сборки xcode, оно продолжает воспроизводить звук снова и снова ... но после закрытия и повторного открытия приложения звук воспроизводится, как ожидалось.

Другие вопросы по тегам