view src/Quantize.h @ 54:83e91b13feb7 v1.0

Fix silly typo
author Chris Cannam
date Tue, 20 Jun 2017 15:27:08 +0100
parents 00b6ae41efbe
children
line wrap: on
line source
/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */

/*
    Tipic

    Centre for Digital Music, Queen Mary, University of London.

    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
    published by the Free Software Foundation; either version 2 of the
    License, or (at your option) any later version.  See the file
    COPYING included with this distribution for more information.
*/

#ifndef QUANTIZE_H
#define QUANTIZE_H

#include <vector>
#include <stdexcept>

class Quantize
{
public:
    class Parameters {
    public:
	std::vector<double> steps;
	std::vector<double> weights;
	Parameters() :
	    steps({ 0.4, 0.2, 0.1, 0.05 }),
	    weights({ 0.25, 0.25, 0.25, 0.25 }) { }
    };

    Quantize(Parameters params) : m_params(params) {
	if (params.steps.empty()) {
	    throw std::invalid_argument("Quantize steps must not be empty");
	}
	if (params.steps.size() != params.weights.size()) {
	    throw std::invalid_argument("Must have same number of quantize steps and weights");
	}
    }
    ~Quantize() { }

    std::vector<double> process(const std::vector<double> &in) {
	int n = in.size();
	int m = m_params.steps.size();
	std::vector<double> out(n, 0.0);
	for (int i = 0; i < n; ++i) {
	    for (int j = 0; j < m; ++j) {
		if (in[i] > m_params.steps[j]) {
		    out[i] += m_params.weights[j];
		}
	    }
	}
	return out;
    }

private:
    Parameters m_params;
};

#endif