コード例 #1
0
ファイル: DcaDecoder.cs プロジェクト: suicvne/dca4net
        /// <summary>
        /// Decodes a dca file to PCM data
        /// </summary>
        /// <returns>byte array with PCM data</returns>
        public ReadData Decode(int offset)
        {
            int channels = 2;
            int ms       = 20;

            int blockSize = 48 * 2 * channels * ms;

            using (FileStream fs = new FileStream(__filename, FileMode.Open))
                using (BinaryReader br = new BinaryReader(fs))
                {
                    ushort bytesToRead = 0;
                    br.BaseStream.Position = offset;

                    while ((bytesToRead = br.ReadUInt16()) > 0)
                    {
                        byte[] buffer = new byte[bytesToRead];
                        buffer = br.ReadBytes(bytesToRead);
                        byte[]   pcmBuffer    = new byte[blockSize];
                        int      bytesDecoded = decoder.DecodeFrame(buffer, 0, bytesToRead, pcmBuffer);
                        ReadData r            = new ReadData();
                        r.offset = bytesToRead + offset;
                        r.data   = pcmBuffer;
                        return(r);
                    }
                }
            return(new ReadData());
        }
コード例 #2
0
        public override async Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancelToken)
        {
            if (!_hasHeader)
            {
                throw new InvalidOperationException("Received payload without an RTP header");
            }
            _hasHeader = false;

            if (!_nextMissed)
            {
                count = _decoder.DecodeFrame(buffer, offset, count, _buffer, 0, false);
                await _next.WriteAsync(_buffer, 0, count, cancelToken).ConfigureAwait(false);
            }
            else if (count > 0)
            {
                count = _decoder.DecodeFrame(buffer, offset, count, _buffer, 0, true);
                await _next.WriteAsync(_buffer, 0, count, cancelToken).ConfigureAwait(false);
            }
            else
            {
                count = _decoder.DecodeFrame(null, 0, 0, _buffer, 0, true);
                await _next.WriteAsync(_buffer, 0, count, cancelToken).ConfigureAwait(false);
            }
        }
コード例 #3
0
ファイル: OpusDecodeStream.cs プロジェクト: Lelouch99/bot_cc
 public override int Read(byte[] buffer, int offset, int count)
 {
     count = _decoder.DecodeFrame(buffer, offset, count, _buffer, 0);
     return(base.Read(_buffer, 0, count));
 }