XMMS Plugins

XMMS Plugins

I wrote the two plugins,
  1. FIR Filter Plugin
  2. Soundcard Plugin

to be able to use my PC as a digitial signal processor (DSP) for processing audio data using long finite impulse response (FIR) filters. My main objective was to have a tool to equalize loadspeakers without having to buy specialized DSP hardware.

In short, you can connect an audio source to one of the inputs of your soundcard (line/SPDIF/mic) and let XMMS process (filter) the audio data and then connect the output to your amplifier. However, the plugins can be use seprately as well; that is, you can use any of the XMMS effect plugins in combination with the Soundcard Plugin or you can use any input plugin with the FIR Filter Plugin.

Note that FIR filters are very general in the sense that you can approximate any linear filter with a FIR filter (provided that it is sufficiently long). You can, for example, do lowpass, highpass, bandpass filtering etc. All you need is a tool to compute the FIR filter weights - which is what you do when you turn the nobs on your graphical equalizer for example. A drawback with a standard graphical equalizer is that you only change the amplitude response and not the phase. I recommend the software tools Octave (freeware) or Matlab (commercial) if you want to do more advanced filter design.

See also: BruteFIR, nwfiir, DIRAC Research, Digital Room Correction, Linux Sound, Introduction to Sound Processing (book), DSP Book.

Send comments or bug reports to fl AT signal.uu.se.

The FIR Filter Plugin

The FIR filter Plugin is an effect plugin for XMMS which enables to filter audio data using long FIR (finite impulse response) filters. Typical applications is loudspeaker or room equalization which typically requires filters with more than 300 taps (filter weights).

The FIR filter plugin uses the fftw3 library [1] to perform the filtering using the overlap-and-add method [2,3]. If fftw3 is not available the plugin will perform the filtering (convolution) in the time-domain which is much less efficient for long filters.

Download:

xmms-filter-plugin-1.0.0.tar.gz

Uncompress using tar xvzf xmms-filter-plugin-1.0.0.tar.gz and read the README and INSTALL files.

Example filters:

Low pass filter with a cut-off frequency at 800 Hz (frequency response).

High pass filter with a cut-off frequency at 3 kHz (frequency response).

Matlab code for generating the filters above:

N=400; % Filter length.

Fs = 44100; % Sampling freq.
Ns = Fs/2; % Nyquist freq.

Wn = 800/Ns; % Normalized cut off freq.

h_low = fir1(N,Wn,'low');
h_low = h_low(:);
save -ascii h_low.dat h_low

Wn = 3000/Ns; % Normalized cut off freq.

h_high = fir1(N,Wn,'high');
h_high = h_high(:);
save -ascii h_high.dat h_high

References:

[1] http://www.fftw.org

[2] Chapter 18 in http://www.dspguide.com/pdfbook.htm

[3] Filtering_2003.pdf

The SoundCard Plugin

This is an input plugin for XMMS which enables to read audio data directly from the soundcard. Using the plugin you can now use your computer with the XMMS player as a powerful sound processor with any of XMMS' effect plugins, such as, equalizer or echo effects. In particular, this plugin in combination with the FIR filter plugin enables you to use your PC as a DSP to process audio data in real-time using long FIR filters without any need for dedicated DSP hardware.

Download:

xmms-soundcard-plugin-1.0.0.tar.gz

Uncompress using tar xvzf xmms-soundcard-plugin-1.0.0.tar.gz and read the README and INSTALL files.


Updated January 23, 2004 (FL)         http://www.signal.uu.se/Staff/fl/fl.html