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]; } _fftSize = int.Parse(fftSizeTextBox.Text); _cepstrumSize = int.Parse(cepstrumSizeTextBox.Text); _hopSize = int.Parse(hopSizeTextBox.Text); _fft = new RealFft(_fftSize); _cepstralTransform = new CepstralTransform(_cepstrumSize, _fftSize); var options = new PitchOptions { SamplingRate = _signal.SamplingRate, FrameDuration = (double)_fftSize / _signal.SamplingRate, HopDuration = (double)_hopSize / _signal.SamplingRate }; var pitchExtractor = new PitchExtractor(options); _pitches = pitchExtractor.ParallelComputeFrom(_signal); _specNo = 0; specNoComboBox.DataSource = Enumerable.Range(1, _pitches.Count).ToArray(); // obtain spectrogram _stft = new Stft(_fftSize, _hopSize, WindowTypes.Rectangular); var spectrogram = _stft.Spectrogram(_signal); spectrogramPanel.ColorMapName = "viridis"; spectrogramPanel.MarklineThickness = 6; spectrogramPanel.Spectrogram = spectrogram.Select(s => s.Take(224).ToArray()).ToList(); spectrogramPanel.Markline = _pitches.Select(p => p[0] * _fftSize / _signal.SamplingRate).ToArray(); }
/// <summary> /// Constructs extractor from configuration <paramref name="options"/>. /// </summary> public PitchExtractor(PitchOptions options) : base(options) { _low = (float)options.LowFrequency; _high = (float)options.HighFrequency; _blockSize = MathUtils.NextPowerOfTwo(2 * FrameSize - 1); _convolver = new Convolver(_blockSize); _reversed = new float[FrameSize]; _cc = new float[_blockSize]; FeatureCount = 1; FeatureDescriptions = new List <string>() { "pitch" }; }
public async void StartRecording() { if (_recorder != null) { StopRecording(); } var context = Android.App.Application.Context; var audioManager = (AudioManager)context.GetSystemService(Context.AudioService); _samplingRate = int.Parse(audioManager.GetProperty(AudioManager.PropertyOutputSampleRate)); //_bufferSize = 4 * AudioRecord.GetMinBufferSize(_samplingRate, ChannelIn.Mono, Encoding.PcmFloat); _bufferSize = 4 * AudioRecord.GetMinBufferSize(_samplingRate, ChannelIn.Mono, Encoding.Pcm16bit); _recorder = new AudioRecord(AudioSource.Mic, _samplingRate, _channelCount, _audioEncodingType, _bufferSize); //uncomment for PcmFloat mode: ===================== //_sizeInFloats = _bufferSize / sizeof(float); //instead of Pcm16bit: ============================= _sizeInFloats = _bufferSize / sizeof(short); _data = new float[1][]; _data[0] = new float[_sizeInFloats]; // only one channel (mono) _bytes = new byte[_bufferSize]; _temp = new byte[_sizeInFloats * sizeof(float)]; var options = new PitchOptions { SamplingRate = _samplingRate, FrameDuration = (double)_sizeInFloats / _samplingRate }; _pitchExtractor = new PitchExtractor(options); _pitch = new float[1]; _robotizer = new RobotEffect(216, 1024); _recorder.StartRecording(); _isRecording = true; await ProcessAudioData(); }
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 pitchOptions = new PitchOptions { SamplingRate = _signal.SamplingRate, FrameDuration = frameDuration, HopDuration = hopDuration, HighFrequency = 900/*Hz*/ }; var pitchExtractor = new PitchExtractor(pitchOptions); var pitchTrack = pitchExtractor.ParallelComputeFrom(_signal) .Select(p => p[0]) .ToArray(); var options = new MultiFeatureOptions { SamplingRate = _signal.SamplingRate, FrameDuration = frameDuration, HopDuration = hopDuration }; var tdExtractor = new TimeDomainFeaturesExtractor(options); tdExtractor.AddFeature("pitch_zcr", (signal, start, end) => Pitch.FromZeroCrossingsSchmitt(signal, start, end)); var mpeg7Extractor = new Mpeg7SpectralFeaturesExtractor(options); mpeg7Extractor.IncludeHarmonicFeatures("all"); mpeg7Extractor.SetPitchTrack(pitchTrack); options.FeatureList = "sc+sn"; options.Frequencies = freqs; var spectralExtractor = new SpectralFeaturesExtractor(options); //spectralExtractor.AddFeature("pitch_hss", (spectrum, fs) => Pitch.FromHss(spectrum, _signal.SamplingRate)); var tdVectors = tdExtractor.ParallelComputeFrom(_signal); var spectralVectors = spectralExtractor.ParallelComputeFrom(_signal); var mpeg7Vectors = mpeg7Extractor.ComputeFrom(_signal); _vectors = FeaturePostProcessing.Join(tdVectors, spectralVectors, mpeg7Vectors); //FeaturePostProcessing.NormalizeMean(_vectors); //FeaturePostProcessing.AddDeltas(_vectors); var descriptions = tdExtractor.FeatureDescriptions .Concat(spectralExtractor.FeatureDescriptions) .Concat(mpeg7Extractor.FeatureDescriptions) .ToList(); FillFeaturesList(_vectors, descriptions, tdExtractor.TimeMarkers(_vectors.Length)); spectrogramPlot.ColorMapName = "afmhot"; spectrogramPlot.MarklineThickness = 2; spectrogramPlot.Spectrogram = _stft.Spectrogram(_signal); }