Ejemplo n.º 1
0
        public BassProfile() : base()
        {
            Name = "Bass";

            // bass range 80 - 350 Hz: http://www.listenhear.co.uk/general_acoustics.htm
            MinFrequency = 80;
            MaxFrequency = 350;

            this.frequencyBands = FFTUtil.CalculateFrequencyBoundariesLog(MinFrequency, MaxFrequency, FrequencyBands);
        }
Ejemplo n.º 2
0
        public VoiceProfile() : base()
        {
            Name = "Voice";

            // vocal range 80 - 1100 Hz: http://en.wikipedia.org/wiki/Vocal_range
            MinFrequency = 80;
            MaxFrequency = 1100;

            this.frequencyBands = FFTUtil.CalculateFrequencyBoundariesLog(MinFrequency, MaxFrequency, FrequencyBands);
        }
Ejemplo n.º 3
0
        public HumanProfile() : base()
        {
            Name = "Human (slow!)";

            FrameSize  = 16384;
            FrameStep  = 512;
            SampleRate = 44100;

            MinFrequency   = 80;
            MaxFrequency   = 16000;
            FrequencyBands = 33;

            HashTimeScale = 1d / SampleRate * FrameStep;

            this.frequencyBands = FFTUtil.CalculateFrequencyBoundariesLog(MinFrequency, MaxFrequency, FrequencyBands);
        }
Ejemplo n.º 4
0
        public DefaultProfile()
        {
            Name = "Haitsma&Kalker default";

            FrameSize  = 2048;
            FrameStep  = 64;
            SampleRate = 5512;

            MinFrequency   = 300;
            MaxFrequency   = 2000;
            FrequencyBands = 33;

            FlipWeakestBits = 3;

            HashTimeScale = 1d / SampleRate * FrameStep;

            this.frequencyBands = FFTUtil.CalculateFrequencyBoundariesLog(MinFrequency, MaxFrequency, FrequencyBands);
        }
Ejemplo n.º 5
0
        private int[] MakeFrequencyMap()
        {
            int[] map = new int[WINDOW_SIZE / 2];

            // convert FFT result to compacted frame representation
            // linear mapping of first bins up to 370Hz
            for (int i = 0; i < 17; i++)
            {
                map[i] = i;
            }

            // logarithmic mapping of 370Hz - 12.5kHz
            // NOTE same code pattern as in FingerprintGenerator
            double[] frequencyMidLogBands = FFTUtil.CalculateFrequencyBoundariesLog(370, 12500, 66);
            double   bandWidth            = SAMPLERATE / 2d / fftFreqBins.Length;

            for (int x = 0; x < frequencyMidLogBands.Length - 1; x++)
            {
                currentFrame[17 + x] = 0;
                int lowerIndex = (int)(frequencyMidLogBands[x] / bandWidth);
                int upperIndex = (int)(frequencyMidLogBands[x + 1] / bandWidth);
                for (int y = lowerIndex; y < upperIndex; y++)
                {
                    map[y] = 17 + x;
                }
            }

            // summation of bins above 12.5kHz
            currentFrame[83] = 0;
            for (int i = 580; i < fftFreqBins.Length; i++)
            {
                map[i] = 83;
            }

            return(map);
        }