簡體   English   中英

為什么錄制音頻的持續時間是負的? (iOS / 斯威夫特)

[英]Why is the duration of recorded audio negative? (iOS / Swift)

我想用我的應用程序錄制 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
    }

我有一個類似的問題,並通過以下代碼段修復了它:

audioRecorder.record()
audioRecorder.record()

通過兩次調用此函數,盡管這可能不是理想的解決方案。
它以某種方式修復了它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM