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); }
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); }
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)); }); }
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)); }); }
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)); }