public bool processBuffer(byte[] rxBuf, out byte[] pcm16) { int len; pcm16 = null; try { pcm16 = decoder.Decode(rxBuf.Skip(1).ToArray(), rxBuf.Length - 1, out len); pcm16 = pcm16.Take(len).ToArray(); return(true); } catch { } return(false); }
public void AudioReceived(IPPacket p) { if (_audioStream == null || IsBufferNearlyFull) { return; } p.Read(out int frames, out bool s); p.Read(out int l, out s); byte[] arr = new byte[l]; p.Read(ref arr, out s); _syncContext.Post(o => { arr = _decoder.Decode(arr, frames, out l); _audioStream.AddSamples(arr, 0, l); //_audioStream.BufferedDuration.Print(); if (_audioStream.BufferedDuration.TotalSeconds < 0.01f) { PauseAudio(); } else if (_audioStream.BufferedDuration.TotalSeconds > fullSpeed) { PlayAudio(); } _playbackRate += Math.Min(1, Math.Max(0.75f, (float)_audioStream.BufferedDuration.TotalSeconds / fullSpeed)); reads++; _speedControl.PlaybackRate = _playbackRate / reads; //_speedControl.PlaybackRate.Print(); if (reads > 20) { reads /= 2; _playbackRate /= 2; } }, null); }
public OpusWaveProvider(Stream stream, uint length) { using (MemoryStream temp = new MemoryStream()) using (BinaryWriter writer = new BinaryWriter(temp)) using (OpusDecoder decoder = OpusDecoder.Create(48000, 1)) using (BinaryReader reader = new BinaryReader(stream)) { //long offset = stream.Position; for (int i = 0; i < length; i++) //while (stream.Position < length) { int framesize = (int)reader.ReadUInt32(); byte[] frame = reader.ReadBytes(framesize); int outputlen; byte[] output = decoder.Decode(frame, framesize, out outputlen); writer.Write(output, 0, outputlen); } internalstream = new MemoryStream(temp.ToArray()); } }
void _waveIn_DataAvailable(object sender, WaveInEventArgs e) { byte[] soundBuffer = new byte[e.BytesRecorded + _notEncodedBuffer.Length]; for (int i = 0; i < _notEncodedBuffer.Length; i++) { soundBuffer[i] = _notEncodedBuffer[i]; } for (int i = 0; i < e.BytesRecorded; i++) { soundBuffer[i + _notEncodedBuffer.Length] = e.Buffer[i]; } int byteCap = _bytesPerSegment; int segmentCount = (int)Math.Floor((decimal)soundBuffer.Length / byteCap); int segmentsEnd = segmentCount * byteCap; int notEncodedCount = soundBuffer.Length - segmentsEnd; _notEncodedBuffer = new byte[notEncodedCount]; for (int i = 0; i < notEncodedCount; i++) { _notEncodedBuffer[i] = soundBuffer[segmentsEnd + i]; } for (int i = 0; i < segmentCount; i++) { byte[] segment = new byte[byteCap]; for (int j = 0; j < segment.Length; j++) { segment[j] = soundBuffer[(i * byteCap) + j]; } int len; byte[] buff = _encoder.Encode(segment, segment.Length, out len); _bytesSent += (ulong)len; buff = _decoder.Decode(buff, len, out len); _playBuffer.AddSamples(buff, 0, len); } }