|
|
|
|
|
|
|
|
<p class=desc>Set the headphone volume level. Range is 0 to 1.0, but |
|
|
<p class=desc>Set the headphone volume level. Range is 0 to 1.0, but |
|
|
0.8 corresponds to the maximum undistorted output for a full scale |
|
|
0.8 corresponds to the maximum undistorted output for a full scale |
|
|
signal. Usually 0.5 is a comfortable listening level. The line |
|
|
signal. Usually 0.5 is a comfortable listening level. The line |
|
|
level outputs are not changed by this function. |
|
|
|
|
|
|
|
|
level outputs are <em>not</em> changed by this function. |
|
|
</p> |
|
|
</p> |
|
|
<p class=func><span class=keyword>inputSelect</span>(input);</p> |
|
|
<p class=func><span class=keyword>inputSelect</span>(input);</p> |
|
|
<p class=desc>Select which input to use: AUDIO_INPUT_LINEIN or AUDIO_INPUT_MIC. |
|
|
<p class=desc>Select which input to use: AUDIO_INPUT_LINEIN or AUDIO_INPUT_MIC. |
|
|
|
|
|
|
|
|
<p class=func><span class=keyword>adcHighPassFilterFreeze</span>();</p> |
|
|
<p class=func><span class=keyword>adcHighPassFilterFreeze</span>();</p> |
|
|
<p class=desc>By default, the analog input (either line-level inputs or mic) |
|
|
<p class=desc>By default, the analog input (either line-level inputs or mic) |
|
|
is high-pass filtered, to remove any DC component. This function |
|
|
is high-pass filtered, to remove any DC component. This function |
|
|
freezes the filter, so the DC component is still substracted, but |
|
|
|
|
|
|
|
|
freezes the filter, so the current DC component is still substracted, but |
|
|
the filter stops tracking any DC or low frequency changes. |
|
|
the filter stops tracking any DC or low frequency changes. |
|
|
</p> |
|
|
</p> |
|
|
<p class=func><span class=keyword>adcHighPassFilterDisable</span>();</p> |
|
|
<p class=func><span class=keyword>adcHighPassFilterDisable</span>();</p> |
|
|
|
|
|
|
|
|
<p class=func><span class=keyword>adcHighPassFilterEnable</span>();</p> |
|
|
<p class=func><span class=keyword>adcHighPassFilterEnable</span>();</p> |
|
|
<p class=desc>Turn the DC-blocking filter back on, if disabled, or |
|
|
<p class=desc>Turn the DC-blocking filter back on, if disabled, or |
|
|
allows it to resume tracking DC and low frequency changes, if |
|
|
allows it to resume tracking DC and low frequency changes, if |
|
|
previously frozen. |
|
|
|
|
|
|
|
|
previously frozen. This is the default setting. |
|
|
</p> |
|
|
</p> |
|
|
<p class=func><span class=keyword>dacVolume</span>(both);</p> |
|
|
<p class=func><span class=keyword>dacVolume</span>(both);</p> |
|
|
<p class=desc>Normally output volume should be used with volume(), which |
|
|
<p class=desc>Normally output volume should be used with volume(), which |
|
|
changes the analog gain in the headphone amplifier. This function |
|
|
changes the analog gain in the headphone amplifier. This function |
|
|
controls digital attenuation before conversion to analog, which |
|
|
|
|
|
|
|
|
on the other hand controls digital attenuation before conversion to analog, which |
|
|
reduces resolution, but allows another fine control of output |
|
|
reduces resolution, but allows another fine control of output |
|
|
signal level. The ranges is 0 to 1.0, with the default at 1.0. |
|
|
|
|
|
|
|
|
signal level. The ranges is 0 to 1.0, with the default (no digital attenuation) |
|
|
|
|
|
at 1.0. |
|
|
|
|
|
</p> |
|
|
|
|
|
<p class=desc>dacVolume uses zero-crossing detect to avoid clicks, and ramping is handled by |
|
|
|
|
|
the chip so that a new volume may be set directly in a single call. |
|
|
</p> |
|
|
</p> |
|
|
<p class=func><span class=keyword>dacVolume</span>(left, right);</p> |
|
|
<p class=func><span class=keyword>dacVolume</span>(left, right);</p> |
|
|
<p class=desc>Adjust the digital output volume separately on left and |
|
|
<p class=desc>Adjust the digital output volume separately on left and |
|
|
|
|
|
|
|
|
<h3>Audio Processor</h3> |
|
|
<h3>Audio Processor</h3> |
|
|
|
|
|
|
|
|
<p>The optional digital audio processor is capable of implementing |
|
|
<p>The optional digital audio processor is capable of implementing |
|
|
automatic volume control, a |
|
|
|
|
|
simple equalizer, filtering, bass enhancement and surround sound |
|
|
|
|
|
is available. |
|
|
|
|
|
|
|
|
one or more of: automatic volume control, surround sound control, |
|
|
|
|
|
bass enhancement, and tonal adjustments (either a |
|
|
|
|
|
simple tone control, or a parametric equalizer, or a graphic equalizer), |
|
|
|
|
|
in that order. |
|
|
</p> |
|
|
</p> |
|
|
<p>These signal processing features are implemented in the SGTL5000 chip, |
|
|
<p>These signal processing features are implemented in the SGTL5000 chip, |
|
|
so they do not consume CPU time on Teensy. |
|
|
|
|
|
|
|
|
so they do not consume CPU time on Teensy. However, the order of |
|
|
|
|
|
these processes is fixed in the hardware. |
|
|
|
|
|
</p> |
|
|
|
|
|
<p>It is good practice to mute the outputs before enabling or disabling |
|
|
|
|
|
the Audio Processor, to avoid clicks or thumps. |
|
|
</p> |
|
|
</p> |
|
|
|
|
|
|
|
|
<p class=func><span class=keyword>audioPreProcessorEnable</span>();</p> |
|
|
<p class=func><span class=keyword>audioPreProcessorEnable</span>();</p> |
|
|
|
|
|
|
|
|
<p class=func><span class=keyword>audioProcessorDisable</span>();</p> |
|
|
<p class=func><span class=keyword>audioProcessorDisable</span>();</p> |
|
|
<p class=desc>Disable the audio processor. |
|
|
<p class=desc>Disable the audio processor. |
|
|
</p> |
|
|
</p> |
|
|
<p class=func><span class=keyword>eqFilterCount</span>(n);</p> |
|
|
|
|
|
<p class=desc>blah blah blah blah |
|
|
|
|
|
|
|
|
<p class=func><span class=keyword>autoVolumeControl</span>(maxGain, response, hardLimit, threshold, attack, decay);</p> |
|
|
|
|
|
<p class=desc>Configures the auto volume control, which is implemented as a compressor/expander |
|
|
|
|
|
or hard limiter. <em>maxGain</em> is the maximum gain that can be applied for expanding, and |
|
|
|
|
|
can take one of three values: 0 (0dB), 1 (6.0dB) and 2 (12dB). Values greater than 2 are treated |
|
|
|
|
|
as 2. <em>response</em> controls the integration time for the compressor and can take |
|
|
|
|
|
four values: 0 (0ms), 1 (25ms), 2 (50ms) or 3 (100ms). Larger values average the volume |
|
|
|
|
|
over a longer time, allowing short-term peaks through. |
|
|
|
|
|
</p> |
|
|
|
|
|
<p class=desc>If <em>hardLimit</em> is 0, a 'soft |
|
|
|
|
|
knee' compressor is used to progressively compress louder values which are near to or above the |
|
|
|
|
|
threashold (the louder they are, the greater the compression). If it is 1, a hard compressor |
|
|
|
|
|
is used (all values above the threashold are the same loudness). The <em>threashold</em> is specified |
|
|
|
|
|
as a float in the range 0dBFS to -96dBFS, where -18dBFS is a typical value. |
|
|
|
|
|
<em>attack</em> is a float controlling the rate of decrease in gain when the signal is over |
|
|
|
|
|
threashold, in dB/s. <em>decay</em> controls how fast gain is restored once the level |
|
|
|
|
|
drops below threashold, again in dB/s. It is typically set to a longer value than attack. |
|
|
</p> |
|
|
</p> |
|
|
<p class=func><span class=keyword>eqSelect</span>(n);</p> |
|
|
|
|
|
<p class=desc>blah blah blah blah |
|
|
|
|
|
|
|
|
<p class=func><span class=keyword>autoVolumeEnable</span>();</p> |
|
|
|
|
|
<p class=desc>Enables auto volume control, using the previously specified settings. |
|
|
</p> |
|
|
</p> |
|
|
<p class=func><span class=keyword>eqBand</span>(bandNum, n);</p> |
|
|
|
|
|
<p class=desc>blah blah blah blah |
|
|
|
|
|
|
|
|
<p class=func><span class=keyword>autoVolumeDisable</span>();</p> |
|
|
|
|
|
<p class=desc>Disables auto volume control. |
|
|
</p> |
|
|
</p> |
|
|
<p class=func><span class=keyword>eqBands</span>(bass, mid_bass, midrange, mid_treble, treble);</p> |
|
|
|
|
|
<p class=desc>blah blah blah blah |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<p class=func><span class=keyword>surroundSoundEnable</span>();</p> |
|
|
|
|
|
<p class=desc>Enable virtual surround processing, to give a broader and |
|
|
|
|
|
deeper stereo image (even with mono input). |
|
|
</p> |
|
|
</p> |
|
|
<p class=func><span class=keyword>eqBands</span>(bass, treble);</p> |
|
|
|
|
|
<p class=desc>blah blah blah blah |
|
|
|
|
|
|
|
|
<p class=func><span class=keyword>surroundSoundDisable</span>();</p> |
|
|
|
|
|
<p class=desc>Disable virtual surround processing. Before disabling, ramp up |
|
|
|
|
|
the width to maximum to avoid pops. |
|
|
</p> |
|
|
</p> |
|
|
<p class=func><span class=keyword>eqFilter</span>(filterNum, filterParameters);</p> |
|
|
|
|
|
<p class=desc>blah blah blah blah |
|
|
|
|
|
|
|
|
<p class=func><span class=keyword>surroundSound</span>(width);</p> |
|
|
|
|
|
<p class=desc>Configures virtual surround width from 0 (mono) to 7 (widest). |
|
|
</p> |
|
|
</p> |
|
|
<p class=func><span class=keyword>autoVolumeControl</span>(maxGain, response, hardLimit, threshold, attack, decay);</p> |
|
|
|
|
|
<p class=desc>blah blah blah blah |
|
|
|
|
|
|
|
|
<p class=func><span class=keyword>surroundSound</span>(width, select);</p> |
|
|
|
|
|
<p class=desc>Configures virtual surround width from 0 (mono) to 7 (widest). |
|
|
|
|
|
<em>select</em> may be set to 1 (disable), 2 (mono input) or 3 (stereo input). |
|
|
</p> |
|
|
</p> |
|
|
<p class=func><span class=keyword>autoVolumeEnable</span>();</p> |
|
|
|
|
|
<p class=desc>blah blah blah blah |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<p class=func><span class=keyword>enhanceBassEnable</span>();</p> |
|
|
|
|
|
<p class=desc>Enable bass enhancement. A mono, low-pass filtered copy of |
|
|
|
|
|
the original stereo signal has bass levels boosted and is then mixed back into |
|
|
|
|
|
the stereo signal, which is then optionally high pass filtered (to remove |
|
|
|
|
|
inaudible subsonic frequencies). |
|
|
</p> |
|
|
</p> |
|
|
<p class=func><span class=keyword>autoVolumeDisable</span>();</p> |
|
|
|
|
|
<p class=desc>blah blah blah blah |
|
|
|
|
|
|
|
|
<p class=func><span class=keyword>enhanceBassDisable</span>();</p> |
|
|
|
|
|
<p class=desc>Disable bass enhancement. Before disabling, ramp down the bass |
|
|
|
|
|
enhancement level to zero. |
|
|
</p> |
|
|
</p> |
|
|
<p class=func><span class=keyword>enhanceBass</span>(lr_lev, bass_lev);</p> |
|
|
<p class=func><span class=keyword>enhanceBass</span>(lr_lev, bass_lev);</p> |
|
|
<p class=desc>blah blah blah blah |
|
|
|
|
|
|
|
|
<p class=desc>Configures the bass enhancement by setting the levels of the |
|
|
|
|
|
original stereo signal and the bass-enhanced mono level which will be mixed together. |
|
|
|
|
|
There is no high-pass filter. |
|
|
|
|
|
</p> |
|
|
|
|
|
<p class=desc>When changing bass level, call this function repeatedly to ramp up or down the bass in |
|
|
|
|
|
steps of 0.5dB, to avoid pops. |
|
|
</p> |
|
|
</p> |
|
|
<p class=func><span class=keyword>enhanceBass</span>(lr_lev, bass_lev, hpf_bypass, cutoff);</p> |
|
|
<p class=func><span class=keyword>enhanceBass</span>(lr_lev, bass_lev, hpf_bypass, cutoff);</p> |
|
|
<p class=desc>blah blah blah blah |
|
|
|
|
|
|
|
|
<p class=desc>Configures the bass enhancement by setting the levels of the |
|
|
|
|
|
original stereo signal and the bass-enhanced mono level which will be mixed together. |
|
|
|
|
|
The high-pass filter may be enabled (0) or bypassed (1). The cutoff frequency is specified |
|
|
|
|
|
as follows: |
|
|
|
|
|
</p> |
|
|
|
|
|
<pre class="desc"> |
|
|
|
|
|
value frequency |
|
|
|
|
|
0 80Hz |
|
|
|
|
|
1 100Hz |
|
|
|
|
|
2 125Hz |
|
|
|
|
|
3 150Hz |
|
|
|
|
|
4 175Hz |
|
|
|
|
|
5 200Hz |
|
|
|
|
|
6 225Hz |
|
|
|
|
|
</pre> |
|
|
|
|
|
<p class=desc>When changing bass level, call this function repeatedly to ramp up or down the bass in |
|
|
|
|
|
steps of 0.5dB, to avoid pops. |
|
|
</p> |
|
|
</p> |
|
|
<p class=func><span class=keyword>enhanceBassEnable</span>();</p> |
|
|
|
|
|
<p class=desc>blah blah blah blah |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<p class=func><span class=keyword>eqSelect</span>(n);</p> |
|
|
|
|
|
<p class=desc>Selects the type of frequency control, where <em>n</em> is |
|
|
|
|
|
one of</p> |
|
|
|
|
|
<p class=desc><b>FLAT_FREQUENCY (0)</b><br> |
|
|
|
|
|
Equalizers and tone controls disabled, flat frequency response.</p> |
|
|
|
|
|
<p class=desc><b>PARAMETRIC_EQUALIZER (1)</b><br> |
|
|
|
|
|
Enables the 7-band parametric equalizer, thus disabling the |
|
|
|
|
|
tone controls and graphic equalizer.</p> |
|
|
|
|
|
<p class=desc><b>TONE_CONTROLS (2)</b><br> |
|
|
|
|
|
Enables bass and treble tone controls, disabling the parametric |
|
|
|
|
|
equalization and graphic equalizer.</p> |
|
|
|
|
|
<p class=desc><b>GRAPHIC_EQUALIZER (3)</b><br> |
|
|
|
|
|
Enables the five-band graphic equalizer, disabling the parametric |
|
|
|
|
|
equalization and tone controls.</p> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<p class=func><span class=keyword>eqBands</span>(bass, treble);</p> |
|
|
|
|
|
<p class=desc>Configures bass and treble tone controls, which are |
|
|
|
|
|
implemented as one second order low pass filter (bass) in parallel with |
|
|
|
|
|
one second order high pass filter (treble). |
|
|
</p> |
|
|
</p> |
|
|
<p class=func><span class=keyword>enhanceBassDisable</span>();</p> |
|
|
|
|
|
<p class=desc>blah blah blah blah |
|
|
|
|
|
|
|
|
<p class=desc>When changing bass or treble level, call this function repeatedly to ramp |
|
|
|
|
|
up or down the level in steps of 0.5dB, to avoid pops. |
|
|
</p> |
|
|
</p> |
|
|
<p class=func><span class=keyword>surroundSound</span>(width);</p> |
|
|
|
|
|
<p class=desc>blah blah blah blah |
|
|
|
|
|
|
|
|
<p class=func><span class=keyword>eqBands</span>(bass, mid_bass, midrange, mid_treble, treble);</p> |
|
|
|
|
|
<p class=desc>Configures the graphic equalizer. It is implemented by five parallel, |
|
|
|
|
|
second order biquad filters with fixed frequencies of 115Hz, 330Hz, 990Hz, 3kHz, |
|
|
|
|
|
and 9.9kHz. Each band has a range of adjustment from 100.0 (+12dB) to -100.0 (-11.75dB). |
|
|
</p> |
|
|
</p> |
|
|
<p class=func><span class=keyword>surroundSound</span>(width, select);</p> |
|
|
|
|
|
<p class=desc>blah blah blah blah |
|
|
|
|
|
|
|
|
<p class=func><span class=keyword>eqBand</span>(bandNum, n);</p> |
|
|
|
|
|
<p class=desc>Configures the gain or cut on one band in the graphic equalizer. |
|
|
|
|
|
<em>bandnum</em> can range from 1 to 5; <em>n</em> is a float in the range 100.0 to -100.0. |
|
|
</p> |
|
|
</p> |
|
|
<p class=func><span class=keyword>surroundSoundEnable</span>();</p> |
|
|
|
|
|
<p class=desc>blah blah blah blah |
|
|
|
|
|
|
|
|
<p class=desc>When changing a band, call this function repeatedly to ramp up the gain in steps of 0.5dB, |
|
|
|
|
|
to avoid pops. |
|
|
</p> |
|
|
</p> |
|
|
<p class=func><span class=keyword>surroundSoundDisable</span>();</p> |
|
|
|
|
|
<p class=desc>blah blah blah blah |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<p class=func><span class=keyword>eqFilter</span>(filterNum, filterParameters);</p> |
|
|
|
|
|
<p class=desc>Configurs the parametric equalizer. The number of filters (1 to 7) |
|
|
|
|
|
is specified along with a pointer to an array of filter coefficients. |
|
|
|
|
|
The parametric equalizer is implemented using 7 cascaded, second order bi-quad |
|
|
|
|
|
filters whose frequencies, gain, and Q may be freely configured, but each filter |
|
|
|
|
|
can only be specified as a set of filter coefficients. |
|
|
</p> |
|
|
</p> |
|
|
|
|
|
<p class=func><span class=keyword>eqFilterCount</span>(n);</p> |
|
|
|
|
|
<p class=desc>Enables zero or more of the already enabled parametric filters. |
|
|
|
|
|
</p> |
|
|
|
|
|
|
|
|
<h3>Notes</h3> |
|
|
<h3>Notes</h3> |
|
|
<p>TODO: document the many audio processor features & functions! |
|
|
|
|
|
|
|
|
<p>TODO: add example with rock/classical/speech presets, where rock uses bass boost |
|
|
|
|
|
and surround enhancement while speech uses bandpass filtering and auto volume control |
|
|
|
|
|
compression. |
|
|
|
|
|
</p> |
|
|
|
|
|
<p>TODO: add example with two analogRead pots for bass and treble to demonstrate ramping. |
|
|
</p> |
|
|
</p> |
|
|
</script> |
|
|
</script> |
|
|
<script type="text/x-red" data-template-name="AudioControlSGTL5000"> |
|
|
<script type="text/x-red" data-template-name="AudioControlSGTL5000"> |