Exemplo n.º 1
0
        private byte[] RealMix(ReceivedRtp item1, ReceivedRtp item2)
        {
            if (item1 == null || item2 == null)
            {
                return(null);
            }

            if (item1.size == 0 || item2.size == 0)
            {
                return(null);
            }

            byte[] wavSrc1 = new byte[item1.size - headersize];
            byte[] wavSrc2 = new byte[item2.size - headersize];

            Array.Copy(item1.buff, headersize, wavSrc1, 0, (item1.size - headersize));
            Array.Copy(item2.buff, headersize, wavSrc2, 0, (item2.size - headersize));

            WaveMixerStream32 mixer = new WaveMixerStream32();
            // mixer.AutoStop = true;
            MemoryStream               memstrem         = new MemoryStream(wavSrc1);
            RawSourceWaveStream        rawsrcstream     = new RawSourceWaveStream(memstrem, this.codec);
            WaveFormatConversionStream conversionstream = new WaveFormatConversionStream(pcmFormat16, rawsrcstream);
            WaveChannel32              channelstream    = new WaveChannel32(conversionstream);

            mixer.AddInputStream(channelstream);

            memstrem         = new MemoryStream(wavSrc2);
            rawsrcstream     = new RawSourceWaveStream(memstrem, this.codec);
            conversionstream = new WaveFormatConversionStream(pcmFormat16, rawsrcstream);
            channelstream    = new WaveChannel32(conversionstream);
            mixer.AddInputStream(channelstream);
            mixer.Position = 0;

            Wave32To16Stream to16 = new Wave32To16Stream(mixer);
            var convStm           = new WaveFormatConversionStream(pcmFormat8, to16);

            byte[] mixedbytes = new byte[(int)convStm.Length];
            int    chk        = convStm.Read(mixedbytes, 0, (int)convStm.Length);

            //Buffer.BlockCopy(tobyte, 0, writingBuffer, 0, tobyte.Length);

            memstrem.Close();
            rawsrcstream.Close();
            conversionstream.Close();
            channelstream.Close();

            convStm.Close(); convStm.Dispose(); convStm = null;
            to16.Close(); to16.Dispose(); to16          = null;
            mixer.Close(); mixer.Dispose(); mixer       = null;

            return(mixedbytes);
        }
Exemplo n.º 2
0
        private byte[] RealMix(ReceivedRtp item1, ReceivedRtp item2)
        {
            if (item1 == null || item2 == null) return null;

            if (item1.size == 0 || item2.size == 0) return null;

            byte[] wavSrc1 = new byte[item1.size - headersize];
            byte[] wavSrc2 = new byte[item2.size - headersize];

            Array.Copy(item1.buff, headersize, wavSrc1, 0, (item1.size - headersize));
            Array.Copy(item2.buff, headersize, wavSrc2, 0, (item2.size - headersize));

            WaveMixerStream32 mixer = new WaveMixerStream32();
            // mixer.AutoStop = true;
            MemoryStream memstrem = new MemoryStream(wavSrc1);
            RawSourceWaveStream rawsrcstream = new RawSourceWaveStream(memstrem, this.codec);
            WaveFormatConversionStream conversionstream = new WaveFormatConversionStream(pcmFormat16, rawsrcstream);
            WaveChannel32 channelstream = new WaveChannel32(conversionstream);
            mixer.AddInputStream(channelstream);

            memstrem = new MemoryStream(wavSrc2);
            rawsrcstream = new RawSourceWaveStream(memstrem, this.codec);
            conversionstream = new WaveFormatConversionStream(pcmFormat16, rawsrcstream);
            channelstream = new WaveChannel32(conversionstream);
            mixer.AddInputStream(channelstream);
            mixer.Position = 0;

            Wave32To16Stream to16 = new Wave32To16Stream(mixer);
            var convStm = new WaveFormatConversionStream(pcmFormat8, to16);
            byte[] mixedbytes = new byte[(int)convStm.Length];
            int chk = convStm.Read(mixedbytes, 0, (int)convStm.Length);
            //Buffer.BlockCopy(tobyte, 0, writingBuffer, 0, tobyte.Length);

            memstrem.Close();
            rawsrcstream.Close();
            conversionstream.Close();
            channelstream.Close();

            convStm.Close(); convStm.Dispose(); convStm = null;
            to16.Close(); to16.Dispose(); to16 = null;
            mixer.Close(); mixer.Dispose(); mixer = null;

            return mixedbytes;
        }
