public void LoadAudioFile(string fileName) { byte[] buffer; int inc; double totalSec; string extension = Path.GetExtension(fileName); WaveStream stream = null; switch (extension) { case ".wav": case ".wave": stream = new WaveFileReader(fileName); break; case ".mp3": stream = new Mp3FileReader(fileName); break; } if (stream != null) { using (stream) { BitsPerSample = stream.WaveFormat.BitsPerSample; ChannelCount = stream.WaveFormat.Channels; inc = ChannelCount * BitsPerSample / 8; totalSec = stream.TotalTime.TotalSeconds; SampleRate = stream.WaveFormat.SampleRate; buffer = new byte[stream.Length]; stream.Read(buffer, 0, buffer.Length); } PcmData = new float[(buffer.Length + inc - 1) / inc]; if (BitsPerSample == 8) { for (int i = 0; i < PcmData.Length; i++) { PcmData[i] = (float)buffer[i * inc] / 127; } } else if (BitsPerSample == 16) { for (int i = 0; i < PcmData.Length; i++) { PcmData[i] = (float)(short)((buffer[i * inc + 1] << 8) + buffer[i * inc]) / short.MaxValue; } } _pitchTracker = new PitchTracker(); _pitchTracker.PitchRecordsPerSecond = 1 / PieceLengthInMSec; _pitchTracker.SampleRate = SampleRate; _pitchTracker.RecordPitchRecords = true; _pitchTracker.DetectLevelThreshold = (float)DetectLevelThreshold; } }
public void InitRealtimeMode(int channelCount, int bitsPerSample, int sampleRate, int sampleLengthMSec, PitchDetectedHandler handler) { ChannelCount = channelCount; BitsPerSample = bitsPerSample; PieceLengthInMSec = sampleLengthMSec; _pitchTracker = new PitchTracker(); _pitchTracker.PitchRecordsPerSecond = 1000.0 / PieceLengthInMSec; _pitchTracker.SampleRate = sampleRate; _pitchTracker.RecordPitchRecords = true; _pitchTracker.DetectLevelThreshold = (float)DetectLevelThreshold; _pitchTracker.PitchDetected += handler; }