前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >AVAudioEngine录音崩溃, reason: ‘format.sampleRate == hwFormat.sampleRate

AVAudioEngine录音崩溃, reason: ‘format.sampleRate == hwFormat.sampleRate

作者头像
全栈程序员站长
发布2022-11-02 09:55:52
1.2K0
发布2022-11-02 09:55:52
举报
文章被收录于专栏:全栈程序员必看

AVAudioEngine录音频时偶发崩溃 报错信息大致如下: 2021-12-15 20:12:38.429028+0800 *[1659:708511] NSURLConnection finished with error – code -1002 “AudioRecorder 创建Audio缓存文件夹成功 /var/mobile/Containers/Data/Application//Library/Caches/Audio” 2021-12-15 20:13:30.762736+0800 ***[1659:708411] [avae] AVAEInternal.h:76 required condition is false: [AVAudioIONodeImpl.mm:1158:SetOutputFormat: (format.sampleRate == hwFormat.sampleRate)] 2021-12-15 20:13:30.764037+0800 ***[1659:708411] *** Terminating app due to uncaught exception ‘com.apple.coreaudio.avfaudio’, reason: ‘required condition is false: format.sampleRate == hwFormat.sampleRate’ *** First throw call stack: (0x1989799d8 0x1accffb54 0x19888850c 0x1a88e2984 0x1a898c998 0x1a8923038 0x1a892945c 0x1a89a4f4c 0x1a899f414 0x10626bad4 0x10626b130 0x10627f8bc 0x10480ecc0 0x10480e8f4 0x10621e100 0x10621b720 0x10621dcf8 0x10480e8a0 0x10480ed20 0x19b1eaf38 0x19ab80184 0x19ab804c8 0x19ab7ee00 0x19ad65350 0x19ad634e0 0x19b2274cc 0x19b202b0c 0x19b285078 0x19b289818 0x19b280afc 0x1988f9bf0 0x1988f9af0 0x1988f8e38 0x1988f33e0 0x1988f2ba0 0x1af65b598 0x19b1e42f4 0x19b1e9874 0x1ac073b54 0x104a54194 0x104a5410c 0x104a5425c 0x1985d1568) libc++abi.dylib: terminating with uncaught exception of type NSException *** Terminating app due to uncaught exception ‘com.apple.coreaudio.avfaudio’, reason: ‘required condition is false: format.sampleRate == hwFormat.sampleRate’ terminating with uncaught exception of type NSException *** Terminating app due to uncaught exception ‘com.apple.coreaudio.avfaudio’, reason: ‘required condition is false: format.sampleRate == hwFormat.sampleRate’ terminating with uncaught exception of type NSException

排查发现是inputNode和mainMixerNode的format不一致 (lldb) po inputFormat <AVAudioFormat ***: 1 ch, 48000 Hz, Float32>

(lldb) po outputFormat <AVAudioFormat 0x282b95a40: 2 ch, 44100 Hz, Float32, non-inter>

原代码:

代码语言:javascript
复制
 let audioEngine = AVAudioEngine()
let filePlayer = AVAudioPlayerNode()
let rateEffect = AVAudioUnitTimePitch()
audioEngine.attach(filePlayer)
audioEngine.attach(rateEffect)
let outputFormat = audioEngine.mainMixerNode.outputFormat(forBus: 0)
//崩溃在这行代码
audioEngine.connect(audioEngine.inputNode, to: audioEngine.mainMixerNode, fromBus: 0, toBus: 0, format: outputFormat)
audioEngine.mainMixerNode.installTap(onBus: 0, bufferSize: 4096, format: outputFormat) { 
 [weak self] pcmBuffer, when in
...
}

解决办法:将format都改成48000 参考:https://gist.github.com/tad-iizuka/1ca07ca2045a8c6d11e22d15812f7e15

在这里插入图片描述
在这里插入图片描述

修改后代码

代码语言:javascript
复制
        let audioEngine = AVAudioEngine()
let filePlayer = AVAudioPlayerNode()
let rateEffect = AVAudioUnitTimePitch()
audioEngine.attach(filePlayer)
audioEngine.attach(rateEffect)
let inputFormat = audioEngine.inputNode.inputFormat(forBus: 0)
let outputFormat = audioEngine.mainMixerNode.outputFormat(forBus: 0)
//修改format为inputNode的format,防止录音崩溃
audioEngine.connect(audioEngine.inputNode, to: audioEngine.mainMixerNode, fromBus: 0, toBus: 0, format: inputFormat)
audioEngine.mainMixerNode.installTap(onBus: 0, bufferSize: 4096, format: outputFormat) { 
 [weak self] pcmBuffer, when in
...
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/181074.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月17日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档