Bläddra i källkod

Add freeverb documentation and examples

dds
PaulStoffregen 6 år sedan
förälder
incheckning
01aedf8a1a
3 ändrade filer med 370 tillägg och 0 borttagningar
  1. +137
    -0
      examples/Effects/Freeverb/Freeverb.ino
  2. +145
    -0
      examples/Effects/Freeverb_Stereo/Freeverb_Stereo.ino
  3. +88
    -0
      gui/index.html

+ 137
- 0
examples/Effects/Freeverb/Freeverb.ino Visa fil

@@ -0,0 +1,137 @@
// Freeverb - High quality reverb effect
//
//
// The SD card may connect to different pins, depending on the
// hardware you are using. Uncomment or configure the SD card
// pins to match your hardware.
//
// Data files to put on your SD card can be downloaded here:
// http://www.pjrc.com/teensy/td_libs_AudioDataFiles.html
//
// This example code is in the public domain.

#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <SerialFlash.h>

// GUItool: begin automatically generated code
AudioPlaySdWav playSdWav1; //xy=163,135
AudioMixer4 mixer1; //xy=332,167
AudioEffectFreeverb freeverb1; //xy=497,105
AudioMixer4 mixer2; //xy=650,190
AudioOutputI2S i2s1; //xy=815,198
AudioConnection patchCord1(playSdWav1, 0, mixer1, 0);
AudioConnection patchCord2(playSdWav1, 1, mixer1, 1);
AudioConnection patchCord3(mixer1, freeverb1);
AudioConnection patchCord4(mixer1, 0, mixer2, 1);
AudioConnection patchCord5(freeverb1, 0, mixer2, 0);
AudioConnection patchCord6(mixer2, 0, i2s1, 0);
AudioConnection patchCord7(mixer2, 0, i2s1, 1);
AudioControlSGTL5000 sgtl5000_1; //xy=236,248
// GUItool: end automatically generated code


// Use these with the Teensy Audio Shield
#define SDCARD_CS_PIN 10
#define SDCARD_MOSI_PIN 7
#define SDCARD_SCK_PIN 14

// Use these with the Teensy 3.5 & 3.6 SD card
//#define SDCARD_CS_PIN BUILTIN_SDCARD
//#define SDCARD_MOSI_PIN 11 // not actually used
//#define SDCARD_SCK_PIN 13 // not actually used

// Use these for the SD+Wiz820 or other adaptors
//#define SDCARD_CS_PIN 4
//#define SDCARD_MOSI_PIN 11
//#define SDCARD_SCK_PIN 13

void setup() {
Serial.begin(9600);

// Audio connections require memory to work. For more
// detailed information, see the MemoryAndCpuUsage example
AudioMemory(10);

// Comment these out if not using the audio adaptor board.
// This may wait forever if the SDA & SCL pins lack
// pullup resistors
sgtl5000_1.enable();
sgtl5000_1.volume(0.5);

SPI.setMOSI(SDCARD_MOSI_PIN);
SPI.setSCK(SDCARD_SCK_PIN);
if (!(SD.begin(SDCARD_CS_PIN))) {
// stop here, but print a message repetitively
while (1) {
Serial.println("Unable to access the SD card");
delay(500);
}
}
mixer1.gain(0, 0.5);
mixer1.gain(1, 0.5);
mixer2.gain(0, 0.9); // hear 90% "wet"
mixer2.gain(1, 0.1); // and 10% "dry"
}

void playFile(const char *filename)
{
Serial.print("Playing file: ");
Serial.println(filename);

// Start playing the file. This sketch continues to
// run while the file plays.
playSdWav1.play(filename);

// A brief delay for the library read WAV info
delay(5);

elapsedMillis msec;

// Simply wait for the file to finish playing.
while (playSdWav1.isPlaying()) {

// while the music plays, adjust parameters and print info
if (msec > 250) {
msec = 0;
float knob_A1 = 0.9;
float knob_A2 = 0.5;
float knob_A3 = 0.5;
// Uncomment these lines to adjust parameters with analog inputs
//knob_A1 = (float)analogRead(A1) / 1023.0;
//knob_A2 = (float)analogRead(A2) / 1023.0;
//knob_A3 = (float)analogRead(A3) / 1023.0;

mixer2.gain(0, knob_A1);
mixer2.gain(1, 1.0 - knob_A1);
freeverb1.roomsize(knob_A2);
freeverb1.damping(knob_A3);
Serial.print("Reverb: mix=");
Serial.print(knob_A1 * 100.0);
Serial.print("%, roomsize=");
Serial.print(knob_A2 * 100.0);
Serial.print("%, damping=");
Serial.print(knob_A3 * 100.0);
Serial.print("%, CPU Usage=");
Serial.print(freeverb1.processorUsage());
Serial.println("%");
}
}
}


void loop() {
playFile("SDTEST1.WAV"); // filenames are always uppercase 8.3 format
delay(500);
playFile("SDTEST2.WAV");
delay(500);
playFile("SDTEST3.WAV");
delay(500);
playFile("SDTEST4.WAV");
delay(1500);
}


