You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
351 lines
15 KiB
351 lines
15 KiB
8 years ago
|
<script type="text/x-red" data-help-name="AudioControlSGTL5000">
|
||
|
<h3>Summary</h3>
|
||
|
<div class=tooltipinfo>
|
||
|
<p>Control the SGTL5000 chip on the
|
||
|
<a href="http://www.pjrc.com/store/teensy3_audio.html" target="_blank">audio shield</a>.
|
||
|
SGTL5000 is always used in slave mode, where Teensy controls
|
||
|
all I2S timing.
|
||
|
</p>
|
||
|
<p align=center><img src="img/sgtl5000closeup.jpg"></p>
|
||
|
</div>
|
||
|
<h3>Audio Connections</h3>
|
||
|
<p>This object has no audio inputs or outputs. Separate i2s objects
|
||
|
are used to send and receive audio data. I2S master mode objects
|
||
|
must be used, because this object configures the SGTL5000 in slave
|
||
|
mode, where it depends on Teensy to provide all I2S clocks.
|
||
|
This object controls
|
||
|
how the SGTL5000 will use those I2S audio streams.</p>
|
||
|
|
||
|
<h3>Functions</h3>
|
||
|
<p>These are the most commonly used SGTL5000 functions.</p>
|
||
|
<p class=func><span class=keyword>enable</span>();</p>
|
||
|
<p class=desc>Start the SGTL5000. This function should be called first.
|
||
|
</p>
|
||
|
<p class=func><span class=keyword>volume</span>(level);</p>
|
||
|
<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
|
||
|
signal. Usually 0.5 is a comfortable listening level. The line
|
||
|
level outputs are <em>not</em> changed by this function.
|
||
|
</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>
|
||
|
<p class=func><span class=keyword>micGain</span>(dB);</p>
|
||
|
<p class=desc>When using the microphone input, set the amplifier gain.
|
||
|
The input number is in decibels, from 0 to 63.
|
||
|
</p>
|
||
|
|
||
|
<h3>Signal Levels</h3>
|
||
|
|
||
|
<p>The default signal levels should be used for most applications,
|
||
|
but these functions allow you to customize the analog signals.</p>
|
||
|
|
||
|
<p class=func><span class=keyword>muteHeadphone</span>();</p>
|
||
|
<p class=desc>Silence the headphone output.
|
||
|
</p>
|
||
|
<p class=func><span class=keyword>unmuteHeadphone</span>();</p>
|
||
|
<p class=desc>Turn the headphone output on.
|
||
|
</p>
|
||
|
<p class=func><span class=keyword>muteLineout</span>();</p>
|
||
|
<p class=desc>Silence the line level outputs.
|
||
|
</p>
|
||
|
<p class=func><span class=keyword>unmuteLineout</span>();</p>
|
||
|
<p class=desc>Turn the line level outputs on.
|
||
|
</p>
|
||
|
<p class=func><span class=keyword>lineInLevel</span>(both);</p>
|
||
|
<p class=desc style="padding-bottom:0.2em;">Adjust the sensitivity of the line-level inputs.
|
||
|
Fifteen settings are possible:
|
||
|
</p>
|
||
|
<pre class="desc">
|
||
|
0: 3.12 Volts p-p
|
||
|
1: 2.63 Volts p-p
|
||
|
2: 2.22 Volts p-p
|
||
|
3: 1.87 Volts p-p
|
||
|
4: 1.58 Volts p-p
|
||
|
5: 1.33 Volts p-p (default)
|
||
|
6: 1.11 Volts p-p
|
||
|
7: 0.94 Volts p-p
|
||
|
8: 0.79 Volts p-p
|
||
|
9: 0.67 Volts p-p
|
||
|
10: 0.56 Volts p-p
|
||
|
11: 0.48 Volts p-p
|
||
|
12: 0.40 Volts p-p
|
||
|
13: 0.34 Volts p-p
|
||
|
14: 0.29 Volts p-p
|
||
|
15: 0.24 Volts p-p
|
||
|
</pre>
|
||
|
<p class=func><span class=keyword>lineInLevel</span>(left, right);</p>
|
||
|
<p class=desc>Adjust the sensitivity of the line-level inputs, with different
|
||
|
settings for left and right. The same 15 settings are available.
|
||
|
</p>
|
||
|
<p class=func><span class=keyword>lineOutLevel</span>(both);</p>
|
||
|
<p class=desc style="padding-bottom:0.2em;">Adjust the line level output
|
||
|
voltage range. The following settings are possible:
|
||
|
</p>
|
||
|
<pre class="desc">
|
||
|
13: 3.16 Volts p-p
|
||
|
14: 2.98 Volts p-p
|
||
|
15: 2.83 Volts p-p
|
||
|
16: 2.67 Volts p-p
|
||
|
17: 2.53 Volts p-p
|
||
|
18: 2.39 Volts p-p
|
||
|
19: 2.26 Volts p-p
|
||
|
20: 2.14 Volts p-p
|
||
|
21: 2.02 Volts p-p
|
||
|
22: 1.91 Volts p-p
|
||
|
23: 1.80 Volts p-p
|
||
|
24: 1.71 Volts p-p
|
||
|
25: 1.62 Volts p-p
|
||
|
26: 1.53 Volts p-p
|
||
|
27: 1.44 Volts p-p
|
||
|
28: 1.37 Volts p-p
|
||
|
29: 1.29 Volts p-p (default)
|
||
|
30: 1.22 Volts p-p
|
||
|
31: 1.16 Volts p-p
|
||
|
</pre>
|
||
|
<p class=func><span class=keyword>lineOutLevel</span>(left, right);</p>
|
||
|
<p class=desc>Adjust the line level outout voltage range, with separate
|
||
|
settings for left and right. The same settings (13 to 31) are available.
|
||
|
</p>
|
||
|
|
||
|
|
||
|
<h3>Signal Conditioning</h3>
|
||
|
|
||
|
<p>Usually these digital signal conditioning features should be left at their
|
||
|
default settings.
|
||
|
</p>
|
||
|
|
||
|
<p class=func><span class=keyword>adcHighPassFilterFreeze</span>();</p>
|
||
|
<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
|
||
|
freezes the filter, so the current DC component is still substracted, but
|
||
|
the filter stops tracking any DC or low frequency changes.
|
||
|
</p>
|
||
|
<p class=func><span class=keyword>adcHighPassFilterDisable</span>();</p>
|
||
|
<p class=desc>Completely disable the analog input filter. DC and sub-audible
|
||
|
low frequencies are allowed to enter the digital signal.
|
||
|
</p>
|
||
|
<p class=func><span class=keyword>adcHighPassFilterEnable</span>();</p>
|
||
|
<p class=desc>Turn the DC-blocking filter back on, if disabled, or
|
||
|
allows it to resume tracking DC and low frequency changes, if
|
||
|
previously frozen. This is the default setting.
|
||
|
</p>
|
||
|
<p class=func><span class=keyword>dacVolume</span>(both);</p>
|
||
|
<p class=desc>Normally output volume should be used with volume(), which
|
||
|
changes the analog gain in the headphone amplifier. This function
|
||
|
on the other hand controls digital attenuation before conversion to analog, which
|
||
|
reduces resolution, but allows another fine control of output
|
||
|
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 graceful
|
||
|
ramping is handled by the chip so that a new volume may be set directly in
|
||
|
a single call.
|
||
|
</p>
|
||
|
<p class=func><span class=keyword>dacVolume</span>(left, right);</p>
|
||
|
<p class=desc>Adjust the digital output volume separately on left and
|
||
|
right channels.
|
||
|
</p>
|
||
|
<p class=func><span class=keyword>dacVolumeRamp</span>();</p>
|
||
|
<p class=desc>Enable graceful volume ramping. The dacVolume adjusts gradually using
|
||
|
an exponential curve. Pops or loud clicks are avoided when making large
|
||
|
changes in volume level.
|
||
|
</p>
|
||
|
<p class=func><span class=keyword>dacVolumeRampLinear</span>();</p>
|
||
|
<p class=desc>Enable faster volume ramping. A slight click may be heard during a
|
||
|
large volume change.
|
||
|
</p>
|
||
|
<p class=func><span class=keyword>dacVolumeRampDisable</span>();</p>
|
||
|
<p class=desc>Do not use any gradual ramping. The zero cross feature still helps
|
||
|
for small changes, but large volume changes may produce a pop or click.
|
||
|
</p>
|
||
|
|
||
|
<h3>Audio Processor</h3>
|
||
|
|
||
|
<p>The optional digital audio processor is capable of implementing
|
||
|
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>These signal processing features are implemented in the SGTL5000 chip,
|
||
|
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 class=func><span class=keyword>audioPreProcessorEnable</span>();</p>
|
||
|
<p class=desc>Enable the audio processor to pre-process the input
|
||
|
(from either line-level inputs or microphone) before it's sent
|
||
|
to Teensy by I2S.
|
||
|
</p>
|
||
|
<p class=func><span class=keyword>audioPostProcessorEnable</span>();</p>
|
||
|
<p class=desc>Enable the audio processor to post-process Teensy's
|
||
|
I2S output before it's turned into analog signals for the
|
||
|
headphones and/or line level outputs.
|
||
|
</p>
|
||
|
<p class=func><span class=keyword>audioProcessorDisable</span>();</p>
|
||
|
<p class=desc>Disable the audio processor.
|
||
|
</p>
|
||
|
<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 class=func><span class=keyword>autoVolumeEnable</span>();</p>
|
||
|
<p class=desc>Enables auto volume control, using the previously specified settings.
|
||
|
</p>
|
||
|
<p class=func><span class=keyword>autoVolumeDisable</span>();</p>
|
||
|
<p class=desc>Disables auto volume control.
|
||
|
</p>
|
||
|
|
||
|
<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 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 class=func><span class=keyword>surroundSound</span>(width);</p>
|
||
|
<p class=desc>Configures virtual surround width from 0 (mono) to 7 (widest).
|
||
|
</p>
|
||
|
<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 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 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 class=func><span class=keyword>enhanceBass</span>(lr_lev, bass_lev);</p>
|
||
|
<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 class=func><span class=keyword>enhanceBass</span>(lr_lev, bass_lev, hpf_bypass, cutoff);</p>
|
||
|
<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 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 class=desc>When changing bass or treble level, call this function repeatedly to ramp
|
||
|
up or down the level in steps of 0.04 (=0.5dB) or so, to avoid pops.
|
||
|
</p>
|
||
|
<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 1.00 (+12dB) to -1.00 (-11.75dB).
|
||
|
</p>
|
||
|
<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 1.00 to -1.00.
|
||
|
</p>
|
||
|
<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 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 class=func><span class=keyword>eqFilterCount</span>(n);</p>
|
||
|
<p class=desc>Enables zero or more of the already enabled parametric filters.
|
||
|
</p>
|
||
|
|
||
|
<h3>Examples</h3>
|
||
|
<p>Nearly all of the library's examples use this object. These
|
||
|
examples demonstrate its special features.
|
||
|
</p>
|
||
|
<p class=exam>File > Examples > Audio > HardwareTesting > PassThroughStereo
|
||
|
</p>
|
||
|
<p class=exam>File > Examples > Audio > HardwareTesting > SGTL5000 > dap_bass_enhance
|
||
|
</p>
|
||
|
<p class=exam>File > Examples > Audio > HardwareTesting > SGTL5000 > dap_avc_agc
|
||
|
</p>
|
||
|
<p class=exam>File > Examples > Audio > HardwareTesting > SGTL5000 > balanceDAC
|
||
|
</p>
|
||
|
<p class=exam>File > Examples > Audio > HardwareTesting > SGTL5000 > balanceHP
|
||
|
</p>
|
||
|
<p class=exam>File > Examples > Audio > HardwareTesting > SGTL5000 > CalcBiquadToneControlDAP
|
||
|
</p>
|
||
|
<p class=exam>File > Examples > Audio > HardwareTesting > SGTL5000 > VolumeRamp
|
||
|
</p>
|
||
|
<h3>Notes</h3>
|
||
|
<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>
|
||
|
</script>
|
||
|
<script type="text/x-red" data-template-name="AudioControlSGTL5000">
|
||
|
<div class="form-row">
|
||
|
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
|
||
|
<input type="text" id="node-input-name" placeholder="Name">
|
||
|
</div>
|
||
|
</script>
|
||
|
|