AVAudioEngine为主混音节点安装Tap时触发执行断点崩溃问题求助
AVAudioEngine为主混音节点安装Tap时触发执行断点崩溃问题求助
我目前正在开发一款音频可视化应用,基于MediaPlayer和AVAudioEngine实现用户音乐库文件的播放功能——打算先把音乐播放逻辑跑通,再着手做可视化部分。
但现在遇到了一个棘手的问题:在配置好播放引擎后,APP毫无征兆地因为EXC_BREAKPOINT (code=1)崩溃了。我知道这个错误通常是解包nil值导致的,但我已经用guard语句处理了所有可选值,应该不是这个原因。经过反复排查,我确定崩溃触发在installTap的调用上——哪怕我把processAudioBuffer函数整个删掉,还是会出现同样的崩溃。
补充下环境信息:测试设备运行的是iOS 26 beta 3,而我的APP最低支持iOS 18及以上。
下面是我的相关代码:
setupAudioEngine 函数
private func setupAudioEngine() { do { try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default) try AVAudioSession.sharedInstance().setActive(true) } catch { print("Audio session error: \(error)") } engine = AVAudioEngine() guard let engine else { return } _ = engine.mainMixerNode }
play 函数
func play(_ mediaItem: MPMediaItem) { guard let url = mediaItem.assetURL else { print("No asset URL for media item") return } player = AVAudioPlayerNode() guard let engine, let player else { return } do { audioFile = try AVAudioFile(forReading: url) guard let audioFile else { print("Failed to create audio file") return } engine.attach(player) engine.connect(player, to: engine.mainMixerNode, format: audioFile.processingFormat) duration = Double(audioFile.length) / audioFile.fileFormat.sampleRate engine.prepare() if !engine.isRunning { try engine.start() } player.scheduleFile(audioFile, at: nil) DispatchQueue.main.async { [weak self] in self?.isPlaying = true self?.startDisplayLink() } } catch { print("Error playing audio: \(error)") DispatchQueue.main.async { [weak self] in self?.isPlaying = false self?.stopDisplayLink() } } engine.mainMixerNode.installTap(onBus: 0, bufferSize: 1024, format: engine.mainMixerNode.outputFormat(forBus: 0)) { [weak self] buffer, _ in self?.processAudioBuffer(buffer) } player.play() }
有没有大佬能帮我分析下崩溃的原因?我实在找不到问题所在了😭
内容来源于stack exchange
相关产品推荐
相关产品推荐

