AVAudioSinkNode с нестандартной, но все еще собственной частотой дискретизации - PullRequest
1 голос
/ 24 марта 2020

Я настроил AVAudioSinkNode, подключенный к AVAudioEngine inputNode примерно так:

let sinkNode = AVAudioSinkNode() { (timestamp, frames, audioBufferList) -> OSStatus in
    print("SINK: \(timestamp.pointee.mHostTime) - \(frames) - \(audioBufferList.pointee.mNumberBuffers)")
    return noErr
}

audioEngine.attach(sinkNode)
audioEngine.connect(audioEngine.inputNode, to: sinkNode, format: nil)
audioEngine.prepare()

do {
    try audioEngine.start()
    print("AudioEngine started.")
} catch {
    print("AudioEngine did not start!")
}

Я отдельно настроил его для использования устройства «Встроенный микрофон» (которое Я уверен, что он использует).

Если я установлю частоту дискретизации 44100 для mi c (с помощью приложения «Audio MIDI Setup», поставляемого Apple на всех компьютерах Mac), все будет работать как положено:

AudioEngine started.
SINK: 692312319180567 - 512 - 2
SINK: 692312348024104 - 512 - 2
SINK: 692312359634082 - 512 - 2
SINK: 692312371244059 - 512 - 2
SINK: 692312382854036 - 512 - 2
...

Однако, если я использую приложение «Audio MIDI Setup» (предоставляется Apple на всех компьютерах Mac) и меняю частоту дискретизации mi c на любую , отличную от 44100 (скажем, 48000) , тогда приемный узел , похоже, ничего не делает (ничего не печатает).

Конечно, изначально я пытался изменить mi c. частота дискретизации программно. Но позже я обнаружил, что то же самое происходит, когда я просто изменяю частоту дискретизации устройства через стандартное приложение «Audio MIDI Setup». Поэтому код, который я имею для установки частоты дискретизации, не требуется публиковать здесь.

Кто-нибудь знает, жестко ли в AVAudioSinkNode разрешена разрешенная частота дискретизации ?

Я не могу найти другого объяснения ...

...