歌曲启动/停止时,AVAudioPlayer会产生咔嗒声/砰砰声

时间:2013-06-07 04:13:52

标签: ios avaudioplayer

我正在使用AVAudioPlayer播放音乐文件。当我拨打startstop时,会发出“咔哒”声或“砰砰”声。我已经尝试了mp3和caf文件,并在两种情况下听到它(虽然我不是每次都听到它)。有谁知道如何防止这些毛刺噪音?

4 个答案:

答案 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中的pausestop来停止播放,并防止弹出声或咔嗒声。

答案 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设备中产生咔嗒声/爆裂声。 ¯_(ツ)_ /¯