Exemple #1
1
        private void openToolStripMenuItem_Click(object sender, EventArgs e)
        {
            var ofd = new OpenFileDialog();

            if (ofd.ShowDialog() != DialogResult.OK)
            {
                return;
            }

            using (var stream = new FileStream(ofd.FileName, FileMode.Open))
            {
                var waveFile = new WaveFile(stream);
                _signal = waveFile[Channels.Left];
            }

            _stft = new Stft(_frameSize, _hopSize);

            var frameDuration = (double)_frameSize / _signal.SamplingRate;
            var hopDuration   = (double)_hopSize / _signal.SamplingRate;

            var freqs = new[] { 300f, 600, 1000, 2000, 4000, 7000 };

            var pitchExtractor = new PitchExtractor(_signal.SamplingRate, frameDuration, hopDuration, high: 900 /*Hz*/);
            var pitchTrack     = pitchExtractor.ParallelComputeFrom(_signal)
                                 .Select(p => p.Features[0])
                                 .ToArray();

            var tdExtractor       = new TimeDomainFeaturesExtractor(_signal.SamplingRate, "all", frameDuration, hopDuration);
            var spectralExtractor = new SpectralFeaturesExtractor(_signal.SamplingRate, "sc+sn", frameDuration, hopDuration, frequencies: freqs);
            var mpeg7Extractor    = new Mpeg7SpectralFeaturesExtractor(_signal.SamplingRate, "all", frameDuration, hopDuration);

            mpeg7Extractor.IncludeHarmonicFeatures("all");
            mpeg7Extractor.SetPitchTrack(pitchTrack);

            tdExtractor.AddFeature("pitch_zcr", (signal, start, end) => { return(Pitch.FromZeroCrossingsSchmitt(signal, start, end)); });
            //spectralExtractor.AddFeature("pitch_hss", (spectrum, fs) => { return Pitch.FromHss(spectrum, _signal.SamplingRate); } );

            var tdVectors       = tdExtractor.ParallelComputeFrom(_signal);
            var spectralVectors = spectralExtractor.ParallelComputeFrom(_signal);
            var mpeg7Vectors    = mpeg7Extractor.ParallelComputeFrom(_signal);

            _vectors = FeaturePostProcessing.Join(tdVectors, spectralVectors, mpeg7Vectors);

            //FeaturePostProcessing.NormalizeMean(_vectors);
            //FeaturePostProcessing.AddDeltas(_vectors);

            var descriptions = tdExtractor.FeatureDescriptions
                               .Concat(spectralExtractor.FeatureDescriptions)
                               .Concat(mpeg7Extractor.FeatureDescriptions);

            FillFeaturesList(_vectors, descriptions);

            spectrogramPlot.ColorMapName      = "afmhot";
            spectrogramPlot.MarklineThickness = 2;
            spectrogramPlot.Spectrogram       = _stft.Spectrogram(_signal);
        }
Exemple #2
0
        private async Task ProcessAudioData()
        {
            var data = _data[0];

            var filename = TempFileName;

            using (var tempStream = new FileStream(filename, FileMode.Create))
            {
                // ==================================== main recording loop ========================================

                while (_isRecording)
                {
                    // ====================================== read data ============================================

                    //uncomment for PcmFloat mode: ============================
                    //await _recorder.ReadAsync(data, 0, _sizeInFloats, 0);
                    //instead of Pcm16bit:
                    await _recorder.ReadAsync(_bytes, 0, _bufferSize);

                    ByteConverter.ToFloats16Bit(_bytes, _data);
                    // ========================================================

                    // ===================================== process data ==========================================

                    _pitchExtractor.ProcessFrame(data, _pitch);

                    _pitchArgs.PitchZcr      = Pitch.FromZeroCrossingsSchmitt(data, _samplingRate);
                    _pitchArgs.PitchAutoCorr = _pitch[0];

                    PitchEstimated(this, _pitchArgs); // event

                    _robotizer.Process(data, data);

                    // ==================== write data to output stream (if necessary) =============================

                    //uncomment for PcmFloat mode: =========================
                    //Buffer.BlockCopy(data, 0, _bytes, 0, _bufferSize);    // faster than writing float-after-float
                    //await tempStream.WriteAsync(_bytes, 0, _bufferSize);
                    //instead of Pcm16bit:
                    Buffer.BlockCopy(data, 0, _temp, 0, _temp.Length);
                    await tempStream.WriteAsync(_temp, 0, _temp.Length);

                    // =====================================================
                }
            }

            SaveToFile();
        }