AVAudioBuffer и AVAudioFormat, установка чередования в true приводит к выборке данных с нулевым значением - PullRequest
0 голосов
/ 01 октября 2019

У меня есть приложение Cocoa, которое использует AVAudioBuffer и AVAudioFormat для чтения данных примера из аудиофайла. Однако я запутался насчет свойства чередования AVAudioFormat.

. Вот код (Xamarin, но это не должно относиться к делу). _file является экземпляром AVAudioFile.

using (var format = new AVAudioFormat(AVAudioCommonFormat.PCMFloat32, _file.FileFormat.SampleRate, channelCount, interleaved: true))
using (var buffer = new AVAudioPcmBuffer(format, checked((uint)frameCount)))
{
    _file.ReadIntoBuffer(buffer, out var error);

    Span<float> span;
    unsafe
    {
        var bufferPointer = (float*)Marshal.ReadIntPtr(buffer.FloatChannelData);
        span = new Span<float>(bufferPointer, (int)(frameCount * channelCount));
    }

    return span.ToArray();
}

Таким образом, критической частью этого является значение с чередованием, переданное конструктору AVAudioFormat. Когда это правда (как выше), FloatChannelData в буфере - все нули. Когда оно ложно, примеры данных присутствуют, как и ожидалось.

Я запутался, поскольку предположил, что значение чередования указывает требуемый формат данных в буфере. Мои попытки найти документацию, объясняющую его роль, не увенчались успехом.

Может кто-нибудь объяснить, пожалуйста, роль чередования, как я должен решить, какое значение использовать, и почему, когда оно истинно, образец данныхвсе ноль.

Здесь определенно есть чему научиться, так что если вы можете указать мне какую-нибудь официальную (или иную) документацию, которая объясняет это, я был бы признателен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...