我正在使用AVAudioPlayer播放音乐文件。当我拨打start
或stop
时,会发出“咔哒”声或“砰砰”声。我已经尝试了mp3和caf文件,并在两种情况下听到它(虽然我不是每次都听到它)。有谁知道如何防止这些毛刺噪音?
答案 0 :(得分:3)
对于将来发生这种情况的任何人,你必须将AVAudioPlayer的音量降低到0,然后再调用stop
〜0.5s。
答案 1 :(得分: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)
}
}
答案 2 :(得分:0)
以下提示仅适用于tabs
音频播放。
当我们需要致电stop
停止音频播放时,我们可以先致电stop
,然后再致电pause
。这意味着在我们的自定义停止方法中,我们使用stop
中的pause
和stop
来停止播放,并防止弹出声或咔嗒声。
答案 3 :(得分:0)
唯一能解决音频问题(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设备中产生咔嗒声/爆裂声。 ¯_(ツ)_ /¯