This article contains both fanon and canon content. It is fanon, but features canon content. |
Enhanced Spectrum analyzer (foo_enhanced_spectrum_analyzer) is a foobar2000 spectrum analyzer component dedicated for audio spectral analysis, developed by Crossover.
Options[]
- Note: This section only shows anything new to version 2.0.0.0 and newer, though it shows existing settings options that got changed in foo_enhanced_spectrum_analyzer 2.x.x.x
Display[]
Display mode
- Whether the spectrum, spectrogram, or both be displayed. Defaults to Spectrum.
- Available values are:
- Spectrum: Displays the frequency vs. amplitude graph.
- Spectrogram: Displays the spectrogram, scrolling from right to left.
- Static spectrogram: Displays the static spectrogram.
- Both: Combined spectrum/spectrogram visualization where spectrum graph is displayed at top and the spectrogram is at bottom; latest frames at the top and the oldest frames are at bottom of the spectrogram part.
Decouple FFT timing from FPS (doesn't apply to IIR filter bank mode)
- Should the timing of the FFT visualization be decoupled from FPS calculation, allowing fixed overlap amounts as opposed to variable and making the spectrogram scrolling speed constant. Defaults to False.
- Note: On IIR filter bank mode, it is always-on as IIR filter bank are calculated sample-by-sample.
Calculation interval (only when FFT calculation is decoupled from FPS, though it also always applies to IIR filter bank)
- Time interval/overlap amount for FFT calculation. Lower interval makes averaging more accurate (doesn't apply to IIR filter bank) and spectrogram scrolls faster. Defaults to 10ms.
Frequency range[]
Min frequency
- The minimum frequency range of the analyzer. Note that setting it to 0Hz is not actually 0Hz when using logarithmic frequency scale (on detailed FFT spectrum, the min range is the second FFT bin's center frequency and on octave bands, approximately 1Hz). Defaults to 20Hz.
Max frequency
- The maximum frequency range of the analyzer. It can also be set to Nyquist which shows all FFT bins if the Minimum frequency parameter is also set to 0Hz. Defaults to 20kHz.
Frequency scale
- Which frequency scale to use. Defaults to Logarithmic.
- Available values are:
- Linear: Useful for analyzing high-frequency content.
- Logarithmic: Generally useful for audio analysis.
- Mel: Perceptually-meaningful scale based on perceived pitch.
- Bark: Another psychoacoustic scale in which equal distances in this scale corresponds to perceptually-equal distances in terms of frequency.
- Equivalent rectangular bandwidth: Based on approximate bandwidth of the human hearing through an unrealistically-ideal bandpass filter.
- Octave bands: 1/nth fractional octave bands. Replaces the detailed FFT with frequency band-based FFT bandpower spectrum.
Use frequency bands
- Instead of visualizing every individual FFT bins, the analyzer use frequency bands for coarser display (though sinc-interpolated on low frequencies) and enables use of IIR filter bank mode. Defaults to Disabled.
- Note: This does not apply if Frequency scale is set to octave bands.
Number of bands (Frequency bands mode only)
- The number of bands to display and in case of IIR filter bank mode, the frequency resolution. Defaults to 160 bands.
- Note: Again, this doesn't apply to octave bands mode.
Bands per octave
- The number of bands per-octave. Defaults to 1/24th (240 bands on 20Hz-20kHz range).
Base-10 preferred frequencies
- Whether or not the octave bands should be based on base-10 preferred frequencies as in ANSI S1.11-2004 standard. When enabled, it changes the way how frequency bands placed where frequency bands on each decade is an exact integer multiple of that tuning frequency. Defaults to False.
dB range[]
- Note: These options are set separately for spectrum and for spectrogram displays
Minimum dB
- The lower dB range of the graph. Note that when using linear/nth root amplitude scale, the minimum range is -Infinity dB. Defaults to -100dB.
Maximum dB
- The upper dB range of the graph. Defaults to 0dB.
Linear amplitude scale
- Whether or not it should have linear amplitude scale instead to emphasize peaks. Defaults to Disabled.
Nth root index
- On linear amplitude mode, higher values emphasizes the lower amplitude parts. Defaults to 1.
Decouple amplitude scaling
- Allow spectrogram display to have its own amplitude scale. Defaults to Disabled.
Window function[]
Parameter (adjustable window functions only)
- Some window functions like Gaussian and Kaiser have an adjustable parameter, which determines the shape of the window function; trading off mainlobe width for deeper sidelobe attenuation. Defaults to 2.4.
Use IIR filter bank (frequency bands mode only)
- Whether or not it uses the analog-style IIR filter bank (designed using Butterworth second order sections) instead of sinc-interpolated FFT spectrum for frequency bars visualization mode. Defaults to Enabled.
- Note: When enabled, time/frequency resolution is no longer determined by FFT size and instead a constant-Q resolution (high resolution on lower frequencies and sharper time resolution on higher frequencies) and also window functions commonly associated with FFT analyzers are not relevant in this mode.
IIR filter order
- How steep the bandpass filter rolloff is; higher values attenuates leakage but it comes with a cost that it has a response delay on low frequencies and smearing in time resolution. Defaults to 4.
FFT size[]
FFT size (changed from version 1.9.2.0)
- The window length in either samples or milliseconds. Defaults to 300ms (14400 samples at 48kHz sample rate or 13230 samples at 44.1kHz sampling rate).
- Note: When using milliseconds unit for FFT size, the actual size in samples is rounded to an integer (not just power-of-two since this component now accept non-power of two FFT sizes) and it depends on the sample rate of a currently-playing audio (
fftSize = round(specifiedWindowLengthInSeconds*sampleRate)
).
Averaging[]
Average time
- Integration time for the RMS spectrum. Defaults to 500ms (50 frames).
- Note: This setting doesn't apply if infinite averaging mode is used or in case of exponential averaging mode, when Infinite fall rate for RMS spectrum is not enabled.
Domain
- The domain is used for calculating the average spectrum. Defaults to Squared.
- Available values are:
- Linear: Simpler averaging domain, same as summation but divided by number of frames to average.
- Squared: True root mean square averaging; takes place on squared domain and the sqrt the result back to linear amplitude scale.
- Logarithmic: Legacy averaging domain as in older versions of Enhanced Spectrum analyzer component.
Mode
- Mode for calculating the average. Defaults to Infinite.
- Available values are:
- FIFO: Averages the visualization using simple moving average.
- Exponential: Previous values decays exponentially. Note that averaging time uses "Velocity (ms)" value from RMS spectrum section if "Infinite decay rate" is disabled.
- Infinite: Cumulative moving average in which the RMS spectrum converges to a particular curve by the time the song reaches the end.
Changes from the version 1.9.2.0[]
- NEW: Added back crest factor spectrum with various changes to be consistent; it now have same details and FPS for the crest spectrum as the rest
- NEW: Frequency weighting functions (A, B, C, D, and ITU-R 468/M-weighting supported)
- Can be adjusted by "Weighting amount" parameter in percentages and it can also be set to negative values to do the exact opposite
- Equal-loudness contour and K-weighting are also supported
- NEW: Mel, Bark, ERB (equivalent rectangular bandwidth), and linear frequency scales
- NEW: Octave bands mode in which details of the visualization are controlled by bands per octave option
- Can be set to use either an ANSI S1.11-2004 standard (preferred base-10) or equal-tempered scale with arbitrary frequency tuning (not limited to 440Hz or 432Hz) for octave band center frequencies
- NEW: Frequency bands mode (not to be confused with frequency bars display mode) which instead of displaying every FFT bins within the specific range, visualizes frequency bands using either sinc-interpolated FFT bandpower or infinite impulse response (IIR) filter bank
- NEW: IIR filter bank mode for frequency bands (or octave bands) mode for optimal time/frequency resolution tradeoff on logarithmic frequency scale
- It uses cascaded Butterworth second-order sections for IIR filter design for the filter bank
- The filter order can be set to higher values to improve rolloff but at the expense of poorer time resolution on bass frequencies
- NEW: An option to smooth out the spectrum.
- Note that it is a postprocessing step for FFT mode (which doesn't affect spectrogram display) and when used on IIR filter bank mode, it is just a decrease in Q values (which affects spectrogram view too)
- NEW: Bars drawing mode for both detailed FFT and frequency bands mode
- NEW: An option to decouple FFT calculation from FPS, which is useful for spectrogram displays and better behaved average spectrum and it allows setting the FFT hop size to a set amount in milliseconds to adjust "accuracy" of average spectrum
- This doesn't apply to IIR filter bank mode, and in this case, it is always on and the hop size parameter only affects spectrogram scrolling speed
- NEW: Spectrogram display, works best with new "Decouple FFT calculation from FPS"
- Can either be static or scrolling spectrogram
- Can display both spectrum and spectrogram at the same time
- Can also be set to display multiple channels by having different colors
- Scrolling speed is adjustable via "Hop size" parameter, similar to "Resolution X-axis" in Loudness Peakmeter
- NEW: Multiple channels display
- Can either have separate graphs for each channel or have multiple spectrum of each channel superimposed into a one graph with different colors for each channels
- Supports Mid/Side representations not just individual channels
- NEW: Non-power of two FFT sizes and FFT size can be set in milliseconds rather than samples (decoupling the time/frequency resolution from sample rate; 100ms is 4800 samples on 48kHz sampling rate), and also 65536 samples FFT
- NEW: Infinite decay rate mode (-inf dB per second falloff) for any graphs including the restored crest spectrum
- On IIR filter bank mode, the Peak graph is a maximum of latest 576 samples (and below if FPS is high enough) of an absolute value of the output to avoid photosensitive epilepsy in most cases
- NEW: More averaging options
- There are now three averaging modes; "FIFO" (first-in, first-out) is the simple moving average, "Exponential" is the exponential decay (controlled by "Velocity" parameter on Average spectrum graph in dB/s instead of "Average Time"), and "Infinite" is a cumulative average that converges to a particular curve when analyzed for long enough
- Three averaging domains; "Squared" is true RMS, "Linear" is simply average before log amplitude transform, and "Logarithmic" is the legacy one calculated after log amplitude transformation
- NEW: Piano display
- Detected peaks can also be displayed on the piano keyboard display
- Piano center frequency (alongside equal-temperament octave bands) at the closest note to certain frequency can be set via "Pitch Std." parameter in Hz
- NEW: Piano, octaves, and Bark scale critical band grids and note labels
- NEW: The Y-axis dB labels can be displayed on the right side and both sides
- NEW: Fonts and the size of the labels can now be changed
- NEW: Frequency range and dB range are now adjustable
- When selecting "0Hz" on minimum frequency range while the spectrum frequency scale is logarithmic, the actual minimum range is the center frequency of the second FFT bin and in the case of octave bands, ~1Hz min range
- NEW: Linear amplitude scale
- The amplitude scale can also be nth root while not in logarithmic (dB) amplitude scale, adjusted by "Nth root index" parameter
- Minimum dB range is -Inf dB while in linear/nth root amplitude scale
- NEW: DC and Nyquist frequency markers
- DC frequency marker is only visible if the selected frequency scale is anything other than logarithmic and octave bands
- NEW: An option to use color gradient (consistent with Loudness Peakmeter and built-in visualizations) rather than solid color for UI color integration
- NEW: Gaussian window function, comes with two of the same but with different parameters (2.4 and 3.4 respectively)
- NEW: Anti-aliasing options to make the graph look nicer at the cost of slightly reduced performance
- NEW: An option to display more details on higher frequencies (especially on larger FFT sizes and smaller visualization windows) by turning off "Low detail mode" switch
- This does not apply to octave bands mode and spectrogram display isn't affected by this
- IMPROVEMENT: Overall performance has been improved; it now utilizes AVX2 and even AVX512 instructions when your CPU support these instruction sets, especially the new IIR filter bank mode as well as other optimizations to "fix" performance on fullscreen mode by ditching the GDI+ in favor of OpenGL rendering
- IMPROVEMENT: Fullscreen mode and UI color integration for Columns UI panel version
- IMPROVEMENT: Average spectrum is no longer capped at 0dB
- IMPROVEMENT: Expanded and enhanced color gradient editing
- Number of colorstops are no longer limited to six
- Colorstop positions now can be changed individually
- The colorstop position can also be set to be tied to certain dB values, which scales the color gradient accordingly to the current dB range
- Graph color and even background color can be made reactive; brighter (or darker) parts of the resulting strip indicates higher amplitude at certain frequency
- IMPROVEMENT: Display options (asides color gradient) for graphs no longer reset during a UI color change while UI color integration is enabled
- FIX: Setting the different window function now actually works, e.g. setting it to NONE now applies a rectangular window instead
Gallery[]
Trivia[]
- If the real version 2.0.0.0 were to be actually released, it would be different from what described in this page, much like how Dash Destroyer on GDPS 2.2 (at the time before the official Geometry Dash 2.2 were came out) being different from official Dash level in Geometry Dash.
- If this component doesn't have fallbacks to implementations using older SIMD instructions in the case of a CPU without AVX2 or AVX512 support, it would easily get listed into online troubleshooter with the line that says something like this:
foo_enhanced_spectrum_analyzer.dll : Enhanced Spectrum analyzer 2.0.0.0
Reason: This component is incompatible with CPUs without AVX2.