Esempio n. 1
0
        private void OnCaptured(bool recover, IAudioPacket packet)
        {
            byte[] uncompressed;

            if (recover)
            {
                uncompressed = _codec.Restore(packet?.Payload ?? null);
            }
            else
            {
                uncompressed = _codec.Decode(packet.Payload);
            }

            _waveProvider.AddSamples(uncompressed, 0, uncompressed.Length);
        }
Esempio n. 2
0
        void AudioLoop()
        {
            System.Threading.Thread.CurrentThread.Priority = ThreadPriority.Highest;
            short[] outputBuffer = new short[160];

            bool   newStream      = true;
            Action streamFinsihed = () =>
            {
                _audioPlayer.Pause();
            };
            Action streamStart = () =>
            {
                newStream = true;
                _audioPlayer.Resume();
            };

            while (!_disposing)
            {
                (AudioData? data, bool isNext) = _jitterBuffer.GetNext(streamFinsihed, streamStart);
                if (newStream)
                {
                }

                if (data != null)
                {
                    newStream = false;
                }

                //decode
                if (newStream)
                {
                    Silence(outputBuffer); //don't do packet loss concellement its just unfilled slots at start of new stream
                }
                else if (data != null || (data == null && _talker != null))
                {
                    _audioCodec.Decode(data, isNext, outputBuffer);
                }
                else
                {
                    Silence(outputBuffer); //don't do packet loss concellement if we don't have a talker
                }

                //play
                _audioPlayer.PlayAudio(outputBuffer);
            }
        }
Esempio n. 3
0
    private void Broadcast()
    {
        try
        {
            Thread.Sleep(300);
            while (Connected)
            {
                //if (!EndpointMatches(udpReciever.Client.RemoteEndPoint))
                //    throw new Exception("Endpoint does not match the client.");

                byte[] data        = udpReciever.Receive(ref acceptingEndpoint);
                byte[] decodedData = audioCodec.Decode(data, 0, data.Length);
                buffer.AddSamples(decodedData, 0, decodedData.Length);
            }
        }
        catch (SocketException)
        {
            // usually not a problem - just means we have disconnected
        }
    }