合并发布者不为 KVO 属性触发

问题描述

我正在尝试通过其结合发布者跟踪 AVAudioPlayerNode 的播放状态:

import Cocoa
import AVFoundation
import Combine

@main
class AppDelegate: NSObject,NSApplicationDelegate {

    let engine = AVAudioEngine()
    let player = AVAudioPlayerNode()
    var cancellable: AnyCancellable?

    func applicationDidFinishLaunching(_ aNotification: Notification) {

        cancellable = player.publisher(for: \.isPlaying)
            .sink { newValue in
                print("is playing: \(newValue)")
            }

        let url = Bundle.main.url(forResource: "blues",withExtension: "aiff")!
        let file = try! AVAudioFile(forReading: url)

        let buffer = AVAudioPCMBuffer(pcmFormat: file.processingFormat,frameCapacity: UInt32(file.length))!
        try! file.read(into: buffer)

        engine.attach(player)
        engine.connect(player,to: engine.mainMixerNode,format: file.processingFormat)

        player.scheduleBuffer(buffer,at: nil,options: .loops,completionHandler: nil)

        try! engine.start()
        player.play()
    }
}

接收器在初始化时只会被调用一次,以后再也不会调用了。我希望它在播放开始时被调用,但它没有......知道为什么吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)