Пример #1
0
        void audioSink_RawFrameAvailable(object sender, Common.EventArgs <byte[]> e)
        {
            //todo: frame length is invalid. must equal to 20ms
            byte[] frame = e.Value;
            var    src   = new short[frame.Length / sizeof(short)];

            Buffer.BlockCopy(frame, 0, src, 0, frame.Length);

            int srcOffset = 0;

_again:
            int srcAvailable = src.Length - srcOffset;
            int dstRemaining = buffer.Length - bufferPos;

            int cb = Math.Min(srcAvailable, dstRemaining);

            Array.Copy(src, srcOffset, buffer, bufferPos, cb);
            srcOffset += cb;
            bufferPos += cb;

            if (bufferPos == buffer.Length)
            {
                voiceActivityDetector.WebRtcVad_CalcVad16khz(buffer, buffer.Length);
                bufferPos = 0;
                goto _again;
            }


            SaveSamplesForDebug(frame);
        }
Пример #2
0
 public void Filter(short[] sampleData)
 {
     VadDecision = _vad.WebRtcVad_CalcVad16khz(sampleData, sampleData.Length);
     if (_vadViewModel != null)
     {
         _vadViewModel.Decision = VadDecision > 0 ? 0.9 : 0;
     }
     if (VadDecision == 0)
     {
         Array.Clear(sampleData, 0, sampleData.Length);
         IsSilent = true;
     }
     else
     {
         IsSilent = false;
     }
 }