我在 macOS 应用程序中初始化了 AVAudioPlayer,如下所示
do {
let audioFile = Bundle.main.path(forResource: "sample", ofType: "mp3")!
let audioURL = URL(filePath: audioFile)
player = try AVAudioPlayer(contentsOf: audioURL)
} catch {
fatalError()
}
当我单击“开始”按钮时,它开始正确播放声音,但打印的 dbLevel 始终为 -160。
Button("Start") {
player!.play()
var dbLevel = Float(0)
timer = Timer.scheduledTimer(withTimeInterval: 0.2, repeats: true, block: { _ in
player!.updateMeters()
dbLevel = 0
for n in 0..<player!.numberOfChannels {
dbLevel += player!.averagePower(forChannel: n)
}
dbLevel = dbLevel / Float(player!.numberOfChannels)
print(dbLevel)
})
}
请注意,Xcode 会将以下消息写入控制台“AddInstanceForFactory:没有为 id 注册工厂
我很快找到了解决方案 - 需要这一行
player!.isMeteringEnabled = true