Создайте список данных для передачи в БПФ с помощью AdioGraph UWP - PullRequest
0 голосов
/ 30 апреля 2019

Я должен передать данные в метод FFT, который будет вычислять спектр.Я пытался думать неправильно.Мне нужно понять, как правильно передавать данные.

Как узнать, что присутствуют три основные группы частот: низкая, средняя и высокая?

Код:

List<double> List_db_For_FFT = new List<double>();
int Number_Of_db_List = 0;

private void AudioGraph_QuantumProcessed(AudioGraph sender, object args)
{
    AudioFrame frame = frameOutputNode.GetFrame();
    ProcessFrameOutput(frame);
}

unsafe private void ProcessFrameOutput(AudioFrame frame)
{
    using (AudioBuffer buffer = frame.LockBuffer(AudioBufferAccessMode.Write))
    using (IMemoryBufferReference reference = buffer.CreateReference())
    {
        byte* dataInBytes;
        uint capacityInBytes;
        float* dataInFloat;

        // Get the buffer from the AudioFrame
        ((IMemoryBufferByteAccess)reference).GetBuffer(out dataInBytes, out capacityInBytes);

        dataInFloat = (float*)dataInBytes;

        List_db_For_FFT.Clear();

        for (int i = 0; i <= 32; i++)
        {
            List_db_For_FFT.Add(dataInFloat[i]);
        }
    }
}

private void SpectrumTimer_Tick(object sender, object e)
{
    Debug.WriteLine("List number: " + Number_Of_db_List.ToString());
    for (int a = 0; a <= List_db_For_FFT.Count -1; a++)
    {
        Debug.WriteLine(List_db_For_FFT[a]);
    }
    Number_Of_db_List += 1;
}

Когда я писал это, я, кажется, получаю немного случайным образом в смысле первых 32 данных (потому что они должны быть степенью 2), как я могу исправить это?

(я не включилFFT код, потому что это следующий шаг, я хотел бы понять, как правильно передавать данные)

Заранее спасибо!

...