public static bool StreamChunk(VorbisStreamHandle handle, out PcmData pcm, uint bufferSize = DefaultBufferSize) { pcm.DataLength = 0; pcm.ChannelCount = handle.VorbisInstance.Channels; pcm.SampleRate = handle.VorbisInstance.SampleRate; bool eof = false; float[] buffer = new float[bufferSize]; while (pcm.DataLength < buffer.Length) { int samplesRead; lock (readMutex) { samplesRead = handle.VorbisInstance.ReadSamples(buffer, pcm.DataLength, buffer.Length - pcm.DataLength); } if (samplesRead > 0) { pcm.DataLength += samplesRead; } else { eof = true; break; } } pcm.Data = new short[pcm.DataLength]; CastBuffer(buffer, pcm.Data, 0, pcm.DataLength); return pcm.DataLength > 0 && !eof; }
public static bool StreamChunk(VorbisStreamHandle handle, out PcmData pcm, uint bufferSize = DefaultBufferSize) { pcm.DataLength = 0; pcm.ChannelCount = handle.VorbisInstance.Channels; pcm.SampleRate = handle.VorbisInstance.SampleRate; bool eof = false; float[] buffer = new float[bufferSize]; while (pcm.DataLength < buffer.Length) { int samplesRead; lock (readMutex) { samplesRead = handle.VorbisInstance.ReadSamples(buffer, pcm.DataLength, buffer.Length - pcm.DataLength); } if (samplesRead > 0) { pcm.DataLength += samplesRead; } else { eof = true; break; } } pcm.Data = new short[pcm.DataLength]; CastBuffer(buffer, pcm.Data, 0, pcm.DataLength); return(pcm.DataLength > 0 && !eof); }
public static bool ReadAll(VorbisStreamHandle handle, out PcmData pcm) { pcm.ChannelCount = handle.VorbisInstance.Channels; pcm.SampleRate = handle.VorbisInstance.SampleRate; pcm.DataLength = 0; List <float[]> allBuffers = new List <float[]>(); bool eof = false; int totalSamplesRead = 0; while (!eof) { float[] buffer = new float[DefaultBufferSize]; int bufferSamplesRead = 0; while (bufferSamplesRead < buffer.Length) { int samplesRead; lock (readMutex) { samplesRead = handle.VorbisInstance.ReadSamples(buffer, pcm.DataLength, buffer.Length - pcm.DataLength); } if (samplesRead > 0) { bufferSamplesRead += samplesRead; } else { eof = true; break; } } allBuffers.Add(buffer); totalSamplesRead += bufferSamplesRead; } if (totalSamplesRead > 0) { pcm.DataLength = totalSamplesRead; pcm.Data = new short[totalSamplesRead]; int offset = 0; for (int i = 0; i < allBuffers.Count; i++) { int len = Math.Min(pcm.Data.Length - offset, allBuffers[i].Length); CastBuffer(allBuffers[i], pcm.Data, offset, len); offset += len; } return(!eof); } else { pcm.Data = new short[0]; return(false); } }
public static bool ReadAll(VorbisStreamHandle handle, out PcmData pcm) { pcm.ChannelCount = handle.VorbisInstance.Channels; pcm.SampleRate = handle.VorbisInstance.SampleRate; pcm.DataLength = 0; List<float[]> allBuffers = new List<float[]>(); bool eof = false; int totalSamplesRead = 0; while (!eof) { float[] buffer = new float[DefaultBufferSize]; int bufferSamplesRead = 0; while(bufferSamplesRead < buffer.Length) { int samplesRead; lock (readMutex) { samplesRead = handle.VorbisInstance.ReadSamples(buffer, pcm.DataLength, buffer.Length - pcm.DataLength); } if (samplesRead > 0) { bufferSamplesRead += samplesRead; } else { eof = true; break; } } allBuffers.Add(buffer); totalSamplesRead += bufferSamplesRead; } if (totalSamplesRead > 0) { pcm.DataLength = totalSamplesRead; pcm.Data = new short[totalSamplesRead]; int offset = 0; for (int i = 0; i < allBuffers.Count; i++) { int len = Math.Min(pcm.Data.Length - offset, allBuffers[i].Length); CastBuffer(allBuffers[i], pcm.Data, offset, len); offset += len; } return !eof; } else { pcm.Data = new short[0]; return false; } }