Swift:播放/停止的次数越多,音频就会变得迟钝和紧张

Posted

技术标签:

【中文标题】Swift:播放/停止的次数越多,音频就会变得迟钝和紧张【英文标题】:Swift: Audio gets laggy and jittery the more times it's played/stopped 【发布时间】:2015-04-12 07:43:38 【问题描述】:

我有一个简单的应用程序,它允许用户录制声音然后播放。但是,我发现保存和删除录音的次数越多,音频播放就越慢。这是音质发生变化的示例:

Laggy audio

Normal audio

如果在 xcode 中我退出模拟器中的应用程序并重新打开它,音频质量恢复正常,但无论出于何种原因,在应用程序中转到不同的 UIViewController,然后返回主屏幕(所以它是完全重新加载,viewDidLoad() 再次运行等)不会使音频质量恢复正常。

我不知道是什么导致音频变得越来越迟钝,因为录制和删除的录音越来越多,我想知道是否有一些代码可以完全重置音频设置。

这基本上就是我录制音频的方式:

        var recordSettings = [
        // AVFormatIDKey: kAudioFormatAppleLossless,
        AVEncoderAudioQualityKey : AVAudioQuality.Max.rawValue,
        AVEncoderBitRateKey : 320000,
        AVNumberOfChannelsKey: 2,
        AVSampleRateKey : 44100.0
    ]


    var session=AVAudiosession.sharedInstance()
    session.setCategory(AVAudioSessionCategoryPlayAndRecord,error:nil)
    audioRecorder = AVAudioRecorder(URL: filePathForRecordedAudio, settings: recordSettings, error:nil)
    audioRecorder.delegate = self
    audioRecorder.meteringEnabled=true
    audioRecorder.prepareToRecord()
    audioRecorder.record()

然后当用户停止录制时,我运行以下命令:

session.setCategory(AVAudioSessionCategoryPlayback,error:nil)

并以正常方式播放录制的音频:

var player:AVAudioPlayer = AVAudioPlayer()
player = AVAudioPlayer(contentsOfURL: NSURL(string: "\(locationOfRecordedAudio)"), error: nil)
player.play()

【问题讨论】:

您是如何解决问题的? 【参考方案1】:

您可能正在添加运行时线程。

audioRecorder.stop()

【讨论】:

【参考方案2】:
        DispatchQueue.global(qos: .background).async 
            recorder.stop();
        

【讨论】:

以上是关于Swift:播放/停止的次数越多,音频就会变得迟钝和紧张的主要内容,如果未能解决你的问题,请参考以下文章

swift中的音频播放器没有获得音量和音高的价值

在 Spritekit Swift 中停止音频

iOS WKWebView 退出后停止播放音频/视频

如何在 Swift 中连续录制音频并播放同一文件中的音频?

iOS swift流媒体应用程序不在后台模式下播放音乐

swift:音频滑块控件