Advertisement
Guest User

Untitled

a guest
Aug 4th, 2015
237
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.86 KB | None | 0 0
  1.         private unsafe void ProcessFrameOutput(AudioFrame frame)
  2.         {
  3.             using (var buffer = frame.LockBuffer(AudioBufferAccessMode.Read))
  4.             using (var reference = buffer.CreateReference())
  5.             {
  6.                 byte* dataInBytes;
  7.                 uint capacityInBytes;
  8.  
  9.                 ((IMemoryBufferByteAccess) reference).GetBuffer(out dataInBytes, out capacityInBytes);
  10.  
  11.                 if (capacityInBytes == 0) // Don't send empty frames.
  12.                     return;
  13.  
  14.                 var capacityInFloats = capacityInBytes/4;
  15.                 float* dataInFloat = (float*)dataInBytes;
  16.  
  17.                 var floats = new float[capacityInFloats];                
  18.  
  19.                 Marshal.Copy((IntPtr)dataInFloat, floats, 0, (int)capacityInFloats);
  20.  
  21.                 var shorts = Float2Short(floats);
  22.  
  23.                 ToxAvModel.Instance.SendAudioFrame(_friendNumber, new ToxAvAudioFrame(shorts, _samplingRate, 1));
  24.  
  25.                 Debug.WriteLine(shorts.Length);
  26.             }
  27.         }
  28.  
  29.         private short[] Float2Short(float[] inSamples)
  30.         {
  31.             short[] outSamples = new short[inSamples.Length];
  32.  
  33.             for (int i = 0; i < inSamples.Length; i++)
  34.             {
  35.                 float dtmp;
  36.                 if (inSamples[i] >= 0)
  37.                 {
  38.                     dtmp = inSamples[i] + 0.5f;
  39.                     if (dtmp > short.MaxValue)
  40.                     {
  41.                         dtmp = short.MaxValue;
  42.                     }
  43.                 }
  44.                 else
  45.                 {
  46.                     dtmp = inSamples[i] - 0.5f;
  47.                     if (dtmp < short.MinValue)
  48.                     {
  49.                         dtmp = short.MinValue;
  50.                     }
  51.                 }
  52.                 outSamples[i] = (short)(dtmp);
  53.             }
  54.             return outSamples;
  55.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement