public override int Read(byte[] buffer, int offset, int count)
        {
            var bytesRead = audioRecord.Read(buffer, offset, count);

            if (bytesRead > 0)
            {
                vad.ProcessBufferEx(buffer, bytesRead);
                return(bytesRead);
            }

            return(0);
        }
        static void ProcessStream(VoiceActivityDetector vad, Stream inputStream)
        {
            var bufferSize = 3000 + new Random().Next(200);
            var buffer     = new byte[bufferSize];
            int bytesRead  = 0;

            bytesRead = inputStream.Read(buffer, 0, bufferSize);
            while (bytesRead > 0)
            {
                vad.ProcessBufferEx(buffer, bytesRead);

                bufferSize = 3000 + new Random().Next(200);
                buffer     = new byte[bufferSize];
                bytesRead  = inputStream.Read(buffer, 0, bufferSize);
            }
        }
        private void ProcessBuffer(AudioQueueBuffer buffer)
        {
            Log.Debug(TAG, "AudioQueueBuffer size:" + buffer.AudioDataByteSize);

            if (buffer.AudioDataByteSize > 0)
            {
                var soundData = new byte[buffer.AudioDataByteSize];
                System.Runtime.InteropServices.Marshal.Copy(buffer.AudioData, soundData, 0, (int)buffer.AudioDataByteSize);

                if (outputAudioStream != null)
                {
                    outputAudioStream.Write(soundData, 0, soundData.Length);
                    vad.ProcessBufferEx(soundData, soundData.Length);
                }
            }
        }