コード例 #1
1
ファイル: FeaturesForm.cs プロジェクト: rikosaputra/NWaves
        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);
        }
コード例 #2
0
ファイル: FeaturesForm.cs プロジェクト: kaikyosoft/NWaves
        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];
            }

            var frameSize = (double)4096 / _signal.SamplingRate;
            var hopSize   = (double)2048 / _signal.SamplingRate;

            var tdExtractor       = new TimeDomainFeaturesExtractor("all", frameSize, hopSize);
            var spectralExtractor = new SpectralFeaturesExtractor("all", frameSize, hopSize);

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

            _vectors = FeaturePostProcessing.Join(tdVectors, spectralVectors);

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

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

            FillFeaturesList(_vectors, descriptions);
        }
コード例 #3
0
        public void TestVarianceNormalization()
        {
            FeaturePostProcessing.NormalizeVariance(_feats, bias: 0);

            Assert.Multiple(() =>
            {
                Assert.That(_feats[0], Is.EqualTo(new float[] { 2.5f, 2, 2.74f, 2.04f, 3.536f }).Within(1e-2));
                Assert.That(_feats[1], Is.EqualTo(new float[] { 0, 2, 3.65f, 0, 2.83f }).Within(1e-2));
                Assert.That(_feats[2], Is.EqualTo(new float[] { 0, 2, 5.48f, 2.04f, 2.12f }).Within(1e-2));
                Assert.That(_feats[3], Is.EqualTo(new float[] { 0, 2, 3.65f, 0, 1.41f }).Within(1e-2));
                Assert.That(_feats[4], Is.EqualTo(new float[] { 0, 2, 2.74f, 2.04f, 0.71f }).Within(1e-2));
            });
        }
コード例 #4
0
        public void TestMeanNormalization()
        {
            FeaturePostProcessing.NormalizeMean(_feats);

            Assert.Multiple(() =>
            {
                Assert.That(_feats[0], Is.EqualTo(new float[] { 0.8f, 0, -1, 1.6f, 2 }).Within(1e-5));
                Assert.That(_feats[1], Is.EqualTo(new float[] { -0.2f, 0, 0, -2.4f, 1 }).Within(1e-5));
                Assert.That(_feats[2], Is.EqualTo(new float[] { -0.2f, 0, 2, 1.6f, 0 }).Within(1e-5));
                Assert.That(_feats[3], Is.EqualTo(new float[] { -0.2f, 0, 0, -2.4f, -1 }).Within(1e-5));
                Assert.That(_feats[4], Is.EqualTo(new float[] { -0.2f, 0, -1, 1.6f, -2 }).Within(1e-5));
            });
        }
コード例 #5
0
        public void TestDeltas()
        {
            FeaturePostProcessing.AddDeltas(_feats);

            Assert.That(_feats[0].Features, Is.EqualTo(
                            new float[] { 1, 2, 3, 4, 5,                        // main features
                                          -.3f, 0, .7f, -.4f, -.5f,             // delta
                                          .02f, 0, -.16f, .04f, -.13f })        // delta-delta
                        .Within(1e-5));

            //Assert.That(_feats[1].Features, Is.EqualTo(
            //                           new float[] {    0,   2,   4,    0,    4,
            //                                         -.3f,   0, .5f, -.8f, -.8f  }).Within(1e-5));
            //Assert.That(_feats[2].Features, Is.EqualTo(
            //                           new float[] {    0,   2,   6,    4,    3,
            //                                         -.2f,   0,   0,    0,   -1  }).Within(1e-5));
        }