Я пытаюсь получить данные буфера с микрофона.
Я пытался получить доступ к BytesPerFrame
из значения буфера внутри блока крана. Я попытался запустить тот же код на Xcode с Swift, и это дает нормальное значение. Это становится странным только когда я запускаю его в C # с Xamarin.iOS.
Я даже пытался инициализировать формат с AudioStreamBasicDescription
с определенным BytesPerFrame = 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
Это не происходит в быстром темпе.