Pio*_*979 1 xcode avaudioplayer ios swiftui
我有一个愚蠢的问题,但由于某种原因我无法解决它。我尝试使用 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
}
}
}
Run Code Online (Sandbox Code Playgroud)
没有错误,声音文件也设置了目标成员资格。(奇怪的是,同一段代码适用于我的旧项目,但是是用 Swift + Storyboards 编写的)
模拟器和硬件设备都没有发出声音。静音模式已关闭,音量设置为最大。我不知道这里出了什么问题。
顺便说一句:这个应用程序向用户发送通知并且声音正常。但不是在这段代码中
您AVAudioPlayer
仅存在于按钮操作的范围内,因此它\xe2\x80\x99s 在声音可以播放之前被释放。您需要将其保存在某处\xe2\x80\xa6 我认为您可以将其声明为SoundsListView
a @State var
,但最好将其完全从 SwiftUI 视图中重构出来。
编辑:您可能还需要设置 AVAudioSession,它可以让您更改播放类别并控制音频与其他音频(例如音乐播放)的交互方式。
\n例子:
\ndo {\n try AVAudioSession.sharedInstance().setCategory(.playback)\n try AVAudioSession.sharedInstance().setCategory(.playback, options: [.mixWithOthers])\n try AVAudioSession.sharedInstance().setActive(true)\n} catch {\n print(error)\n}\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
2151 次 |
最近记录: |