私はオーディオ入力に基づいてledストリップを制御するwinodws IoTプロジェクトに取り組んでいます。オーディオを取得してAudioGraph APIを使ってバッファに書き込むコードをいくつか用意していますが、オーディオを処理して有用なデータにする方法がわかりません。uwp AudioGraphオーディオ処理
私のコード今のところ:
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;
}
}
だから私はfloat型としての私のバッファーで終わります。しかし、これをスペクトルアナライザのようなものを作ることを可能にする有用なデータに変更するにはどうすればよいですか?
編集:
たぶん私はaudiographのため、この質問は、以下の特定のようにする必要があります。私は、私のオーディオ入力を得るためにAPIを使用します。 APIから取得するデータは1バイトで、フロートにキャストすることができます。*バイト*またはフロート*から、いくつかのカラーコードを作成するために使用できる他のデータに変更できますか?
私はフロート*でいくつかのFFT解析を行い、164個のLED * 3(rgb)= 492個のビンを得ることを教えました。このデータをさらに処理して、0から255の間の値を取得します。
このフロート*またはバイト*を処理してこの有用なデータを取得するにはどうすればよいですか?または私はどのように始めますか?
あなたはhttps://github.com/filoe/cscoreを見ても、サンプルがあるが –