【问题标题】:AVAudioSourceNode how to set set formatAVAudioSourceNode 如何设置设置格式
【发布时间】:2020-02-05 04:49:18
【问题描述】:

我正在使用新的 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))

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

【问题讨论】:

    标签: swift audio avfoundation core-audio avaudioengine


    【解决方案1】:

    试试

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

    【讨论】:

    • 如果sourceNode没有指定的Format,而你参照自己的格式尝试连接,那它不会使用引擎输出的格式作为默认格式吗?因此,在这种情况下,如果 sourceNode 的样本是预先生成的,那么在错误的 sampleRate 下,这些样本的读取速度会更快或更慢,从而产生不同的音高。我没有发现更多与 AVFoundation 格式无法产生正确结果有关的问题,并已向他们报告
    猜你喜欢
    • 1970-01-01
    • 2016-03-31
    • 1970-01-01
    • 1970-01-01
    • 2018-03-09
    • 2021-06-24
    • 2012-11-04
    • 1970-01-01
    • 2011-02-19
    相关资源
    最近更新 更多