我的IOS应用程序在项目中有mp3文件。我使用 AVAudioPlayer 来播放声音。 对于大多数用户和我们所有的测试手机来说,它工作得很好。但一些用户抱怨他们听不到任何声音。我已要求他们确认音量已调高并且设备未静音,他们已经确认了这一点。我还通过试飞向他们发布了一个调试版本,当声音应该播放时打印出一条消息,告诉我是否出现问题。它打印出播放的声音。
我不确定为什么它可以在大多数 IOS 设备上运行,但不能在其他设备上运行。我已经在相同的 IOS 18 版本和 iPhone 版本上进行了测试,其中一位用户看到了它,但我无法重现它。
这是我的播放声音方法。当他们运行调试版本时,他们会看到“声音已播放”。所以我知道它正在找到该文件,并且没有生成异常并且找到了声音文件。 不知道接下来要看什么。
声音文件为mp3,存储在项目根目录中。但我无法想象位置是问题所在,否则我会看到“找不到声音文件”打印出来。
进口粉底 导入AVFoundation 导入 UIKit
public var muteSounds: Bool = false var audioPlayer:AVAudioPlayer?
结构 SoundService {
func playSound(soundfile: String) -> String{
if (!muteSounds) {
if let path = Bundle.main.path(forResource: soundfile, ofType: nil){
do{
audioPlayer = try AVAudioPlayer(contentsOf: URL(fileURLWithPath: path))
audioPlayer?.prepareToPlay()
audioPlayer?.play()
return "Sound was played"
}catch {
print("Error trying to play sound")
return("Error trying to play sound")
}
} else {
return "Sound File could not be found"
}
} else {
return "Sounds are muted"
}
}
}
您可以使用 Subsonic 包代替 AVAudioPlayer,它比 AVAudioPlayer 更容易。您所要做的就是添加包并使用它。
struct ContentView: View {
@StateObject private var sound = SubsonicPlayer(sound: "example.mp3")
var body: some View {
VStack {
Button("Start") {
sound.play()
}
Button("Stop") {
sound.stop()
}
Slider(value: $sound.volume)
}
}
}
有关更多信息,请查看亚音速GitHub页面