iOS - AudioKit 在收到 phone 呼叫时崩溃
iOS - AudioKit Crashes when receiving a phone call
AudioKit 4.9.3
iOS11+
我正在做一个项目,用户使用 microphone 在设备上录音,即使应用程序在后台,它也会继续录音。这工作正常但是当收到 phone 电话时我收到 AudioKit 错误。我认为它与 phone 接管麦克风或其他东西有关。这是错误:
[avae] AVAEInternal.h:109
[AVAudioEngineGraph.mm:1544:Start: (err = PerformCommand(*ioNode,
kAUStartIO, NULL, 0)): error 561017449
AudioKit+StartStop.swift:restartEngineAfterRouteChange(_:):198:error
restarting engine after route change
基本上我在那之前记录的所有内容都丢失了。
这是我设置的 AudioKit 代码:
func configureAudioKit() {
AKSettings.audioInputEnabled = true
AKSettings.defaultToSpeaker = true
do {
try try audioSession.setCategory((AVAudioSession.Category.playAndRecord), options: AVAudioSession.CategoryOptions.mixWithOthers)
try audioSession.setActive(true)
audioSession.requestRecordPermission({ allowed in
DispatchQueue.main.async {
if allowed {
print("Audio recording session allowed")
self.configureAudioKitSession()
} else {
print("Audio recoding session not allowed")
}
}
})
} catch let error{
print("Audio recoding session not allowed: \(error.localizedDescription)")
}
}
func configureAudioKitSession() {
isMicPresent = AVAudioSession.sharedInstance().isInputAvailable
if !isMicPresent {
return
}
print("mic present and configuring audio session")
mic = AKMicrophone()
do{
let _ = try AKNodeRecorder(node: mic)
let recorderGain = AKBooster(mic, gain: 0)
AudioKit.output = recorderGain
//try AudioKit.start()
}
catch let error{
print("configure audioKit error: ", error)
}
}
点击录制按钮代码时:
do {
audioRecorder = try AVAudioRecorder(url: actualRecordingPath, settings: audioSettings)
audioRecorder?.record()
//print("Recording: \(isRecording)")
do{
try AudioKit.start()
}
catch let error{
print("Cannot start AudioKit", error.localizedDescription)
}
}
当前音频设置:
private let audioSettings = [
AVFormatIDKey : Int(kAudioFormatMPEG4AAC),
AVSampleRateKey : 44100,
AVNumberOfChannelsKey : 2,
AVEncoderAudioQualityKey : AVAudioQuality.medium.rawValue
]
我怎样才能确保即使在接到 phone 电话时也能获得正确的录音?一旦您接到电话,错误就会发生 - 无论您选择接听还是拒绝。
有什么想法吗?
AudioKit 仅处理音频播放应用程序的基本路由更改处理。我们发现,当应用程序变得足够复杂时,框架无法在发生中断时有效地预先确定适当的操作过程。因此,我建议关闭 AudioKit 的路由更改处理并自行响应通知。
此外,我会将 AudioKit 激活码放在一个按钮中。
我已经完成了这方面的工作,恐怕您在通话或 VOIP 通话过程中无法访问麦克风。
这是 iOS 出于不言而喻的原因强制执行的一项基本隐私措施。
AudioKit 4.9.3 iOS11+
我正在做一个项目,用户使用 microphone 在设备上录音,即使应用程序在后台,它也会继续录音。这工作正常但是当收到 phone 电话时我收到 AudioKit 错误。我认为它与 phone 接管麦克风或其他东西有关。这是错误:
[avae] AVAEInternal.h:109
[AVAudioEngineGraph.mm:1544:Start: (err = PerformCommand(*ioNode, kAUStartIO, NULL, 0)): error 561017449 AudioKit+StartStop.swift:restartEngineAfterRouteChange(_:):198:error restarting engine after route change
基本上我在那之前记录的所有内容都丢失了。
这是我设置的 AudioKit 代码:
func configureAudioKit() {
AKSettings.audioInputEnabled = true
AKSettings.defaultToSpeaker = true
do {
try try audioSession.setCategory((AVAudioSession.Category.playAndRecord), options: AVAudioSession.CategoryOptions.mixWithOthers)
try audioSession.setActive(true)
audioSession.requestRecordPermission({ allowed in
DispatchQueue.main.async {
if allowed {
print("Audio recording session allowed")
self.configureAudioKitSession()
} else {
print("Audio recoding session not allowed")
}
}
})
} catch let error{
print("Audio recoding session not allowed: \(error.localizedDescription)")
}
}
func configureAudioKitSession() {
isMicPresent = AVAudioSession.sharedInstance().isInputAvailable
if !isMicPresent {
return
}
print("mic present and configuring audio session")
mic = AKMicrophone()
do{
let _ = try AKNodeRecorder(node: mic)
let recorderGain = AKBooster(mic, gain: 0)
AudioKit.output = recorderGain
//try AudioKit.start()
}
catch let error{
print("configure audioKit error: ", error)
}
}
点击录制按钮代码时:
do {
audioRecorder = try AVAudioRecorder(url: actualRecordingPath, settings: audioSettings)
audioRecorder?.record()
//print("Recording: \(isRecording)")
do{
try AudioKit.start()
}
catch let error{
print("Cannot start AudioKit", error.localizedDescription)
}
}
当前音频设置:
private let audioSettings = [
AVFormatIDKey : Int(kAudioFormatMPEG4AAC),
AVSampleRateKey : 44100,
AVNumberOfChannelsKey : 2,
AVEncoderAudioQualityKey : AVAudioQuality.medium.rawValue
]
我怎样才能确保即使在接到 phone 电话时也能获得正确的录音?一旦您接到电话,错误就会发生 - 无论您选择接听还是拒绝。
有什么想法吗?
AudioKit 仅处理音频播放应用程序的基本路由更改处理。我们发现,当应用程序变得足够复杂时,框架无法在发生中断时有效地预先确定适当的操作过程。因此,我建议关闭 AudioKit 的路由更改处理并自行响应通知。
此外,我会将 AudioKit 激活码放在一个按钮中。
我已经完成了这方面的工作,恐怕您在通话或 VOIP 通话过程中无法访问麦克风。
这是 iOS 出于不言而喻的原因强制执行的一项基本隐私措施。