/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef EQ_H_ #define EQ_H_ #ifdef __cplusplus extern "C" { #endif /* An EQ is a chain of biquad filters. See Web Audio API spec for details of the * biquad filters and their parameters. */ #include "biquad.h" /* Maximum number of biquad filters an EQ can have */ #define MAX_BIQUADS_PER_EQ 10 struct eq; /* Create an EQ. */ struct eq *eq_new(); /* Free an EQ. */ void eq_free(struct eq *eq); /* Append a biquad filter to an EQ. An EQ can have at most MAX_BIQUADS_PER_EQ * biquad filters. * Args: * eq - The EQ we want to use. * type - The type of the biquad filter we want to append. * frequency - The value should be in the range [0, 1]. It is relative to * half of the sampling rate. * Q, gain - The meaning depends on the type of the filter. See Web Audio * API for details. * Returns: * 0 if success. -1 if the eq has no room for more biquads. */ int eq_append_biquad(struct eq *eq, enum biquad_type type, float freq, float Q, float gain); /* Append a biquad filter to an EQ. An EQ can have at most MAX_BIQUADS_PER_EQ * biquad filters. This is similar to eq_append_biquad(), but it specifies the * biquad coefficients directly. * Args: * eq - The EQ we want to use. * biquad - The parameters for the biquad filter. * Returns: * 0 if success. -1 if the eq has no room for more biquads. */ int eq_append_biquad_direct(struct eq *eq, const struct biquad *biquad); /* Process a buffer of audio data through the EQ. * Args: * eq - The EQ we want to use. * data - The array of audio samples. * count - The number of elements in the data array to process. */ void eq_process(struct eq *eq, float *data, int count); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* EQ_H_ */