uwp processamento de áudio AudioGraph

Estou trabalhando em um projeto de IoT do winodws que controla uma faixa de led com base em uma entrada de áudio. Agora, tenho algum código que obtém o áudio e o grava em um buffer com a API AudioGraph, mas não sei como posso processar o áudio para alguns dados úteis.

meu código até agora:

private async void MainPage_Loaded(object sender, RoutedEventArgs eventArgs)
{
        try
        {
            // Initialize the led strip
            //await this.pixelStrip.Begin();

            sampleAggregator.FftCalculated += new EventHandler<FftEventArgs>(FftCalculated);
            sampleAggregator.PerformFFT = true;

            // Create graph
            AudioGraphSettings settings = new AudioGraphSettings(AudioRenderCategory.Media);
            settings.DesiredSamplesPerQuantum = fftLength;
            settings.DesiredRenderDeviceAudioProcessing = Windows.Media.AudioProcessing.Default;
            settings.QuantumSizeSelectionMode = QuantumSizeSelectionMode.ClosestToDesired;

            CreateAudioGraphResult result = await AudioGraph.CreateAsync(settings);
            if (result.Status != AudioGraphCreationStatus.Success)
            {
                // Cannot create graph
                return;
            }
            graph = result.Graph;

            // Create a device input node using the default audio input device
            CreateAudioDeviceInputNodeResult deviceInputNodeResult = await graph.CreateDeviceInputNodeAsync(MediaCategory.Other);

            if (deviceInputNodeResult.Status != AudioDeviceNodeCreationStatus.Success)
            {
                return;
            }

            deviceInputNode = deviceInputNodeResult.DeviceInputNode;

            frameOutputNode = graph.CreateFrameOutputNode();
            frameOutputNode.Start();
            graph.QuantumProcessed += AudioGraph_QuantumProcessed;

            // Because we are using lowest latency setting, we need to handle device disconnection errors
            graph.UnrecoverableErrorOccurred += Graph_UnrecoverableErrorOccurred;

            graph.Start();
        }
        catch (Exception e)
        {
            Debug.WriteLine(e.ToString());
        }
    }

    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;


        }
    }

Então, termino com meu buffer como um flutuador. Mas como posso mudar isso para dados úteis que possibilitam criar algo como um analisador de espectro?

Editar:

Talvez eu tenha que tornar essa pergunta menos específica para o audiografo. Eu uso uma API para obter minha entrada de áudio. Os dados que recebo da API são um byte * e posso convertê-lo em um float * Como posso alterá-lo do byte * ou do float * para outros dados que posso usar para criar alguns códigos de cores.

Pensei em fazer uma análise FFT no float * para obter 164 leds * 3 (rgb) = 492 posições. E processe esses dados ainda mais para obter alguns valores entre 0 e 255.

Então, como posso processar esse float * ou byte * para obter esses dados úteis? Ou como eu começo?

questionAnswers(2)

yourAnswerToTheQuestion