aku*_*kuz 5 core-audio swift avaudioengine
我已经配置了AVAudioSinkNodeAttach to ,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!")
}
Run Code Online (Sandbox Code Playgroud)
我已经单独将其配置为使用“内置麦克风”设备(我确信它确实使用了)。
如果我将麦克风的采样率设置为 44100(使用 Apple 在所有 Mac 上提供的“音频 MIDI 设置”应用程序),一切都会按预期工作:
AudioEngine started.
SINK: 692312319180567 - 512 - 2
SINK: 692312348024104 - 512 - 2
SINK: 692312359634082 - 512 - 2
SINK: 692312371244059 - 512 - 2
SINK: 692312382854036 - 512 - 2
...
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用“音频 MIDI 设置”应用程序(由 Apple 在所有 Mac 上提供),并将麦克风的采样率更改为44100 以外的任何值(比如 48000),那么接收器节点似乎不会执行任何操作(不会执行任何操作)不打印任何东西)。
当然,最初我试图以编程方式修改麦克风的采样率。但后来我发现,当我通过标准的“音频 MIDI 设置”应用程序更改设备采样率时,也会发生同样的情况。因此,我用于设置采样率的代码没有必要在这里发布。
有谁知道是否AVAudioSinkNode允许将采样率硬编码到其中?
我找不到任何其他解释...
小智 3
我一直在摆弄 AVAudioSinkNodes,在我看来它并不局限于 44100 采样率。
就我而言,当我在连接输入和接收器节点后检查它们的采样率时,我得到以下信息:
Input node sample rates:
IF <AVAudioFormat 0x600002527700: 2 ch, 48000 Hz, Float32, non-inter>
OF <AVAudioFormat 0x60000250fac0: 2 ch, 48000 Hz, Float32, non-inter>
Sink node sample rates:
IF <AVAudioFormat 0x60000250fbb0: 2 ch, 44100 Hz, Float32, non-inter>
OF <AVAudioFormat 0x60000250fb60: 2 ch, 44100 Hz, Float32, non-inter>
Run Code Online (Sandbox Code Playgroud)
但是一旦我将它们连接在一起,我得到了以下结果:
Input node sample rates:
IF <AVAudioFormat 0x600002527980: 1 ch, 48000 Hz, Float32>
OF <AVAudioFormat 0x600002506760: 2 ch, 48000 Hz, Float32, non-inter>
Sink node sample rates:
IF <AVAudioFormat 0x600002506710: 2 ch, 48000 Hz, Float32, non-inter>
OF <AVAudioFormat 0x600002505db0: 2 ch, 48000 Hz, Float32, non-inter>
Run Code Online (Sandbox Code Playgroud)
我是使用音频框架的新手,但这似乎表明接收器节点的采样率不是硬编码的。
您的连接,
audioEngine.connect(audioEngine.inputNode, to: sinkNode, format: nil)
Run Code Online (Sandbox Code Playgroud)
好像和我的不一样。audioEngine.inputNode.outputFormat(forBus: 0)不管正确与否,我明确指定了导致显示设置的格式。不确定这是否有影响。
| 归档时间: |
|
| 查看次数: |
488 次 |
| 最近记录: |