AVAudioEngine和playernode没有输出声音并且错误macOS和swift

问题描述 投票:0回答:1

大家好,我正在修改一个基于 swift CoreAudio 的旧 macOS 应用程序,该应用程序现在崩溃或几分钟后损坏音频流。它采用 USB 原始音频作为输入并播放到所选输出。然后我决定尝试使用 AVAudioEngine 和 AVAudioPlayerNode。对于这个新手,所以我从真正的开始开始:我使用在这里找到的示例代码(感谢所有...)。我想我可以使用这里找到的最简单的片段之一,即播放 mp3 音频文件。但经过几天的研究,我仍然(肯定是我的错)无法播放那个小 mp3。在 MacPro Intel 上运行最新的 Sonoma。也尝试连接默认的输出开发,但没有成功:相同的消息,没有声音。 这里使用的代码:

import Foundation
import AVFoundation

class ViewController: NSViewController {
    
    public var engine: AVAudioEngine!
    public var player : AVAudioPlayerNode!

    override func viewDidLoad() {
        super.viewDidLoad()

        engine = AVAudioEngine()
        player = AVAudioPlayerNode()
        engine.reset()
        
        guard let path = Bundle.main.path(forResource: "song", ofType: "mp3") else {
            print("Error getting URL")
            return
        }
        print("\(path)")
        let url: URL = URL(fileURLWithPath: path)

        guard let file = try? AVAudioFile(forReading: url) else {
            print("Error reading Audio File")
            return
        }

        let format = file.processingFormat
        let framecount = AVAudioFrameCount(file.length)
        guard let buffer = AVAudioPCMBuffer(pcmFormat: format, frameCapacity: framecount)  else{
            return
        }
        do{
            try file.read(into: buffer)
        } catch{
            print("Error reading file to buffer")
            return
        }
        
        let mainMixer = engine.mainMixerNode
        engine.attach(player)
        engine.connect(player, to:mainMixer, format: buffer.format)
        engine.prepare()
        try? engine.start()
        player.play()
    }
}

编译成功,但在 Xcode 内运行时会给出一些消息: 上线:

let mainMixer = engine.mainMixerNode

在调试视图窗口中它抛出:

AddInstanceForFactory: No factory registered for id <CFUUID 0x600002927660> F8BB1C28-BAE8-11D6-9C31-00039315CD46
HALC_ShellDriverPlugIn.cpp:107    HALC_ShellDriverPlugIn::Open: opening the plug-in failed, Error: 2003329396 (what)
HALC_ShellDriverPlugIn.cpp:107    HALC_ShellDriverPlugIn::Open: opening the plug-in failed, Error: 2003329396 (what)

并上线:

player.play()

错误(?)消息是

 88579          HALC_ProxyIOContext.cpp:1328  HALC_ProxyIOContext::IOWorkLoop: skipping cycle due to overload

在沙盒 Xcode 15.2 中,仅检查音频输入。 我肯定做错了什么。但我也找不到这些消息的含义。 有什么线索吗?我缺少什么? 谢谢

想了解缺少什么以及调试消息的含义。

swift macos avaudioengine avaudioplayernode
1个回答
0
投票

你不让播放器知道要播放哪个文件 在连接播放器的行之后,添加这一行:

player.scheduleFile(文件,位于:nil)

© www.soinside.com 2019 - 2024. All rights reserved.