首页 > 解决方案 > AVAudioSourceNode 如何设置设置格式

问题描述

我正在使用新的 AVAudioSourceNode 提供要通过我的音频接口播放的样本流。

但是我发现 AVAudioSourceNode 正在选择它自己的格式设置。

engine.connect(srcNode, to: engine.mainMixerNode, format: stimulusFormat)

我使用上面的代码行使用“stimulusFormat”格式将我的源节点连接到我的主混音器我已使用以下格式设置此格式:

let stimulusFormat = AVAudioFormat(commonFormat: .pcmFormatFloat32,
        sampleRate: Double(sampleRate),
        channels: 1,
        interleaved: format.isInterleaved)

(使用 interleaved 参数查询输出期望看到的内容)。但是,每当我查询 srcNode (AVAudioSourceNode) 的格式时,控制台都会返回

<AVAudioFormat 0x600002131810:  2 ch,  44100 Hz, Float32, non-inter>

很明显,流格式没有在代码的连接行中设置。我也尝试过更改首选采样率,但这仍然不会更改 AVSourceNode 采样率。我的音频引擎中的其他所有东西都以 48000Hz 运行,所以我不确定它是从哪里得到这个数字的。

try AVAudioSession.sharedInstance().setCategory(.playAndRecord)
try AVAudioSession.sharedInstance().setPreferredSampleRate(Double(sampleRate))

谁能建议一种定义流格式的方法?

标签: swiftaudioavfoundationcore-audioavaudioengine

解决方案


尝试

engine.connect(srcNode, to: engine.mainMixerNode, format: srcNode.inputFormat(forBus: 0))

推荐阅读