Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AVAudioRecorder,音频套件问题,iOS 13.1.2_Ios_Swift_Ios13_Avaudiorecorder_Audiokit - Fatal编程技术网

AVAudioRecorder,音频套件问题,iOS 13.1.2

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),

我不确定发生了什么,但鉴于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),
        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)。