Xmal:
<Grid MinHeight = "600"> <canvas: CanvasAnimatedControl x: Name = "drawWaveformCanvas" Empate = "DrawWaveformCanvas_Draw" clearColor = "LightGray" /> </ Grid>
xmal.cs:
inseguro vazio ProcessFrameOutput (quadro AudioFrame) privada { usando (AudioBuffer tampão = frame.LockBuffer (AudioBufferAccessMode.Write)) utilizando (referência IMemoryBufferReference = buffer.CreateReference ()) { byte * dataInBytes; capacityInBytes uint; ((IMemoryBufferByteAccess) de referência) .GetBuffer (fora dataInBytes, fora capacityInBytes); flutuador * dataInFloat = (float *) dataInBytes; int dataInFloatLength = (int) buffer.Length / sizeof (flutuador); para (int i = 0; i <dataInFloatLength; i ++) { try { waveformFloatData.Add (dataInFloat [i] * 200.0f + 300); } Captura { } } } } Void (remetente Microsoft.Graphics.Canvas.UI.Xaml.ICanvasAnimatedControl, Microsoft.Graphics.Canvas.UI.Xaml.CanvasAnimatedDrawEventArgs args) DrawWaveformCanvas_Draw privada { flutuador xaxis = 0.0f; para (int i = 0; i <waveformFloatData.Count; i ++) { if (i == 0) continue; Vector2 point1 = novo Vector2 (XAxis, waveformFloatData [i - 1]); Vector2 point2 = novo Vector2 (XAxis, waveformFloatData [i]); args.DrawingSession.DrawLine (point1, point2, Colors.Red, 1F); XAxis + = 0.3f; } WaveformFloatData.Clear (); }
Captura de tela: