AVAudioRecorder,AudioKit 问题,iOS 13.1.2
AVAudioRecorder, AudioKit issues , iOS 13.1.2
我不确定发生了什么,但我似乎无法成功初始化 AVAudioRecorder 对象,给定高于 iOS13.0
的设备的某些音频设置
编辑:在下方评论。但这适用于 13.0 和 13.1,但不适用于以下两个补丁,13.1.1 和 13.1.2。 ???
Xcode11
Swift 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.mm:160 Engine@0x2835411b0: could not initialize, error
= -10868
AVAEInternal.h:109 [AVAudioEngineGraph.mm:1397:Initialize: (err =
AUGraphParser::InitializeActiveNodesInInputChain(ThisGraph,
*GetInputNode())): error -10868
Blockquote
AudioKit+StartStop.swift:restartEngineAfterConfigurationChange(_:):160:error
restarting engine after route change
我找到了这个 link:
https://www.osstatus.com/search/results?platform=all&framework=all&search=-10868
它看起来像是不支持某种格式?
有人知道这里发生了什么吗?同样,在 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.output
我的 AKNodeRecorder
正在录制的节点。我所要做的就是在我的节点之后添加一个混音器或增强器,将新节点的增益设置为 0,然后将其路由到输出。
这是损坏的版本:
let mic = AKMicrophone()!
let recorder = AKNodeRecorder(node: mic)!
AudioKit.start()!
这是工作版本:
let mic = AKMicrophone()!
let recorder = AKNodeRecorder(node: mic)!
let recorderGain = AKBooster(mic, gain: 0)
AudioKit.output = recorderGain
AudioKit.start()!
解释为什么需要这样做:AudioKit 从输出节点向后遍历您的处理图。任何未连接到该图的东西都可能无法正确初始化,并且其行为未定义。您可以观察到这种未定义的行为,因为您的代码适用于较旧的 iOS 版本,但不适用于当前版本。
"But AKNodeRecorder is not connected to my graph",你可能会说。原来AKNodeRecorder其实不是一个节点,而是一个tap
一个水龙头可以坐"on top"一个节点。在节点顶部始终只能点击一次。水龙头的其他例子是 AKFFTTap
。一般来说,点击会消耗音频,但不会生成任何音频,因此它们不能成为音频图的一部分 - 唯一不能生成任何内容的节点是最终节点,AudioKit.output
.
换句话说,您的音频图应如下所示:
recordingtap
|
mic -> gain0 -> output
请注意,仅当您不想在输出端听到麦克风的声音时才需要增益。
我不确定发生了什么,但我似乎无法成功初始化 AVAudioRecorder 对象,给定高于 iOS13.0
的设备的某些音频设置编辑:在下方评论。但这适用于 13.0 和 13.1,但不适用于以下两个补丁,13.1.1 和 13.1.2。 ???
Xcode11
Swift 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.mm:160 Engine@0x2835411b0: could not initialize, error = -10868
AVAEInternal.h:109 [AVAudioEngineGraph.mm:1397:Initialize: (err = AUGraphParser::InitializeActiveNodesInInputChain(ThisGraph, *GetInputNode())): error -10868 Blockquote
AudioKit+StartStop.swift:restartEngineAfterConfigurationChange(_:):160:error restarting engine after route change
我找到了这个 link:
https://www.osstatus.com/search/results?platform=all&framework=all&search=-10868
它看起来像是不支持某种格式?
有人知道这里发生了什么吗?同样,在 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.output
我的 AKNodeRecorder
正在录制的节点。我所要做的就是在我的节点之后添加一个混音器或增强器,将新节点的增益设置为 0,然后将其路由到输出。
这是损坏的版本:
let mic = AKMicrophone()!
let recorder = AKNodeRecorder(node: mic)!
AudioKit.start()!
这是工作版本:
let mic = AKMicrophone()!
let recorder = AKNodeRecorder(node: mic)!
let recorderGain = AKBooster(mic, gain: 0)
AudioKit.output = recorderGain
AudioKit.start()!
解释为什么需要这样做:AudioKit 从输出节点向后遍历您的处理图。任何未连接到该图的东西都可能无法正确初始化,并且其行为未定义。您可以观察到这种未定义的行为,因为您的代码适用于较旧的 iOS 版本,但不适用于当前版本。
"But AKNodeRecorder is not connected to my graph",你可能会说。原来AKNodeRecorder其实不是一个节点,而是一个tap
一个水龙头可以坐"on top"一个节点。在节点顶部始终只能点击一次。水龙头的其他例子是 AKFFTTap
。一般来说,点击会消耗音频,但不会生成任何音频,因此它们不能成为音频图的一部分 - 唯一不能生成任何内容的节点是最终节点,AudioKit.output
.
换句话说,您的音频图应如下所示:
recordingtap
|
mic -> gain0 -> output
请注意,仅当您不想在输出端听到麦克风的声音时才需要增益。