summaryrefslogtreecommitdiff
path: root/.moc/moc/README_equalizer
diff options
context:
space:
mode:
authorThanos Apollo <[email protected]>2022-10-07 17:29:48 +0300
committerThanos Apollo <[email protected]>2022-10-07 17:29:48 +0300
commitc0ce006a7d8fc09280348cbe1846f434cc747105 (patch)
tree314a415029c54f339b2fb577199b2d96814e7364 /.moc/moc/README_equalizer
parent6a0a514b1f4f2bf39781ff635ea1785d802d9188 (diff)
parent8aa58682905a329ab919c725473d3f37ae536287 (diff)
Merge branch 'master' of github.com:ThanosApollo/config
Diffstat (limited to '.moc/moc/README_equalizer')
-rw-r--r--.moc/moc/README_equalizer184
1 files changed, 184 insertions, 0 deletions
diff --git a/.moc/moc/README_equalizer b/.moc/moc/README_equalizer
new file mode 100644
index 0000000..3c78cc8
--- /dev/null
+++ b/.moc/moc/README_equalizer
@@ -0,0 +1,184 @@
+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