Browse Source

Add S/PDIF to GUI design tool

dds
PaulStoffregen 9 years ago
parent
commit
aa7c80b1b9
2 changed files with 190 additions and 131 deletions
  1. +190
    -131
      gui/list.html
  2. BIN
      gui/spdif_proto.jpg

+ 190
- 131
gui/list.html View File

@@ -80,59 +80,6 @@
</script>


<script type="text/javascript">
RED.nodes.registerType('AudioInputI2Sslave',{
shortName: "i2ss",
inputs:0,
outputs:2,
category: 'input-function',
color:"#E6E0F8",
icon: "arrow-in.png"
});
</script>
<script type="text/x-red" data-help-name="AudioInputI2Sslave">
<h3>Summary</h3>
<p>Receive 16 bit stereo audio from an I2S device using I2S slave mode.</p>
<h3>Audio Connections</h3>
<table class=doc align=center cellpadding=3>
<tr class=top><th>Port</th><th>Purpose</th></tr>
<tr class=odd><td align=center>Out 0</td><td>Left Channel</td></tr>
<tr class=odd><td align=center>Out 1</td><td>Right Channel</td></tr>
</table>
<h3>Functions</h3>
<p>This object has no functions to call from the Arduino sketch. It
simply streams data from the I2S hardware to its 2 output ports.</p>
<h3>Hardware</h3>
<p>The I2S signals are used in "slave" mode, where the I2S device controls
data timing.</p>
<table class=doc align=center cellpadding=3>
<tr class=top><th>Pin</th><th>Signal</th><th>Direction</th></tr>
<tr class=odd><td align=center>9</td><td>BCLK</td><td>Input</td></tr>
<tr class=odd><td align=center>13</td><td>RX</td><td>Input</td></tr>
<tr class=odd><td align=center>23</td><td>LRCLK</td><td>Input</td></tr>
</table>
<!--<h3>Examples</h3>
<p class=exam>File &gt; Examples &gt; Audio &gt;
</p>-->
<h3>Notes</h3>
<p>Slave mode I2S <b>should not used in the same project as ADC, DAC and
PWM</b> signals. Differences in timing between the I2S device and
Teensy's clock can cause occasional audio glitches when I2S slave mode
is used together with other input or output objects based on Teensy's
timing.</p>
<p>Only one I2S input and one I2S output object may be used. Master
and slave modes may not be mixed (both must be of the same type).
</p>
</script>
<script type="text/x-red" data-template-name="AudioInputI2Sslave">
<div class="form-row">
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name">
</div>
</script>



