Exemple #1
0
        private void waveIn_DataAvailable(object sender, WaveInEventArgs e)
        {
            byte[] soundBuffer = new byte[e.BytesRecorded + notEncodedBuffer.Length];
            for (int i = 0; i < notEncodedBuffer.Length; i++)
            {
                soundBuffer[i] = notEncodedBuffer[i];
            }
            for (int i = 0; i < e.BytesRecorded; i++)
            {
                soundBuffer[i + notEncodedBuffer.Length] = e.Buffer[i];
            }
            soundBuffer    = AdjustAudioLevelDB(soundBuffer, sendGain);
            sendAudiolevel = AudioLevelDB(soundBuffer);
            int byteCap         = bytesPerSegment;
            int segmentCount    = (int)Math.Floor((decimal)soundBuffer.Length / byteCap);
            int segmentsEnd     = segmentCount * byteCap;
            int notEncodedCount = soundBuffer.Length - segmentsEnd;

            notEncodedBuffer = new byte[notEncodedCount];

            for (int i = 0; i < notEncodedCount; i++)
            {
                notEncodedBuffer[i] = soundBuffer[segmentsEnd + i];
            }
            for (int i = 0; i < segmentCount; i++)
            {
                byte[] segment = new byte[byteCap];
                for (int j = 0; j < segment.Length; j++)
                {
                    segment[j] = soundBuffer[(i * byteCap) + j];
                }
                int    len;
                byte[] buff    = encoder.Encode(segment, segment.Length, out len);
                byte[] newbuff = new byte[++len];
                newbuff[0] = 16;
                for (int j = 1; j < newbuff.Length; j++)
                {
                    newbuff[j] = buff[j - 1];
                }
                session.SendAudioFrame((uint)segmentFrames, 21, newbuff);
            }
            if (playBuffer.BufferedDuration.TotalMilliseconds > 10)
            {
                button1.ForeColor = Color.Black;
                button1.BackColor = Color.Green;
            }
            else
            {
                button1.ForeColor = Color.White;
                button1.BackColor = Color.Red;
            }
        }