All Downloads are FREE. Search and download functionalities are using the official Maven repository.

musicg.properties.FingerprintProperties Maven / Gradle / Ivy

/*
 *
 *  *
 *  *  * Copyright 2015 Skymind,Inc.
 *  *  *
 *  *  *    Licensed under the Apache License, Version 2.0 (the "License");
 *  *  *    you may not use this file except in compliance with the License.
 *  *  *    You may obtain a copy of the License at
 *  *  *
 *  *  *        http://www.apache.org/licenses/LICENSE-2.0
 *  *  *
 *  *  *    Unless required by applicable law or agreed to in writing, software
 *  *  *    distributed under the License is distributed on an "AS IS" BASIS,
 *  *  *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  *  *    See the License for the specific language governing permissions and
 *  *  *    limitations under the License.
 *  *
 *
 */

package musicg.properties;

public class FingerprintProperties {
	
	protected static FingerprintProperties instance=null;

	private int numRobustPointsPerFrame=4;	// number of points in each frame, i.e. top 4 intensities in fingerprint
	private int sampleSizePerFrame=2048;	// number of audio samples in a frame, it is suggested to be the FFT Size
	private int overlapFactor=4;	// 8 means each move 1/8 nSample length. 1 means no overlap, better 1,2,4,8 ...	32
	private int numFilterBanks=4;
	
	private int upperBoundedFrequency=1500;	// low pass
	private int lowerBoundedFrequency=400;	// high pass
	private int fps=5;	// in order to have 5fps with 2048 sampleSizePerFrame, wave's sample rate need to be 10240 (sampleSizePerFrame*fps)
	private int sampleRate=sampleSizePerFrame*fps;	// the audio's sample rate needed to resample to this in order to fit the sampleSizePerFrame and fps
	private int numFramesInOneSecond=overlapFactor*fps;	// since the overlap factor affects the actual number of fps, so this value is used to evaluate how many frames in one second eventually  
	
	private int refMaxActivePairs=1;	// max. active pairs per anchor point for reference songs
	private int sampleMaxActivePairs=10;	// max. active pairs per anchor point for sample clip
	private int numAnchorPointsPerInterval=10;
	private int anchorPointsIntervalLength=4;	// in frames (5fps,4 overlap per second)
	private int maxTargetZoneDistance=4;	// in frame (5fps,4 overlap per second)
	
	private int numFrequencyUnits=(upperBoundedFrequency-lowerBoundedFrequency+1)/fps+1;	// num frequency units
	
	public static FingerprintProperties getInstance(){		
		if (instance == null){
            synchronized(FingerprintProperties.class){
                if(instance == null) {
                     instance = new FingerprintProperties();
                }
            }
        }
        return instance;
	}

	public int getNumRobustPointsPerFrame() {
		return numRobustPointsPerFrame;
	}

	public int getSampleSizePerFrame() {
		return sampleSizePerFrame;
	}

	public int getOverlapFactor() {
		return overlapFactor;
	}

	public int getNumFilterBanks() {
		return numFilterBanks;
	}

	public int getUpperBoundedFrequency() {
		return upperBoundedFrequency;
	}

	public int getLowerBoundedFrequency() {
		return lowerBoundedFrequency;
	}

	public int getFps() {
		return fps;
	}

	public int getRefMaxActivePairs() {
		return refMaxActivePairs;
	}

	public int getSampleMaxActivePairs() {
		return sampleMaxActivePairs;
	}

	public int getNumAnchorPointsPerInterval() {
		return numAnchorPointsPerInterval;
	}

	public int getAnchorPointsIntervalLength() {
		return anchorPointsIntervalLength;
	}

	public int getMaxTargetZoneDistance() {
		return maxTargetZoneDistance;
	}

	public int getNumFrequencyUnits() {
		return numFrequencyUnits;
	}
	
	public int getMaxPossiblePairHashcode(){
		return maxTargetZoneDistance*numFrequencyUnits*numFrequencyUnits+numFrequencyUnits*numFrequencyUnits+numFrequencyUnits;
	}

	public int getSampleRate() {
		return sampleRate;
	}

	public int getNumFramesInOneSecond() {
		return numFramesInOneSecond;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy