00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 package com.meapsoft.featextractors;
00024
00025 import com.meapsoft.MEAPUtil;
00026 import com.meapsoft.STFT;
00027
00038 public class AvgChromaScalar extends AvgChroma {
00039
00040 public static String description = "I am a generic FeatureExtractor";
00041
00042
00043 public AvgChromaScalar() {
00044
00045
00046 this(1025, 12, MEAPUtil.samplingRate);
00047 }
00048
00049 public AvgChromaScalar(int N, int outDim, double sampleRate) {
00050 super(N, outDim, sampleRate);
00051 }
00052
00053
00054 public double[] features(STFT stft, long startFrame, int length) {
00055 double[] chromaVal = new double[1];
00056
00057 double [] chromSpec;
00058
00059 chromSpec = super.features(stft, startFrame, length);
00060
00061
00062 double re = 0, im = 0;
00063 for (int bin = 0; bin < outDim; ++bin) {
00064 re = re + chromSpec[bin] * Math.cos(6.28318531*bin/outDim);
00065 im = im + chromSpec[bin] * Math.sin(6.28318531*bin/outDim);
00066 }
00067
00068 double meanchrom = outDim * (Math.atan2(im, re) / 6.28318531);
00069
00070
00071 if (meanchrom < 0)
00072 meanchrom += outDim;
00073
00074 chromaVal[0] = meanchrom;
00075
00076 return chromaVal;
00077 }
00078 }