<script type="text/javascript">
RED.nodes.registerType('AudioInputAnalog',{
shortName: "adc",
@@ -189,6 +136,59 @@
</script>


<script type="text/javascript">
RED.nodes.registerType('AudioInputI2Sslave',{
shortName: "i2ss",
inputs:0,
outputs:2,
category: 'input-function',
color:"#E6E0F8",
icon: "arrow-in.png"
});
</script>
<script type="text/x-red" data-help-name="AudioInputI2Sslave">
<h3>Summary</h3>
<p>Receive 16 bit stereo audio from an I2S device using I2S slave mode.</p>
<h3>Audio Connections</h3>
<table class=doc align=center cellpadding=3>
<tr class=top><th>Port</th><th>Purpose</th></tr>
<tr class=odd><td align=center>Out 0</td><td>Left Channel</td></tr>
<tr class=odd><td align=center>Out 1</td><td>Right Channel</td></tr>
</table>
<h3>Functions</h3>
<p>This object has no functions to call from the Arduino sketch. It
simply streams data from the I2S hardware to its 2 output ports.</p>
<h3>Hardware</h3>
<p>The I2S signals are used in "slave" mode, where the I2S device controls
data timing.</p>
<table class=doc align=center cellpadding=3>
<tr class=top><th>Pin</th><th>Signal</th><th>Direction</th></tr>
<tr class=odd><td align=center>9</td><td>BCLK</td><td>Input</td></tr>
<tr class=odd><td align=center>13</td><td>RX</td><td>Input</td></tr>
<tr class=odd><td align=center>23</td><td>LRCLK</td><td>Input</td></tr>
</table>
<!--<h3>Examples</h3>
<p class=exam>File &gt; Examples &gt; Audio &gt;
</p>-->
<h3>Notes</h3>
<p>Slave mode I2S <b>should not used in the same project as ADC, DAC and
PWM</b> signals. Differences in timing between the I2S device and
Teensy's clock can cause occasional audio glitches when I2S slave mode
is used together with other input or output objects based on Teensy's
timing.</p>
<p>Only one I2S input and one I2S output object may be used. Master
and slave modes may not be mixed (both must be of the same type).
</p>
</script>
<script type="text/x-red" data-template-name="AudioInputI2Sslave">
<div class="form-row">
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name">
</div>
</script>




<script type="text/javascript">
RED.nodes.registerType('AudioOutputI2S',{
@@ -258,10 +258,9 @@
</script>



<script type="text/javascript">
RED.nodes.registerType('AudioOutputI2Sslave',{
shortName: "i2ss",
RED.nodes.registerType('AudioOutputSPDIF',{
shortName: "spdif",
inputs:2,
outputs:0,
category: 'output-function',
@@ -269,9 +268,10 @@
icon: "arrow-in.png"
});
</script>
<script type="text/x-red" data-help-name="AudioOutputI2Sslave">
<script type="text/x-red" data-help-name="AudioOutputSPDIF">
<h3>Summary</h3>
<p>Transmit 16 bit stereo audio to an I2S device using I2S slave mode.</p>
<p>Transmit 16 bit stereo audio as Digital S/PDIF.</p>
<p align=center><img src="spdif_proto.jpg"></p>
<h3>Audio Connections</h3>
<table class=doc align=center cellpadding=3>
<tr class=top><th>Port</th><th>Purpose</th></tr>
@@ -280,30 +280,39 @@
</table>
<h3>Functions</h3>
<p>This object has no functions to call from the Arduino sketch. It
simply streams data from its 2 input ports to the I2S hardware.</p>
simply streams data from its 2 input ports S/PDIF encoded digital
audio on pin 22.</p>
<h3>Hardware</h3>
<p>The I2S signals are used in "slave" mode, where the I2S device controls
data timing.</p>
<p>The S/PDIF output signal can be used to drive an optical TOSLINK
cable, or a standard (usually orange) RCA jack.</p>
<table class=doc align=center cellpadding=3>
<tr class=top><th>Pin</th><th>Signal</th><th>Direction</th></tr>
<tr class=odd><td align=center>9</td><td>BCLK</td><td>Input</td></tr>
<tr class=odd><td align=center>22</td><td>TX</td><td>Output</td></tr>
<tr class=odd><td align=center>23</td><td>LRCLK</td><td>Input</td></tr>
<tr class=odd><td align=center>22</td><td>S/PDIF</td><td>Output</td></tr>
</table>
<p>For optical TOSLINK output, this
<a href="https://www.oshpark.com/shared_projects/KcDBKHta" target="_blank">OSH Park board</a>
can be used with the inexpensive Everlight PLT133/T6A connector, available
at Digikey, 1080-1434-ND.
</p>
<h3>Examples</h3>
<p class=exam>File &gt; Examples &gt; Audio &gt; HardwareTesting &gt; WM8731MikroSine
<p>The AudioOutputSPDIF object can be used in place of the AudioOutputI2S object,
<p>used in nearly all the examples. The WavFilePlayer shows how to substitute
output objects for different hardware types.
</p>
<p class=exam>File &gt; Examples &gt; Audio &gt; WavFilePlayer
</p>
<h3>Credits</h3>
<p><a href="https://github.com/FrankBoesing" target="_blank">Frank Boesing</a>
developed the AudioOutputSPDIF code. The original
<a href="https://forum.pjrc.com/threads/28639-S-pdif" target="_blank">forum disussion</a>
included valuable input and code from "kpc".
<h3>Notes</h3>
<p>Slave mode I2S <b>should not used in the same project as ADC, DAC and
PWM</b> signals. Differences in timing between the I2S device and
Teensy's clock can cause occasional audio glitches when I2S slave mode
is used together with other input or output objects based on Teensy's
timing.</p>
<p>Only one I2S input and one I2S output object may be used. Master
and slave modes may not be mixed (both must be of the same type).
<p>S/PDIF output uses the I2S hardware. This object can not be used
together with any of the I2S objects, because it requires the I2S
hardware with different internal settings.</p>
</p>
</script>
<script type="text/x-red" data-template-name="AudioOutputI2Sslave">
<script type="text/x-red" data-template-name="AudioOutputI2S">
<div class="form-row">
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name">
@@ -311,8 +320,6 @@
</script>




<script type="text/javascript">
RED.nodes.registerType('AudioOutputAnalog',{
shortName: "dac",
@@ -417,6 +424,58 @@
</script>


<script type="text/javascript">
RED.nodes.registerType('AudioOutputI2Sslave',{
shortName: "i2ss",
inputs:2,
outputs:0,
category: 'output-function',
color:"#E6E0F8",
icon: "arrow-in.png"
});
</script>
<script type="text/x-red" data-help-name="AudioOutputI2Sslave">
<h3>Summary</h3>
<p>Transmit 16 bit stereo audio to an I2S device using I2S slave mode.</p>
<h3>Audio Connections</h3>
<table class=doc align=center cellpadding=3>
<tr class=top><th>Port</th><th>Purpose</th></tr>
<tr class=odd><td align=center>In 0</td><td>Left Channel</td></tr>
<tr class=odd><td align=center>In 1</td><td>Right Channel</td></tr>
</table>
<h3>Functions</h3>
<p>This object has no functions to call from the Arduino sketch. It
simply streams data from its 2 input ports to the I2S hardware.</p>
<h3>Hardware</h3>
<p>The I2S signals are used in "slave" mode, where the I2S device controls
data timing.</p>
<table class=doc align=center cellpadding=3>
<tr class=top><th>Pin</th><th>Signal</th><th>Direction</th></tr>
<tr class=odd><td align=center>9</td><td>BCLK</td><td>Input</td></tr>
<tr class=odd><td align=center>22</td><td>TX</td><td>Output</td></tr>
<tr class=odd><td align=center>23</td><td>LRCLK</td><td>Input</td></tr>
</table>
<h3>Examples</h3>
<p class=exam>File &gt; Examples &gt; Audio &gt; HardwareTesting &gt; WM8731MikroSine
</p>
<h3>Notes</h3>
<p>Slave mode I2S <b>should not used in the same project as ADC, DAC and
PWM</b> signals. Differences in timing between the I2S device and
Teensy's clock can cause occasional audio glitches when I2S slave mode
is used together with other input or output objects based on Teensy's
timing.</p>
<p>Only one I2S input and one I2S output object may be used. Master
and slave modes may not be mixed (both must be of the same type).
</p>
</script>
<script type="text/x-red" data-template-name="AudioOutputI2Sslave">
<div class="form-row">
<label for="node-input-name"><i class="fa fa-tag"></i> Name</label>
<input type="text" id="node-input-name" placeholder="Name">
</div>
</script>


<script type="text/javascript">
RED.nodes.registerType('AudioMixer4',{
shortName: "mixer",
@@ -1242,17 +1301,17 @@ The actual packets are taken
It does this by sampling from a delay line, so each voice is actually
the same but at a slightly different point in time. This is a type of
comb filtering.</p>
<p>Chorus combines one or more samples ranging from the most recent
sample back to about 50ms ago. The additional samples are evenly spread
<p>Chorus combines one or more samples ranging from the most recent
sample back to about 50ms ago. The additional samples are evenly spread
through the supplied delay line, and there is no modulation.</p>
<p>If the number of voices is specified as 2, then the
effect combines the current sample and the oldest sample (the last one
in the delay line). If the number of voices is 3 then the effect combines
the most recent sample, the oldest sample and the sample in the middle of
<p>If the number of voices is specified as 2, then the
effect combines the current sample and the oldest sample (the last one
in the delay line). If the number of voices is 3 then the effect combines
the most recent sample, the oldest sample and the sample in the middle of
the delay line.</p>
<p>For two voices the effect can be represented as:<br/>
result = (sample(0) + sample(dt))/2<br/>
where sample(0) represents the current sample and sample(dt)
where sample(0) represents the current sample and sample(dt)
is the sample in the delay line from dt milliseconds ago.</p>
<h3>Audio Connections</h3>
<table class=doc align=center cellpadding=3>
@@ -1263,9 +1322,9 @@ The actual packets are taken
<h3>Functions</h3>
<p class=func><span class=keyword>begin</span>(delayBuffer, length, n_chorus);</p>
<p class=desc>Create a chorus by specifying the address of the delayline, the
total number of samples in the delay line (often done as an integer multiple of
total number of samples in the delay line (often done as an integer multiple of
AUDIO_BLOCK_SAMPLES) and the number of voices in the chorus <em>including</em>
the original voice (so, 2 and up to get a chorus effect, although you can
the original voice (so, 2 and up to get a chorus effect, although you can
specify 1 if you want).
</p>
<p class=func><span class=keyword>modify</span>(n_chorus);</p>
@@ -1297,19 +1356,19 @@ The actual packets are taken
</script>
<script type="text/x-red" data-help-name="AudioEffectFlange">
<h3>Summary</h3>
<p>Originally, flanging was produced by playing the same signal on two synchronized
<p>Originally, flanging was produced by playing the same signal on two synchronized
reel-to-reel tape recorders and making one of the reels slow down and speed up by
pressing on the flange of the reel (hence the name). This is a type of
comb filtering, and produces a harmonically-related series of peaks and notches
comb filtering, and produces a harmonically-related series of peaks and notches
in the audio spectrum.</p>
<p>This flanger uses a delay line, combining the original voice with only one sample from the delay
<p>This flanger uses a delay line, combining the original voice with only one sample from the delay
line, but the position of that sample varies sinusoidally.</p>
<p>The effect can be represented as:<br>
result = sample(0) + sample(dt + depth*sin(2*PI*Fe))</p>
<p>The value of the sine function is always a number from -1 to +1 and
so the result of depth*(sin(Fe)) is always a number from -depth to +depth.
Thus, the delayed sample will be selected from the range (dt-depth) to
(dt+depth). This selection will vary at whatever rate is specified as the
<p>The value of the sine function is always a number from -1 to +1 and
so the result of depth*(sin(Fe)) is always a number from -depth to +depth.
Thus, the delayed sample will be selected from the range (dt-depth) to
(dt+depth). This selection will vary at whatever rate is specified as the
frequency of the effect, Fe. Typically a low frequency (a few Hertz) is used.
<h3>Audio Connections</h3>
<table class=doc align=center cellpadding=3>
@@ -1320,7 +1379,7 @@ The actual packets are taken
<h3>Functions</h3>
<p class=func><span class=keyword>begin</span>(delayBuffer, length, offset, depth, delayRate);</p>
<p class=desc>Create a flanger by specifying the address of the delayline, the
total number of samples in the delay line (often done as an integer multiple of
total number of samples in the delay line (often done as an integer multiple of
AUDIO_BLOCK_SAMPLES), the offset (how far back the flanged sample is from the original voice),
the modulation depth (larger values give a greater variation) and the modulation
frequency, in Hertz.
@@ -2214,10 +2273,10 @@ double s_freq = .0625;</p>
changes the analog gain in the headphone amplifier. This function
on the other hand controls digital attenuation before conversion to analog, which
reduces resolution, but allows another fine control of output
signal level. The ranges is 0 to 1.0, with the default (no digital attenuation)
signal level. The ranges is 0 to 1.0, with the default (no digital attenuation)
at 1.0.
</p>
<p class=desc>dacVolume uses zero-crossing detect to avoid clicks, and ramping is handled by
<p class=desc>dacVolume uses zero-crossing detect to avoid clicks, and ramping is handled by
the chip so that a new volume may be set directly in a single call.
</p>
<p class=func><span class=keyword>dacVolume</span>(left, right);</p>
@@ -2228,17 +2287,17 @@ double s_freq = .0625;</p>

<h3>Audio Processor</h3>

<p>The optional digital audio processor is capable of implementing
<p>The optional digital audio processor is capable of implementing
one or more of: automatic volume control, surround sound control,
bass enhancement, and tonal adjustments (either a
simple tone control, or a parametric equalizer, or a graphic equalizer),
in that order.
</p>
<p>These signal processing features are implemented in the SGTL5000 chip,
so they do not consume CPU time on Teensy. However, the order of
so they do not consume CPU time on Teensy. However, the order of
these processes is fixed in the hardware.
</p>
<p>It is good practice to mute the outputs before enabling or disabling
<p>It is good practice to mute the outputs before enabling or disabling
the Audio Processor, to avoid clicks or thumps.
</p>

@@ -2263,12 +2322,12 @@ double s_freq = .0625;</p>
four values: 0 (0ms), 1 (25ms), 2 (50ms) or 3 (100ms). Larger values average the volume
over a longer time, allowing short-term peaks through.
</p>
<p class=desc>If <em>hardLimit</em> is 0, a 'soft
knee' compressor is used to progressively compress louder values which are near to or above the
threashold (the louder they are, the greater the compression). If it is 1, a hard compressor
<p class=desc>If <em>hardLimit</em> is 0, a 'soft
knee' compressor is used to progressively compress louder values which are near to or above the
threashold (the louder they are, the greater the compression). If it is 1, a hard compressor
is used (all values above the threashold are the same loudness). The <em>threashold</em> is specified
as a float in the range 0dBFS to -96dBFS, where -18dBFS is a typical value.
<em>attack</em> is a float controlling the rate of decrease in gain when the signal is over
as a float in the range 0dBFS to -96dBFS, where -18dBFS is a typical value.
<em>attack</em> is a float controlling the rate of decrease in gain when the signal is over
threashold, in dB/s. <em>decay</em> controls how fast gain is restored once the level
drops below threashold, again in dB/s. It is typically set to a longer value than attack.
</p>
@@ -2280,7 +2339,7 @@ double s_freq = .0625;</p>
</p>

<p class=func><span class=keyword>surroundSoundEnable</span>();</p>
<p class=desc>Enable virtual surround processing, to give a broader and
<p class=desc>Enable virtual surround processing, to give a broader and
deeper stereo image (even with mono input).
</p>
<p class=func><span class=keyword>surroundSoundDisable</span>();</p>
@@ -2294,27 +2353,27 @@ double s_freq = .0625;</p>
<p class=desc>Configures virtual surround width from 0 (mono) to 7 (widest).
<em>select</em> may be set to 1 (disable), 2 (mono input) or 3 (stereo input).
</p>
<p class=func><span class=keyword>enhanceBassEnable</span>();</p>
<p class=desc>Enable bass enhancement. A mono, low-pass filtered copy of
the original stereo signal has bass levels boosted and is then mixed back into
the stereo signal, which is then optionally high pass filtered (to remove
the stereo signal, which is then optionally high pass filtered (to remove
inaudible subsonic frequencies).
</p>
<p class=func><span class=keyword>enhanceBassDisable</span>();</p>
<p class=desc>Disable bass enhancement. Before disabling, ramp down the bass
<p class=desc>Disable bass enhancement. Before disabling, ramp down the bass
enhancement level to zero.
</p>
<p class=func><span class=keyword>enhanceBass</span>(lr_lev, bass_lev);</p>
<p class=desc>Configures the bass enhancement by setting the levels of the
<p class=desc>Configures the bass enhancement by setting the levels of the
original stereo signal and the bass-enhanced mono level which will be mixed together.
There is no high-pass filter.
</p>
<p class=desc>When changing bass level, call this function repeatedly to ramp up or down the bass in
<p class=desc>When changing bass level, call this function repeatedly to ramp up or down the bass in
steps of 0.5dB, to avoid pops.
</p>
<p class=func><span class=keyword>enhanceBass</span>(lr_lev, bass_lev, hpf_bypass, cutoff);</p>
<p class=desc>Configures the bass enhancement by setting the levels of the
<p class=desc>Configures the bass enhancement by setting the levels of the
original stereo signal and the bass-enhanced mono level which will be mixed together.
The high-pass filter may be enabled (0) or bypassed (1). The cutoff frequency is specified
as follows:
@@ -2329,37 +2388,37 @@ value frequency
5 200Hz
6 225Hz
</pre>
<p class=desc>When changing bass level, call this function repeatedly to ramp up or down the bass in
<p class=desc>When changing bass level, call this function repeatedly to ramp up or down the bass in
steps of 0.5dB, to avoid pops.
</p>
<p class=func><span class=keyword>eqSelect</span>(n);</p>
<p class=desc>Selects the type of frequency control, where <em>n</em> is
<p class=desc>Selects the type of frequency control, where <em>n</em> is
one of</p>
<p class=desc><b>FLAT_FREQUENCY (0)</b><br>
Equalizers and tone controls disabled, flat frequency response.</p>
<p class=desc><b>PARAMETRIC_EQUALIZER (1)</b><br>
Enables the 7-band parametric equalizer, thus disabling the
Enables the 7-band parametric equalizer, thus disabling the
tone controls and graphic equalizer.</p>
<p class=desc><b>TONE_CONTROLS (2)</b><br>
Enables bass and treble tone controls, disabling the parametric
Enables bass and treble tone controls, disabling the parametric
equalization and graphic equalizer.</p>
<p class=desc><b>GRAPHIC_EQUALIZER (3)</b><br>
Enables the five-band graphic equalizer, disabling the parametric
Enables the five-band graphic equalizer, disabling the parametric
equalization and tone controls.</p>

<p class=func><span class=keyword>eqBands</span>(bass, treble);</p>
<p class=desc>Configures bass and treble tone controls, which are
implemented as one second order low pass filter (bass) in parallel with
one second order high pass filter (treble).
implemented as one second order low pass filter (bass) in parallel with
one second order high pass filter (treble).
</p>
<p class=desc>When changing bass or treble level, call this function repeatedly to ramp
<p class=desc>When changing bass or treble level, call this function repeatedly to ramp
up or down the level in steps of 0.04 (=0.5dB) or so, to avoid pops.
</p>
<p class=func><span class=keyword>eqBands</span>(bass, mid_bass, midrange, mid_treble, treble);</p>
<p class=desc>Configures the graphic equalizer. It is implemented by five parallel,
second order biquad filters with fixed frequencies of 115Hz, 330Hz, 990Hz, 3kHz,
<p class=desc>Configures the graphic equalizer. It is implemented by five parallel,
second order biquad filters with fixed frequencies of 115Hz, 330Hz, 990Hz, 3kHz,
and 9.9kHz. Each band has a range of adjustment from 1.00 (+12dB) to -1.00 (-11.75dB).
</p>
<p class=func><span class=keyword>eqBand</span>(bandNum, n);</p>
@@ -2369,18 +2428,18 @@ value frequency
<p class=desc>When changing a band, call this function repeatedly to ramp up the gain in steps of 0.5dB,
to avoid pops.
</p>
<p class=func><span class=keyword>eqFilter</span>(filterNum, filterParameters);</p>
<p class=desc>Configurs the parametric equalizer. The number of filters (1 to 7)
is specified along with a pointer to an array of filter coefficients.
The parametric equalizer is implemented using 7 cascaded, second order bi-quad
filters whose frequencies, gain, and Q may be freely configured, but each filter
<p class=desc>Configurs the parametric equalizer. The number of filters (1 to 7)
is specified along with a pointer to an array of filter coefficients.
The parametric equalizer is implemented using 7 cascaded, second order bi-quad
filters whose frequencies, gain, and Q may be freely configured, but each filter
can only be specified as a set of filter coefficients.
</p>
<p class=func><span class=keyword>eqFilterCount</span>(n);</p>
<p class=desc>Enables zero or more of the already enabled parametric filters.
</p>
</p>
<h3>Examples</h3>
<p>Nearly all of the library's examples use this object. These
examples demonstrate its special features.
@@ -2398,7 +2457,7 @@ value frequency
<p class=exam>File &gt; Examples &gt; Audio &gt; HardwareTesting &gt; SGTL5000 &gt; CalcBiquadToneControlDAP
</p>
<h3>Notes</h3>
<p>TODO: add example with rock/classical/speech presets, where rock uses bass boost
<p>TODO: add example with rock/classical/speech presets, where rock uses bass boost
and surround enhancement while speech uses bandpass filtering and auto volume control
compression.
</p>
@@ -2430,7 +2489,7 @@ value frequency
<h3>Audio Connections</h3>
<p>This object has no audio inputs or outputs. Separate i2s objects
are used to send and receive audio data. I2S master mode objects
must be used, since this control object configures the WM8731 into
must be used, since this control object configures the WM8731 into
slave mode.
</p>
<h3>Functions</h3>
@@ -2450,7 +2509,7 @@ value frequency
<p class=desc>not implemented
</p>
<!--<h3>Examples</h3>
<p class=exam>File &gt; Examples &gt; Audio &gt;
<p class=exam>File &gt; Examples &gt; Audio &gt;
</p>-->
<h3>Notes</h3>
<p></p>

BIN
gui/spdif_proto.jpg View File

Before After
Width: 240  |  Height: 232  |  Size: 11KB

Loading…
Cancel
Save