SwiftUI 上出现 AVAudioPlayer 多次播放
Posted
技术标签:
【中文标题】SwiftUI 上出现 AVAudioPlayer 多次播放【英文标题】:SwiftUI on appear AVAudioPlayer plays multiple times 【发布时间】:2021-07-06 00:34:35 【问题描述】:我正在尝试在我的应用程序上添加背景音乐的 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")
【问题讨论】:
尝试包含minimal reproducible example。这没有足够的代码来调试问题。 【参考方案1】:你可以试试这样的:
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")
【讨论】:
我正在尝试做这样的事情,正在苦苦挣扎,感谢分享这种方法【参考方案2】:发现它实际上只是一个“模拟器”错误,当从 xcode 构建打开应用程序时,它会一遍又一遍地播放声音......但在关闭并重新打开应用程序后,声音会按预期播放。
【讨论】:
以上是关于SwiftUI 上出现 AVAudioPlayer 多次播放的主要内容,如果未能解决你的问题,请参考以下文章
AVAudioPlayer 错误域=NSOSStatusErrorDomain 代码=-43
AVAudioPlayer 失败并出现错误“无法完成操作。(OSStatus 错误 2003334207。)”