为什么在AVAudioEngine中点击麦克风时缓冲区中的BytesPerFrame意外地大

问题描述 投票:1回答:1

我正在尝试从麦克风获取缓冲区数据。

我试图从分接块内部的缓冲区值访问BytesPerFrame。我试着在swift上的xcode上运行相同的代码,它给出了一个正常值。只有当我使用Xamarin.iOS在C#中运行它时,它才会变得很奇怪。

我什至尝试用带有特定AudioStreamBasicDescriptionBytesPerFrame = 2初始化格式,但问题是相同的。

这是C#中的样子:

    var engine = new AVAudioEngine();

    var format = new AVAudioFormat(
        format: AVAudioCommonFormat.PCMInt16, 
        sampleRate: 44100, 
        channels: 1, 
        interleaved: false);

    engine.InputNode.InstallTapOnBus(
        bus: 0,
        bufferSize: 4096, 
        format,
        tapBlock: (buffer, when) =>
            {
                Console.WriteLine(buffer.FrameCapacity);
                Console.WriteLine(buffer.Format.StreamDescription.BytesPerFrame);

                // other processing
            });

    engine.StartAndReturnError(out var err);

这是快速版本:

    let format = AVAudioFormat(commonFormat: AVAudioCommonFormat.pcmFormatInt16, sampleRate: Double(44100), channels: 1, interleaved: false)
    engine.inputNode.installTap(onBus: 0, bufferSize: 4096, format: format) { (buffer, time) -> Void in
        let bytesPerFrame = buffer.format.streamDescription.pointee.mBytesPerFrame;
        let frameCapacity = buffer.frameCapacity;
    }

    status = .Recording
    try! engine.start()

[在C#中,我期望BytesPerFrame的值只是2,但是我得到的东西却像1871587600一样怪异的巨大

这不会很快发生。

c# xamarin.ios core-audio avaudioengine
1个回答
0
投票

对我来说,它看起来像Xamarin.iOS中的错误。我在他们的GitHub上创建了一个问题:https://github.com/xamarin/xamarin-macios/issues/7890

© www.soinside.com 2019 - 2024. All rights reserved.