如何解决我的 iOS SwiftUI 项目无法使用 AVAudioPlayer 播放声音
我有一个愚蠢的问题,但由于某种原因我无法解决它。我尝试使用 AVAudioPlayer 播放声音,但什么也听不到。没有错误,但我的应用程序仍然处于静音状态。它是用 SwiftUI 构建的。这是一段代码:
struct SoundsListView: View {
var body: some View {
List(Helpers.shared.sounds,id:\.self) { item in
Text(item)
Spacer()
Button(action: {
var soundPlayer: AVAudioPlayer?
guard let audioFile: URL = Bundle.main.url(forResource: "Analog watch",withExtension: "mp3") else { return }
do {
soundPlayer = try AVAudioPlayer(contentsOf: audioFile)
print(soundPlayer)
guard let player = soundPlayer else { return }
player.play()
} catch let error {
print("Cannot play sound")
}
}) {
Image(systemName: "play")
} //: BUTTON
}
}
}
没有错误,声音文件也设置了目标成员资格。 (奇怪的是,同一段代码适用于我的旧项目,但使用 Swift + Storyboards 编写)
模拟器和硬件设备都没有声音。静音模式关闭,音量设置为最大。 我不知道这里出了什么问题。
顺便说一句:此应用向用户发送通知并且声音正常。但不是在这段代码中
解决方法
您的 AVAudioPlayer
仅存在于按钮操作的范围内,因此它在声音播放之前被释放。您需要将其保存在某处……我认为您可以在 SoundsListView
中将其声明为 @State var
,但最好将其从 SwiftUI 视图中完全重构出来。
编辑:您可能还需要设置 AVAudioSession,它可以让您更改播放类别并控制您的音频与其他音频的交互方式,例如音乐播放。
示例:
do {
try AVAudioSession.sharedInstance().setCategory(.playback)
try AVAudioSession.sharedInstance().setCategory(.playback,options: [.mixWithOthers])
try AVAudioSession.sharedInstance().setActive(true)
} catch {
print(error)
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。