[英]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.