diff options
Diffstat (limited to '.moc/moc/README_equalizer')
-rw-r--r-- | .moc/moc/README_equalizer | 184 |
1 files changed, 0 insertions, 184 deletions
diff --git a/.moc/moc/README_equalizer b/.moc/moc/README_equalizer deleted file mode 100644 index 3c78cc8..0000000 --- a/.moc/moc/README_equalizer +++ /dev/null @@ -1,184 +0,0 @@ -Preamble ---- -This document is meant to give you an overview on the idea of having a -parametric equalizer for sound enhancement and how you can create your -own presets. Also the interaction with the equalizer in MOC is described. - -I would like to improve this document to make it more usable; so if you -have any comments and/or ideas feel free to contact me. - -- Hendrik Iben (hiben<at>tzi(dot)de) - - -Content ---- -0. Document History -1. Motivation -2. Usage -3. Preset Format -4. Creating Presets -5. TODO -6. References - - -0. Document History ---- -07.09.2008 - Initial version -15.03.2011 - Reformatted - - -1. Nuts and Bolts / Motivation for Implementing the Equalizer ---- -The equalizer is an implementation of a biquadratic peaking equalizer -filter looked up from the Audio EQ Cookbook[1]. - -It happens to be a parametric equalizer and this means that, different -from other equalizer implementations, the number of bands* is not fixed. -When I started the idea of implementing the equalizer I looked around -in the source of other audio playback software and found that a lot of -them are recycling the code used by the famous XMMS[2] audio player. -I also would have liked to recycle the code but I decided against it -for two reasons: - -The first reason is that there is almost no documentation on the algorithm -used. Maybe the signal processing folks have fun finding out what makes -this thing work but I was totally lost. So I decided that I wanted to -*know* what I am doing if I do it. - -As for the second reason, the code used by XMMS is totally optimized for -integer arithmetic. There is no problem with this in general but I had -the goal of implementing something that was as accurate as I could and -I wanted to use floating point arithmetic. - -So I am no signals processing guy, but I have -- I think -- a solid -understanding of the matter. I sat down and started to read about -equalizing, audio processing and signal theory in general. After some -time I found a mathematical description and a C implementation of -biquadratic filters in the Audio Cookbook. I made an implementation of -the XMMS equalizer and the biquadratic filter using Octave[3] to compare -the outcome of both filters. I was a bit surprised how different filters -can be but in the end succeeded (?) in finding a quite good biquadratic -filter set that would produce results not unlike the XMMS equalizer. - -Although I did not use the XMMS-code I think that people will be more -happy to accept this equalizer if they can use their presets with it. -There is some conversion needed, but it's a straightforward process. -I converted all presets provided by XMMS into presets for this mixer. -They should be available at [4]. - -* A band is a chosen center frequency where a filter has most impact. - If you look at WinAmp / XMMS / Beep Media Player you will find that - they settled on a common set of 10 bands. - - -2. Using the Equalizer ---- -The default keys for the equalizer are: - -'e' - Refresh equalizer -'E' - Toggle equalizer (on/off) -'k' - Select next preset -'K' - Select previous preset - -Each of these actions results in a message displayed in the message area. -This message will be overridden by the next action. - - -3. Preset Format ---- -Presets for the equalizer are to be placed in a directory called 'eqsets' -in MOC's home directory (e.g., $HOME/.moc/eqsets). There is no convention -for the filename, but it will serve as the name in the selection process. - -File format in pseudo EBNF: - - EQSET - ((<CF> <BW> <AMP>)|(0 <PREAMP>))* - - CF: Center frequency (sane values are from ~20 to ~20000). - BW: Bandwith in Octaves. This defines how fast the bands - influence vanishes over the frequencies. - AMP: Amplification factor (in dB) to apply to the band. - PREAMP: Specifies an amplification factor applied before equalizing. - -So a valid equalizer set would be: - - # this is a comment - EQSET - # amplify audio by 1.4dB - 0 1.4 - # damp frequencies at 100Hz by -4dB, filter bandwidth 1.5 octaves - 100 1.5 -4 - # amplify frequencies at 4000Hz by 2dB, filter bandwidth 1.5 octaves - 4000 1.5 2 - -There is no order to stick to when specifying frequencies. - - -4. Creating Your Own Presets ---- -For a start you should have a look at the converted presets[4]. The -bandwidths used in the conversion have been extracted by taking a look -at the filters signal response (implementation and analysis in Octave). -I tried to do this as accurately as possible but I don't know if I made -a mistake. They sound correct though... :-) - -You might note that there is never a positive amplification factor in -the presets although there are in the original preset. The reason for -this is that I used the maximum amplification in the preset as zero -amplification and adjusted the other values accordingly. - -In general, when creating a preset get used to the following idea: Do not -amplify the frequencies you want but damp those that are of no interest. -This has the same effect but avoids clipping and this equalizer type seems -to be very prone to clipping. Also be very careful with pre-amplifying -the audio for the same reason. - -With that said, the next confusing thing is the bandwidth definition. -Every band needs a defined bandwidth in octaves where the bandwidth -defines where the filter's effect has been reduced by 3dB*. This means -that if you define a band at 1000Hz with a bandwidth of 1.5 octaves and -an amplification of -10dB, at 353.6Hz** and at 2828.4Hz the amplification -will be reduced to -7dB. - -If unsure, stay in between 1.0 and 2.0. Just keep in mind that if two -bands overlap you might get an undesired amplification. - -When designing presets, just save the preset and select it in MOC. After -each change press the refresh key (default 'e'). This will re-create the -equalizer reflecting your changes. - -If your preset is not found, have a look at the output of MOC's server -thread. Parsing errors are emitted there. - -* 3dB is commonly used for bandwidth. -3dB equals about 70.7% of - original amplification. -** 353.6 =~ 1000*(2^-1.5), 2828.4 =~ 1000*(2^1.5) - - -5. TODO ---- -- The equalizer is currently not optimized in any way. - -- It converts all sound data into floating point values to perform the - equalization and converts them back afterwards. A better approach - would be either to provide integer algorithms for equalization or to - leave the audio data in floating point format. - -- There is no sorting for the presets; their order is defined by reading - the directory content. - -- Maybe it would be nice to add a name to the preset different from the - filename. - - -6. References ---- -[1] Cookbook formulae for audio EQ biquad filter coefficients - http://www.musicdsp.org/files/Audio-EQ-Cookbook.txt -[2] X Multimedia System - http://www.xmms.org/ -[3] GNU Octave - http://www.gnu.org/software/octave/ -[4] Converted WinAmp / XMMS Equalizer sets - http://www.informatik.uni-bremen.de/~hiben/moc/eqsets.tar.gz |