我正在使用 AVAudioPlayer 播放音乐文件。当我拨打start
orstop
时,会听到“咔哒”或“啪”的声音。我用 mp3 和 caf 文件都试过了,在这两种情况下都能听到(虽然我不是每次都听到)。有谁知道如何防止这些故障噪音?
问问题
1588 次
4 回答
4
对于将来发生这种情况的任何人,您必须将 AVAudioPlayer 的音量调低至 0,然后在stop
约 0.5 秒后调用。
于 2013-06-08T03:23:34.433 回答
1
以下提示仅用于stop
音频播放。
当我们需要调用stop
停止音频播放时,我们可以pause
先调用,然后再调用stop
。这意味着在我们的自定义停止方法中,我们使用pause
and stop
fromAVAudioPlayer
来停止播放并防止弹出或点击噪音。
于 2019-05-16T23:57:31.910 回答
1
解决我这边的音频问题(iPhone XS/XR,iOS 13)的唯一方法是使用AVQueuePlayer
而不是AVAudioPlayer
:
func play() {
guard let url = Bundle.main.url(forResource: "Sound", withExtension: "wav") else {
return
}
let player = AVQueuePlayer(url: url) // It was AVAudioPlayer before
player.volume = 1.0
player.play()
}
不要问我为什么会这样,但确实如此。AVAudioPlayer
在我们的 XS/XR 设备中产生咔嗒声/爆裂声。¯_(ツ)_/¯
于 2019-09-24T14:39:52.460 回答
0
我最终使用了 Swift 的淡入功能。我没有注意到停止时的爆裂声,但我很确定你也可以用类似的方法来解决这个问题。这是我如何实现它的示例。请注意,在我的 viewDidLoad 中,我还初始化了一些音频设置。您可能需要尝试使用淡入淡出时间来完善您的音频。
import UIKit
import AVKit
var audioPlayer = AVAudioPlayer()
override func viewDidLoad() {
super.viewDidLoad()
initializeAudioPlayer()
}
func initializeAudioPlayer() {
do {
try session.setCategory(AVAudioSessionCategoryPlayback)
try session.setActive(true)
} catch {
print(error)
}
}
func soundButtonTapped() {
let tuneURL:URL = Bundle.main.url(forResource: "left", withExtension: "wav")!
playSound(tuneURL, withDelay: 0.1)
}
func playSound(_ tuneURL: URL, withDelay delay:Double) {
do {
audioPlayer = try AVAudioPlayer(contentsOf: tuneURL, fileTypeHint: AVFileTypeMPEGLayer3) //old version of Swift AVFileType.mp3.rawValue
audioPlayer = try AVAudioPlayer(contentsOf: tuneURL, fileTypeHint: AVFileTypeMPEG4)
audioPlayer = try AVAudioPlayer(contentsOf: tuneURL, fileTypeHint: AVFileTypeWAVE)
audioPlayer.volume = 0.0 //start it at zero
audioPlayer.numberOfLoops = -1 //loop on
audioPlayer.prepareToPlay()
audioPlayer.play()
audioPlayer.setVolume(1, fadeDuration: delay) //fade in with delay
} catch let error as NSError {
NSLog(error.description)
}
}
于 2019-02-04T21:23:36.413 回答