Exemplo n.º 3
0
        private byte[] Mixing(List<ReceivedRtp> list, ReceivedRtp baseitem, DelayedMil _delayedms)
        {
            byte[] mixedbytes = null;

            if (_delayedms == DelayedMil.i80o160)
            {
                int nseq = baseitem.seq * 2;
                ReceivedRtp _item0 = list.FirstOrDefault(x => x.seq == nseq);
                ReceivedRtp _item1 = list.FirstOrDefault(x => x.seq == nseq + 1);

                if (_item0 == null)
                {
                    _item0 = new ReceivedRtp() { buff = new byte[332], seq = nseq, size = 92, ext = baseitem.ext, peer = baseitem.peer };
                }

                if (_item1 == null)
                {
                    _item1 = new ReceivedRtp() { buff = new byte[332], seq = nseq + 1, size = 92, ext = baseitem.ext, peer = baseitem.peer };
                }

                // item2 + tmpitem mix with item1 and write
                byte[] tmpbuff = new byte[332];
                Array.Copy(_item0.buff, 0, tmpbuff, 0, _item0.size);
                Array.Copy(_item1.buff, headersize, tmpbuff, _item0.size, (_item1.size - headersize));
                ReceivedRtp _itm = new ReceivedRtp() { buff = tmpbuff, size = (_item0.size + _item1.size - headersize) };
                mixedbytes = this.RealMix(_itm, baseitem);

                // util.WriteLogTest3(_delayedms.ToString() + " // codec: " + _item0.codec.ToString() + " // " + (_item0.size - 12) + " // basecodec: " + baseitem.codec + " // " + (baseitem.size - 12) + " // " + baseitem.seq + " // " + _item0.seq + " // " + _item1.seq, this.filename);

                lock (listIn)
                {
                    listIn.RemoveAll(x => x.seq == _item0.seq);
                    listIn.RemoveAll(x => x.seq == _item1.seq);
                }

                lock (listOut)
                {
                    listOut.RemoveAll(x => x.seq == baseitem.seq);
                }
            }
            else if (_delayedms == DelayedMil.i160o80)
            {
                int nseq = baseitem.seq * 2;
                ReceivedRtp _item0 = list.FirstOrDefault(x => x.seq == nseq);
                ReceivedRtp _item1 = list.FirstOrDefault(x => x.seq == nseq + 1);

                if (_item0 == null)
                {
                    _item0 = new ReceivedRtp() { buff = new byte[332], seq = nseq, size = 92, ext = baseitem.ext, peer = baseitem.peer };
                }

                if (_item1 == null)
                {
                    _item1 = new ReceivedRtp() { buff = new byte[332], seq = nseq + 1, size = 92, ext = baseitem.ext, peer = baseitem.peer };
                }

                // item2 + tmpitem mix with item1 and write
                byte[] tmpbuff = new byte[332];
                Array.Copy(_item0.buff, 0, tmpbuff, 0, _item0.size);
                Array.Copy(_item1.buff, headersize, tmpbuff, _item0.size, (_item1.size - headersize));
                ReceivedRtp _itm = new ReceivedRtp() { buff = tmpbuff, size = (_item0.size + _item1.size - headersize) };
                mixedbytes = this.RealMix(_itm, baseitem);

                // util.WriteLogTest3(_delayedms.ToString() + " // " + (baseitem.size - 12) + " // " + baseitem.seq + " // " + _item0.seq + " // " + _item1.seq, this.filename);

                lock (listIn)
                {
                    listIn.RemoveAll(x => x.seq == baseitem.seq);
                }

                lock (listOut)
                {
                    listOut.RemoveAll(x => x.seq == _item0.seq);
                    listOut.RemoveAll(x => x.seq == _item1.seq);
                }
            }
            else if (_delayedms == DelayedMil.i80o240)
            {
                int nseq = baseitem.seq * 3;
                ReceivedRtp _item0 = list.FirstOrDefault(x => x.seq == nseq);
                ReceivedRtp _item1 = list.FirstOrDefault(x => x.seq == nseq + 1);
                ReceivedRtp _item2 = list.FirstOrDefault(x => x.seq == nseq + 2);

                if (_item0 == null)
                {
                    _item0 = new ReceivedRtp() { buff = new byte[332], seq = nseq, size = 92, ext = baseitem.ext, peer = baseitem.peer };
                }

                if (_item1 == null)
                {
                    _item1 = new ReceivedRtp() { buff = new byte[332], seq = nseq + 1, size = 92, ext = baseitem.ext, peer = baseitem.peer };
                }

                if (_item2 == null)
                {
                    _item2 = new ReceivedRtp() { buff = new byte[332], seq = nseq + 2, size = 92, ext = baseitem.ext, peer = baseitem.peer };
                }

                // item2 + tmpitem mix with item1 and write
                byte[] tmpbuff = new byte[332];
                Array.Copy(_item0.buff, 0, tmpbuff, 0, _item0.size);
                Array.Copy(_item1.buff, headersize, tmpbuff, _item0.size, _item1.size - headersize);
                Array.Copy(_item2.buff, headersize, tmpbuff, _item0.size + _item0.size - headersize, _item2.size - headersize);
                ReceivedRtp _itm = new ReceivedRtp() { buff = tmpbuff, size = _item0.size + _item1.size + _item2.size - headersize };
                mixedbytes = this.RealMix(_itm, baseitem);

                // util.WriteLogTest3(_delayedms.ToString() + " // " + (baseitem.size - 12) + " // " + baseitem.seq + " // " + _item0.seq + " // " + _item1.seq + " // " + _item2.seq, this.filename);

                lock (listIn)
                {
                    listIn.RemoveAll(x => x.seq == _item0.seq);
                    listIn.RemoveAll(x => x.seq == _item1.seq);
                    listIn.RemoveAll(x => x.seq == _item2.seq);
                }

                lock (listOut)
                {
                    listOut.RemoveAll(x => x.seq == baseitem.seq);
                }
            }
            else if (_delayedms == DelayedMil. i240o80)
            {
                int nseq = baseitem.seq * 3;
                ReceivedRtp _item0 = list.FirstOrDefault(x => x.seq == nseq);
                ReceivedRtp _item1 = list.FirstOrDefault(x => x.seq == nseq + 1);
                ReceivedRtp _item2 = list.FirstOrDefault(x => x.seq == nseq + 2);

                if (_item0 == null)
                {
                    _item0 = new ReceivedRtp() { buff = new byte[332], seq = nseq, size = 92, ext = baseitem.ext, peer = baseitem.peer };
                }

                if (_item1 == null)
                {
                    _item1 = new ReceivedRtp() { buff = new byte[332], seq = nseq + 1, size = 92, ext = baseitem.ext, peer = baseitem.peer };
                }

                if (_item2 == null)
                {
                    _item2 = new ReceivedRtp() { buff = new byte[332], seq = nseq + 2, size = 92, ext = baseitem.ext, peer = baseitem.peer };
                }

                // util.WriteLogTest3(_delayedms.ToString() + " // " + (baseitem.size - 12) + " // " + baseitem.seq + " // " + _item0.seq + " // " + _item1.seq + " // " + _item2.seq, this.filename);

                // item2 + tmpitem mix with item1 and write
                byte[] tmpbuff = new byte[332];
                Array.Copy(_item0.buff, 0, tmpbuff, 0, _item0.size);
                Array.Copy(_item1.buff, headersize, tmpbuff, _item0.size, _item1.size - headersize);
                Array.Copy(_item1.buff, headersize, tmpbuff, _item0.size + _item1.size - headersize, _item2.size - headersize);
                ReceivedRtp _itm = new ReceivedRtp() { buff = tmpbuff, size = _item0.size + _item1.size + _item2.size - headersize };
                mixedbytes = this.RealMix(_itm, baseitem);

                lock (listIn)
                {
                    listIn.RemoveAll(x => x.seq == baseitem.seq);
                }

                lock (listOut)
                {
                    listOut.RemoveAll(x => x.seq == _item0.seq);
                    listOut.RemoveAll(x => x.seq == _item1.seq);
                    listOut.RemoveAll(x => x.seq == _item2.seq);
                }
            }
            else if (_delayedms == DelayedMil.same)
            {
                ReceivedRtp _item = list.FirstOrDefault(x => x.seq == baseitem.seq);
                if (_item == null)
                {
                    _item = new ReceivedRtp() { buff = new byte[332], seq = baseitem.seq, size = baseitem.size, ext = baseitem.ext, peer = baseitem.peer };
                }
                mixedbytes = this.RealMix(_item, baseitem);

                // util.WriteLogTest3(_delayedms.ToString() + " // " + (baseitem.size - 12) + " // " + baseitem.seq + " // " + _item.seq, this.filename);

                lock (listIn)
                {
                    listIn.RemoveAll(x => x.seq == _item.seq);
                }

                lock (listOut)
                {
                    listOut.RemoveAll(x => x.seq == baseitem.seq);
                }
            }

            return mixedbytes;
        }