+ 145
- 0
examples/Effects/Freeverb_Stereo/Freeverb_Stereo.ino Visa fil

@@ -0,0 +1,145 @@
// Freeverb - High quality reverb effect
//
// Teensy 3.5 or higher is required to run this example
//
// The SD card may connect to different pins, depending on the
// hardware you are using. Uncomment or configure the SD card
// pins to match your hardware.
//
// Data files to put on your SD card can be downloaded here:
// http://www.pjrc.com/teensy/td_libs_AudioDataFiles.html
//
// This example code is in the public domain.

#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <SerialFlash.h>

// GUItool: begin automatically generated code
AudioPlaySdWav playSdWav1; //xy=163,135
AudioMixer4 mixer1; //xy=332,167
AudioEffectFreeverbStereo freeverbs1; //xy=490,92
AudioMixer4 mixer3; //xy=653,231
AudioMixer4 mixer2; //xy=677,152
AudioOutputI2S i2s1; //xy=815,198
AudioConnection patchCord1(playSdWav1, 0, mixer1, 0);
AudioConnection patchCord2(playSdWav1, 1, mixer1, 1);
AudioConnection patchCord3(mixer1, 0, mixer2, 1);
AudioConnection patchCord4(mixer1, freeverbs1);
AudioConnection patchCord5(mixer1, 0, mixer3, 1);
AudioConnection patchCord6(freeverbs1, 0, mixer2, 0);
AudioConnection patchCord7(freeverbs1, 1, mixer3, 0);
AudioConnection patchCord8(mixer3, 0, i2s1, 1);
AudioConnection patchCord9(mixer2, 0, i2s1, 0);
AudioControlSGTL5000 sgtl5000_1; //xy=236,248
// GUItool: end automatically generated code


// Use these with the Teensy Audio Shield
#define SDCARD_CS_PIN 10
#define SDCARD_MOSI_PIN 7
#define SDCARD_SCK_PIN 14

// Use these with the Teensy 3.5 & 3.6 SD card
//#define SDCARD_CS_PIN BUILTIN_SDCARD
//#define SDCARD_MOSI_PIN 11 // not actually used
//#define SDCARD_SCK_PIN 13 // not actually used

// Use these for the SD+Wiz820 or other adaptors
//#define SDCARD_CS_PIN 4
//#define SDCARD_MOSI_PIN 11
//#define SDCARD_SCK_PIN 13

void setup() {
Serial.begin(9600);

// Audio connections require memory to work. For more
// detailed information, see the MemoryAndCpuUsage example
AudioMemory(10);

// Comment these out if not using the audio adaptor board.
// This may wait forever if the SDA & SCL pins lack
// pullup resistors
sgtl5000_1.enable();
sgtl5000_1.volume(0.5);

SPI.setMOSI(SDCARD_MOSI_PIN);
SPI.setSCK(SDCARD_SCK_PIN);
if (!(SD.begin(SDCARD_CS_PIN))) {
// stop here, but print a message repetitively
while (1) {
Serial.println("Unable to access the SD card");
delay(500);
}
}
mixer1.gain(0, 0.5);
mixer1.gain(1, 0.5);
mixer2.gain(0, 0.9); // hear 90% "wet"
mixer2.gain(1, 0.1); // and 10% "dry"
mixer3.gain(0, 0.9);
mixer3.gain(1, 0.1);
}

void playFile(const char *filename)
{
Serial.print("Playing file: ");
Serial.println(filename);

// Start playing the file. This sketch continues to
// run while the file plays.
playSdWav1.play(filename);

// A brief delay for the library read WAV info
delay(5);

elapsedMillis msec;

// Simply wait for the file to finish playing.
while (playSdWav1.isPlaying()) {

// while the music plays, adjust parameters and print info
if (msec > 250) {
msec = 0;
float knob_A1 = 0.9;
float knob_A2 = 0.5;
float knob_A3 = 0.5;
// Uncomment these lines to adjust parameters with analog inputs
//knob_A1 = (float)analogRead(A1) / 1023.0;
//knob_A2 = (float)analogRead(A2) / 1023.0;
//knob_A3 = (float)analogRead(A3) / 1023.0;

mixer2.gain(0, knob_A1);
mixer2.gain(1, 1.0 - knob_A1);
mixer3.gain(0, knob_A1);
mixer3.gain(1, 1.0 - knob_A1);
freeverbs1.roomsize(knob_A2);
freeverbs1.damping(knob_A3);
Serial.print("Reverb: mix=");
Serial.print(knob_A1 * 100.0);
Serial.print("%, roomsize=");
Serial.print(knob_A2 * 100.0);
Serial.print("%, damping=");
Serial.print(knob_A3 * 100.0);
Serial.print("%, CPU Usage=");
Serial.print(freeverbs1.processorUsage());
Serial.println("%");
}
}
}


void loop() {
playFile("SDTEST1.WAV"); // filenames are always uppercase 8.3 format
delay(500);
playFile("SDTEST2.WAV");
delay(500);
playFile("SDTEST3.WAV");
delay(500);
playFile("SDTEST4.WAV");
delay(1500);
}


+ 88
- 0
gui/index.html Visa fil

@@ -384,6 +384,8 @@ span.mainfunction {color: #993300; font-weight: bolder}
{"type":"AudioEffectChorus","data":{"defaults":{"name":{"value":"new"}},"shortName":"chorus","inputs":1,"outputs":1,"category":"effect-function","color":"#E6E0F8","icon":"arrow-in.png"}},
{"type":"AudioEffectFlange","data":{"defaults":{"name":{"value":"new"}},"shortName":"flange","inputs":1,"outputs":1,"category":"effect-function","color":"#E6E0F8","icon":"arrow-in.png"}},
{"type":"AudioEffectReverb","data":{"defaults":{"name":{"value":"new"}},"shortName":"reverb","inputs":1,"outputs":1,"category":"effect-function","color":"#E6E0F8","icon":"arrow-in.png"}},
{"type":"AudioEffectFreeverb","data":{"defaults":{"name":{"value":"new"}},"shortName":"freeverb","inputs":1,"outputs":1,"category":"effect-function","color":"#E6E0F8","icon":"arrow-in.png"}},
{"type":"AudioEffectFreeverbStereo","data":{"defaults":{"name":{"value":"new"}},"shortName":"freeverbs","inputs":1,"outputs":2,"category":"effect-function","color":"#E6E0F8","icon":"arrow-in.png"}},
{"type":"AudioEffectEnvelope","data":{"defaults":{"name":{"value":"new"}},"shortName":"envelope","inputs":1,"outputs":1,"category":"effect-function","color":"#E6E0F8","icon":"arrow-in.png"}},
{"type":"AudioEffectMultiply","data":{"defaults":{"name":{"value":"new"}},"shortName":"multiply","inputs":2,"outputs":1,"category":"effect-function","color":"#E6E0F8","icon":"arrow-in.png"}},
{"type":"AudioEffectDelay","data":{"defaults":{"name":{"value":"new"}},"shortName":"delay","inputs":1,"outputs":8,"category":"effect-function","color":"#E6E0F8","icon":"arrow-in.png"}},
@@ -2407,6 +2409,92 @@ double s_freq = .0625;</p>
</div>
</script>

<script type="text/x-red" data-help-name="AudioEffectFreeverb">
<h3>Summary</h3>
<div class=tooltipinfo>
<p>High quality Reverb effect, based on Freeverb by Jezar at Dreampoint.
</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>roomsize</span>(amount);</p>
<p class=desc>Sets the amount of reverberant echo or apparent room
size, from 0 (smallest) to 1.0 (largest);
</p>
<p class=func><span class=keyword>damping</span>(amount);</p>
<p class=desc>Sets the damping factor, from 0 to 1.0. More damping
causes higher frequency echo to decay, creating a softer sound,
similar to a large room filled with people or materials which
absorb some sound as it travels between reflecting surfaces.
Lower damping simulates a harsher reverberant field.
</p>

<h3>Examples</h3>
<p class=exam>File &gt; Examples &gt; Audio &gt; Effects &gt; Freeverb
</p>
<h3>Notes</h3>
<p>Freeverb mono consumes about 21% of the CPU time on Teensy 3.2 and
requires about 22K of RAM.</p>
</script>
<script type="text/x-red" data-template-name="AudioEffectFreeverb">
<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/x-red" data-help-name="AudioEffectFreeverbStereo">
<h3>Summary</h3>
<div class=tooltipinfo>
<p>High quality stereo Reverb effect, based on Freeverb by Jezar at Dreampoint.
</p>
<p>Teensy 3.5 or 3.6 required to run stereo version.</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>Left Output</td></tr>
<tr class="odd"><td align="center">Out 1</td><td>Right Output</td></tr>
</table>
<h3>Functions</h3>
<p class=func><span class=keyword>roomsize</span>(amount);</p>
<p class=desc>Sets the amount of reverberant echo or apparent room
size, from 0 (smallest) to 1.0 (largest);
</p>
<p class=func><span class=keyword>damping</span>(amount);</p>
<p class=desc>Sets the damping factor, from 0 to 1.0. More damping
causes higher frequency echo to decay, creating a softer sound,
similar to a large room filled with people or materials which
absorb some sound as it travels between reflecting surfaces.
Lower damping simulates a harsher reverberant field.
</p>

<h3>Examples</h3>
<p class=exam>File &gt; Examples &gt; Audio &gt; Effects &gt; Freeverb_Stereo
</p>
<h3>Notes</h3>
<p>Freeverb mono consumes about 18% of the CPU time on Teensy 3.6 and
requires about 45K of RAM.</p>
<p>Teensy 3.2 does not have enough RAM to
run this effect while playing WAV file and implementing USB Serial.</p>
</script>
<script type="text/x-red" data-template-name="AudioEffectFreeverbStereo">
<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/x-red" data-help-name="AudioEffectEnvelope">
<h3>Summary</h3>
<div class=tooltipinfo>

Laddar…
Avbryt
Spara