AVAudioRecorder,音频套件问题,iOS 13.1.2
我不确定发生了什么,但鉴于iOS 13.0以上设备的某些音频设置,我似乎无法成功初始化AVAudioRecorder对象 编辑:评论如下。但这适用于13.0和13.1,但不适用于以下两个修补程序13.1.1和13.1.2 Xcode 11 斯威夫特5 AudioKit pod v4.9(仅供参考,不认为这是问题所在) //音频设置AVAudioRecorder,音频套件问题,iOS 13.1.2,ios,swift,ios13,avaudiorecorder,audiokit,Ios,Swift,Ios13,Avaudiorecorder,Audiokit,我不确定发生了什么,但鉴于iOS 13.0以上设备的某些音频设置,我似乎无法成功初始化AVAudioRecorder对象 编辑:评论如下。但这适用于13.0和13.1,但不适用于以下两个修补程序13.1.1和13.1.2 Xcode 11 斯威夫特5 AudioKit pod v4.9(仅供参考,不认为这是问题所在) //音频设置 private let audioSettings = [ AVFormatIDKey : Int(kAudioFormatMPEG4AAC),
private let audioSettings = [
AVFormatIDKey : Int(kAudioFormatMPEG4AAC),
AVSampleRateKey : 44100,
AVNumberOfChannelsKey : 2,
AVEncoderAudioQualityKey : AVAudioQuality.medium.rawValue
]
do {
audioRecorder = try AVAudioRecorder(url: actualRecordingPath, settings: audioSettings)
audioRecorder?.record()
state = .recording
try AudioKit.start()
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(timerDidUpdate), userInfo: nil, repeats: true)
} catch let error{
print("start recording", error.localizedDescription)
return
}
具体错误包括:
AVAudioEngine.毫米:160Engine@0x2835411b0:无法初始化,错误
=-10868
AVAEInternal.h:109[AVAudioEngineGraph.mm:1397:Initialize:(错误=
AUGraphParser::InitializeActiveNodesInInputChain(此图,
*GetInputNode()):错误-10868
大宗报价
AudioKit+StartStop.swift:配置更改后重新启动(:):160:错误
更改路线后重新启动发动机
我找到了以下链接:
它看起来像是一种不受支持的格式
有人知道这里发生了什么吗?同样,在iOS 13.0上没有错误,只是在13.0+上不起作用。尝试将设置更改为:
let settings = [
AVFormatIDKey: Int(kAudioFormatMPEG4AAC),
AVSampleRateKey: 12000,
AVNumberOfChannelsKey: 1,
AVEncoderAudioQualityKey: AVAudioQuality.high.rawValue
]
我在iOS 13.1.1和13.1.2中遇到了同样的问题。我一直在代码中使用AudioKit的
AKNodeRecorder
,结果我忘记了路由到AudioKit。输出
AKNodeRecorder正在录制的节点。我所要做的就是在我的节点后添加一个混音器或扩音器,将新节点的增益设置为0,然后将其路由到输出
以下是坏版本:
让麦克风=麦克风()!
让录音机=AKNodeRecorder(节点:麦克风)!
AudioKit.start()!
以下是工作版本:
让麦克风=麦克风()!
让录音机=AKNodeRecorder(节点:麦克风)!
让录音机增益=放大器(麦克风,增益:0)
AudioKit.output=recorderGain
AudioKit.start()!
解释为什么需要这样做:AudioKit从输出节点向后遍历处理图。未连接到该图的任何内容都可能无法正确初始化,其行为未定义。您可以观察到这种未定义的行为,因为您的代码在较旧的iOS版本上工作,但在当前版本上不工作
“但是AKNodeRecorder并没有连接到我的图表”,你可能会说。事实证明AKNodeRecorder实际上不是一个节点,而是一个点击
水龙头可以放在“上面”一个节点的。在一个节点的顶部只能有一个点击。点击的其他示例是AKFFTTap
。一般来说,点击消耗音频,但不生成任何音频,因此它们不能成为音频图的一部分-唯一不能生成任何内容的节点是最后一个节点,AudioKit.output
换句话说,您的音频图应该如下所示:
recordingtap
|
mic -> gain0 -> output
请注意,只有当您不想在输出端听到麦克风的声音时,才需要增益。作为补充说明。这适用于13.1上的所有设备,而不是13.1.1和13.1.2上的注释!我的问题是-为什么它会停止工作,就像我在13.1.1和13.1.2中使用的那样(它在13.1中工作)?我没有使用AKNodeRecorder。但我使用的是AKNodeOutputPlot。在以前的代码中,我没有将输出设置为任何值。“在以前的代码中,我没有将输出设置为任何值。”这正是问题所在。正如我在评论中所写的,这会导致未定义的行为。当调用
AudioKit.start()时
,AudioKit将遍历图表并确保所有节点的配置一致。如果它们未连接,则依赖于每个节点的默认配置,该配置可能工作,也可能不工作,当然可能会更改,即使在小版本之间,因为默认配置没有保证。如果使用AudioKit,我建议使用请注意,当您将AVAudioRecorder
与AudioKit
一起使用时,AudioKit
将尝试配置音频系统的部分,但AVAudioRecorder
可能会以不同的方式配置其部分。因此,即使它不是一个节点,因为它是it’这不是AudioKit类,它仍然没有连接到图表,因此AudioKit无法以一种所有部件都能很好地相互配合的方式配置您的音频系统。这就是为什么我建议对所有部件都使用AudioKit。Thomas-非常感谢您的帮助!它看起来好像工作了。它工作起来真令人困惑以前-与设置输出一样重要的东西,它一直工作到iOS 13.1,但不是13.1.x。真的很奇怪。所以你是说你可以使用AudioKit来录制和播放,而不是同时使用两者?是的,绝对可以。AudioKit
会为你处理好录制。请记住:每个节点最多点击一次(并且,AKNodeRecorder
是一个抽头),所有节点都必须连接到输出(直接或通过其他节点),即使您不想听到它们(只需在它们之间加一个增益并将其设置为0)。