Garry's Mod Wiki

Revision Difference

IGModAudioChannel:FFT#517271

<function name="FFT" parent="IGModAudioChannel" type="classfunc"> <description> Computes the [DFT (discrete Fourier transform)](https://en.wikipedia.org/wiki/Discrete_Fourier_transform) of the sound channel. The size parameter specifies the number of consecutive audio samples to use as the input to the DFT and is restricted to a power of two. A [Hann window](https://en.wikipedia.org/wiki/Hann_function) is applied to the input data. The computed DFT has the same number of frequency bins as the number of samples. Only half of this DFT is returned, since [the DFT magnitudes are symmetric for real input data](https://en.wikipedia.org/wiki/Discrete_Fourier_transform#The_real-input_DFT). The magnitudes of the DFT (values from 0 to 1) are used to fill the output table, starting at index 1. **Visualization protip:** For a size N DFT, bin k (1-indexed) corresponds to a frequency of (k - 1) / N * sampleRate. **Visualization protip:** Sound energy is proportional to the square of the magnitudes. Adding magnitudes together makes no sense physically, but adding energies does. **Visualization protip:** The human ear works on a logarithmic amplitude scale. You can convert to [decibels](https://en.wikipedia.org/wiki/Decibel) by taking 20 log&amp;lt;sub&amp;gt;10&amp;lt;/sub&amp;gt; of frequency magnitudes, or 10 log&amp;lt;sub&amp;gt;10&amp;lt;/sub&amp;gt; of energy. The decibel values will range from -infinity to 0. **Visualization protip:** The human ear works on a logarithmic amplitude scale. You can convert to [decibels](https://en.wikipedia.org/wiki/Decibel) by taking 20 * <page>math.log10</page> of frequency magnitudes, or 10 * <page>math.log10</page> of energy. The decibel values will range from -infinity to 0. </description> <realm>Client</realm> <args> <arg name="tbl" type="table">The table to output the DFT magnitudes (numbers between 0 and 1) into. Indices start from 1.</arg> <arg name="size" type="number">The number of samples to use. See &lt;page&gt;FFT&lt;/page&gt;</arg> </args> <rets> <ret name="" type="number">The number of frequency bins that have been filled in the output table.</ret> </rets> </function>