Package org.vocvark.AudioFeatures

Source Code of org.vocvark.AudioFeatures.RelativeDifferenceFunction

package org.vocvark.AudioFeatures;

import org.vocvark.DataTypes.FeatureDefinition;

/**
* This feature calculates the log of the derivative of the RMS. This is useful
* for onset detection.
*
* @author Daniel McEnnis
*/
public class RelativeDifferenceFunction extends FeatureExtractorBaseImpl {

    /**
     * Basic constructor that sets the definition and dependencies (and their
     * offsets) of this feature.
     */
    public RelativeDifferenceFunction() {
        String name = "Relative Difference Function";
        String decsription = "log of the derivative of RMS.  Used for onset detection.";
        definition = new FeatureDefinition(name, decsription, true, 1);
        dependencies = new String[]{"Root Mean Square", "Root Mean Square"};
        offsets = new int[]{0, -1};
    }

    /**
     * Calculates the log ofthe derivative of the RMS from the last 2 versions
     * of RMS
     *
     * @param samples              The samples to extract the feature from.
     * @param sampling_rate        The sampling rate that the samples are encoded with.
     * @param other_feature_values The values of other features that are needed to calculate this
     *                             value. The order and offsets of these features must be the
     *                             same as those returned by this class's getDependencies and
     *                             getDependencyOffsets methods respectively. The first indice
     *                             indicates the feature/window and the second indicates the
     *                             value.
     * @return The extracted feature value(s).
     * @throws Exception Throws an informative exception if the feature cannot be
     *                   calculated.
     */
    public double[] extractFeature(double[] samples, double sampling_rate,
                                   double[][] other_feature_values) throws Exception {
        double[] ret = new double[1];
        double difference = Math.abs(other_feature_values[0][0]
                - other_feature_values[1][0]);
        if (difference < 1E-50) {
            difference = 1E-50;
        }
        ret[0] = Math.log(difference);

        return ret;

    }

    /**
     * Create an identical copy of this feature. This permits FeatureExtractor
     * to use the prototype pattern to create new composite features using
     * metafeatures.
     */
    public Object clone() {
        return new RelativeDifferenceFunction();
    }

}
TOP

Related Classes of org.vocvark.AudioFeatures.RelativeDifferenceFunction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.