为什么录制的音频持续时间为负? (iOS / Swift)

问题描述 投票:1回答:1

我想用我的应用程序录制M4A格式的音频文件,然后播放。我的应用程序在我第一次尝试录制时没有这样做,但是在第二次,第三次及以后的尝试中都无法正常工作。打印audioPlayer.duration的值表明,第一个音频记录始终为负值!为什么??如预期的那样,所有其他音频记录的正持续时间值都以秒为单位。我总是对所有记录使用相同的文件名,覆盖以前的记录。我在做什么错?

    func initializeRecorder(){
    let recordSettings = [AVSampleRateKey : NSNumber(float: Float(32000.0)),
                                  AVFormatIDKey : NSNumber(int: Int32(kAudioFormatMPEG4AAC)), 
                AVNumberOfChannelsKey : NSNumber(int: 1),
                AVEncoderAudioQualityKey : NSNumber(int: Int32(AVAudioQuality.Low.rawValue)) ]

            var error : NSError?
            let audioSession = AVAudioSession.sharedInstance()
            do {
                try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord)
                try audioRecorder = AVAudioRecorder(URL: self.directoryURL(),
                                                    settings: recordSettings)
                audioRecorder.delegate = self
                audioRecorder.meteringEnabled = true
                audioRecorder.prepareToRecord()
                print("M4a Recorder Initialized - OK...")
            } catch {
                print("Init Error")
            }
        }

    func recordSpeechM4A(){
        if !audioRecorder.recording {
            isCapioRecording=true
            let audioSession = AVAudioSession.sharedInstance()
            do {
                try audioSession.setActive(true)
                print("**** RECORDING ****")
                audioRecorder.record()
            } catch {
                print("RECORDING ERROR")
            }
        }
    }

func stopRecording(){
        audioRecorder.stop()
}
func playRecordedAudio(){
        if (!audioRecorder.recording){
            do {
                try audioPlayer = AVAudioPlayer(contentsOfURL: audioRecorder.url)
                audioPlayer.play()

                print("PLAYING AUDIO...: "+audioRecorder.url.description)
                print("Audio duration: "+audioPlayer.duration.description)
                //DURATION OF THE 1st RECORDING IS ALWAYS NEGATIVE!!!
            } catch {
                print("AUDIO PLAYBACK ERROR")
            }
        }
    }

// I ALWAYS USE THE SAME FILENAME!
func directoryURL() -> NSURL {
        let fileManager = NSFileManager.defaultManager()
        let urls = fileManager.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)
        filepath = urls[0]
        let documentDirectory = urls[0] as NSURL
        print("STORAGE DIR: "+documentDirectory.description)
        let soundURL = documentDirectory.URLByAppendingPathComponent("sound.m4a") //.m4a
        print("SAVING FILE: "+soundURL.description)
        return soundURL
    }
ios swift avfoundation avaudioplayer avaudiorecorder
1个回答
0
投票

我有一个类似的问题,并通过以下代码段进行了修复:

audioRecorder.record()
audioRecorder.record()

通过两次调用此函数,尽管这可能不是理想的解决方案。它以某种方式解决了它。

© www.soinside.com 2019 - 2024. All rights reserved.