| @@ -80,59 +80,6 @@ | |||
| </script> | |||
| <script type="text/javascript"> | |||
| RED.nodes.registerType('AudioInputI2Sslave',{ | |||
| shortName: "i2ss", | |||
| inputs:0, | |||
| outputs:2, | |||
| category: 'input-function', | |||
| color:"#E6E0F8", | |||
| icon: "arrow-in.png" | |||
| }); | |||
| </script> | |||
| <script type="text/x-red" data-help-name="AudioInputI2Sslave"> | |||
| <h3>Summary</h3> | |||
| <p>Receive 16 bit stereo audio from an I2S device using I2S slave mode.</p> | |||
| <h3>Audio Connections</h3> | |||
| <table class=doc align=center cellpadding=3> | |||
| <tr class=top><th>Port</th><th>Purpose</th></tr> | |||
| <tr class=odd><td align=center>Out 0</td><td>Left Channel</td></tr> | |||
| <tr class=odd><td align=center>Out 1</td><td>Right Channel</td></tr> | |||
| </table> | |||
| <h3>Functions</h3> | |||
| <p>This object has no functions to call from the Arduino sketch. It | |||
| simply streams data from the I2S hardware to its 2 output ports.</p> | |||
| <h3>Hardware</h3> | |||
| <p>The I2S signals are used in "slave" mode, where the I2S device controls | |||
| data timing.</p> | |||
| <table class=doc align=center cellpadding=3> | |||
| <tr class=top><th>Pin</th><th>Signal</th><th>Direction</th></tr> | |||
| <tr class=odd><td align=center>9</td><td>BCLK</td><td>Input</td></tr> | |||
| <tr class=odd><td align=center>13</td><td>RX</td><td>Input</td></tr> | |||
| <tr class=odd><td align=center>23</td><td>LRCLK</td><td>Input</td></tr> | |||
| </table> | |||
| <!--<h3>Examples</h3> | |||
| <p class=exam>File > Examples > Audio > | |||
| </p>--> | |||
| <h3>Notes</h3> | |||
| <p>Slave mode I2S <b>should not used in the same project as ADC, DAC and | |||
| PWM</b> signals. Differences in timing between the I2S device and | |||
| Teensy's clock can cause occasional audio glitches when I2S slave mode | |||
| is used together with other input or output objects based on Teensy's | |||
| timing.</p> | |||
| <p>Only one I2S input and one I2S output object may be used. Master | |||
| and slave modes may not be mixed (both must be of the same type). | |||
| </p> | |||
| </script> | |||
| <script type="text/x-red" data-template-name="AudioInputI2Sslave"> | |||
| <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> | |||
| <script type="text/javascript"> | |||
| RED.nodes.registerType('AudioInputAnalog',{ | |||
| shortName: "adc", | |||
| @@ -189,6 +136,59 @@ | |||
| </script> | |||
| <script type="text/javascript"> | |||
| RED.nodes.registerType('AudioInputI2Sslave',{ | |||
| shortName: "i2ss", | |||
| inputs:0, | |||
| outputs:2, | |||
| category: 'input-function', | |||
| color:"#E6E0F8", | |||
| icon: "arrow-in.png" | |||
| }); | |||
| </script> | |||
| <script type="text/x-red" data-help-name="AudioInputI2Sslave"> | |||
| <h3>Summary</h3> | |||
| <p>Receive 16 bit stereo audio from an I2S device using I2S slave mode.</p> | |||
| <h3>Audio Connections</h3> | |||
| <table class=doc align=center cellpadding=3> | |||
| <tr class=top><th>Port</th><th>Purpose</th></tr> | |||
| <tr class=odd><td align=center>Out 0</td><td>Left Channel</td></tr> | |||
| <tr class=odd><td align=center>Out 1</td><td>Right Channel</td></tr> | |||
| </table> | |||
| <h3>Functions</h3> | |||
| <p>This object has no functions to call from the Arduino sketch. It | |||
| simply streams data from the I2S hardware to its 2 output ports.</p> | |||
| <h3>Hardware</h3> | |||
| <p>The I2S signals are used in "slave" mode, where the I2S device controls | |||
| data timing.</p> | |||
| <table class=doc align=center cellpadding=3> | |||
| <tr class=top><th>Pin</th><th>Signal</th><th>Direction</th></tr> | |||
| <tr class=odd><td align=center>9</td><td>BCLK</td><td>Input</td></tr> | |||
| <tr class=odd><td align=center>13</td><td>RX</td><td>Input</td></tr> | |||
| <tr class=odd><td align=center>23</td><td>LRCLK</td><td>Input</td></tr> | |||
| </table> | |||
| <!--<h3>Examples</h3> | |||
| <p class=exam>File > Examples > Audio > | |||
| </p>--> | |||
| <h3>Notes</h3> | |||
| <p>Slave mode I2S <b>should not used in the same project as ADC, DAC and | |||
| PWM</b> signals. Differences in timing between the I2S device and | |||
| Teensy's clock can cause occasional audio glitches when I2S slave mode | |||
| is used together with other input or output objects based on Teensy's | |||
| timing.</p> | |||
| <p>Only one I2S input and one I2S output object may be used. Master | |||
| and slave modes may not be mixed (both must be of the same type). | |||
| </p> | |||
| </script> | |||
| <script type="text/x-red" data-template-name="AudioInputI2Sslave"> | |||
| <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> | |||
| <script type="text/javascript"> | |||
| RED.nodes.registerType('AudioOutputI2S',{ | |||
| @@ -258,10 +258,9 @@ | |||
| </script> | |||
| <script type="text/javascript"> | |||
| RED.nodes.registerType('AudioOutputI2Sslave',{ | |||
| shortName: "i2ss", | |||
| RED.nodes.registerType('AudioOutputSPDIF',{ | |||
| shortName: "spdif", | |||
| inputs:2, | |||
| outputs:0, | |||
| category: 'output-function', | |||
| @@ -269,9 +268,10 @@ | |||
| icon: "arrow-in.png" | |||
| }); | |||
| </script> | |||
| <script type="text/x-red" data-help-name="AudioOutputI2Sslave"> | |||
| <script type="text/x-red" data-help-name="AudioOutputSPDIF"> | |||
| <h3>Summary</h3> | |||
| <p>Transmit 16 bit stereo audio to an I2S device using I2S slave mode.</p> | |||
| <p>Transmit 16 bit stereo audio as Digital S/PDIF.</p> | |||
| <p align=center><img src="spdif_proto.jpg"></p> | |||
| <h3>Audio Connections</h3> | |||
| <table class=doc align=center cellpadding=3> | |||
| <tr class=top><th>Port</th><th>Purpose</th></tr> | |||
| @@ -280,30 +280,39 @@ | |||
| </table> | |||
| <h3>Functions</h3> | |||
| <p>This object has no functions to call from the Arduino sketch. It | |||
| simply streams data from its 2 input ports to the I2S hardware.</p> | |||
| simply streams data from its 2 input ports S/PDIF encoded digital | |||
| audio on pin 22.</p> | |||
| <h3>Hardware</h3> | |||
| <p>The I2S signals are used in "slave" mode, where the I2S device controls | |||
| data timing.</p> | |||
| <p>The S/PDIF output signal can be used to drive an optical TOSLINK | |||
| cable, or a standard (usually orange) RCA jack.</p> | |||
| <table class=doc align=center cellpadding=3> | |||
| <tr class=top><th>Pin</th><th>Signal</th><th>Direction</th></tr> | |||
| <tr class=odd><td align=center>9</td><td>BCLK</td><td>Input</td></tr> | |||
| <tr class=odd><td align=center>22</td><td>TX</td><td>Output</td></tr> | |||
| <tr class=odd><td align=center>23</td><td>LRCLK</td><td>Input</td></tr> | |||
| <tr class=odd><td align=center>22</td><td>S/PDIF</td><td>Output</td></tr> | |||
| </table> | |||
| <p>For optical TOSLINK output, this | |||
| <a href="https://www.oshpark.com/shared_projects/KcDBKHta" target="_blank">OSH Park board</a> | |||
| can be used with the inexpensive Everlight PLT133/T6A connector, available | |||
| at Digikey, 1080-1434-ND. | |||
| </p> | |||
| <h3>Examples</h3> | |||
| <p class=exam>File > Examples > Audio > HardwareTesting > WM8731MikroSine | |||
| <p>The AudioOutputSPDIF object can be used in place of the AudioOutputI2S object, | |||
| <p>used in nearly all the examples. The WavFilePlayer shows how to substitute | |||
| output objects for different hardware types. | |||
| </p> | |||
| <p class=exam>File > Examples > Audio > WavFilePlayer | |||
| </p> | |||
| <h3>Credits</h3> | |||
| <p><a href="https://github.com/FrankBoesing" target="_blank">Frank Boesing</a> | |||
| developed the AudioOutputSPDIF code. The original | |||
| <a href="https://forum.pjrc.com/threads/28639-S-pdif" target="_blank">forum disussion</a> | |||
| included valuable input and code from "kpc". | |||
| <h3>Notes</h3> | |||
| <p>Slave mode I2S <b>should not used in the same project as ADC, DAC and | |||
| PWM</b> signals. Differences in timing between the I2S device and | |||
| Teensy's clock can cause occasional audio glitches when I2S slave mode | |||
| is used together with other input or output objects based on Teensy's | |||
| timing.</p> | |||
| <p>Only one I2S input and one I2S output object may be used. Master | |||
| and slave modes may not be mixed (both must be of the same type). | |||
| <p>S/PDIF output uses the I2S hardware. This object can not be used | |||
| together with any of the I2S objects, because it requires the I2S | |||
| hardware with different internal settings.</p> | |||
| </p> | |||
| </script> | |||
| <script type="text/x-red" data-template-name="AudioOutputI2Sslave"> | |||
| <script type="text/x-red" data-template-name="AudioOutputI2S"> | |||
| <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"> | |||
| @@ -311,8 +320,6 @@ | |||
| </script> | |||
| <script type="text/javascript"> | |||
| RED.nodes.registerType('AudioOutputAnalog',{ | |||
| shortName: "dac", | |||
| @@ -417,6 +424,58 @@ | |||
| </script> | |||
| <script type="text/javascript"> | |||
| RED.nodes.registerType('AudioOutputI2Sslave',{ | |||
| shortName: "i2ss", | |||
| inputs:2, | |||
| outputs:0, | |||
| category: 'output-function', | |||
| color:"#E6E0F8", | |||
| icon: "arrow-in.png" | |||
| }); | |||
| </script> | |||
| <script type="text/x-red" data-help-name="AudioOutputI2Sslave"> | |||
| <h3>Summary</h3> | |||
| <p>Transmit 16 bit stereo audio to an I2S device using I2S slave mode.</p> | |||
| <h3>Audio Connections</h3> | |||
| <table class=doc align=center cellpadding=3> | |||
| <tr class=top><th>Port</th><th>Purpose</th></tr> | |||
| <tr class=odd><td align=center>In 0</td><td>Left Channel</td></tr> | |||
| <tr class=odd><td align=center>In 1</td><td>Right Channel</td></tr> | |||
| </table> | |||
| <h3>Functions</h3> | |||
| <p>This object has no functions to call from the Arduino sketch. It | |||
| simply streams data from its 2 input ports to the I2S hardware.</p> | |||
| <h3>Hardware</h3> | |||
| <p>The I2S signals are used in "slave" mode, where the I2S device controls | |||
| data timing.</p> | |||
| <table class=doc align=center cellpadding=3> | |||
| <tr class=top><th>Pin</th><th>Signal</th><th>Direction</th></tr> | |||
| <tr class=odd><td align=center>9</td><td>BCLK</td><td>Input</td></tr> | |||
| <tr class=odd><td align=center>22</td><td>TX</td><td>Output</td></tr> | |||
| <tr class=odd><td align=center>23</td><td>LRCLK</td><td>Input</td></tr> | |||
| </table> | |||
| <h3>Examples</h3> | |||
| <p class=exam>File > Examples > Audio > HardwareTesting > WM8731MikroSine | |||
| </p> | |||
| <h3>Notes</h3> | |||
| <p>Slave mode I2S <b>should not used in the same project as ADC, DAC and | |||
| PWM</b> signals. Differences in timing between the I2S device and | |||
| Teensy's clock can cause occasional audio glitches when I2S slave mode | |||
| is used together with other input or output objects based on Teensy's | |||
| timing.</p> | |||
| <p>Only one I2S input and one I2S output object may be used. Master | |||
| and slave modes may not be mixed (both must be of the same type). | |||
| </p> | |||
| </script> | |||
| <script type="text/x-red" data-template-name="AudioOutputI2Sslave"> | |||
| <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> | |||
| <script type="text/javascript"> | |||
| RED.nodes.registerType('AudioMixer4',{ | |||
| shortName: "mixer", | |||
| @@ -1242,17 +1301,17 @@ The actual packets are taken | |||
| It does this by sampling from a delay line, so each voice is actually | |||
| the same but at a slightly different point in time. This is a type of | |||
| comb filtering.</p> | |||
| <p>Chorus combines one or more samples ranging from the most recent | |||
| sample back to about 50ms ago. The additional samples are evenly spread | |||
| <p>Chorus combines one or more samples ranging from the most recent | |||
| sample back to about 50ms ago. The additional samples are evenly spread | |||
| through the supplied delay line, and there is no modulation.</p> | |||
| <p>If the number of voices is specified as 2, then the | |||
| effect combines the current sample and the oldest sample (the last one | |||
| in the delay line). If the number of voices is 3 then the effect combines | |||
| the most recent sample, the oldest sample and the sample in the middle of | |||
| <p>If the number of voices is specified as 2, then the | |||
| effect combines the current sample and the oldest sample (the last one | |||
| in the delay line). If the number of voices is 3 then the effect combines | |||
| the most recent sample, the oldest sample and the sample in the middle of | |||
| the delay line.</p> | |||
| <p>For two voices the effect can be represented as:<br/> | |||
| result = (sample(0) + sample(dt))/2<br/> | |||
| where sample(0) represents the current sample and sample(dt) | |||
| where sample(0) represents the current sample and sample(dt) | |||
| is the sample in the delay line from dt milliseconds ago.</p> | |||
| <h3>Audio Connections</h3> | |||
| <table class=doc align=center cellpadding=3> | |||
| @@ -1263,9 +1322,9 @@ The actual packets are taken | |||
| <h3>Functions</h3> | |||
| <p class=func><span class=keyword>begin</span>(delayBuffer, length, n_chorus);</p> | |||
| <p class=desc>Create a chorus by specifying the address of the delayline, the | |||
| total number of samples in the delay line (often done as an integer multiple of | |||
| total number of samples in the delay line (often done as an integer multiple of | |||
| AUDIO_BLOCK_SAMPLES) and the number of voices in the chorus <em>including</em> | |||
| the original voice (so, 2 and up to get a chorus effect, although you can | |||
| the original voice (so, 2 and up to get a chorus effect, although you can | |||
| specify 1 if you want). | |||
| </p> | |||
| <p class=func><span class=keyword>modify</span>(n_chorus);</p> | |||
| @@ -1297,19 +1356,19 @@ The actual packets are taken | |||
| </script> | |||
| <script type="text/x-red" data-help-name="AudioEffectFlange"> | |||
| <h3>Summary</h3> | |||
| <p>Originally, flanging was produced by playing the same signal on two synchronized | |||
| <p>Originally, flanging was produced by playing the same signal on two synchronized | |||
| reel-to-reel tape recorders and making one of the reels slow down and speed up by | |||
| pressing on the flange of the reel (hence the name). This is a type of | |||
| comb filtering, and produces a harmonically-related series of peaks and notches | |||
| comb filtering, and produces a harmonically-related series of peaks and notches | |||
| in the audio spectrum.</p> | |||
| <p>This flanger uses a delay line, combining the original voice with only one sample from the delay | |||
| <p>This flanger uses a delay line, combining the original voice with only one sample from the delay | |||
| line, but the position of that sample varies sinusoidally.</p> | |||
| <p>The effect can be represented as:<br> | |||
| result = sample(0) + sample(dt + depth*sin(2*PI*Fe))</p> | |||
| <p>The value of the sine function is always a number from -1 to +1 and | |||
| so the result of depth*(sin(Fe)) is always a number from -depth to +depth. | |||
| Thus, the delayed sample will be selected from the range (dt-depth) to | |||
| (dt+depth). This selection will vary at whatever rate is specified as the | |||
| <p>The value of the sine function is always a number from -1 to +1 and | |||
| so the result of depth*(sin(Fe)) is always a number from -depth to +depth. | |||
| Thus, the delayed sample will be selected from the range (dt-depth) to | |||
| (dt+depth). This selection will vary at whatever rate is specified as the | |||
| frequency of the effect, Fe. Typically a low frequency (a few Hertz) is used. | |||
| <h3>Audio Connections</h3> | |||
| <table class=doc align=center cellpadding=3> | |||
| @@ -1320,7 +1379,7 @@ The actual packets are taken | |||
| <h3>Functions</h3> | |||
| <p class=func><span class=keyword>begin</span>(delayBuffer, length, offset, depth, delayRate);</p> | |||
| <p class=desc>Create a flanger by specifying the address of the delayline, the | |||
| total number of samples in the delay line (often done as an integer multiple of | |||
| total number of samples in the delay line (often done as an integer multiple of | |||
| AUDIO_BLOCK_SAMPLES), the offset (how far back the flanged sample is from the original voice), | |||
| the modulation depth (larger values give a greater variation) and the modulation | |||
| frequency, in Hertz. | |||
| @@ -2214,10 +2273,10 @@ double s_freq = .0625;</p> | |||
| 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) | |||
| 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 | |||
| <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 class=func><span class=keyword>dacVolume</span>(left, right);</p> | |||
| @@ -2228,17 +2287,17 @@ double s_freq = .0625;</p> | |||
| <h3>Audio Processor</h3> | |||
| <p>The optional digital audio processor is capable of implementing | |||
| <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 | |||
| 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 | |||
| <p>It is good practice to mute the outputs before enabling or disabling | |||
| the Audio Processor, to avoid clicks or thumps. | |||
| </p> | |||
| @@ -2263,12 +2322,12 @@ double s_freq = .0625;</p> | |||
| 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 | |||
| <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 | |||
| 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> | |||
| @@ -2280,7 +2339,7 @@ double s_freq = .0625;</p> | |||
| </p> | |||
| <p class=func><span class=keyword>surroundSoundEnable</span>();</p> | |||
| <p class=desc>Enable virtual surround processing, to give a broader and | |||
| <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> | |||
| @@ -2294,27 +2353,27 @@ double s_freq = .0625;</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 | |||
| 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 | |||
| <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 | |||
| <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 | |||
| <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 | |||
| <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: | |||
| @@ -2329,37 +2388,37 @@ value frequency | |||
| 5 200Hz | |||
| 6 225Hz | |||
| </pre> | |||
| <p class=desc>When changing bass level, call this function repeatedly to ramp up or down the bass in | |||
| <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 | |||
| <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 | |||
| 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 | |||
| 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 | |||
| 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). | |||
| 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 | |||
| <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, | |||
| <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> | |||
| @@ -2369,18 +2428,18 @@ value frequency | |||
| <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 | |||
| <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> | |||
| </p> | |||
| <h3>Examples</h3> | |||
| <p>Nearly all of the library's examples use this object. These | |||
| examples demonstrate its special features. | |||
| @@ -2398,7 +2457,7 @@ value frequency | |||
| <p class=exam>File > Examples > Audio > HardwareTesting > SGTL5000 > CalcBiquadToneControlDAP | |||
| </p> | |||
| <h3>Notes</h3> | |||
| <p>TODO: add example with rock/classical/speech presets, where rock uses bass boost | |||
| <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> | |||
| @@ -2430,7 +2489,7 @@ value frequency | |||
| <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, since this control object configures the WM8731 into | |||
| must be used, since this control object configures the WM8731 into | |||
| slave mode. | |||
| </p> | |||
| <h3>Functions</h3> | |||
| @@ -2450,7 +2509,7 @@ value frequency | |||
| <p class=desc>not implemented | |||
| </p> | |||
| <!--<h3>Examples</h3> | |||
| <p class=exam>File > Examples > Audio > | |||
| <p class=exam>File > Examples > Audio > | |||
| </p>--> | |||
| <h3>Notes</h3> | |||
| <p></p> | |||