uwp AudioGraph Audioverarbeitung

Ich arbeite an einem WinODWS-IoT-Projekt, das einen LED-Streifen basierend auf einem Audioeingang steuert. Jetzt habe ich einen Code, der das Audio einliest und mit der AudioGraph-API in einen Puffer schreibt, aber ich weiß nicht, wie ich das Audio zu nützlichen Daten verarbeiten kann.

mein Code bisher:

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;


        }
    }

So ende ich mit meinem Puffer als Float. Aber wie kann ich das in nützliche Daten umwandeln, die es ermöglichen, so etwas wie einen Spektrumanalysator zu erstellen?

Bearbeiten

Vielleicht muss ich diese Frage für das Audiogramm weniger spezifisch machen. Ich verwende eine API, um meinen Audioeingang zu erhalten. Die Daten, die ich von der API erhalte, sind ein Byte * und ich kann sie in ein Float umwandeln. * Wie kann ich sie von dem Byte * oder dem Float * in einige andere Daten ändern, die ich zum Erstellen einiger Farbcodes verwenden kann?

Ich dachte darüber nach, eine FFT-Analyse für den Float * durchzuführen, um 164 LEDs * 3 (rgb) = 492 Bins zu erhalten. Verarbeiten Sie diese Daten weiter, um Werte zwischen 0 und 255 zu erhalten.

Wie kann ich dieses Float * oder Byte * verarbeiten, um diese nützlichen Daten zu erhalten? Oder wie fange ich an?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage