VIRTUAL_EQUALIZER(8)

NAME
virtual_equalizer - audio equalizer

SYNOPSIS
virtual_equalizer [-h] [-o] [-q] [-d devname] [-w what] [-p part] [-c channels] [-f file]

DESCRIPTION
virtual_equalizer sets the given frequency response for the given virtual_oss(8) instance via the control character device given by the -d option. The design goal of this equalizer is to provide precise equalization for arbitrary requested frequency response at the expense of higher latency, utilizing a so-called finite impulse response, FIR, filter.

The requested frequency response is configured via standard input or the file specified by the -f option. There is one control point in per line. Each line consists of two numbers, frequency in Hz and requested amplification. Amplification between two consecutive control points is a linear interpolation of the given control point values.

To make the filter finite, it is windowed in time domain using a Hann window. The windowing actually modifies the frequency response - the actual response is a convolution of the requested response and spectrum of the window. This is, however, very close to the requested response.

The following options are available:

-q  Be quiet and don't print anything to standard output.

-d device
    The virtual_oss(8) control character device.

-w what
    Select what part the FIR filter should apply to. Valid values are: rx_dev, tx_dev, rx_loop and tx_loop. The default value is tx_dev.

-p part
    Select the index of the part given by the -w option to apply the filter to. Default is zero.

-c channels
    Select number of channels to apply filter to, starting at channel zero. By default all channels of the given part are updated.

-f file
    Read filter coefficients from the given file instead of standard input.

-o  Turn equalizer off.

-h  Show usage.

EXAMPLES
To pass only frequencies between 200Hz and 400Hz:

    # Note that the -F and -G options enable FIR filtering.
    virtual_oss -B -C 2 -c 2 -S -Q 0 -b 32 -r 48000 -s 8ms -F 80ms -G 80ms \
        -f /dev/dsp -d dsp.virtual -t vdsp.ctl
    # For simplex operation use this:
    virtual_oss -B -C 2 -c 2 -S -Q 0 -b 32 -r 48000 -s 8ms -F 80ms -G 80ms \
        -R /dev/null -O /dev/dsp -d dsp.virtual -t vdsp.ctl
    # Load normalized filter points to avoid sample value overflow
    cat << EOF | virtual_equalizer -d /dev/vdsp.ctl -w tx_dev -p 0 -c 2
    NORMALIZE
    199 0.0
    200 1.0
    400 1.0
    401 0.0
    EOF
    # Load FIR filter based on sine frequency points
    cat << EOF | virtual_equalizer -d /dev/vdsp.ctl -w tx_dev -p 0 -c 2
    199 0.0
    200 1.0
    400 1.0
    401 0.0
    EOF

SEE ALSO
virtual_oss(8)

AUTHORS
virtual_equalizer was written by Richard Kralovic riso@google.com.