public float[] ReadMonoSamples(int sampleRate, int secondsToRecord) { var producer = new BlockingCollection <float[]>(); float[] samples; using (var waveIn = naudioFactory.GetWaveInEvent(sampleRate, Mono)) { waveIn.DataAvailable += (sender, e) => { var chunk = SamplesConverter.GetFloatSamplesFromByte(e.BytesRecorded, e.Buffer); producer.Add(chunk); }; waveIn.RecordingStopped += (sender, args) => producer.CompleteAdding(); waveIn.StartRecording(); samples = samplesAggregator.ReadSamplesFromSource( new BlockingQueueSamplesProvider(producer), secondsToRecord, sampleRate); waveIn.StopRecording(); } return(samples); }
private float[] GetWrittenSamplesInStream(MemoryStream memoryStream, int length) { const int WaveHeaderLength = 58; memoryStream.Seek(WaveHeaderLength, SeekOrigin.Begin); const int BytesInFloat = 4; byte[] buffer = new byte[length * BytesInFloat]; memoryStream.Read(buffer, 0, length * BytesInFloat); return(SamplesConverter.GetFloatSamplesFromByte(length * BytesInFloat, buffer)); }