Как воспроизводить аудио с помощью AVAudioEngine и AVAudioPlayerNode в Swift?

Я пытаюсь воспроизвести звук с помощью AVAudioEngine и AVAudioPlayerNode. Однако в "engine.connect ..." я получаю следующее:

"PlaySound [21867: 535102] [AudioHAL_Client] AudioHardware.cpp: 666: AudioObjectGetPropertyData: AudioObjectGetPropertyData: нет объекта с данным идентификатором 0"

Код после "engine.connect ..." кажется запущенным, потому что он печатает "buffer? .Format", но звука нет.

Может ли кто-нибудь сообщить мне, что мне не хватает? Вот мой тестовый код.

let audioNode = AVAudioPlayerNode()
let path = Bundle.main.path(forResource: "Sounds/Test.mp3", ofType: nil)
let url = URL(fileURLWithPath: path!)
let file = try! AVAudioFile(forReading: url)
let buffer = AVAudioPCMBuffer(pcmFormat: file.processingFormat, frameCapacity: AVAudioFrameCount(file.length))
try! file.read(into:buffer!)
let engine = AVAudioEngine()
engine.attach(audioNode)
engine.connect(audioNode, to: engine.mainMixerNode, format: buffer?.format)
// PlaySound[21867:535102] [AudioHAL_Client] AudioHardware.cpp:666:AudioObjectGetPropertyData:  AudioObjectGetPropertyData: no object with given ID 0
engine.prepare()
try! engine.start()
audioNode.play()
audioNode.scheduleBuffer(buffer!, at: nil, options: .loops, completionHandler: nil)
debugPrint(buffer?.format)
// Optional(<AVAudioFormat 0x60000212d1d0:  1 ch,  44100 Hz, Float32>)

В engine.connect () я также попробовал engine.outputNode.outputFormat (forBus: 0) вместо buffer? .Format. Мне не повезло.


person jl303    schedule 04.08.2019    source источник


Ответы (1)


Это сработает, если я поставлю двигатель снаружи вот так:

class ViewController: NSViewController {
    let engine = AVAudioEngine()
    override func viewDidLoad() {
person jl303    schedule 06.08.2019