gpt4 book ai didi

iOS:AVAudioRecorder.prepareToRecord() 失败但没有错误

转载 作者:行者123 更新时间:2023-11-29 01:30:54 26 4
gpt4 key购买 nike

prepareToRecord() 无明显原因返回 false。其他类似问题的解决方案都不适合我。这是我尝试过的:

  • 在创建 AVAudioRecorder 之前立即开始录音 session (成功)。
  • 输出目录存在且可写。
  • 这些 recordSettings 在我的代码的早期版本(现已丢失)中为我工作,但由于某种原因一般来说录制已停止。
  • 我一直在使用 OpenEars 进行语音识别,但当我注意到这个问题时,我将其从构建中删除了。

版本信息:

  • iOS 9.1
  • XCode 7.1
  • swift 2.1

这是我的代码。模拟器和 iPhone 上的输出如下。

func setupRecorder(url : String) -> Promise<Void>? {
let (doneRecording, recorderAccept, _) = Promise<Void>.pendingPromise()

let session: AVAudioSession = AVAudioSession.sharedInstance()
if (session.respondsToSelector("requestRecordPermission:")) {
AVAudioSession.sharedInstance().requestRecordPermission({(granted: Bool)-> Void in
if granted {
print("record permission granted")
do {
try session.setCategory(AVAudioSessionCategoryPlayAndRecord)
try session.setActive(true)
self._setupRecorder(url, recorderAccept: recorderAccept)
} catch {
print(error)
}
} else{
print("record permission not granted")
}
})
}

return doneRecording
}

func _setupRecorder(url: String, recorderAccept: () -> ()) {
print(url)

let recordSettings = [AVSampleRateKey : NSNumber(float: Float(44100.0)),
AVFormatIDKey : Int(kAudioFormatMPEG4AAC),
AVNumberOfChannelsKey : NSNumber(int: 1),
AVEncoderAudioQualityKey : NSNumber(int: Int32(AVAudioQuality.High.rawValue))];

do {
let soundRecorder = try AVAudioRecorder(URL: NSURL(fileURLWithPath: url), settings: recordSettings)
soundRecorder.delegate = self
if !soundRecorder.prepareToRecord() {
print("prerecord failed")
return
}
if !soundRecorder.record() {
print("record failed")
return
}
self.soundRecorder = soundRecorder
self.recorderAccept = recorderAccept
} catch let error as NSError {
print("AVAudioRecorder error: \(error.localizedDescription)")
}
}

iPhone 输出:

record permission granted
file:///var/mobile/Containers/Data/Application/1DC339E6-555F-47AA-8D4F-4A8E1E847919/Library/Caches/iM3xWVKCGr.aac
prerecord failed

模拟器输出:

record permission granted
file:///Users/adrian/Library/Developer/CoreSimulator/Devices/5D035D65-60FA-413E-9CD7-C2C4277EC25F/data/Containers/Data/Application/6DF6374E-3BCF-4BD0-B826-FE1622F134B4/Library/Caches/1ey96W904T.aac
prerecord failed

缓存目录权限:

drwxr-xr-x  53 adrian  admin  1802 Oct 29 14:12 /Users/adrian/Library/Developer/CoreSimulator/Devices/5D035D65-60FA-413E-9CD7-C2C4277EC25F/data/Containers/Data/Application/6DF6374E-3BCF-4BD0-B826-FE1622F134B4/Library/Caches/

我很想听听是否有人有任何建议。

最佳答案

这是我的代码中的错误:NSURL(fileURLWithPath: url)。它应该是 NSURL(string: url)! -- 我给了它一个 file:// URL,就好像它是一个文件系统路径一样。

与关于此问题的其他问题一致,prepareToRecord() 如果设置不正确,或者在我的情况下,打开文件进行输出时出现问题,则返回 false。

关于iOS:AVAudioRecorder.prepareToRecord() 失败但没有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33472094/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com