斯威夫特:音频变得越来越迟钝,而且它播放/停止的次数越来越多

时间:2015-04-12 07:43:39

标签: swift audio avaudioplayer avaudiorecorder

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

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()

2 个答案:

答案 0 :(得分:0)

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

audioRecorder.stop()

答案 1 :(得分:0)

        DispatchQueue.global(qos: .background).async {
            recorder.stop();
        }