Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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));
        }