parent
a35712c8ab
commit
50543d1563
@ -1,71 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioAnalyzeFFT1024"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Compute a 1024 point Fast Fourier Transform (FFT) frequency analysis, |
||||
with real value (magnitude) output. The frequency resolution is |
||||
43 Hz, useful detailed for audio visualization.</p> |
||||
</div> |
||||
<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>Signal to convert to frequency bins</td></tr> |
||||
</table> |
||||
<h3>Functions</h3> |
||||
<p class=func><span class=keyword>available</span>();</p> |
||||
<p class=desc>Returns true each time the FFT analysis produces new output data. |
||||
</p> |
||||
<p class=func><span class=keyword>read</span>(binNumber);</p> |
||||
<p class=desc>Read a single frequency bin, from 0 to 511. The result is scaled |
||||
so 1.0 represents a full scale sine wave. |
||||
</p> |
||||
<p class=func><span class=keyword>read</span>(firstBin, lastBin);</p> |
||||
<p class=desc>Read several frequency bins, returning their sum. The higher |
||||
audio octaves are represented by many bins, which are typically read |
||||
as a group for audio visualization. |
||||
</p> |
||||
<p class=func><span class=keyword>averageTogether</span>(number);</p> |
||||
<p class=desc>This function does nothing. The 1024 point FFT always |
||||
updates at approximately 86 times per second. |
||||
</p> |
||||
<p class=func><span class=keyword>windowFunction</span>(window);</p> |
||||
<p class=desc>Set the window function to be used. AudioWindowHanning1024 |
||||
is the default. Windowing may be disabled by NULL, but windowing |
||||
should be used for all non-periodic (music) signals, and all periodic |
||||
signals that are not exact integer division of the sample rate. |
||||
</p> |
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Audio > Analysis > FFT |
||||
</p> |
||||
<p class=exam>File > Examples > Audio > Analysis > SpectrumAnalyzerBasic |
||||
</p> |
||||
<h3>Notes</h3> |
||||
<p>The raw 16 bit output data bins may be access with myFFT.output[num], where |
||||
num is 0 to 511.</p> |
||||
<p>TODO: caveats about spectral leakage vs frequency precision for arbitrary signals</p> |
||||
<p>Window Types: |
||||
<ul> |
||||
<li><span class=literal>AudioWindowHanning1024</span> (default)</li> |
||||
<li><span class=literal>AudioWindowBartlett1024</span></li> |
||||
<li><span class=literal>AudioWindowBlackman1024</span></li> |
||||
<li><span class=literal>AudioWindowFlattop1024</span></li> |
||||
<li><span class=literal>AudioWindowBlackmanHarris1024</span></li> |
||||
<li><span class=literal>AudioWindowNuttall1024</span></li> |
||||
<li><span class=literal>AudioWindowBlackmanNuttall1024</span></li> |
||||
<li><span class=literal>AudioWindowWelch1024</span></li> |
||||
<li><span class=literal>AudioWindowHamming1024</span></li> |
||||
<li><span class=literal>AudioWindowCosine1024</span></li> |
||||
<li><span class=literal>AudioWindowTukey1024</span></li> |
||||
</ul> |
||||
</p> |
||||
<p>1024 point FFT has a peak CPU usage of approx 52% on Teensy 3.1. |
||||
Average usage is much lower. Future versions might distribute the |
||||
load more evenly over time.... |
||||
</p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioAnalyzeFFT1024"> |
||||
<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> |
||||
|
@ -1,67 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioAnalyzeFFT256"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Compute a 256 point Fast Fourier Transform (FFT) frequency analysis, |
||||
with real value (magnitude) output. The frequency resolution is |
||||
172 Hz, useful for simple audio visualization.</p> |
||||
</div> |
||||
<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>Signal to convert to frequency bins</td></tr> |
||||
</table> |
||||
<h3>Functions</h3> |
||||
<p class=func><span class=keyword>available</span>();</p> |
||||
<p class=desc>Returns true each time the FFT analysis produces new output data. |
||||
</p> |
||||
<p class=func><span class=keyword>read</span>(binNumber);</p> |
||||
<p class=desc>Read a single frequency bin, from 0 to 127. The result is scaled |
||||
so 1.0 represents a full scale sine wave. |
||||
</p> |
||||
<p class=func><span class=keyword>read</span>(firstBin, lastBin);</p> |
||||
<p class=desc>Read several frequency bins, returning their sum. The higher |
||||
audio octaves are represented by many bins, which are typically read |
||||
as a group for audio visualization. |
||||
</p> |
||||
<p class=func><span class=keyword>averageTogether</span>(number);</p> |
||||
<p class=desc>New data is produced very radidly, approximately 344 times |
||||
per second. Multiple outputs can be averaged together, so available() |
||||
returns true at a slower rate. |
||||
</p> |
||||
<p class=func><span class=keyword>windowFunction</span>(window);</p> |
||||
<p class=desc>Set the window function to be used. AudioWindowHanning256 |
||||
is the default. Windowing may be disabled by NULL, but windowing |
||||
should be used for all non-periodic (music) signals, and all periodic |
||||
signals that are not exact integer division of the sample rate. |
||||
</p> |
||||
|
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Audio > MemoryAndCpuUsage |
||||
</p> |
||||
<h3>Notes</h3> |
||||
<p>The raw 16 bit output data bins may be access with myFFT.output[num], where |
||||
num is 0 to 127.</p> |
||||
<p>TODO: caveats about spectral leakage vs frequency precision for arbitrary signals</p> |
||||
<p>Window Types: |
||||
<ul> |
||||
<li><span class=literal>AudioWindowHanning256</span> (default)</li> |
||||
<li><span class=literal>AudioWindowBartlett256</span></li> |
||||
<li><span class=literal>AudioWindowBlackman256</span></li> |
||||
<li><span class=literal>AudioWindowFlattop256</span></li> |
||||
<li><span class=literal>AudioWindowBlackmanHarris256</span></li> |
||||
<li><span class=literal>AudioWindowNuttall256</span></li> |
||||
<li><span class=literal>AudioWindowBlackmanNuttall256</span></li> |
||||
<li><span class=literal>AudioWindowWelch256</span></li> |
||||
<li><span class=literal>AudioWindowHamming256</span></li> |
||||
<li><span class=literal>AudioWindowCosine256</span></li> |
||||
<li><span class=literal>AudioWindowTukey256</span></li> |
||||
</ul> |
||||
</p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioAnalyzeFFT256"> |
||||
<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> |
||||
|
@ -1,57 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioAnalyzeNoteFrequency"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Detect with fairly good accuracy the fundamental frequency f<sub>o</sub> |
||||
of musical notes, such as electric guitar and bass.</p> |
||||
</div> |
||||
<p>Written By Collin Duffy</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>Signal to analyze</td></tr> |
||||
</table> |
||||
<h3>Functions</h3> |
||||
<p class=func><span class=keyword>begin</span>(threshold);</p> |
||||
<p class=desc>Initialize and start detecting frequencies, |
||||
with an initial threshold (the amount of allowed uncertainty). |
||||
</p> |
||||
<p class=func><span class=keyword>available</span>();</p> |
||||
<p class=desc>Returns true (non-zero) when a valid |
||||
frequency is detected. |
||||
</p> |
||||
<p class=func><span class=keyword>read</span>();</p> |
||||
<p class=desc>Read the detected frequency. |
||||
</p> |
||||
<p class=func><span class=keyword>probability</span>();</p> |
||||
<p class=desc>Return the level of certainty, betweeo 0 to 1.0. |
||||
</p> |
||||
<p class=func><span class=keyword>threshold</span>(level);</p> |
||||
<p class=desc>Set the detection threshold, the amount of allowed uncertainty. |
||||
</p> |
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Audio > Analysis > NoteFrequency |
||||
</p> |
||||
<h3>Notes</h3> |
||||
<p>The <a href="http://recherche.ircam.fr/equipes/pcm/cheveign/pss/2002_JASA_YIN.pdf">YIN algorithm</a> (PDF) |
||||
is used to detect frequencies, with many optimizations for |
||||
frequencies between 29-400Hz. This algorithm can be somewhat |
||||
memory and processor hungry but will allow you to detect with |
||||
fairly good accuracy the fundamental frequencies from |
||||
electric guitars and basses.</p> |
||||
<p>Within the code, AUDIO_GUITARTUNER_BLOCKS |
||||
may be edited to control low frequency range. The default |
||||
(24) allows measurement down to 29.14 Hz, or B(flat)0.</p> |
||||
<p>TODO: The usable upper range of this object is not well known. |
||||
Duff says "it should be good up to 1000Hz", but may have trouble |
||||
at 4 kHz. Please <a href="https://forum.pjrc.com/threads/32252-Different-Range-FFT-Algorithm/page2">post feedback here</a>, ideally with audio clips for the NoteFrequency example.</p> |
||||
<p>This object was contributed by Collin Duffy from his |
||||
<a href="https://github.com/duff2013/AudioTuner">AudioTuner project</a>. |
||||
Additional details and documentation may be found there.</p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioAnalyzeNoteFrequency"> |
||||
<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> |
||||
|
@ -1,38 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioAnalyzePeak"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Track the signal peak amplitude. Very useful for simple |
||||
audio level response projects, and general troubleshooting.</p> |
||||
</div> |
||||
<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>Signal to analyze</td></tr> |
||||
</table> |
||||
<h3>Functions</h3> |
||||
<p class=func><span class=keyword>available</span>();</p> |
||||
<p class=desc>Returns true each time new peak data is available. |
||||
</p> |
||||
<p class=func><span class=keyword>read</span>();</p> |
||||
<p class=desc>Read the highest peak amplitude value since the last read. |
||||
Return is from 0.0 to 1.0. |
||||
</p> |
||||
<p class=func><span class=keyword>readPeakToPeak</span>();</p> |
||||
<p class=desc>Read the highest peak-to-peak amplitude since the last read. |
||||
Return is from 0.0 to 2.0. |
||||
</p> |
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Audio > Analysis > PeakMeterMono |
||||
</p> |
||||
<p class=exam>File > Examples > Audio > Analysis > PeakMeterStereo |
||||
</p> |
||||
<h3>Notes</h3> |
||||
<p></p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioAnalyzePeak"> |
||||
<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> |
||||
|
@ -1,42 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioAnalyzePrint"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Print raw audio data to the Arduino Serial Monitor. This |
||||
object creates massive output quickly, and should not normally be used.</p> |
||||
</div> |
||||
<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>Signal to print</td></tr> |
||||
</table> |
||||
<h3>Functions</h3> |
||||
<p class=func><span class=keyword>name</span>(string);</p> |
||||
<p class=desc>blah blah blah blah |
||||
</p> |
||||
<p class=func><span class=keyword>trigger</span>();</p> |
||||
<p class=desc>blah blah blah blah |
||||
</p> |
||||
<p class=func><span class=keyword>trigger</span>(level, edge);</p> |
||||
<p class=desc>blah blah blah blah |
||||
</p> |
||||
<p class=func><span class=keyword>delay</span>(samples);</p> |
||||
<p class=desc>blah blah blah blah |
||||
</p> |
||||
<p class=func><span class=keyword>length</span>(samples);</p> |
||||
<p class=desc>blah blah blah blah |
||||
</p> |
||||
<!-- |
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Audio > |
||||
</p> |
||||
--> |
||||
<h3>Notes</h3> |
||||
<p>This object doesn't work very well and probably should not be used.</p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioAnalyzePrint"> |
||||
<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> |
||||
|
@ -1,32 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioAnalyzeRMS"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Track the signal RMS amplitude. Useful for |
||||
audio level response projects, and general troubleshooting.</p> |
||||
</div> |
||||
<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>Signal to analyze</td></tr> |
||||
</table> |
||||
<h3>Functions</h3> |
||||
<p class=func><span class=keyword>available</span>();</p> |
||||
<p class=desc>Returns true if new RMS data is available. |
||||
</p> |
||||
<p class=func><span class=keyword>read</span>();</p> |
||||
<p class=desc>Read the new RMS value. |
||||
Return is from 0.0 to 1.0. |
||||
</p> |
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Audio > Analysis > PeakAndRMSMeterStereo</p> |
||||
</p> |
||||
<h3>Notes</h3> |
||||
<p></p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioAnalyzeRMS"> |
||||
<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> |
||||
|
@ -1,56 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioAnalyzeToneDetect"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Detect the level of a single tone</p> |
||||
</div> |
||||
<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>Signal to analyze</td></tr> |
||||
</table> |
||||
<h3>Functions</h3> |
||||
<p class=func><span class=keyword>frequency</span>(freq);</p> |
||||
<p class=desc>Set the frequency to detect. The default detection time |
||||
will be 10 cycles of this frequency. |
||||
</p> |
||||
<p class=func><span class=keyword>frequency</span>(freq, cycles);</p> |
||||
<p class=desc>Set the frequency to detect, and the number of cycles. |
||||
Longer detection time (more cycles) will give higher precision, |
||||
but of course slower response. |
||||
</p> |
||||
<p class=func><span class=keyword>available</span>();</p> |
||||
<p class=desc>Returns true (non-zero) each time a detection interval |
||||
(number of cycles) completed and a new level is detected. |
||||
</p> |
||||
<p class=func><span class=keyword>read</span>();</p> |
||||
<p class=desc>Read the detected signal level. Range is 0 to 1.0. |
||||
</p> |
||||
<p class=func><span class=keyword>threshold</span>(level);</p> |
||||
<p class=desc>Set a detection threshold, where the bool test operation |
||||
will return true if at or above this level, or false when below. |
||||
</p> |
||||
<p class=func>(bool)</p> |
||||
<p class=desc>By testing the object as a boolean value, you can respond |
||||
to detection of a tone. |
||||
</p> |
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Audio > Analysis > DialTone_Serial |
||||
</p> |
||||
<p class=exam>File > Examples > Audio > Analysis > DialTone_7segment |
||||
</p> |
||||
<h3>Notes</h3> |
||||
<p>Low frequency detection has trouble with numerical precision. |
||||
Works really well for all 8 DTMF frequencies, but fails for |
||||
detecting "sub audible tones" used in some control applications.</p> |
||||
<p>The (bool) test continues to return true until the next detection |
||||
interval (the configured number of cycles). This behavior may |
||||
change in future versions, for a single true each time the signal |
||||
is detected, and then false for the remainder of that interval.</p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioAnalyzeToneDetect"> |
||||
<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> |
||||
|
@ -1,61 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioControlAK4558"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Control the AK4558 chip on the <a href="https://hackaday.io/project/8567-hifi-audio-codec-module" target="_blank">HiFi Audio CODEC Module</a> |
||||
in slave mode, where the Teensy controls all I2S timing.</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. |
||||
</p> |
||||
<h3>Functions</h3> |
||||
<p class=func><span class=keyword>enable</span>();</p> |
||||
<p class=desc>Enables the CODEC to work with 44.1 KHz - 16 bit data. This function does not enable the ADC/DAC modules. |
||||
</p> |
||||
<p class=func><span class=keyword>enableIn</span>();</p> |
||||
<p class=desc>Enables the ADC module. |
||||
</p> |
||||
<p class=func><span class=keyword>enableOut</span>();</p> |
||||
<p class=desc>Enables the DAC module. |
||||
</p> |
||||
<p class=func><span class=keyword>disable</span>();</p> |
||||
<p class=desc>Disables the ADC and the DAC modules. |
||||
</p> |
||||
<p class=func><span class=keyword>disableIn</span>();</p> |
||||
<p class=desc>Disable the ADC module. |
||||
</p> |
||||
<p class=func><span class=keyword>disableOut</span>();</p> |
||||
<p class=desc>Disable the DAC module. |
||||
</p> |
||||
<p class=func><span class=keyword>volume</span>(level);</p> |
||||
<p class=desc>Accepts a float in range 0.0-1.0 and sets the line output volume accordingly. |
||||
</p> |
||||
<p class=func><span class=keyword>volumeLeft</span>(level);</p> |
||||
<p class=desc>Accepts a float in range 0.0-1.0 and sets the left line output volume accordingly. |
||||
</p> |
||||
<p class=func><span class=keyword>volumeRight</span>(level);</p> |
||||
<p class=desc>Accepts a float in range 0.0-1.0 and sets the right line output volume accordingly. |
||||
</p> |
||||
<p class=func><span class=keyword>inputLevel</span>(level);</p> |
||||
<p class=desc>NOT SUPPORTED BY THE AK4558 |
||||
</p> |
||||
<p class=func><span class=keyword>inputSelect</span>(input);</p> |
||||
<p class=desc>not implemented yet |
||||
</p> |
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Audio > HardwareTesting > AK4558 > PassthroughTest |
||||
</p> |
||||
<p class=exam>File > Examples > Audio > HardwareTesting > AK4558 > SineOutTest |
||||
</p> |
||||
<h3>Notes</h3> |
||||
<p>TODO: Implement inputSelect() function to enable mono left, mono right, stereo operation.</p> |
||||
<p>TODO: Implement ADC and DAC filters control.</p> |
||||
<p>TODO: Implement DAC level attenuator attack rate modifier.</p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioControlAK4558"> |
||||
<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> |
||||
|
@ -1,64 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioControlCS4272"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Control the CS4272 chip on the <a href="https://hackaday.io/project/5912-teensy-super-audio-board" target="_blank">Super Audio Board</a>. |
||||
</p> |
||||
<p>TODO: does this control object put the CS4272 into I2S master or slave mode</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. |
||||
</p> |
||||
<h3>Functions</h3> |
||||
<p class=func><span class=keyword>enable</span>();</p> |
||||
<p class=desc>Enables the CODEC to work with 44.1 KHz - 16 bit data. This function does not enable the ADC/DAC modules. |
||||
</p> |
||||
<p class=func><span class=keyword>volume</span>(vol);</p> |
||||
<p class=desc>Set the volume level. Range is 0 to 1.0. |
||||
</p> |
||||
<p class=func><span class=keyword>volume</span>(left, right);</p> |
||||
<p class=desc>Set the volume level. Range is 0 to 1.0. |
||||
</p> |
||||
<p class=func><span class=keyword>dacVolume</span>(vol);</p> |
||||
<p class=desc>Set the volume level. Range is 0 to 1.0. TODO: what's the |
||||
distinction between volume() and dacVolume()? |
||||
</p> |
||||
<p class=func><span class=keyword>dacVolume</span>(left, right);</p> |
||||
<p class=desc>Set the volume level. Range is 0 to 1.0. |
||||
</p> |
||||
|
||||
<p class=func><span class=keyword>muteOutput</span>();</p> |
||||
<p class=desc>TODO: description |
||||
</p> |
||||
<p class=func><span class=keyword>unmuteOutput</span>();</p> |
||||
<p class=desc>TODO: description |
||||
</p> |
||||
<p class=func><span class=keyword>muteInput</span>();</p> |
||||
<p class=desc>TODO: description |
||||
</p> |
||||
<p class=func><span class=keyword>unmuteInput</span>();</p> |
||||
<p class=desc>TODO: description |
||||
</p> |
||||
<p class=func><span class=keyword>enableDither</span>();</p> |
||||
<p class=desc>TODO: description |
||||
</p> |
||||
<p class=func><span class=keyword>disableDither</span>();</p> |
||||
<p class=desc>TODO: description |
||||
</p> |
||||
|
||||
<h3>Hardware</h3> |
||||
<p>Pin 2 must be connected to the CS4272 reset. SDA & SCL are used for all control. |
||||
</p> |
||||
|
||||
<h3>Notes</h3> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioControlCS4272"> |
||||
<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> |
||||
|
||||
|
||||
|
||||
|
@ -1,350 +0,0 @@ |
||||
<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> |
||||
|
@ -1,42 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioControlWM8731"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Control a WM8731 chip in slave mode, where it receives all clocks from Teensy</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, since this control object configures the WM8731 into |
||||
slave mode. |
||||
</p> |
||||
<h3>Functions</h3> |
||||
<p class=func><span class=keyword>enable</span>();</p> |
||||
<p class=desc>blah blah blah blah |
||||
</p> |
||||
<p class=func><span class=keyword>disable</span>();</p> |
||||
<p class=desc>not implemented |
||||
</p> |
||||
<p class=func><span class=keyword>volume</span>(level);</p> |
||||
<p class=desc>blah blah blah blah |
||||
</p> |
||||
<p class=func><span class=keyword>inputLevel</span>(level);</p> |
||||
<p class=desc>not implemented |
||||
</p> |
||||
<p class=func><span class=keyword>inputSelect</span>(input);</p> |
||||
<p class=desc>not implemented |
||||
</p> |
||||
<!-- |
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Audio > |
||||
</p> |
||||
--> |
||||
<h3>Notes</h3> |
||||
<p></p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioControlWM8731"> |
||||
<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> |
||||
|
@ -1,40 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioControlWM8731master"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Control a WM8731 chip in master mode, where it controls all I2S timing.</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 slave mode objects |
||||
must be used, since this control object configures the WM8731 into |
||||
master mode. |
||||
</p> |
||||
<h3>Functions</h3> |
||||
<p class=func><span class=keyword>enable</span>();</p> |
||||
<p class=desc>blah blah blah blah |
||||
</p> |
||||
<p class=func><span class=keyword>disable</span>();</p> |
||||
<p class=desc>not implemented |
||||
</p> |
||||
<p class=func><span class=keyword>volume</span>(level);</p> |
||||
<p class=desc>blah blah blah blah |
||||
</p> |
||||
<p class=func><span class=keyword>inputLevel</span>(level);</p> |
||||
<p class=desc>not implemented |
||||
</p> |
||||
<p class=func><span class=keyword>inputSelect</span>(input);</p> |
||||
<p class=desc>not implemented |
||||
</p> |
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Audio > HardwareTesting > WM8731MikroSine |
||||
</p> |
||||
<h3>Notes</h3> |
||||
<p></p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioControlWM8731master"> |
||||
<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> |
||||
|
@ -1,47 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioEffectBitcrusher"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Reduce the samplerate and/or bitdepth of a source signal, resulting in |
||||
a distorted sound.</p> |
||||
</div> |
||||
<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>Signal Input</td></tr> |
||||
<tr class=odd><td align=center>Out 0</td><td>Signal Output</td></tr> |
||||
</table> |
||||
<h3>Functions</h3> |
||||
<p class=func><span class=keyword>bits</span>(xcrushBits);</p> |
||||
<p class=desc>xcrushBits sets the bitdepth, from 1 to 16. A Value of 16 |
||||
does not crush the bitdepth, and is effectively a passthru for this part |
||||
of the function.</p> |
||||
|
||||
<p class=func><span class=keyword>sampleRate</span>(xsampleRate);</p> |
||||
|
||||
<p class=desc>xsampleRate sets the frequency, from 1 to 44100Hz, however it |
||||
works in integer steps so you will only really get a handful of results from |
||||
the many samplerates you can pass. 44100 is passthru.</p> |
||||
|
||||
<p class=desc>set xbitDepth to 16 and xsampleRate to 44100 to pass audio |
||||
through without any Bitcrush effect.</p> |
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Audio > Effects > Bitcrusher |
||||
</p> |
||||
<h3>Notes</h3> |
||||
<p>Needs a lot of improvement. Options for anti-aliasing would be nice in |
||||
the future, but for now, it's rough, it's dirty and it sounds a bit like |
||||
Nine Inch Nails. |
||||
</p> |
||||
<p><a href="http://www.pjrc.com/teensy/td_libs_AudioProcessorUsage.html" target="_blank">AudioNoInterrupts()</a> |
||||
should be used when changing |
||||
settings on multiple objects, so all changes always take effect |
||||
at the same moment. |
||||
</p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioEffectBitcrusher"> |
||||
<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> |
||||
|
@ -1,51 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioEffectChorus"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>The chorus effect simulates the richness of several nearly-identical |
||||
sound sources (like the way a choir sounds different to a single singer). |
||||
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> |
||||
</div> |
||||
<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 |
||||
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) |
||||
is the sample in the delay line from dt milliseconds ago.</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>Signal Input</td></tr> |
||||
<tr class="odd"><td align="center">Out 0</td><td>Chorused Output</td></tr> |
||||
</table> |
||||
<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 |
||||
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 |
||||
specify 1 if you want). |
||||
</p> |
||||
<p class=func><span class=keyword>modify</span>(n_chorus);</p> |
||||
<p class=desc>Alters the number of voices in a running chorus (previously started with begin). |
||||
</p> |
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Audio > Effects > Chorus |
||||
</p> |
||||
<h3>Notes</h3> |
||||
<p>The longer the length of the chorus, the more memory blocks are used.</p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioEffectChorus"> |
||||
<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> |
||||
|
@ -1,49 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioEffectDelay"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Delay a signal. Up to 8 separate delay taps can be used.</p> |
||||
<p align=center><img src="img/delay.png"><br><small>1 kHz burst, delayed 5.2 ms.</small></p> |
||||
</div> |
||||
<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>Signal Input</td></tr> |
||||
<tr class=odd><td align=center>Out 0</td><td>Delay Tap #1</td></tr> |
||||
<tr class=odd><td align=center>Out 1</td><td>Delay Tap #2</td></tr> |
||||
<tr class=odd><td align=center>Out 2</td><td>Delay Tap #3</td></tr> |
||||
<tr class=odd><td align=center>Out 3</td><td>Delay Tap #4</td></tr> |
||||
<tr class=odd><td align=center>Out 4</td><td>Delay Tap #5</td></tr> |
||||
<tr class=odd><td align=center>Out 5</td><td>Delay Tap #6</td></tr> |
||||
<tr class=odd><td align=center>Out 6</td><td>Delay Tap #7</td></tr> |
||||
<tr class=odd><td align=center>Out 7</td><td>Delay Tap #8</td></tr> |
||||
</table> |
||||
<h3>Functions</h3> |
||||
<p class=func><span class=keyword>delay</span>(channel, milliseconds);</p> |
||||
<p class=desc>Set output channel (0 to 7) to delay the signals by |
||||
milliseconds. The maximum delay is approx 425 ms. The actual delay |
||||
is rounded to the nearest sample. Each channel can be configured for |
||||
any delay. There is no requirement to configure the "taps" in increasing |
||||
delay order. |
||||
</p> |
||||
<p class=func><span class=keyword>disable</span>(channel);</p> |
||||
<p class=desc>Disable a channel. The output of this channel becomes |
||||
silent. If this channel is the longest delay, memory usage is |
||||
automatically reduced to accomodate only the remaining channels used. |
||||
</p> |
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Audio > Effects > Delay |
||||
</p> |
||||
<h3>Notes</h3> |
||||
<p>Memory for the delayed signal is take from the memory pool allocated by |
||||
<a href="http://www.pjrc.com/teensy/td_libs_AudioConnection.html" target="_blank">AudioMemory()</a>. |
||||
Each block allows about 3 milliseconds of delay, so AudioMemory |
||||
should be increased to allow for the longest delay tap. |
||||
</p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioEffectDelay"> |
||||
<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> |
||||
|
@ -1,103 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioEffectDelayExternal"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Delay a signal, using external memory for longer delay times! Up to 8 separate delay taps can be used.</p> |
||||
<p align=center><img src="img/delay.png"><br><small>1 kHz burst, delayed 5.2 ms.</small></p> |
||||
</div> |
||||
<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>Signal Input</td></tr> |
||||
<tr class=odd><td align=center>Out 0</td><td>Delay Tap #1</td></tr> |
||||
<tr class=odd><td align=center>Out 1</td><td>Delay Tap #2</td></tr> |
||||
<tr class=odd><td align=center>Out 2</td><td>Delay Tap #3</td></tr> |
||||
<tr class=odd><td align=center>Out 3</td><td>Delay Tap #4</td></tr> |
||||
<tr class=odd><td align=center>Out 4</td><td>Delay Tap #5</td></tr> |
||||
<tr class=odd><td align=center>Out 5</td><td>Delay Tap #6</td></tr> |
||||
<tr class=odd><td align=center>Out 6</td><td>Delay Tap #7</td></tr> |
||||
<tr class=odd><td align=center>Out 7</td><td>Delay Tap #8</td></tr> |
||||
</table> |
||||
<h3>Functions</h3> |
||||
<p class=func><span class=keyword>delay</span>(channel, milliseconds);</p> |
||||
<p class=desc>Set output channel (0 to 7) to delay the signals by |
||||
milliseconds. The maximum delay is approx 1.5 seconds for each 23LC1024 chip. |
||||
The actual delay |
||||
is rounded to the nearest sample. Each channel can be configured for |
||||
any delay. There is no requirement to configure the "taps" in increasing |
||||
delay order. |
||||
</p> |
||||
<p class=func><span class=keyword>disable</span>(channel);</p> |
||||
<p class=desc>Disable a channel. The output of this channel becomes |
||||
silent. If this channel is the longest delay, memory usage is |
||||
automatically reduced to accomodate only the remaining channels used. |
||||
</p> |
||||
<h3>Hardware</h3> |
||||
<p>By default, or when <span class=literal>AUDIO_MEMORY_23LC1024</span> is used (see below), |
||||
a single 23LC1024 RAM chip is used, with these pins: |
||||
<table class=doc align=center cellpadding=3> |
||||
<tr class=top><th>Pin</th><th>Signal</th></tr> |
||||
<tr class=odd><td align=center>6</td><td>CS</td></tr> |
||||
<tr class=odd><td align=center>7</td><td>MOSI</td></tr> |
||||
<tr class=odd><td align=center>12</td><td>MISO</td></tr> |
||||
<tr class=odd><td align=center>14</td><td>SCK</td></tr> |
||||
</table> |
||||
</p> |
||||
<p>When <span class=literal>AUDIO_MEMORY_MEMORYBOARD</span> is used, up to six |
||||
23LC1024 chips are used. |
||||
</p> |
||||
<p align=center><img src="img/memoryboard.jpg"><br><small><a href="https://oshpark.com/shared_projects/KZt5PaU7" target="_blank">Memoryboard 4</a></small></p> |
||||
<p> |
||||
<table class=doc align=center cellpadding=3> |
||||
<tr class=top><th>Pin</th><th>Signal</th></tr> |
||||
<tr class=odd><td align=center>2</td><td>CS0 (encoded)</td></tr> |
||||
<tr class=odd><td align=center>3</td><td>CS1 (encoded)</td></tr> |
||||
<tr class=odd><td align=center>4</td><td>CS2 (encoded)</td></tr> |
||||
<tr class=odd><td align=center>7</td><td>MOSI</td></tr> |
||||
<tr class=odd><td align=center>12</td><td>MISO</td></tr> |
||||
<tr class=odd><td align=center>14</td><td>SCK</td></tr> |
||||
</table> |
||||
</p> |
||||
<p> |
||||
If fewer than 6 chips are soldered, the optional parameter for maximum delay |
||||
must be used. See below for details. Each chip provides 1485 ms of delay |
||||
memory, so the total of all objects using AUDIO_MEMORY_MEMORYBOARD must not |
||||
exceed the amount of memory physically present. |
||||
</p> |
||||
<h3>Examples</h3> |
||||
<p> |
||||
<a href="https://www.youtube.com/watch?v=d80d1HWy5_s" target="_blank">Demo Video</a> (YouTube) |
||||
</p> |
||||
<!-- |
||||
<p class=exam>File > Examples > Audio > Effects > Delay |
||||
</p> |
||||
--> |
||||
<p> |
||||
<a href="https://forum.pjrc.com/threads/29276-Limits-of-delay-effect-in-audio-library?p=79436&viewfull=1#post79436" target="_blank">Forum Conversaton</a> (with sample code) |
||||
</p> |
||||
<h3>Notes</h3> |
||||
<p>External RAM allows for longer delays without consuming |
||||
limited internal RAM. However, SPI communication is required, |
||||
which consumes much more CPU time. The |
||||
<a href="http://www.pjrc.com/teensy/td_libs_AudioProcessorUsage.html">AudioProcessorUsageMax</a> |
||||
function may be used to monitor how much CPU time is consumed. |
||||
</p> |
||||
<p>You may specify the type of hardware to be used by editing the code. AUDIO_MEMORY_23LC1024 |
||||
specifies a single 23LC1024 chip. AUDIO_MEMORY_MEMORYBOARD allows using up to 6 of these |
||||
chips. |
||||
</p> |
||||
<p class=desc><span class=keyword>AudioEffectDelayExternal</span> delayExt1(<span class=literal>AUDIO_MEMORY_23LC1024</span>); |
||||
</p> |
||||
<p>You may also create more than one delay using the same hardware, where the memory is partitioned |
||||
by specifying a maximum delay in milliseconds. This can be useful if you wish to delay both |
||||
channels of a stereo signal. |
||||
|
||||
<p class=desc><span class=keyword>AudioEffectDelayExternal</span> delayExt1(<span class=literal>AUDIO_MEMORY_23LC1024</span>, 700);<br><span class=keyword>AudioEffectDelayExternal</span> delayExt2(<span class=literal>AUDIO_MEMORY_23LC1024</span>, 700); |
||||
</p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioEffectDelayExternal"> |
||||
<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> |
||||
|
@ -1,64 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioEffectEnvelope"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Modify a signal with a DAHDSR (Delay Attack Hold Decay Sustain |
||||
Release) envelope. |
||||
</p> |
||||
<p align=center><img src="img/dahdsr.png"></p> |
||||
</div> |
||||
<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>Signal Input</td></tr> |
||||
<tr class=odd><td align=center>Out 0</td><td>Signal with Envelope Applied</td></tr> |
||||
</table> |
||||
<h3>Functions</h3> |
||||
<p class=func><span class=keyword>noteOn</span>();</p> |
||||
<p class=desc>Begin the delay to attack, or the attack phase is |
||||
delay is zero. |
||||
</p> |
||||
<p class=func><span class=keyword>noteOff</span>();</p> |
||||
<p class=desc>Begin the release phase. |
||||
</p> |
||||
<p class=func><span class=keyword>delay</span>(milliseconds);</p> |
||||
<p class=desc>Set the delay from noteOn to the attach phase. The |
||||
default is zero, for no delay. |
||||
</p> |
||||
<p class=func><span class=keyword>attack</span>(milliseconds);</p> |
||||
<p class=desc>Set the attack time. The default is 1.5 milliseconds. |
||||
</p> |
||||
<p class=func><span class=keyword>hold</span>(milliseconds);</p> |
||||
<p class=desc>Set the hold time. The default is 0.5 milliseconds. |
||||
</p> |
||||
<p class=func><span class=keyword>decay</span>(milliseconds);</p> |
||||
<p class=desc>Set the decay time. The default is 15 milliseconds. |
||||
</p> |
||||
<p class=func><span class=keyword>sustain</span>(level);</p> |
||||
<p class=desc>Set the sustain level. The range is 0 to 1.0. The |
||||
gain will be maintained at this level after the decay phase, |
||||
until noteOff() is called. |
||||
</p> |
||||
<p class=func><span class=keyword>release</span>(milliseconds);</p> |
||||
<p class=desc>Set the release time. The default is 30 millisecond. |
||||
</p> |
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Audio > Synthesis > PlaySynthMusic |
||||
</p> |
||||
<p class=exam>File > Examples > Audio > Synthesis > pulseWidth |
||||
</p> |
||||
<p class=exam>File > Examples > Audio > MemoryAndCpuUsage |
||||
</p> |
||||
<h3>Notes</h3> |
||||
<p>To achieve the more common ADSR shape, simply |
||||
set delay and hold to zero.</p> |
||||
<p>The recommended range for each of the 5 timing inputs is 0 to 50 |
||||
milliseconds. Up to 200 ms can be used, with somewhat reduced |
||||
accuracy</p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioEffectEnvelope"> |
||||
<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> |
||||
|
@ -1,46 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioEffectFade"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Gradually increase or decrease audio level.</p> |
||||
</div> |
||||
<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>Signal Input</td></tr> |
||||
<tr class=odd><td align=center>Out 0</td><td>Signal Output</td></tr> |
||||
</table> |
||||
<h3>Functions</h3> |
||||
<p class=func><span class=keyword>fadeIn</span>(milliseconds);</p> |
||||
<p class=desc>Begin increasing the audio level, to reach 1.0 (input passed |
||||
directly to the output) after "milliseconds" time. |
||||
</p> |
||||
<p class=func><span class=keyword>fadeOut</span>(milliseconds);</p> |
||||
<p class=desc>Begin decreasing the audio level, to reach 0 (no output) |
||||
after "milliseconds" time. |
||||
</p> |
||||
<!-- |
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Audio > |
||||
</p> |
||||
--> |
||||
<h3>Notes</h3> |
||||
<p>Cross fading can be built with 2 fade objects fed into a mixer. |
||||
When one fade object is off (fully faded out) and the other on |
||||
(fully faded in), if both are started at the same moment for the |
||||
same time duration, their signal gains always add to 1.0. This |
||||
allows 2 fade objects to work together for a smooth transition |
||||
between a pair of signals. |
||||
</p> |
||||
<p><a href="http://www.pjrc.com/teensy/td_libs_AudioProcessorUsage.html" target="_blank">AudioNoInterrupts()</a> |
||||
should be used when changing |
||||
settings on multiple objects, so all changes always take effect |
||||
at the same moment. |
||||
</p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioEffectFade"> |
||||
<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> |
||||
|
@ -1,62 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioEffectFlange"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<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 |
||||
in the audio spectrum.</p> |
||||
</div> |
||||
<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 |
||||
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> |
||||
<tr class="top"><th>Port</th><th>Purpose</th></tr> |
||||
<tr class="odd"><td align="center">In 0</td><td>Signal Input</td></tr> |
||||
<tr class="odd"><td align="center">Out 0</td><td>Flanged Output</td></tr> |
||||
</table> |
||||
<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 |
||||
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. |
||||
</p> |
||||
<p class=func><span class=keyword>voices</span>(offset, depth, delayRate);</p> |
||||
<p class=desc>Alters the parameters in a running flanger (previously started with begin). |
||||
</p> |
||||
|
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Audio > Effects > Flange |
||||
</p> |
||||
<h3>Notes</h3> |
||||
<p>The longer the length of the delay buffer, the more memory blocks are used.</p> |
||||
<p>Try these settings:<br> |
||||
#define FLANGE_DELAY_LENGTH (2*AUDIO_BLOCK_SAMPLES)<br> |
||||
and<br> |
||||
int s_idx = 2*FLANGE_DELAY_LENGTH/4;<br> |
||||
int s_depth = FLANGE_DELAY_LENGTH/4;<br> |
||||
double s_freq = 3;</p> |
||||
<p>The flange effect can also produce a chorus-like effect if a longer |
||||
delay line is used with a slower modulation rate, for example try:<br> |
||||
#define FLANGE_DELAY_LENGTH (12*AUDIO_BLOCK_SAMPLES)<br> |
||||
and<br> |
||||
int s_idx = 3*FLANGE_DELAY_LENGTH/4;<br> |
||||
int s_depth = FLANGE_DELAY_LENGTH/8;<br> |
||||
double s_freq = .0625;</p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioEffectFlange"> |
||||
<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> |
||||
|
@ -1,42 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioEffectMidSide"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Convert stereo signals to/from Mid-Side format. |
||||
Mid-Side encoding can be used to increase stereo width, make the lower |
||||
frequencies mono (to please your sub), or as the basis of audio compression.</p> |
||||
</div> |
||||
<h3>Audio Connections</h3> |
||||
<table class=doc align=center cellpadding=3> |
||||
<tr class=top><th>Port</th><th>While<br>Encoding</th><th>While<br>Decoding</th></tr> |
||||
<tr class=odd><td align=center>In 0</td><td>Left Input</td><td>Mid Output</td></tr> |
||||
<tr class=odd><td align=center>In 1</td><td>Right Input</td><td>Side Output</td></tr> |
||||
<tr class=odd><td align=center>Out 0</td><td>Mid Input</td><td>Left Output</td></tr> |
||||
<tr class=odd><td align=center>Out 1</td><td>Side Input</td><td>Right Output</td></tr> |
||||
</table> |
||||
<h3>Functions</h3> |
||||
<p class=func><span class=keyword>encode</span>();</p> |
||||
<p class=desc>Configure this object to encode from stereo to Mid-Side format.</p> |
||||
<p class=func><span class=keyword>decode</span>();</p> |
||||
<p class=desc>Configure this object to decode from Mid-Side format back to stereo signals.</p> |
||||
|
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Audio > Effects > Mid_Side</p> |
||||
<h3>Notes</h3> |
||||
<p>Many interesting stereo effects can be achieved by manipulating Mid-Side signals.</p> |
||||
<p>Normally a pair of these objects are used, one to encode, then additional |
||||
gain/attenuation or effects applied to the Mid-Side signals, and finally |
||||
decoding back to stereo signals</p> |
||||
<p>To prevent saturation, halving is done in the encoding, that is:</p> |
||||
<p>Mid = (left+right)/2</p> |
||||
<p>Side = (left-right)/2</p> |
||||
<p>And to decode:</p> |
||||
<p>Left = Mid+Side</p> |
||||
<p>Right = Mid-Side</p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioEffectMidSide"> |
||||
<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> |
||||
|
@ -1,36 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioEffectMultiply"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Multiply two signals together, useful for amplitude modulation |
||||
or "voltage controlled amplification". |
||||
</p> |
||||
<p align=center><img src="img/multiply.png"><br><small>56 Hz and 1 kHz sine waves multiplied.</small></p> |
||||
</div> |
||||
<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>Signal Input</td></tr> |
||||
<tr class=odd><td align=center>In 1</td><td>Signal Input</td></tr> |
||||
<tr class=odd><td align=center>Out 0</td><td>Signal with Envelope Applied</td></tr> |
||||
</table> |
||||
<h3>Functions</h3> |
||||
<p>There are no functions to call from the Arduino sketch. |
||||
This object simply multiplies the 2 signals to create |
||||
a continuous output |
||||
</p> |
||||
<!-- |
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Audio > |
||||
</p> |
||||
--> |
||||
<h3>Notes</h3> |
||||
<p> |
||||
</p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioEffectMultiply"> |
||||
<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> |
||||
|
@ -1,32 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioEffectReverb"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Reverb with adjustable reverberation time. Contributed by Joao Rossi FIlho. |
||||
</p> |
||||
</div> |
||||
<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>Input</td></tr> |
||||
<tr class="odd"><td align="center">Out 0</td><td>Output</td></tr> |
||||
</table> |
||||
<h3>Functions</h3> |
||||
<p class=func><span class=keyword>reverbTime</span>(seconds);</p> |
||||
<p class=desc>Sets the amount of reverberation time. |
||||
</p> |
||||
|
||||
<h3>Examples</h3> |
||||
<p><a href="https://twitter.com/joaorossifilho/status/779737126841753601">Video Demo</a> |
||||
</p> |
||||
<!--<p class=exam>File > Examples > Audio > Effects > Flange |
||||
</p>--> |
||||
<h3>Notes</h3> |
||||
<p>This effect may have distortion problems with the input signal is more than 0.5.</p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioEffectReverb"> |
||||
<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> |
||||
|
@ -1,88 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioFilterBiquad"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Biquadratic cascaded filter, useful for all sorts of filtering. |
||||
Up to 4 stages may be cascaded. |
||||
</p> |
||||
<p align=center><img src="img/biquad.png"></p> |
||||
</div> |
||||
<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>Signal to be filtered</td></tr> |
||||
<tr class=odd><td align=center>Out 0</td><td>Filtered Signal Output</td></tr> |
||||
</table> |
||||
<h3>Functions</h3> |
||||
<p class=func><span class=keyword>setLowpass</span>(stage, frequency, Q);</p> |
||||
<p class=desc>Configure one stage of the filter (0 to 3) with low pass |
||||
response, with the specified corner frequency and Q shape. If Q is |
||||
higher that 0.7071, be careful of filter gain (see below). |
||||
</p> |
||||
<p class=func><span class=keyword>setHighpass</span>(stage, frequency, Q);</p> |
||||
<p class=desc>Configure one stage of the filter (0 to 3) with high pass |
||||
response, with the specified corner frequency and Q shape. If Q is |
||||
higher that 0.7071, be careful of filter gain (see below). |
||||
</p> |
||||
<p class=func><span class=keyword>setBandpass</span>(stage, frequency, Q);</p> |
||||
<p class=desc>Configure one stage of the filter (0 to 3) with band pass |
||||
response. The filter has unity gain at the specified frequency. Q |
||||
controls the width of frequencies allowed to pass. |
||||
</p> |
||||
<p class=func><span class=keyword>setNotch</span>(stage, frequency, Q);</p> |
||||
<p class=desc>Configure one stage of the filter (0 to 3) with band reject (notch) |
||||
response. Q controls the width of rejected frequencies. |
||||
</p> |
||||
<p class=func><span class=keyword>setLowShelf</span>(stage, frequency, gain, slope);</p> |
||||
<p class=desc>Configure one stage of the filter (0 to 3) with low shelf response. |
||||
A low shelf filter attenuates or amplifies signals below the specified frequency. |
||||
Frequency controls the slope midpoint, gain is in dB and can be both |
||||
positive or negative. The slope parameter controls steepness of gain transition. |
||||
A slope of 1 yields maximum steepness without overshoot, |
||||
lower values yield a less steep slope. See the picture below for a visualization |
||||
of the slope parameter's effect. |
||||
Be careful with positive gains and slopes higher than 1 as they introduce gain |
||||
(see warning below). |
||||
</p> |
||||
</p> |
||||
<p class=func><span class=keyword>setHighShelf</span>(stage, frequency, gain, slope);</p> |
||||
<p class=desc>Configure one stage of the filter (0 to 3) with high shelf response. |
||||
A high shelf filter attenuates or amplifies signals above the specified frequency. |
||||
Frequency controls the slope midpoint, gain is in dB and can be both |
||||
positive or negative. The slope parameter controls steepness of gain transition. |
||||
A slope of 1 yields maximum steepness without overshoot, |
||||
lower values yield a less steep slope. See the picture below for a visualization |
||||
of the slope parameter's effect. |
||||
Be careful with positive gains and slopes higher than 1 as they introduce gain |
||||
(see warning below). |
||||
</p> |
||||
<p align=center><img src="img/shelf_filter.png"></p> |
||||
<p class=func><span class=keyword>setCoefficients</span>(stage, array[5]);</p> |
||||
<p class=desc>Configure one stage of the filter (0 to 3) with an arbitrary |
||||
filter response. The array of coefficients is in order: B0, B1, B2, A1, A2. |
||||
Each coefficient must be less than 2.0 and greater than -2.0. The array |
||||
should be type double. Alternately, it may be type int, where 1.0 is |
||||
represented with 1073741824 (2<sup>30</sup>). |
||||
</p> |
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Audio > Effects > Filter |
||||
</p> |
||||
<h3>Notes</h3> |
||||
<p>Filters can with gain must have their input signals attenuated, so the |
||||
signal does not exceed 1.0. |
||||
</p> |
||||
<p>This object implements up to 4 cascaded stages. Unconfigured stages will |
||||
not pass any signal. |
||||
</p> |
||||
<p>Biquad filters with low corner frequency (under about 400 Hz) can run into |
||||
trouble with limited numerical precision, causing the filter to perform |
||||
poorly. For very low corner frequency, the State Variable (Chamberlin) |
||||
filter should be used. |
||||
</p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioFilterBiquad"> |
||||
<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> |
||||
|
@ -1,64 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioFilterFIR"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Finite impulse response filter, useful for all sorts of filtering. |
||||
</p> |
||||
<p align=center><img src="img/fir_filter.png"></p> |
||||
</div> |
||||
<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>Signal to be filtered</td></tr> |
||||
<tr class=odd><td align=center>Out 0</td><td>Filtered Signal Output</td></tr> |
||||
</table> |
||||
<h3>Functions</h3> |
||||
<p class=func><span class=keyword>begin</span>(array, length);</p> |
||||
<p class=desc>Initialize the filter. The array must be 16 bit integers (the |
||||
filter's impulse response), and |
||||
length indicates the number of points in the array. Array may also be |
||||
FIR_PASSTHRU (length = 0), to directly pass the input to output without |
||||
filtering. |
||||
</p> |
||||
<p class=func><span class=keyword>end</span>();</p> |
||||
<p class=desc>Turn the filter off. |
||||
</p> |
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Audio > Effects > Filter_FIR |
||||
</p> |
||||
<h3>Known Issues</h3> |
||||
<p>Your filter's impulse response array must have an even length. If you have |
||||
add odd number of taps, you must add an extra zero to increase the length |
||||
to an even number. |
||||
</p> |
||||
<p>The minimum number of taps is 4. If you use less, add extra zeros to increase |
||||
the length to 4. |
||||
</p> |
||||
<p>The impulse response must be given in reverse order. Many filters have |
||||
symetrical impluse response, making this a non-issue. If your filter has |
||||
a non-symetrical response, make sure the data is in reverse time order. |
||||
</p> |
||||
<h3>Notes</h3> |
||||
<p>FIR filters requires more CPU time than Biquad (IIR), but they can |
||||
implement filters with better phase response. |
||||
</p> |
||||
<p>A 100 point filter requires 9% CPU time on Teensy 3.1. The maximum |
||||
supported filter length is 200 points. |
||||
</p> |
||||
<p>The free |
||||
<a href="http://t-filter.engineerjs.com/" target="_blank"> TFilter Design Tool</a> |
||||
can be used to create the impulse response array. Be sure to set the sampling |
||||
frequency to 44117 HZ (it defaults to only 2000 Hz) and the output type to "int" (16 bit). |
||||
</p> |
||||
<p> |
||||
If you use TFilter Design's "C/C++ array" option, it's output has "int" definition, which |
||||
is 32 bits on Teensy 3.1. Edit "int" to "short" for an array of 16 bit numbers, |
||||
and add "const" to avoid consuming extra RAM. |
||||
</p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioFilterFIR"> |
||||
<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> |
||||
|
@ -1,61 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioFilterStateVariable"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>A State Variable (Chamberlin) Filter with 12 dB/octave roll-off, |
||||
adjustable resonance, and optional signal control of corner |
||||
frequency.</p> |
||||
</div> |
||||
<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>Signal to Filter</td></tr> |
||||
<tr class=odd><td align=center>In 1</td><td>Frequency Control</td></tr> |
||||
<tr class=odd><td align=center>Out 0</td><td>Low Pass Output</td></tr> |
||||
<tr class=odd><td align=center>Out 1</td><td>Band Pass Output</td></tr> |
||||
<tr class=odd><td align=center>Out 2</td><td>High Pass Output</td></tr> |
||||
</table> |
||||
<h3>Functions</h3> |
||||
<p class=func><span class=keyword>frequency</span>(freq);</p> |
||||
<p class=desc>Set the filter's corner frequency. When a signal is |
||||
connected to the control input, the filter will implement this |
||||
frequency when the signal is zero. |
||||
</p> |
||||
<p class=func><span class=keyword>resonance</span>(Q);</p> |
||||
<p class=desc>Set the filter's resonance. Q ranges from 0.7 to 5.0. |
||||
Resonance greater than 0.707 will amplify the signal near the |
||||
corner frequency. You must attenuate the signal before input |
||||
to this filter, to prevent clipping. |
||||
</p> |
||||
<p class=func><span class=keyword>octaveControl</span>(octaves);</p> |
||||
<p class=desc>Set how much (in octaves) the control signal can alter |
||||
the filter's corner freqency. Range is 0 to 7 octaves. For |
||||
example, when set to 2.5, a full scale positive signal (1.0) will |
||||
shift the filter frequency up 2.5 octaves, and a full scale negative |
||||
signal will shift it down 2.5 octaves. |
||||
</p> |
||||
<!-- |
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Audio > |
||||
</p> |
||||
--> |
||||
<h3>Notes</h3> |
||||
<p> |
||||
When controlled by a signal, the equation for the filter |
||||
frequency is: |
||||
</p> |
||||
<p> |
||||
F = Fcenter * 2^<sup>(signal * octaves)</sup> |
||||
<br><small>If anyone knows how to do HTML equations, please |
||||
help me improve this.....</small> |
||||
</p> |
||||
<p>When operating with signal control of corner frequency, this |
||||
object uses approximately 4% of the CPU time on Teensy 3.1. |
||||
</p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioFilterFIR"> |
||||
<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> |
||||
|
@ -1,56 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioInputAnalog"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Receive audio using the built-in analog to digital converter.</p> |
||||
</div> |
||||
<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>Audio 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 ADC to its output port.</p> |
||||
<h3>Hardware</h3> |
||||
<p>Pin A2 is used for audio input. This circuitry is recommended.</p> |
||||
<p align=center><img src="img/adccircuit.png"></p> |
||||
<p>Signal range is 0 to 1.2V</p> |
||||
<p>With a <a href="https://forum.pjrc.com/threads/40468-Help-with-Basic-Audio-Lib-results?p=126317&viewfull=1#post126317">small modification</a> Adafruit's <a href="https://www.adafruit.com/products/1063">MAX4466 microphone</a> can be used</p> |
||||
<p align=center><a href="https://forum.pjrc.com/threads/40468-Help-with-Basic-Audio-Lib-results?p=126317&viewfull=1#post126317"><img src="img/adccircuitmic.jpg" border=0></a></p> |
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Audio > HardwareTesting > PassThroughMono |
||||
</p> |
||||
<p class=exam>File > Examples > Audio > Analysis > PeakMeterMono |
||||
</p> |
||||
<p class=exam>File > Examples > Audio > Analysis > DialTone_7segment |
||||
</p> |
||||
<p class=exam>File > Examples > OctoWS2811 > SpectrumAnalyzer |
||||
</p> |
||||
<h3>Notes</h3> |
||||
<p><b>analogRead() must not be used</b>, because AudioInputAnalog is regularly |
||||
accessing the ADC hardware. If both access the hardware at the same |
||||
moment, analogRead() can end up waiting forever, which effectively |
||||
crashes your program. |
||||
</p> |
||||
<p>A different pin may be used, but adding it as an parameter |
||||
to the AudioInputAnalog object definition. |
||||
</p> |
||||
<p>For example, to use pin A3: |
||||
</p> |
||||
<p class=desc><span class=keyword>AudioInputAnalog</span> adc1(<span class=literal>A3</span>); |
||||
</p> |
||||
|
||||
<p>Noise due to high source impedance, which allows rapidly switching digital signals |
||||
to capacitively couple... avoiding higher analog impedance is the solution.</p> |
||||
<p>Power Supply rejection issue with simple DC bias (bigger capacitor may be needed if 3.3V has low frequency noise)</p> |
||||
<p>Algorithm for automatic DC bias tracking</p> |
||||
<p>TODO: actual noise measurements with different input circuitry |
||||
(it's not as quiet as the audio shield)</p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioInputAnalog"> |
||||
<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> |
||||
|
@ -1,58 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioInputAnalogStereo"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Receive stereo audio using the built-in analog to digital converters.</p> |
||||
</div> |
||||
<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>Audio Channel (Left)</td></tr> |
||||
<tr class=odd><td align=center>Out 1</td><td>Audio Channel (Right)</td></tr> |
||||
</table> |
||||
<h3>Functions</h3> |
||||
<p>This object has no functions to call from the Arduino sketch. It |
||||
simply streams data from both ADCs to its output ports.</p> |
||||
<h3>Hardware</h3> |
||||
<p>By default, pins A2 & A3 are used for audio input. This circuitry is recommended.</p> |
||||
<p align=center><img src="img/adccircuit2.png"></p> |
||||
<p>Signal range is 0 to 1.2V</p> |
||||
<h3>Examples</h3> |
||||
<!-- |
||||
<p class=exam>File > Examples > Audio > HardwareTesting > PassThroughMono |
||||
</p> |
||||
<p class=exam>File > Examples > Audio > Analysis > PeakMeterMono |
||||
</p> |
||||
<p class=exam>File > Examples > Audio > Analysis > DialTone_7segment |
||||
</p> |
||||
<p class=exam>File > Examples > OctoWS2811 > SpectrumAnalyzer |
||||
</p> |
||||
--> |
||||
<h3>Notes</h3> |
||||
<p><b>analogRead() must not be used</b>, because AudioInputAnalogStereo is regularly |
||||
accessing the ADC hardware. If both access the hardware at the same |
||||
moment, analogRead() can end up waiting forever, which effectively |
||||
crashes your program. |
||||
</p> |
||||
<p>A different pin may be used, but adding it as an parameter |
||||
to the AudioInputAnalog object definition. |
||||
</p> |
||||
<p>For example: |
||||
</p> |
||||
<p class=desc><span class=keyword>AudioInputAnalogStereo</span> adc1(<span class=literal>A3</span>, <span class=literal>A2</span>); |
||||
</p> |
||||
<p>TODO: add info here about which pins work for input 0 and 1. |
||||
</p> |
||||
<p>Noise due to high source impedance, which allows rapidly switching digital signals |
||||
to capacitively couple... avoiding higher analog impedance is the solution.</p> |
||||
<p>Power Supply rejection issue with simple DC bias (bigger capacitor may be needed if 3.3V has low frequency noise)</p> |
||||
<p>Algorithm for automatic DC bias tracking</p> |
||||
<p>TODO: actual noise measurements with different input circuitry |
||||
(it's not as quiet as the audio shield)</p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioInputAnalogStereo"> |
||||
<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> |
||||
|
@ -1,66 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioInputI2S"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Receive 16 bit stereo audio from the |
||||
<a href="http://www.pjrc.com/store/teensy3_audio.html" target="_blank">audio shield</a> |
||||
or another I2S device, using I2S master mode.</p> |
||||
<p align=center><img src="img/audioshield_inputs.jpg"></p> |
||||
</div> |
||||
<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 align=center><img src="img/audioshield_backside.jpg"></p> |
||||
<p>The I2S signals are used in "master" mode, where Teensy creates |
||||
all 3 clock signals and controls all 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>Output</td></tr> |
||||
<tr class=odd><td align=center>11</td><td>MCLK</td><td>Output</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>Output</td></tr> |
||||
</table> |
||||
<p>Audio from |
||||
master mode I2S may be used in the same project as ADC, DAC and |
||||
PWM signals, because all remain in sync to Teensy's timing</p> |
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Audio > HardwareTesting > PassThroughStereo |
||||
</p> |
||||
<p class=exam>File > Examples > Audio > Recorder |
||||
</p> |
||||
<p class=exam>File > Examples > Audio > Analysis > PeakMeterStereo |
||||
</p> |
||||
<p class=exam>File > Examples > Audio > Analysis > FFT |
||||
</p> |
||||
<p class=exam>File > Examples > Audio > Analysis > SpectrumAnalyzerBasic |
||||
</p> |
||||
<p class=exam>File > Examples > Audio > Effects > Chorus |
||||
</p> |
||||
<p class=exam>File > Examples > Audio > Effects > Flange |
||||
</p> |
||||
<p class=exam>File > Examples > Audio > Effects > Filter |
||||
</p> |
||||
<p class=exam>File > Examples > Audio > Effects > Filter_FIR |
||||
</p> |
||||
<h3>Notes</h3> |
||||
<p>Normally, this object is used with the Audio Shield, which |
||||
is controlled separately by the "sgtl5000" object.</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> |
||||
<p>I2S master objects can be used together with non-I2S input and output |
||||
objects, for simultaneous audio streaming on different hardware.</p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioInputI2S"> |
||||
<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> |
||||
|
@ -1,49 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioInputI2SQuad"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Receive 16 bit quad (4) channel audio from two |
||||
<a href="http://www.pjrc.com/store/teensy3_audio.html" target="_blank">audio shields</a> |
||||
or another I2S devices, using I2S master mode.</p> |
||||
<p align=center><img src="img/audioshield_quad_in.jpg"></p> |
||||
</div> |
||||
<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>Channel #1</td></tr> |
||||
<tr class=odd><td align=center>Out 1</td><td>Channel #2</td></tr> |
||||
<tr class=odd><td align=center>Out 2</td><td>Channel #3</td></tr> |
||||
<tr class=odd><td align=center>Out 3</td><td>Channel #4</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 4 output ports.</p> |
||||
<h3>Hardware</h3> |
||||
<p>See this Sparkfun blog for <a href="https://www.sparkfun.com/news/2055" target="_blank">how |
||||
to connect two audio adaptors for 4 channel audio</a>. |
||||
<p>The I2S signals are used in "master" mode, where Teensy creates |
||||
all 3 clock signals and controls all data timing.</p> |
||||
<table class=doc align=center cellpadding=3> |
||||
<tr class=top><th>Teensy<br>3.2 Pin</th><th>Teensy<br>3.5/3.6 Pin</th><th>Signal</th><th>Direction</th></tr> |
||||
<tr class=odd><td align=center>9</td><td align=center>9</td><td>BCLK</td><td>Output</td></tr> |
||||
<tr class=odd><td align=center>11</td><td align=center>11</td><td>MCLK</td><td>Output</td></tr> |
||||
<tr class=odd><td align=center>13</td><td align=center>13</td><td>RX</td><td>Input</td></tr> |
||||
<tr class=odd><td align=center>30</td><td align=center>38</td><td>RX</td><td>Input</td></tr> |
||||
<tr class=odd><td align=center>23</td><td align=center>23</td><td>LRCLK</td><td>Output</td></tr> |
||||
</table> |
||||
<p>Audio from |
||||
master mode I2S may be used in the same project as ADC, DAC and |
||||
PWM signals, because all remain in sync to Teensy's timing</p> |
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Audio > HardwareTesting > PassThroughQuad |
||||
</p> |
||||
<h3>Notes</h3> |
||||
<p>Normally, this object is used with two Audio Shield, which |
||||
are controlled separately by a pair "sgtl5000" object.</p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioInputI2SQuad"> |
||||
<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> |
||||
|
@ -1,46 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioInputI2Sslave"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Receive 16 bit stereo audio from an I2S device using I2S slave mode |
||||
(where the ADC or codec chip, not Teensy, controls audio timing).</p> |
||||
</div> |
||||
<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> |
||||
|
@ -1,41 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioInputUSB"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Receive stereo audio from a PC or Mac. Teensy appears as a USB |
||||
sound device.</p> |
||||
<p align=center><img src="img/usbtype_audio_in.png"></p> |
||||
</div> |
||||
<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 USB to its 2 output ports.</p> |
||||
<!-- |
||||
<h3>Hardware</h3> |
||||
--> |
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Audio > HardwareTesting > PassThroughUSB</p> |
||||
</p> |
||||
<h3>Notes</h3> |
||||
<p>Arduino's <b>Tools > USB Type</b> menu must be set to <b>Audio</b>. |
||||
</p> |
||||
<p align=center><img src="img/usbtype_audio.png"></p> |
||||
<p>USB input & output does not cause the Teensy Audio Library to |
||||
update. At least one non-USB input or output object must be |
||||
present for the entire library to update properly.</p> |
||||
<p>A known problem exists with USB audio from Macintosh computers. |
||||
An imperfect <a href="https://forum.pjrc.com/threads/34855-Distorted-audio-when-using-USB-input-on-Teensy-3-1?p=110392&viewfull=1#post110392">workaround |
||||
can be enabled by editing usb_audio.cpp</a>. |
||||
Find and uncomment "#define MACOSX_ADAPTIVE_LIMIT".</p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioInputUSB"> |
||||
<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> |
||||
|
@ -1,49 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioMixer4"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Combine up to 4 audio signals together, each with adjustable gain. |
||||
All channels support signal attenuation or amplification.</p> |
||||
</div> |
||||
<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>Input signal #1</td></tr> |
||||
<tr class=odd><td align=center>In 1</td><td>Input signal #2</td></tr> |
||||
<tr class=odd><td align=center>In 2</td><td>Input signal #3</td></tr> |
||||
<tr class=odd><td align=center>In 3</td><td>Input signal #4</td></tr> |
||||
<tr class=odd><td align=center>Out 0</td><td>Sum of all inputs</td></tr> |
||||
</table> |
||||
<h3>Functions</h3> |
||||
<p class=func><span class=keyword>gain</span>(channel, level);</p> |
||||
<p class=desc>Adjust the amplification or attenuation. "channel" must |
||||
be 0 to 3. "level" may be any floating point number from 0 to 32767. |
||||
1.0 passes the signal through directly. Level of 0 shuts the channel |
||||
off completely. Between 0 to 1.0 attenuates the signal, and above |
||||
1.0 amplifies it. All 4 channels have separate settings. |
||||
</p> |
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Audio > SamplePlayer |
||||
</p> |
||||
<p class=exam>File > Examples > Audio > Synthesis > PlaySynthMusic |
||||
</p> |
||||
<p class=exam>File > Examples > Audio > Analysis > SpectrumAnalyzerBasic |
||||
</p> |
||||
<p class=exam>File > Examples > Audio > Analysis > DialTone_Serial |
||||
</p> |
||||
<p class=exam>File > Examples > Audio > MemoryAndCpuUsage |
||||
</p> |
||||
<h3>Notes</h3> |
||||
<p>Signal clipping can occur when any channel has gain greater than 1.0, |
||||
or when multiple signals add together to greater than 1.0.</p> |
||||
<p>More than 4 channels may be combined by connecting multiple mixers |
||||
in tandem. For example, a 16 channel mixer may be built using 5 |
||||
mixers, where the fifth mixer combines the outputs of the first 4. |
||||
</p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioMixer4"> |
||||
<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> |
||||
|
@ -1,54 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioOutputAnalog"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Transmit 12 bit audio using Teensy's built-in digital to analog converter.</p> |
||||
<p align=center><img src="img/dac_speaker.jpg"><br> |
||||
<small><a href="http://www.pjrc.com/store/prop_shield.html" target="_blank_">Prop Shield with 4Ω Speaker</a></small></p> |
||||
</div> |
||||
<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>Audio Channel</td></tr> |
||||
</table> |
||||
<h3>Functions</h3> |
||||
<p class=func><span class=keyword>analogReference</span>(ref);</p> |
||||
<p class=desc>Configure output voltage range:<br> |
||||
<span class=literal>INTERNAL</span> selects 1.2 volt peak-to-peak output.<br> |
||||
<span class=literal>EXTERNAL</span> selects 3.3 volt peak-to-peak output. |
||||
</p> |
||||
<h3>Hardware</h3> |
||||
<p align=center><img src="img/dacpin.jpg"></p> |
||||
<p>Signal range default is 0 to 1.2V</p> |
||||
<p>The output voltage has DC level. Some applications require a DC-blocking capacitor. If unsure, a 10µF is usually a safe value to use. If an aluminum or tantalum capacitor is used, the positive terminal should connect to Teensy's DAC pin.</p> |
||||
<p>The DAC pin is used with the |
||||
<a href="http://www.pjrc.com/store/prop_shield.html" target="_blank_">Prop Shield</a> |
||||
to drive speakers.</p> |
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Audio > HardwareTesting > PassThroughMono |
||||
</p> |
||||
<p class=exam>File > Examples > Audio > SamplePlayer |
||||
</p> |
||||
<p class=exam><a href="https://github.com/PaulStoffregen/TouchGuitar" target="_blank">TouchGuitar</a> |
||||
</p> |
||||
<p class=exam><a href="https://community.arm.com/groups/embedded/blog/2014/05/23/led-video-panel-at-maker-faire-2014" target="_blank">LED Video Board</a> |
||||
</p> |
||||
<p class=exam>File > Examples > OctoWS2811 > VideoSDcard |
||||
</p> |
||||
<p class=exam>File > Examples > SerialFlash > MP3Player |
||||
</p> |
||||
<h3>Notes</h3> |
||||
<p>The output rate is 44.1 kHz (no oversampling). Ultrasonic noise present if |
||||
not filtered. This may not |
||||
be an issue for many uses, but care should be used if amplified and driven |
||||
to high power tweeters.</p> |
||||
<p>When using 3.3V output, the power supply is used for the analog reference. Noise |
||||
present on the 3.3V power can couple to the DAC output signal. |
||||
</p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioOutputAnalog"> |
||||
<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> |
||||
|
@ -1,47 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioOutputAnalogStereo"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Transmit 12 bit stereo audio using Teensy 3.5 or 3.6 built-in digital to analog converters.</p> |
||||
<!--<p align=center><img src="img/dac_speaker.jpg"><br> |
||||
<small><a href="http://www.pjrc.com/store/prop_shield.html" target="_blank_">Prop Shield with 4Ω Speaker</a></small></p>--> |
||||
</div> |
||||
<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>Audio Channel (Left)</td></tr> |
||||
<tr class=odd><td align=center>In 1</td><td>Audio Channel (Right)</td></tr> |
||||
</table> |
||||
<h3>Functions</h3> |
||||
<p class=func><span class=keyword>analogReference</span>(ref);</p> |
||||
<p class=desc>Configure output voltage range:<br> |
||||
<span class=literal>INTERNAL</span> selects 1.2 volt peak-to-peak output.<br> |
||||
<span class=literal>EXTERNAL</span> selects 3.3 volt peak-to-peak output. |
||||
</p> |
||||
<h3>Hardware</h3> |
||||
<p align=center><img src="img/dacpins.png"></p> |
||||
<p>Signal range default is 0 to 1.2V</p> |
||||
<p>The output voltage has DC level. Some applications require a DC-blocking capacitor. If unsure, a 10µF is usually a safe value to use. If an aluminum or tantalum capacitor is used, the positive terminal should connect to Teensy's DAC pin.</p> |
||||
<p>The DAC pin is used with the |
||||
<a href="http://www.pjrc.com/store/prop_shield.html" target="_blank_">Prop Shield</a> |
||||
to drive speakers.</p> |
||||
<h3>Examples</h3> |
||||
<!--<p class=exam>File > Examples > Audio > HardwareTesting > PassThroughMono |
||||
</p> |
||||
<p class=exam>File > Examples > SerialFlash > MP3Player |
||||
</p>--> |
||||
<h3>Notes</h3> |
||||
<p>The output rate is 44.1 kHz (no oversampling). Ultrasonic noise present if |
||||
not filtered. This may not |
||||
be an issue for many uses, but care should be used if amplified and driven |
||||
to high power tweeters.</p> |
||||
<p>When using 3.3V output, the power supply is used for the analog reference. Noise |
||||
present on the 3.3V power can couple to the DAC output signal. |
||||
</p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioOutputAnalogStereo"> |
||||
<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> |
||||
|
@ -1,59 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioOutputI2S"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Transmit 16 bit stereo audio to the |
||||
<a href="http://www.pjrc.com/store/teensy3_audio.html" target="_blank">audio shield</a> |
||||
or another I2S device, using I2S master mode.</p> |
||||
<p align=center><img src="img/audioshield_outputs.jpg"></p> |
||||
</div> |
||||
<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 align=center><img src="img/audioshield_backside.jpg"></p> |
||||
<p>The I2S signals are used in "master" mode, where Teensy creates |
||||
all 3 clock signals and controls all 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>Output</td></tr> |
||||
<tr class=odd><td align=center>11</td><td>MCLK</td><td>Output</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>Output</td></tr> |
||||
</table> |
||||
<p>Audio from |
||||
master mode I2S may be used in the same project as ADC, DAC and |
||||
PWM signals, because all remain in sync to Teensy's timing</p> |
||||
<h3>Examples</h3> |
||||
<p>Nearly all the examples use this object. Here are some of the highlights:</p> |
||||
<p class=exam>File > Examples > Audio > HardwareTesting > PassThroughStereo |
||||
</p> |
||||
<p class=exam>File > Examples > Audio > SamplePlayer |
||||
</p> |
||||
<p class=exam>File > Examples > Audio > Recorder |
||||
</p> |
||||
<p class=exam>File > Examples > Audio > WavFilePlayer |
||||
</p> |
||||
<p class=exam>File > Examples > Audio > Effects > Chorus |
||||
</p> |
||||
<p class=exam>File > Examples > Audio > Synthesis > PlaySynthMusic |
||||
</p> |
||||
<h3>Notes</h3> |
||||
<p>Normally, this object is used with the Audio Shield, which |
||||
is controlled separately by the "sgtl5000" object.</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="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"> |
||||
</div> |
||||
</script> |
||||
|
@ -1,50 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioOutputI2SQuad"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Transmit quad (4) channel 16 bit audio, using I2S master mode.</p> |
||||
<p align=center><img src="img/audioshield_quad_out.jpg"></p> |
||||
</div> |
||||
<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>Channel #1</td></tr> |
||||
<tr class=odd><td align=center>In 1</td><td>Channel #2</td></tr> |
||||
<tr class=odd><td align=center>In 2</td><td>Channel #3</td></tr> |
||||
<tr class=odd><td align=center>In 3</td><td>Channel #4</td></tr> |
||||
</table> |
||||
<h3>Functions</h3> |
||||
<p>This object has no functions to call from the Arduino sketch. It |
||||
simply streams data from its 4 input ports to the I2S hardware.</p> |
||||
<h3>Hardware</h3> |
||||
<p>See this Sparkfun blog for <a href="https://www.sparkfun.com/news/2055" target="_blank">how |
||||
to connect two audio adaptors for 4 channel audio</a>. More |
||||
<a href="https://forum.pjrc.com/threads/29373-Bit-bang-multiple-I2S-inputs-simultaneously?p=79606#post79606" target="_blank">details</a> are also available. |
||||
<p>The I2S signals are used in "master" mode, where Teensy creates |
||||
all 3 clock signals and controls all 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>Output</td></tr> |
||||
<tr class=odd><td align=center>11</td><td>MCLK</td><td>Output</td></tr> |
||||
<tr class=odd><td align=center>22</td><td>TX (ch 1+2)</td><td>Output</td></tr> |
||||
<tr class=odd><td align=center>15</td><td>TX (ch 3+4)</td><td>Output</td></tr> |
||||
<tr class=odd><td align=center>23</td><td>LRCLK</td><td>Output</td></tr> |
||||
</table> |
||||
<p>Audio from |
||||
master mode I2S may be used in the same project as ADC, DAC and |
||||
PWM signals, because all remain in sync to Teensy's timing</p> |
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Audio > HardwareTesting > PassThroughQuad |
||||
</p> |
||||
<p class=exam>File > Examples > Audio > HardwareTesting > SGTL5000 > QuadChannelOutput |
||||
</p> |
||||
<h3>Notes</h3> |
||||
<p>Normally, this object is used with two Audio Shields, which |
||||
are controlled separately by a pair of "sgtl5000" objects.</p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioOutputI2SQuad"> |
||||
<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> |
||||
|
@ -1,44 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioOutputI2Sslave"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Transmit 16 bit stereo audio to an I2S device using I2S slave mode |
||||
(where the DAC or codec chip, not Teensy, controls audio timing).</p> |
||||
</div> |
||||
<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> |
||||
|
@ -1,44 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioOutputPT8211"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Transmit 16 bit stereo audio to a low-cost PT8211 DAC chip. 4X oversampling |
||||
and filtering are automatically used to improve output quality.</p> |
||||
<p align=center><img src="img/pt8211.jpg"></p> |
||||
</div> |
||||
<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 a PT8211 chip. 4X |
||||
oversampling and filtering is automatically used to improve quality.</p> |
||||
<h3>Hardware</h3> |
||||
<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>BCK</td><td>Output</td></tr> |
||||
<tr class=odd><td align=center>22</td><td>DIN</td><td>Output</td></tr> |
||||
<tr class=odd><td align=center>23</td><td>WS</td><td>Output</td></tr> |
||||
</table> |
||||
<p>More information can be found in the PT8211 datasheet. |
||||
</p> |
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Audio > HardwareTesting > PT8211Sine |
||||
</p> |
||||
<h3>Credits</h3> |
||||
<p>Frank Boesing and Benjamin developed this PT8211 object. Details can be |
||||
found on this |
||||
<a href="https://forum.pjrc.com/threads/29284-Dual-channel-16bit-dac-PT8211/page3" target="_blank">forum disussion</a>. |
||||
<h3>Notes</h3> |
||||
<p> |
||||
</p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioOutputPT8211"> |
||||
<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> |
||||
|
@ -1,50 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioOutputPWM"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Transmit audio using Teensy 3.1's PWM pins. Two pins are |
||||
used for coarse and fine pulses, to be combined by scaled |
||||
resistors.</p> |
||||
</div> |
||||
<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>Audio 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 its input port to the PWM pins.</p> |
||||
<h3>Hardware</h3> |
||||
<p>The following circuit is recommended.</p> |
||||
<p align=center><img src="img/pwmdualcircuit.jpg"></p> |
||||
<p>Signal range is approx 1.55 Vp-p.</p> |
||||
<p>These resistor values assume approx 20 ohms output impedance |
||||
on the digital pins. The 127K resistor may be adjusted or |
||||
trimmed for variation in output drive and tolerance on the |
||||
475 ohm resistor.</p> |
||||
<p>A plastic film (Polypropylene, Polyethylene, Polyester, etc) or |
||||
C0G/NPO ceramic capacitor should be used for filtering. Low |
||||
quality ceramic (X7R, Y5V, Z5U, etc) can cause signal distortion.</p> |
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Audio > HardwareTesting > PassThroughMono |
||||
</p> |
||||
<h3>Notes</h3> |
||||
<p>This object only works properly when Tools > CPU_Speed is set to |
||||
48 or 96 MHz. Other speeds aren't supported and will likely fail |
||||
in strange ways.</p> |
||||
<p>The PWM carrier frequency is 88.2 kHz. The suggested circuit |
||||
will only slightly filter the carrier. Extra filtering will be |
||||
required for a clean signal without the ultrasonic PWM carrier. |
||||
</p> |
||||
<p>Analog signals created by filtering PWM waveforms use the digital |
||||
power supply as their reference voltage. Any noise on the digital |
||||
power line can directly couple to the output signal. The built-in DAC or |
||||
<a href="http://www.pjrc.com/store/teensy3_audio.html" target="_blank">audio shield</a> |
||||
should be used when higher quality signals are needed.</p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioOutputPWM"> |
||||
<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> |
||||
|
@ -1,53 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioOutputSPDIF"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Transmit 16 bit stereo audio as Digital S/PDIF.</p> |
||||
<p align=center><img src="img/spdif_proto.jpg"></p> |
||||
</div> |
||||
<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 S/PDIF encoded digital |
||||
audio on pin 22.</p> |
||||
<h3>Hardware</h3> |
||||
<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>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>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>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="AudioOutputSPDIF"> |
||||
<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> |
||||
|
@ -1,41 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioOutputUSB"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Send stereo audio to a PC or Mac. Teensy appears as a USB |
||||
sound device.</p> |
||||
<p align=center><img src="img/usbtype_audio_out.png"></p> |
||||
</div> |
||||
<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 from it's 2 input ports to the USB.</p> |
||||
<!-- |
||||
<h3>Hardware</h3> |
||||
--> |
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Audio > HardwareTesting > WavFilePlayerUSB</p> |
||||
</p> |
||||
<h3>Notes</h3> |
||||
<p>Arduino's <b>Tools > USB Type</b> menu must be set to <b>Audio</b>. |
||||
</p> |
||||
<p align=center><img src="img/usbtype_audio.png"></p> |
||||
<p>USB input & output does not cause the Teensy Audio Library to |
||||
update. At least one non-USB input or output object must be |
||||
present for the entire library to update properly.</p> |
||||
<p>A known problem exists with USB audio from Macintosh computers. |
||||
An imperfect <a href="https://forum.pjrc.com/threads/34855-Distorted-audio-when-using-USB-input-on-Teensy-3-1?p=110392&viewfull=1#post110392">workaround |
||||
can be enabled by editing usb_audio.cpp</a>. |
||||
Find and uncomment "#define MACOSX_ADAPTIVE_LIMIT".</p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioOutputUSB"> |
||||
<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> |
||||
|
@ -1,52 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioPlayMemory"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Play a short sound clip, stored directly in memory. |
||||
Data files are created with the |
||||
<a href="https://github.com/PaulStoffregen/Audio/tree/master/extras/wav2sketch" target="_blank">wav2sketch program</a>, |
||||
and copied to the sketch folder to become part of your sketch.</p> |
||||
</div> |
||||
<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>Sound Output</td></tr> |
||||
</table> |
||||
<h3>Functions</h3> |
||||
<p class=func><span class=keyword>play</span>(data);</p> |
||||
<p class=desc>Begin playing a sound clip. If already playing, the |
||||
currently playing clip is stopped and this new data begins |
||||
playing from the beginning. |
||||
</p> |
||||
<p class=func><span class=keyword>stop</span>();</p> |
||||
<p class=desc>Stop playing. If not playing, this function has no effect. |
||||
</p> |
||||
<p class=func><span class=keyword>isPlaying</span>();</p> |
||||
<p class=desc>Return true (non-zero) if playing, or false (zero) |
||||
when not playing. |
||||
</p> |
||||
<p class=func><span class=keyword>positionMillis</span>();</p> |
||||
<p class=desc>While playing, return the current time offset, in |
||||
milliseconds. When not playing, the return from this function |
||||
is undefined. |
||||
</p> |
||||
<p class=func><span class=keyword>lengthMillis</span>();</p> |
||||
<p class=desc>Return the total length of the current sound clip, |
||||
in milliseconds. When not playing, the return from this function |
||||
is undefined. |
||||
</p> |
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Audio > SamplePlayer |
||||
</p> |
||||
<h3>Notes</h3> |
||||
<p>TODO: supported sample rates: 11.025, 22.05, 44.1</p> |
||||
<p>TODO: ulaw vs uncompressed encoding</p> |
||||
<p>Polyphonic playback can be built by creating multiple |
||||
objects, with their output combined by mixers.</p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioPlayMemory"> |
||||
<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> |
||||
|
@ -1,49 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioPlayQueue"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Play audio data provided by the Arduino sketch. This object provides |
||||
functions to allow the sketch code to push data into the audio system.</p> |
||||
</div> |
||||
<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>Sound Output</td></tr> |
||||
</table> |
||||
<h3>Functions</h3> |
||||
<p class=func><span class=keyword>play</span>(int16);</p> |
||||
<p class=desc>not yet implemented |
||||
</p> |
||||
<p class=func><span class=keyword>play</span>(int16[], length);</p> |
||||
<p class=desc>not yet implemented |
||||
</p> |
||||
<p class=func><span class=keyword>getBuffer</span>();</p> |
||||
<p class=desc>Returns a pointer to an array of 128 int16. This buffer |
||||
is within the audio library memory pool, providing the most efficient |
||||
way to input data to the audio system. The buffer is likely to be |
||||
populated by previously used data, so the entire 128 words should be |
||||
written before calling playBuffer(). Only a single buffer should be |
||||
requested at a time. This function may return NULL if no memory is |
||||
available. |
||||
</p> |
||||
<p class=func><span class=keyword>playBuffer</span>();</p> |
||||
<p class=desc>Transmit the buffer previously obtained from getBuffer(). |
||||
</p> |
||||
<h3>Examples</h3> |
||||
<p><a href="http://community.arm.com/groups/embedded/blog/2014/05/23/led-video-panel-at-maker-faire-2014" target="_blank">4320 LED Video+Sound Project</a> |
||||
</p> |
||||
<!-- |
||||
<p class=exam>File > Examples > Audio > |
||||
</p> |
||||
--> |
||||
<h3>Notes</h3> |
||||
<p>TODO: many caveats....</p> |
||||
<p> |
||||
</p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioPlayQueue"> |
||||
<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> |
||||
|
@ -1,55 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioPlaySdRaw"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Play a RAW data file, stored on a SD card. RAW format is simpler |
||||
than WAV and begins playing immediately, without parsing WAV file |
||||
header info.</p> |
||||
</div> |
||||
<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>Sound Output</td></tr> |
||||
</table> |
||||
<h3>Functions</h3> |
||||
<p class=func><span class=keyword>play</span>(filename);</p> |
||||
<p class=desc>Begin playing a RAW data file. If a file is already playing, |
||||
it is stopped and this file starts playing from the beginning. |
||||
</p> |
||||
<p class=func><span class=keyword>stop</span>();</p> |
||||
<p class=desc>Stop playing. If not playing, this function has no effect. |
||||
</p> |
||||
<p class=func><span class=keyword>isPlaying</span>();</p> |
||||
<p class=desc>Return true (non-zero) if playing, or false (zero) |
||||
when not playing. |
||||
</p> |
||||
<p class=func><span class=keyword>positionMillis</span>();</p> |
||||
<p class=desc>While playing, return the current time offset, in |
||||
milliseconds. When not playing, the return from this function |
||||
is undefined. |
||||
</p> |
||||
<p class=func><span class=keyword>lengthMillis</span>();</p> |
||||
<p class=desc>Return the total length of the current sound clip, |
||||
in milliseconds. When not playing, the return from this function |
||||
is undefined. |
||||
</p> |
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Audio > Recorder |
||||
</p> |
||||
<h3>Notes</h3> |
||||
<p>The data file must be RAW 16 bit signed integers in LSB-first format. |
||||
</p> |
||||
<p>While playing, the audio library accesses the SD card automatically. |
||||
If card access is required, you must |
||||
<a href="http://www.pjrc.com/teensy/td_libs_AudioProcessorUsage.html" target="_blank">AudioNoInterrupts()</a> |
||||
to prevent the library from accessing the SD card while you use it. |
||||
Disabling the audio library interrupt for too long may cause audible |
||||
dropouts or glitches. |
||||
</p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioPlaySdRaw"> |
||||
<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> |
||||
|
@ -1,70 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioPlaySdWav"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Play a WAV file, stored on a SD card.</p> |
||||
</div> |
||||
<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 Output</td></tr> |
||||
<tr class=odd><td align=center>Out 1</td><td>Right Channel Output</td></tr> |
||||
</table> |
||||
<h3>Functions</h3> |
||||
<p class=func><span class=keyword>play</span>(filename);</p> |
||||
<p class=desc>Begin playing a WAV file. If a file is already playing, |
||||
it is stopped and this file starts playing from the beginning. |
||||
</p> |
||||
<p class=func><span class=keyword>stop</span>();</p> |
||||
<p class=desc>Stop playing. If not playing, this function has no effect. |
||||
</p> |
||||
<p class=func><span class=keyword>isPlaying</span>();</p> |
||||
<p class=desc>Return true (non-zero) if playing, or false (zero) |
||||
when not playing. See the note below about delayed start. |
||||
</p> |
||||
<p class=func><span class=keyword>positionMillis</span>();</p> |
||||
<p class=desc>While playing, return the current time offset, in |
||||
milliseconds. When not playing, the return from this function |
||||
is undefined. |
||||
</p> |
||||
<p class=func><span class=keyword>lengthMillis</span>();</p> |
||||
<p class=desc>Return the total length of the current sound clip, |
||||
in milliseconds. When not playing, the return from this function |
||||
is undefined. |
||||
</p> |
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Audio > WavFilePlayer |
||||
</p> |
||||
<h3>Notes</h3> |
||||
<p>Only 16 bit PCM, 44100 Hz WAV files are supported. When mono |
||||
files are played, both output ports transmit a copy of the |
||||
single sound. Of course, stereo WAV files play with the left |
||||
channel on port 0 and the right channel on port 1. |
||||
</p> |
||||
<p>A brief delay after calling play() will usually occur before |
||||
isPlaying() returns true and positionMillis() returns valid |
||||
time offset. WAV files have a header at the beginning of the |
||||
file, which the audio library must read and parse before |
||||
playing can begin. |
||||
</p> |
||||
<p>While playing, the audio library accesses the SD card automatically. |
||||
If card access is required, you must |
||||
<a href="http://www.pjrc.com/teensy/td_libs_AudioProcessorUsage.html" target="_blank">use AudioNoInterrupts()</a> |
||||
to prevent the library from accessing the SD card while you use it. |
||||
Disabling the audio library interrupt for too long may cause audible |
||||
dropouts or glitches. |
||||
</p> |
||||
<p>An experimental SD library optimization exists, which can remove these |
||||
SD library restrictions. It also allows reliable playback of more |
||||
files at the same time. To enable this special code, find and edit |
||||
the SD_t3.h file within your Arduino folder. See the comments within |
||||
that file for details. |
||||
</p> |
||||
|
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioPlaySdWav"> |
||||
<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> |
||||
|
@ -1,62 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioPlaySerialflashRaw"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Play a RAW data file, stored on a Serial Flash chip. These chips |
||||
are far more efficient than SD cards, allowing many files to be |
||||
played simultaneously by copies of this object. |
||||
</p> |
||||
<p align=center><img src="img/w25q128fv.jpg"><br><small>W25Q128FV Serial Flash</small></p> |
||||
</div> |
||||
<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>Sound Output</td></tr> |
||||
</table> |
||||
<h3>Functions</h3> |
||||
<p class=func><span class=keyword>play</span>(filename);</p> |
||||
<p class=desc>Begin playing a RAW data file. If a file is already playing, |
||||
it is stopped and this file starts playing from the beginning. |
||||
</p> |
||||
<p class=func><span class=keyword>stop</span>();</p> |
||||
<p class=desc>Stop playing. If not playing, this function has no effect. |
||||
</p> |
||||
<p class=func><span class=keyword>isPlaying</span>();</p> |
||||
<p class=desc>Return true (non-zero) if playing, or false (zero) |
||||
when not playing. |
||||
</p> |
||||
<p class=func><span class=keyword>positionMillis</span>();</p> |
||||
<p class=desc>While playing, return the current time offset, in |
||||
milliseconds. When not playing, the return from this function |
||||
is undefined. |
||||
</p> |
||||
<p class=func><span class=keyword>lengthMillis</span>();</p> |
||||
<p class=desc>Return the total length of the current sound clip, |
||||
in milliseconds. When not playing, the return from this function |
||||
is undefined. |
||||
</p> |
||||
<h3>Examples</h3> |
||||
<!-- |
||||
<p class=exam>File > Examples > Audio > Recorder |
||||
--> |
||||
<p class=exam>TODO: play example needed.... |
||||
</p> |
||||
<p class=exam>File > Examples > SerialFlash > CopyFromSD |
||||
</p> |
||||
<h3>Notes</h3> |
||||
<p>The data file must be RAW 16 bit signed integers in LSB-first format. |
||||
</p> |
||||
<p>The <a href="https://github.com/PaulStoffregen/SerialFlash" target="_blank">SerialFlash library</a> |
||||
is used to access the flash chip. You can also use SerialFlash's functions |
||||
to access the stored files, or add data to the flash chip. |
||||
</p> |
||||
<p>File names are case sensitive with SerialFlash. If your sound does |
||||
not play, use <b>File > Examples > SerialFlash > ListFiles</b> to |
||||
check the exact file names stored in the flash memory chip. |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioPlaySerialflashRaw"> |
||||
<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> |
||||
|
@ -1,58 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioRecordQueue"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Record audio data by sending to the Arduino sketch. This object allows |
||||
sketch code to receive audio packets.</p> |
||||
</div> |
||||
<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>Sound To Access</td></tr> |
||||
</table> |
||||
<h3>Functions</h3> |
||||
<p class=func><span class=keyword>begin</span>();</p> |
||||
<p class=desc>Begin capturing incoming audio to the queue. After calling |
||||
begin, readBuffer() and freeBuffer(), or clear() must be used frequently |
||||
to prevent the queue from filling up. |
||||
</p> |
||||
<p class=func><span class=keyword>available</span>();</p> |
||||
<p class=desc>Returns the number of audio packets available to read. |
||||
</p> |
||||
<p class=func><span class=keyword>readBuffer</span>();</p> |
||||
<p class=desc>Read a single audio packet. A pointer to a 128 sample |
||||
array of 16 bit integers is returned. NULL is returned if no packets |
||||
are available. |
||||
</p> |
||||
<p class=func><span class=keyword>freeBuffer</span>();</p> |
||||
<p class=desc>Release the memory from the previously read packet returned |
||||
from readBuffer(). Only a single packet at a time may be read, and |
||||
each packet must be freed with this function, to return the memory to |
||||
the audio library. |
||||
</p> |
||||
<p class=func><span class=keyword>clear</span>();</p> |
||||
<p class=desc>Discard all audio held in the queue. |
||||
</p> |
||||
<p class=func><span class=keyword>end</span>();</p> |
||||
<p class=desc>Stop capturing incoming audio into the queue. Data already |
||||
captured remains in the queue and may be read with readBuffer(). |
||||
</p> |
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Audio > Recorder |
||||
</p> |
||||
<h3>Notes</h3> |
||||
<p> |
||||
Up to 52 packets may be queued by this object, which allows approximately |
||||
150 ms of audio to be held in the queue, to allow time for the Arduino |
||||
sketch to write data to media or do other high-latency tasks. |
||||
|
||||
The actual packets are taken |
||||
from the pool created by AudioMemory(). |
||||
</p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioRecordQueue"> |
||||
<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> |
||||
|
@ -1,35 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioSynthKarplusStrong"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Synthesize a plucked string sound, such as a guitar string. |
||||
</p> |
||||
<p align=center><img src="img/touchguitar.jpg"></p> |
||||
</div> |
||||
<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>Sound Output</td></tr> |
||||
</table> |
||||
<h3>Functions</h3> |
||||
<p class=func><span class=keyword>noteOn</span>(frequency, velocity);</p> |
||||
<p class=desc>Begin a new string note. Velocity can be from 0 to 1.0, |
||||
indicating how hard the string is plucked. |
||||
</p> |
||||
<p class=func><span class=keyword>noteOff</span>(velocity);</p> |
||||
<p class=desc>Stop the sound output. |
||||
</p> |
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Synthesis > Guitar |
||||
</p> |
||||
<p class=exam><a href="https://github.com/PaulStoffregen/TouchGuitar" target="_blank">TouchGuitar</a> |
||||
</p> |
||||
<h3>Notes</h3> |
||||
<p></p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioSynthSimpleDrum"> |
||||
<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> |
||||
|
@ -1,40 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioSynthNoisePink"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Create pink noise, using Stefan Stenzel's "New Shade Of Pink" algorithm. |
||||
</p> |
||||
<!-- |
||||
<p align=center><img src="img/whitenoise.png"></p> |
||||
--> |
||||
</div> |
||||
<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>Pink Noise</td></tr> |
||||
</table> |
||||
<h3>Functions</h3> |
||||
<p class=func><span class=keyword>amplitude</span>(level);</p> |
||||
<p class=desc>Set the output peak level, from 0 (off) to 1.0. |
||||
The default is off. Noise is generated only after setting |
||||
to a non-zero level. |
||||
</p> |
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Audio > MemoryAndCpuUsage |
||||
</p> |
||||
<h3>Notes</h3> |
||||
<p>Setting the amplitude to zero causes this object to stop using |
||||
CPU time. CPU usage is approx 3% on Teensy 3.1. |
||||
</p> |
||||
<p>Stefan Stenzel's |
||||
<a href="http://stenzel.waldorfmusic.de/post/pink/" target="_blank">New Shade Of Pink</a> |
||||
algorithm. Stefan's terms of use are "Use for any purpose. If used |
||||
in a commercial product, you should give me one." |
||||
</p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioSynthNoisePink"> |
||||
<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> |
||||
|
@ -1,33 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioSynthNoiseWhite"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Create white noise. |
||||
</p> |
||||
<p align=center><img src="img/whitenoise.png"></p> |
||||
</div> |
||||
<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>White Noise</td></tr> |
||||
</table> |
||||
<h3>Functions</h3> |
||||
<p class=func><span class=keyword>amplitude</span>(level);</p> |
||||
<p class=desc>Set the output peak level, from 0 (off) to 1.0. |
||||
The default is off. Noise is generated only after setting |
||||
to a non-zero level. |
||||
</p> |
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Audio > |
||||
</p> |
||||
<h3>Notes</h3> |
||||
<p>Setting the amplitude to zero causes this object to stop using |
||||
CPU time to generate random numbers. |
||||
</p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioSynthNoiseWhite"> |
||||
<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> |
||||
|
@ -1,44 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioSynthSimpleDrum"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Generate a synthesised drum sound. Also useful for laser pistol and bursting |
||||
bubble sound effects.</p> |
||||
</div> |
||||
<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>Drum Tone Output</td></tr> |
||||
</table> |
||||
<h3>Functions</h3> |
||||
<p class=func><span class=keyword>noteOn</span>();</p> |
||||
<p class=desc>Trigger the drum. |
||||
</p> |
||||
<p class=func><span class=keyword>frequency</span>(frequency);</p> |
||||
<p class=desc>Set the base frequency of the drum. |
||||
</p> |
||||
<p class=func><span class=keyword>length</span>(milliseconds);</p> |
||||
<p class=desc>Set the duration of the envelope, in milliseconds. |
||||
</p> |
||||
<p class=func><span class=keyword>secondMix</span>(level);</p> |
||||
<p class=desc>Emulates a two-headed tom, by adding a second sine wave that is |
||||
harmonized a perfect fifth above |
||||
the base frequency. Using this involves a slight CPU penalty. |
||||
</p> |
||||
<p class=func><span class=keyword>pitchMod</span>(depth);</p> |
||||
<p class=desc>Set the depth of envelope of the pitch, by a maximum of two octaves. |
||||
Default is 0.5, with no modulation. Values above 0.5 cause the pitch to sweep |
||||
downwards, values lower than 0.5 cause the pitch to sweep upwards. |
||||
</p> |
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Synthesis > SimpleDrum |
||||
</p> |
||||
<h3>Notes</h3> |
||||
<p></p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioSynthSimpleDrum"> |
||||
<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> |
||||
|
@ -1,31 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioSynthToneSweep"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Create a continuously varying (in frequency) sine wave</p> |
||||
</div> |
||||
<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>Continuously varying tone</td></tr> |
||||
</table> |
||||
<h3>Functions</h3> |
||||
<p class=func><span class=keyword>play</span>(level, lowFreq, highFreq, time);</p> |
||||
<p class=desc>Start generating frequency sweep output. The time is specified |
||||
in milliseconds. Level is 0 to 1.0. |
||||
</p> |
||||
<p class=func><span class=keyword>isPlaying</span>();</p> |
||||
<p class=desc>Returns true (non-zero) while the output is active. |
||||
</p> |
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Audio > HardwareTesting > ToneSweep |
||||
</p> |
||||
<h3>Notes</h3> |
||||
<p>Uses excessive CPU time</p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioSynthToneSweep"> |
||||
<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> |
||||
|
@ -1,70 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioSynthWaveform"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Create a waveform: sine, sawtooth, square, triangle, pulse or arbitrary.</p> |
||||
</div> |
||||
<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>Waveform Output</td></tr> |
||||
</table> |
||||
<h3>Functions</h3> |
||||
<p class=func><span class=keyword>begin</span>(waveform);</p> |
||||
<p class=desc>Configure the waveform type to create. |
||||
</p> |
||||
<p class=func><span class=keyword>begin</span>(level, frequency, waveform);</p> |
||||
<p class=desc>Output a waveform, and set the amplitude and frequency. |
||||
</p> |
||||
<p class=func><span class=keyword>frequency</span>(freq);</p> |
||||
<p class=desc>Change the frequency. |
||||
</p> |
||||
<p class=func><span class=keyword>amplitude</span>(level);</p> |
||||
<p class=desc>Change the amplitude. Set to 0 to turn the signal off. |
||||
</p> |
||||
<p class=func><span class=keyword>phase</span>(angle);</p> |
||||
<p class=desc> |
||||
Cause the generated waveform to jump to a specific point within |
||||
its cycle. Angle is from 0 to 360 degrees. When multiple objects |
||||
are configured, |
||||
<a href="http://www.pjrc.com/teensy/td_libs_AudioProcessorUsage.html" target="_blank">AudioNoInterrupts()</a> |
||||
should be used to guarantee all new settings take effect together. |
||||
</p> |
||||
<p class=func><span class=keyword>pulseWidth</span>(amount);</p> |
||||
<p class=desc>Change the width (duty cycle) of the pulse.</p> |
||||
<p class=func><span class=keyword>arbitraryWaveform</span>(array, maxFreq);</p> |
||||
<p class=desc> |
||||
Configure the waveform to be used with WAVEFORM_ARBITRARY. Array |
||||
must be an array of 256 samples. Currently, the data is used |
||||
without any filtering, which can cause aliasing with frequencies |
||||
above 172 Hz. For higher frequency output, you must bandwidth |
||||
limit your waveform data. Someday, "maxFreq" will be used to |
||||
do this automatically. |
||||
</p> |
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Audio > Synthesis > PlaySynthMusic |
||||
</p> |
||||
<p class=exam>File > Examples > Audio > Synthesis > pulseWidth |
||||
</p> |
||||
<p class=exam>File > Examples > Audio > HardwareTesting > WM8731MikroSine |
||||
</p> |
||||
<h3>Notes</h3> |
||||
<p>Supported Waveforms:<br> |
||||
<ul> |
||||
<li><span class=literal>WAVEFORM_SINE</span></li> |
||||
<li><span class=literal>WAVEFORM_SAWTOOTH</span></li> |
||||
<li><span class=literal>WAVEFORM_SAWTOOTH_REVERSE</span></li> |
||||
<li><span class=literal>WAVEFORM_SQUARE</span></li> |
||||
<li><span class=literal>WAVEFORM_TRIANGLE</span></li> |
||||
<li><span class=literal>WAVEFORM_ARBITRARY</span></li> |
||||
<li><span class=literal>WAVEFORM_PULSE</span></li> |
||||
<li><span class=literal>WAVEFORM_SAMPLE_HOLD</span></li> |
||||
</ul> |
||||
</p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioSynthWaveform"> |
||||
<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> |
||||
|
@ -1,40 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioSynthWaveformDc"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Create constant (DC) signal, useful for control of objects that take |
||||
a modulation or control input signal. This constant level can be |
||||
used to modify other waveforms using mixer or multiplier objects</p> |
||||
</div> |
||||
<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>Output constant DC level</td></tr> |
||||
</table> |
||||
<h3>Functions</h3> |
||||
<p class=func><span class=keyword>amplitude</span>(level);</p> |
||||
<p class=desc>Set the output. Level is -1.0 to 1.0. The output is |
||||
changed immediately. |
||||
</p> |
||||
<p class=func><span class=keyword>amplitude</span>(level, milliseconds);</p> |
||||
<p class=desc>Set the output. Level is -1.0 to 1.0. The output is |
||||
gradually changed over a "milliseconds" time period. Any time may |
||||
be specified, but periods longer than 1 second may be automatically |
||||
shortened for small level changes, due to numerical precision limits. |
||||
</p> |
||||
<!-- |
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Audio > |
||||
</p> |
||||
--> |
||||
<h3>Notes</h3> |
||||
<p>Of course, the term "DC", for Direct Current, doesn't properly apply |
||||
to a pure digital stream of numerical values. But the term is widely |
||||
understood in audio applications, so hopefully it's not too confusing?</p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioSynthWaveformDc"> |
||||
<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> |
||||
|
@ -1,44 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioSynthWaveformSine"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Create a sine wave signal</p> |
||||
</div> |
||||
<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>Sine Wave Output</td></tr> |
||||
</table> |
||||
<h3>Functions</h3> |
||||
<p class=func><span class=keyword>amplitude</span>(level);</p> |
||||
<p class=desc>Set the amplitude, from 0 to 1.0. |
||||
</p> |
||||
<p class=func><span class=keyword>frequency</span>(freq);</p> |
||||
<p class=desc>Set the frequency, from 0 to 22000. Very low values may |
||||
be used to create a LFO (Low Frequency Oscillator) for objects |
||||
with modulation signal inputs. |
||||
</p> |
||||
<p class=func><span class=keyword>phase</span>(angle);</p> |
||||
<p class=desc> |
||||
Cause the generated waveform to jump to a specific point within |
||||
its cycle. Angle is from 0 to 360 degrees. When multiple objects |
||||
are configured, |
||||
<a href="http://www.pjrc.com/teensy/td_libs_AudioProcessorUsage.html" target="_blank">AudioNoInterrupts()</a> |
||||
should be used to guarantee all new settings take effect together. |
||||
</p> |
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Audio > MemoryAndCpuUsage |
||||
</p> |
||||
<p class=exam>File > Examples > Audio > Analysis > DialTone_Serial |
||||
</p> |
||||
<p class=exam>File > Examples > Audio > Analysis > FFT |
||||
</p> |
||||
<h3>Notes</h3> |
||||
<p></p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioSynthWaveformSine"> |
||||
<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> |
||||
|
@ -1,41 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioSynthWaveformSineHires"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Create a highly precise, low distortion sine wave signal. |
||||
Mainly useful for codec & analog circuitry testing.</p> |
||||
</div> |
||||
<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>Sine Wave, upper bits</td></tr> |
||||
<tr class=odd><td align=center>Out 1</td><td>Sine Wave, lower bits</td></tr> |
||||
</table> |
||||
<h3>Functions</h3> |
||||
<p class=func><span class=keyword>amplitude</span>(level);</p> |
||||
<p class=desc>Set the amplitude, from 0 to 1.0. |
||||
</p> |
||||
<p class=func><span class=keyword>frequency</span>(freq);</p> |
||||
<p class=desc>Set the frequency, from 0 to 22000. Very low values may |
||||
be used to create a LFO (Low Frequency Oscillator) for objects |
||||
with modulation signal inputs. |
||||
</p> |
||||
<p class=func><span class=keyword>phase</span>(angle);</p> |
||||
<p class=desc> |
||||
Cause the generated waveform to jump to a specific point within |
||||
its cycle. Angle is from 0 to 360 degrees. When multiple objects |
||||
are configured, |
||||
<a href="http://www.pjrc.com/teensy/td_libs_AudioProcessorUsage.html" target="_blank">AudioNoInterrupts()</a> |
||||
should be used to guarantee all new settings take effect together. |
||||
</p> |
||||
<h3>Notes</h3> |
||||
<p>An 11th order Taylor series approximation is used to generate |
||||
a very accurate sine wave. At least the upper 25 bits are believe |
||||
to be perfect. This is mainly intended for testing 24 bit codec chips!</p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioSynthWaveformSine"> |
||||
<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> |
||||
|
@ -1,46 +0,0 @@ |
||||
<script type="text/x-red" data-help-name="AudioSynthWaveformSineModulated"> |
||||
<h3>Summary</h3> |
||||
<div class=tooltipinfo> |
||||
<p>Create a modulated sine wave, using any audio signal to continuously |
||||
modulate the sine wave frequency.</p> |
||||
</div> |
||||
<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>Modulation Signal</td></tr> |
||||
<tr class=odd><td align=center>Out 0</td><td>Sine Wave Output</td></tr> |
||||
</table> |
||||
<h3>Functions</h3> |
||||
<p class=func><span class=keyword>amplitude</span>(level);</p> |
||||
<p class=desc>Set the amplitude, from 0 to 1.0. |
||||
</p> |
||||
<p class=func><span class=keyword>frequency</span>(freq);</p> |
||||
<p class=desc>Set the center frequency, from 0 to 11000. The output will |
||||
be this center frequency when the input modulation signal is zero. |
||||
Modulation input 1.0 causes the frequency to double, and input -1.0 |
||||
causes zero Hz (DC) output. For less modulation, attenuate the input |
||||
signal (perhaps with a mixer object) before it arrives here. |
||||
</p> |
||||
<p class=func><span class=keyword>phase</span>(angle);</p> |
||||
<p class=desc> |
||||
Cause the generated waveform to jump to a specific point within |
||||
its cycle. Angle is from 0 to 360 degrees. When multiple objects |
||||
are configured, |
||||
<a href="http://www.pjrc.com/teensy/td_libs_AudioProcessorUsage.html" target="_blank">AudioNoInterrupts()</a> |
||||
should be used to guarantee all new settings take effect together. |
||||
</p> |
||||
<!-- |
||||
<h3>Examples</h3> |
||||
<p class=exam>File > Examples > Audio > |
||||
</p> |
||||
--> |
||||
<h3>Notes</h3> |
||||
<p></p> |
||||
</script> |
||||
<script type="text/x-red" data-template-name="AudioSynthWaveformSineModulated"> |
||||
<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> |
||||
|
Loading…
Reference in new issue