Exemple #1
0
        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;
            }
        }
Exemple #2
0
        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;
        }