Exemplo n.º 4
0
        private byte[] Mixing(List <ReceivedRtp> list, ReceivedRtp baseitem, DelayedMil _delayedms)
        {
            byte[] mixedbytes = null;

            if (_delayedms == DelayedMil.i80o160)
            {
                int         nseq   = baseitem.seq * 2;
                ReceivedRtp _item0 = list.FirstOrDefault(x => x.seq == nseq);
                ReceivedRtp _item1 = list.FirstOrDefault(x => x.seq == nseq + 1);

                if (_item0 == null)
                {
                    _item0 = new ReceivedRtp()
                    {
                        buff = new byte[332], seq = nseq, size = 92, ext = baseitem.ext, peer = baseitem.peer
                    };
                }

                if (_item1 == null)
                {
                    _item1 = new ReceivedRtp()
                    {
                        buff = new byte[332], seq = nseq + 1, size = 92, ext = baseitem.ext, peer = baseitem.peer
                    };
                }

                // item2 + tmpitem mix with item1 and write
                byte[] tmpbuff = new byte[332];
                Array.Copy(_item0.buff, 0, tmpbuff, 0, _item0.size);
                Array.Copy(_item1.buff, headersize, tmpbuff, _item0.size, (_item1.size - headersize));
                ReceivedRtp _itm = new ReceivedRtp()
                {
                    buff = tmpbuff, size = (_item0.size + _item1.size - headersize)
                };
                mixedbytes = this.RealMix(_itm, baseitem);

                // util.WriteLogTest3(_delayedms.ToString() + " // codec: " + _item0.codec.ToString() + " // " + (_item0.size - 12) + " // basecodec: " + baseitem.codec + " // " + (baseitem.size - 12) + " // " + baseitem.seq + " // " + _item0.seq + " // " + _item1.seq, this.filename);

                lock (listIn)
                {
                    listIn.RemoveAll(x => x.seq == _item0.seq);
                    listIn.RemoveAll(x => x.seq == _item1.seq);
                }

                lock (listOut)
                {
                    listOut.RemoveAll(x => x.seq == baseitem.seq);
                }
            }
            else if (_delayedms == DelayedMil.i160o80)
            {
                int         nseq   = baseitem.seq * 2;
                ReceivedRtp _item0 = list.FirstOrDefault(x => x.seq == nseq);
                ReceivedRtp _item1 = list.FirstOrDefault(x => x.seq == nseq + 1);

                if (_item0 == null)
                {
                    _item0 = new ReceivedRtp()
                    {
                        buff = new byte[332], seq = nseq, size = 92, ext = baseitem.ext, peer = baseitem.peer
                    };
                }

                if (_item1 == null)
                {
                    _item1 = new ReceivedRtp()
                    {
                        buff = new byte[332], seq = nseq + 1, size = 92, ext = baseitem.ext, peer = baseitem.peer
                    };
                }

                // item2 + tmpitem mix with item1 and write
                byte[] tmpbuff = new byte[332];
                Array.Copy(_item0.buff, 0, tmpbuff, 0, _item0.size);
                Array.Copy(_item1.buff, headersize, tmpbuff, _item0.size, (_item1.size - headersize));
                ReceivedRtp _itm = new ReceivedRtp()
                {
                    buff = tmpbuff, size = (_item0.size + _item1.size - headersize)
                };
                mixedbytes = this.RealMix(_itm, baseitem);

                // util.WriteLogTest3(_delayedms.ToString() + " // " + (baseitem.size - 12) + " // " + baseitem.seq + " // " + _item0.seq + " // " + _item1.seq, this.filename);

                lock (listIn)
                {
                    listIn.RemoveAll(x => x.seq == baseitem.seq);
                }

                lock (listOut)
                {
                    listOut.RemoveAll(x => x.seq == _item0.seq);
                    listOut.RemoveAll(x => x.seq == _item1.seq);
                }
            }
            else if (_delayedms == DelayedMil.i80o240)
            {
                int         nseq   = baseitem.seq * 3;
                ReceivedRtp _item0 = list.FirstOrDefault(x => x.seq == nseq);
                ReceivedRtp _item1 = list.FirstOrDefault(x => x.seq == nseq + 1);
                ReceivedRtp _item2 = list.FirstOrDefault(x => x.seq == nseq + 2);

                if (_item0 == null)
                {
                    _item0 = new ReceivedRtp()
                    {
                        buff = new byte[332], seq = nseq, size = 92, ext = baseitem.ext, peer = baseitem.peer
                    };
                }

                if (_item1 == null)
                {
                    _item1 = new ReceivedRtp()
                    {
                        buff = new byte[332], seq = nseq + 1, size = 92, ext = baseitem.ext, peer = baseitem.peer
                    };
                }

                if (_item2 == null)
                {
                    _item2 = new ReceivedRtp()
                    {
                        buff = new byte[332], seq = nseq + 2, size = 92, ext = baseitem.ext, peer = baseitem.peer
                    };
                }

                // item2 + tmpitem mix with item1 and write
                byte[] tmpbuff = new byte[332];
                Array.Copy(_item0.buff, 0, tmpbuff, 0, _item0.size);
                Array.Copy(_item1.buff, headersize, tmpbuff, _item0.size, _item1.size - headersize);
                Array.Copy(_item2.buff, headersize, tmpbuff, _item0.size + _item0.size - headersize, _item2.size - headersize);
                ReceivedRtp _itm = new ReceivedRtp()
                {
                    buff = tmpbuff, size = _item0.size + _item1.size + _item2.size - headersize
                };
                mixedbytes = this.RealMix(_itm, baseitem);

                // util.WriteLogTest3(_delayedms.ToString() + " // " + (baseitem.size - 12) + " // " + baseitem.seq + " // " + _item0.seq + " // " + _item1.seq + " // " + _item2.seq, this.filename);

                lock (listIn)
                {
                    listIn.RemoveAll(x => x.seq == _item0.seq);
                    listIn.RemoveAll(x => x.seq == _item1.seq);
                    listIn.RemoveAll(x => x.seq == _item2.seq);
                }

                lock (listOut)
                {
                    listOut.RemoveAll(x => x.seq == baseitem.seq);
                }
            }
            else if (_delayedms == DelayedMil.i240o80)
            {
                int         nseq   = baseitem.seq * 3;
                ReceivedRtp _item0 = list.FirstOrDefault(x => x.seq == nseq);
                ReceivedRtp _item1 = list.FirstOrDefault(x => x.seq == nseq + 1);
                ReceivedRtp _item2 = list.FirstOrDefault(x => x.seq == nseq + 2);

                if (_item0 == null)
                {
                    _item0 = new ReceivedRtp()
                    {
                        buff = new byte[332], seq = nseq, size = 92, ext = baseitem.ext, peer = baseitem.peer
                    };
                }

                if (_item1 == null)
                {
                    _item1 = new ReceivedRtp()
                    {
                        buff = new byte[332], seq = nseq + 1, size = 92, ext = baseitem.ext, peer = baseitem.peer
                    };
                }

                if (_item2 == null)
                {
                    _item2 = new ReceivedRtp()
                    {
                        buff = new byte[332], seq = nseq + 2, size = 92, ext = baseitem.ext, peer = baseitem.peer
                    };
                }

                // util.WriteLogTest3(_delayedms.ToString() + " // " + (baseitem.size - 12) + " // " + baseitem.seq + " // " + _item0.seq + " // " + _item1.seq + " // " + _item2.seq, this.filename);

                // item2 + tmpitem mix with item1 and write
                byte[] tmpbuff = new byte[332];
                Array.Copy(_item0.buff, 0, tmpbuff, 0, _item0.size);
                Array.Copy(_item1.buff, headersize, tmpbuff, _item0.size, _item1.size - headersize);
                Array.Copy(_item1.buff, headersize, tmpbuff, _item0.size + _item1.size - headersize, _item2.size - headersize);
                ReceivedRtp _itm = new ReceivedRtp()
                {
                    buff = tmpbuff, size = _item0.size + _item1.size + _item2.size - headersize
                };
                mixedbytes = this.RealMix(_itm, baseitem);

                lock (listIn)
                {
                    listIn.RemoveAll(x => x.seq == baseitem.seq);
                }

                lock (listOut)
                {
                    listOut.RemoveAll(x => x.seq == _item0.seq);
                    listOut.RemoveAll(x => x.seq == _item1.seq);
                    listOut.RemoveAll(x => x.seq == _item2.seq);
                }
            }
            else if (_delayedms == DelayedMil.same)
            {
                ReceivedRtp _item = list.FirstOrDefault(x => x.seq == baseitem.seq);
                if (_item == null)
                {
                    _item = new ReceivedRtp()
                    {
                        buff = new byte[332], seq = baseitem.seq, size = baseitem.size, ext = baseitem.ext, peer = baseitem.peer
                    };
                }
                mixedbytes = this.RealMix(_item, baseitem);

                // util.WriteLogTest3(_delayedms.ToString() + " // " + (baseitem.size - 12) + " // " + baseitem.seq + " // " + _item.seq, this.filename);

                lock (listIn)
                {
                    listIn.RemoveAll(x => x.seq == _item.seq);
                }

                lock (listOut)
                {
                    listOut.RemoveAll(x => x.seq == baseitem.seq);
                }
            }

            return(mixedbytes);
        }