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, оно продолжает воспроизводить звук снова и снова ... но после закрытия и повторного открытия приложения звук воспроизводится, как ожидалось.