/// <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()); }
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); } }
public override int Read(byte[] buffer, int offset, int count) { count = _decoder.DecodeFrame(buffer, offset, count, _buffer, 0); return(base.Read(_buffer, 0, count)); }