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); }
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; }
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; }
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); }