diff --git a/ResonantFilter.h b/ResonantFilter.h index 1f0fb2d00..6a0b7d375 100644 --- a/ResonantFilter.h +++ b/ResonantFilter.h @@ -69,7 +69,7 @@ fixed point version of the filter enum filter_types { LOWPASS, BANDPASS, HIGHPASS, NOTCH }; -/** A generic resonant filter for audio signals. +/** A generic resonant filter for audio signals TEST TEST. */ template class ResonantFilter diff --git a/extras/doc/html/01_8_basics_2_vibrato_2_vibrato_8ino-example.html b/extras/doc/html/01_8_basics_2_vibrato_2_vibrato_8ino-example.html deleted file mode 100644 index af8e51df6..000000000 --- a/extras/doc/html/01_8_basics_2_vibrato_2_vibrato_8ino-example.html +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - -Mozzi: 01.Basics/Vibrato/Vibrato.ino - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
01.Basics/Vibrato/Vibrato.ino
-
-
-

This is an example using Oscil::phMod to produce vibrato using phase modulation.

-
/* Example playing a sinewave with vibrato,
-
using Mozzi sonification library.
-
-
Demonstrates simple FM using phase modulation.
-
-
Circuit: Audio output on digital pin 9 on a Uno or similar, or
-
DAC/A14 on Teensy 3.1, or
-
check the README or http://sensorium.github.io/Mozzi/
-
-
Mozzi documentation/API
-
https://sensorium.github.io/Mozzi/doc/html/index.html
-
-
Mozzi help/discussion/announcements:
-
https://groups.google.com/forum/#!forum/mozzi-users
-
-
Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
-
Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
*/
-
-
#define MOZZI_CONTROL_RATE 64 // Hz, powers of 2 are most reliable
-
#include <Mozzi.h>
-
#include <Oscil.h>
-
#include <tables/cos2048_int8.h> // table for Oscils to play
-
#include <mozzi_midi.h> // for mtof
-
//#include <mozzi_fixmath.h>
-
#include <FixMath.h> // Fixed point arithmetics
-
-
Oscil<COS2048_NUM_CELLS, MOZZI_AUDIO_RATE> aCos(COS2048_DATA);
-
Oscil<COS2048_NUM_CELLS, MOZZI_AUDIO_RATE> aVibrato(COS2048_DATA);
-
-
//const byte intensity = 255;
-
const UFix<0,8> intensity = 0.5; // amplitude of the phase modulation
-
// 0.5 leads to a modulation of half the
-
// wavetable
-
-
void setup(){
-
startMozzi();
-
aCos.setFreq(mtof(84.f));
-
aVibrato.setFreq(15.f);
-
}
-
-
-
void updateControl(){
-
}
-
-
AudioOutput updateAudio(){
-
//Q15n16 vibrato = (Q15n16) intensity * aVibrato.next();
-
auto vibrato = intensity * toSFraction(aVibrato.next()); // Oscils in Mozzi are 8bits: 7bits of signal plus one bit of sign, so what they fit into a SFixMath<0,7> which is a signed fixMath type with 7 bits of value.
-
return MonoOutput::from8Bit(aCos.phMod(vibrato)); // phase modulation to modulate frequency
-
}
-
-
void loop(){
-
audioHook();
-
}
-
-
- - - diff --git a/extras/doc/html/02_8_control_2_control__echo__theremin_2_control__echo__theremin_8ino-example.html b/extras/doc/html/02_8_control_2_control__echo__theremin_2_control__echo__theremin_8ino-example.html deleted file mode 100644 index 5b3e73fa2..000000000 --- a/extras/doc/html/02_8_control_2_control__echo__theremin_2_control__echo__theremin_8ino-example.html +++ /dev/null @@ -1,190 +0,0 @@ - - - - - - - -Mozzi: 02.Control/Control_Echo_Theremin/Control_Echo_Theremin.ino - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
02.Control/Control_Echo_Theremin/Control_Echo_Theremin.ino
-
-
-

This is an example of how to use the ControlDelay class.

-
/* Example of a simple light-sensing theremin-like
-
instrument with long echoes,
-
using Mozzi sonification library.
-
-
Demonstrates ControlDelay() for echoing control values,
-
and smoothing an analog input from a sensor
-
signal with RollingAverage().
-
-
The circuit:
-
-
Audio output on digital pin 9 on a Uno or similar, or
-
DAC/A14 on Teensy 3.1, or
-
check the README or http://sensorium.github.io/Mozzi/
-
-
Light dependent resistor (LDR) and 5.1k resistor on analog pin 1:
-
LDR from analog pin to +5V (3.3V on Teensy 3.1)
-
5.1k resistor from analog pin to ground
-
-
Mozzi documentation/API
-
https://sensorium.github.io/Mozzi/doc/html/index.html
-
-
Mozzi help/discussion/announcements:
-
https://groups.google.com/forum/#!forum/mozzi-users
-
-
Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
-
Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
*/
-
-
#define MOZZI_CONTROL_RATE 64
-
#include <Mozzi.h>
-
#include <Oscil.h> // oscillator template
-
#include <tables/sin2048_int8.h> // sine table for oscillator
-
#include <RollingAverage.h>
-
#include <ControlDelay.h>
-
-
#define INPUT_PIN 0 // analog control input
-
-
unsigned int echo_cells_1 = 32;
-
unsigned int echo_cells_2 = 60;
-
unsigned int echo_cells_3 = 127;
-
-
ControlDelay <128, int> kDelay; // 2seconds
-
-
// oscils to compare bumpy to averaged control input
-
Oscil <SIN2048_NUM_CELLS, MOZZI_AUDIO_RATE> aSin0(SIN2048_DATA);
-
Oscil <SIN2048_NUM_CELLS, MOZZI_AUDIO_RATE> aSin1(SIN2048_DATA);
-
Oscil <SIN2048_NUM_CELLS, MOZZI_AUDIO_RATE> aSin2(SIN2048_DATA);
-
Oscil <SIN2048_NUM_CELLS, MOZZI_AUDIO_RATE> aSin3(SIN2048_DATA);
-
-
// use: RollingAverage <number_type, how_many_to_average> myThing
-
RollingAverage <int, 32> kAverage; // how_many_to_average has to be power of 2
-
int averaged;
-
-
void setup(){
-
kDelay.set(echo_cells_1);
-
startMozzi();
-
}
-
-
-
void updateControl(){
-
int bumpy_input = mozziAnalogRead<10>(INPUT_PIN); // request reading at 10-bit resolution, i.e. 0-1023
-
averaged = kAverage.next(bumpy_input);
-
aSin0.setFreq(averaged);
-
aSin1.setFreq(kDelay.next(averaged));
-
aSin2.setFreq(kDelay.read(echo_cells_2));
-
aSin3.setFreq(kDelay.read(echo_cells_3));
-
}
-
-
-
AudioOutput updateAudio(){
-
return MonoOutput::fromAlmostNBit(12,
-
3*((int)aSin0.next()+aSin1.next()+(aSin2.next()>>1)
-
+(aSin3.next()>>2))
-
);
-
}
-
-
-
void loop(){
-
audioHook();
-
}
-
-
- - - diff --git a/extras/doc/html/02_8_control_2_control__tremelo_2_control__tremelo_8ino-example.html b/extras/doc/html/02_8_control_2_control__tremelo_2_control__tremelo_8ino-example.html deleted file mode 100644 index be56b50df..000000000 --- a/extras/doc/html/02_8_control_2_control__tremelo_2_control__tremelo_8ino-example.html +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - -Mozzi: 02.Control/Control_Tremelo/Control_Tremelo.ino - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
02.Control/Control_Tremelo/Control_Tremelo.ino
-
-
-

This example demonstrates the Line class.

-
/* Example of amplitude modulation (as tremelo),
-
using Mozzi sonification library.
-
-
Demonstrates audio and control rate updates.
-
The tremelo oscillator is updated at control rate,
-
and a Line is used to interpolate the control updates
-
at audio rate, to remove zipper noise.
-
A bit contrived and probably less efficient than just
-
using an audio-rate tremelo oscillator, but hey it's a demo!
-
-
Circuit: Audio output on digital pin 9 on a Uno or similar, or
-
DAC/A14 on Teensy 3.1, or
-
check the README or http://sensorium.github.io/Mozzi/
-
-
Mozzi documentation/API
-
https://sensorium.github.io/Mozzi/doc/html/index.html
-
-
Mozzi help/discussion/announcements:
-
https://groups.google.com/forum/#!forum/mozzi-users
-
-
Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
-
Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
*/
-
-
#define MOZZI_CONTROL_RATE 64 // Hz, powers of 2 are most reliable
-
#include <Mozzi.h>
-
#include <Oscil.h>
-
#include <tables/triangle_valve_2048_int8.h>
-
#include <tables/sin2048_int8.h>
-
#include <Line.h>
-
#include <mozzi_midi.h>
-
-
// audio oscillator
-
Oscil<TRIANGLE_VALVE_2048_NUM_CELLS, MOZZI_AUDIO_RATE> aSig(TRIANGLE_VALVE_2048_DATA);
-
// control oscillator for tremelo
-
Oscil<SIN2048_NUM_CELLS, MOZZI_CONTROL_RATE> kTremelo(SIN2048_DATA);
-
// a line to interpolate control tremolo at audio rate
-
Line <unsigned int> aGain;
-
-
-
void setup(){
-
aSig.setFreq(mtof(65.f));
-
kTremelo.setFreq(5.5f);
-
startMozzi();
-
}
-
-
-
void updateControl(){
-
// gain shifted up to give enough range for line's internal steps
-
unsigned int gain = (128u+kTremelo.next())<<8;
-
aGain.set(gain, MOZZI_AUDIO_RATE / MOZZI_CONTROL_RATE); // divide of literals should get optimised away
-
}
-
-
-
AudioOutput updateAudio(){
-
// cast to long before multiply to give room for intermediate result,
-
// and also before shift,
-
// to give consistent results for both 8 and 32 bit processors.
-
return MonoOutput::fromNBit(24, (int32_t) aSig.next() * aGain.next()); // shifted back to audio range after multiply
-
}
-
-
-
void loop(){
-
audioHook();
-
}
-
-
- - - diff --git a/extras/doc/html/02_8_control_2_event_delay_2_event_delay_8ino-example.html b/extras/doc/html/02_8_control_2_event_delay_2_event_delay_8ino-example.html deleted file mode 100644 index ade953356..000000000 --- a/extras/doc/html/02_8_control_2_event_delay_2_event_delay_8ino-example.html +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - -Mozzi: 02.Control/EventDelay/EventDelay.ino - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
02.Control/EventDelay/EventDelay.ino
-
-
-

This example shows how to use the EventDelay class.

-
/* Example of a sound being toggled on an off,
-
using Mozzi sonification library.
-
-
Demonstrates scheduling with EventDelay.
-
EventDelay is a way to make non-blocking
-
time delays for events. Use this instead of
-
the Arduino delay() function, which doesn't
-
work with Mozzi.
-
-
Circuit: Audio output on digital pin 9 on a Uno or similar, or
-
DAC/A14 on Teensy 3.1, or
-
check the README or http://sensorium.github.io/Mozzi/
-
-
Mozzi documentation/API
-
https://sensorium.github.io/Mozzi/doc/html/index.html
-
-
Mozzi help/discussion/announcements:
-
https://groups.google.com/forum/#!forum/mozzi-users
-
-
Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
-
Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
*/
-
-
#define MOZZI_CONTROL_RATE 64
-
#include <Mozzi.h>
-
#include <Oscil.h> // oscillator template
-
#include <tables/sin8192_int8.h> // sine table for oscillator
-
#include <EventDelay.h>
-
-
// use: Oscil <table_size, update_rate> oscilName (wavetable), look in .h file of table #included above
-
Oscil <SIN8192_NUM_CELLS, MOZZI_AUDIO_RATE> aSin(SIN8192_DATA);
-
-
// for scheduling audio gain changes
-
EventDelay kGainChangeDelay;
-
-
char gain = 1;
-
-
void setup(){
-
startMozzi();
-
aSin.setFreq(330); // set the frequency
-
kGainChangeDelay.set(1000); // 1 second countdown, within resolution of MOZZI_CONTROL_RATE
-
}
-
-
-
void updateControl(){
-
if(kGainChangeDelay.ready()){
-
gain = 1-gain; // flip 0/1
-
kGainChangeDelay.start();
-
}
-
}
-
-
-
AudioOutput updateAudio(){
-
return AudioOutput::from8Bit(aSin.next()*gain);
-
}
-
-
-
void loop(){
-
audioHook();
-
}
-
-
- - - diff --git a/extras/doc/html/02_8_control_2_metronome__sample_huffman_2_metronome__sample_huffman_8ino-example.html b/extras/doc/html/02_8_control_2_metronome__sample_huffman_2_metronome__sample_huffman_8ino-example.html deleted file mode 100644 index ea330b2d5..000000000 --- a/extras/doc/html/02_8_control_2_metronome__sample_huffman_2_metronome__sample_huffman_8ino-example.html +++ /dev/null @@ -1,202 +0,0 @@ - - - - - - - -Mozzi: 02.Control/Metronome_SampleHuffman/Metronome_SampleHuffman.ino - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
02.Control/Metronome_SampleHuffman/Metronome_SampleHuffman.ino
-
-
-

This example shows how to use the Metronome class.

-
/* Example using Metronome to playing samples encoded with Huffman compression.
-
-
Demonstrates Metronome start, stop and ready, and the the SampleHuffman class.
-
-
Circuit:
-
Audio output on digital pin 9 on a Uno or similar, or
-
DAC/A14 on Teensy 3.1, or
-
check the README or http://sensorium.github.io/Mozzi/
-
-
Mozzi documentation/API
-
https://sensorium.github.io/Mozzi/doc/html/index.html
-
-
Mozzi help/discussion/announcements:
-
https://groups.google.com/forum/#!forum/mozzi-users
-
-
Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
-
Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
*/
-
-
#include <Mozzi.h>
-
#include <Metronome.h>
-
#include <SampleHuffman.h>
-
#include <mozzi_rand.h>
-
-
#include <samples/thumbpiano_huffman/thumbpiano0.h>
-
#include <samples/thumbpiano_huffman/thumbpiano1.h>
-
#include <samples/thumbpiano_huffman/thumbpiano2.h>
-
#include <samples/thumbpiano_huffman/thumbpiano3.h>
-
#include <samples/thumbpiano_huffman/thumbpiano4.h>
-
-
SampleHuffman thumb0(THUMB0_SOUNDDATA,THUMB0_HUFFMAN,THUMB0_SOUNDDATA_BITS);
-
SampleHuffman thumb1(THUMB1_SOUNDDATA,THUMB1_HUFFMAN,THUMB1_SOUNDDATA_BITS);
-
SampleHuffman thumb2(THUMB2_SOUNDDATA,THUMB2_HUFFMAN,THUMB2_SOUNDDATA_BITS);
-
SampleHuffman thumb3(THUMB3_SOUNDDATA,THUMB3_HUFFMAN,THUMB3_SOUNDDATA_BITS);
-
SampleHuffman thumb4(THUMB4_SOUNDDATA,THUMB4_HUFFMAN,THUMB4_SOUNDDATA_BITS);
-
-
const char NUM_SAMPLES = 5;
-
-
Metronome kMetro(800); // enough delay so samples don't overlap, because the load would be too much
-
-
void setup() {
-
startMozzi();
-
}
-
-
-
-
void updateControl(){
-
static unsigned int counter;
-
counter++;
-
if(counter==177)kMetro.stop();
-
if(counter==203){kMetro.start();counter = 0;}
-
if(kMetro.ready()){
-
switch(rand(NUM_SAMPLES)){
-
case 0:
-
thumb0.start();
-
break;
-
-
case 1:
-
thumb1.start();
-
break;
-
-
case 2:
-
thumb2.start();
-
break;
-
-
case 3:
-
thumb3.start();
-
break;
-
-
case 4:
-
thumb4.start();
-
break;
-
}
-
}
-
}
-
-
-
AudioOutput updateAudio(){
-
int asig = (int)
-
thumb0.next() +
-
thumb1.next() +
-
thumb2.next() +
-
thumb3.next() +
-
thumb4.next();
-
// Note: Samples don't overlap, here, therefore this the sum is still only 8 bits range
-
return MonoOutput::from8Bit(asig);
-
}
-
-
-
void loop() {
-
audioHook();
-
}
-
-
- - - diff --git a/extras/doc/html/03_8_sensors_2_knob__l_d_r_x2__wave_packet_2_knob__l_d_r_x2__wave_packet_8ino-example.html b/extras/doc/html/03_8_sensors_2_knob__l_d_r_x2__wave_packet_2_knob__l_d_r_x2__wave_packet_8ino-example.html deleted file mode 100644 index 96cde17b2..000000000 --- a/extras/doc/html/03_8_sensors_2_knob__l_d_r_x2__wave_packet_2_knob__l_d_r_x2__wave_packet_8ino-example.html +++ /dev/null @@ -1,227 +0,0 @@ - - - - - - - -Mozzi: 03.Sensors/Knob_LDR_x2_WavePacket/Knob_LDR_x2_WavePacket.ino - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
03.Sensors/Knob_LDR_x2_WavePacket/Knob_LDR_x2_WavePacket.ino
-
-
-

This example demonstrates the AutoMap class.

-
/*
-
Example of Wavepacket synthesis, using analog
-
inputs to change the fundamental frequency,
-
bandwidth and centre frequency,
-
using Mozzi sonification library.
-
-
Demonstrates WavePacket, mozziAnalogRead(), and smoothing
-
control signals with RollingAverage.
-
Also demonstrates AutoMap, which maps unpredictable inputs to a set range.
-
-
This example goes with a tutorial on the Mozzi site:
-
http://sensorium.github.io/Mozzi/learn/introductory-tutorial/
-
-
The circuit:
-
Audio output on digital pin 9 on a Uno or similar, or
-
DAC/A14 on Teensy 3.1, or
-
check the README or http://sensorium.github.io/Mozzi/
-
-
Potentiometer connected to analog pin 0.
-
Center pin of the potentiometer goes to the analog pin.
-
Side pins of the potentiometer go to +5V and ground
-
-
Light dependent resistor (LDR) and 5.1k resistor on analog pin 1:
-
LDR from analog pin to +5V (3.3V on Teensy 3.1)
-
5.1k resistor from analog pin to ground
-
-
Light dependent resistor (LDR) and 5.1k resistor on analog pin 2:
-
LDR from analog pin to +5V (3.3V on Teensy 3.1)
-
5.1k resistor from analog pin to ground
-
-
Mozzi documentation/API
-
https://sensorium.github.io/Mozzi/doc/html/index.html
-
-
Mozzi help/discussion/announcements:
-
https://groups.google.com/forum/#!forum/mozzi-users
-
-
Copyright 2013-2024 Tim Barrass and the Mozzi Team
-
-
Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
*/
-
-
#define MOZZI_ANALOG_READ_RESOLUTION 10 // code below assumes readings to be in the classic 10-bit (0-1023) range
-
#include <Mozzi.h>
-
#include <WavePacket.h>
-
#include <RollingAverage.h>
-
#include <AutoMap.h>
-
#include <IntMap.h>
-
-
const int KNOB_PIN = 0; // set the input for the knob to analog pin 0
-
const int LDR1_PIN=1; // set the analog input for fm_intensity to pin 1
-
const int LDR2_PIN=2; // set the analog input for mod rate to pin 2
-
-
// min and max values of synth parameters to map AutoRanged analog inputs to
-
const int MIN_F = 20;
-
const int MAX_F = 150;
-
-
const int MIN_BW = 20;
-
const int MAX_BW = 600;
-
-
const int MIN_CF = 60;
-
const int MAX_CF = 600;
-
-
-
// for smoothing the control signals
-
// use: RollingAverage <number_type, how_many_to_average> myThing
-
RollingAverage <int, 16> kAverageF;
-
RollingAverage <int, 16> kAverageBw;
-
RollingAverage <int, 16> kAverageCf;
-
-
// Intmap is a pre-calculated faster version of Arduino's map, OK for pots
-
IntMap kMapF(0,1023,MIN_F,MAX_F);
-
// AutoMap adapts to range of input as it arrives, useful for LDR's
-
AutoMap kMapBw(0,1023,MIN_BW,MAX_BW);
-
AutoMap kMapCf(0,1023,MIN_CF,MAX_CF);
-
-
WavePacket <DOUBLE> wavey; // DOUBLE selects 2 overlapping streams
-
-
void setup(){
-
//Serial.begin(9600); // for Teensy 3.1, beware printout can cause glitches
-
Serial.begin(115200);
-
// wait before starting Mozzi to receive analog reads, so AutoRange will not get 0
-
delay(200);
-
startMozzi();
-
}
-
-
-
void updateControl(){
-
int fundamental = mozziAnalogRead(KNOB_PIN)+1;
-
fundamental = kMapF(fundamental);
-
Serial.print("f=");
-
Serial.print(fundamental);
-
-
int bandwidth = mozziAnalogRead(LDR1_PIN);
-
bandwidth = kMapBw(bandwidth);
-
Serial.print("\t bw=");
-
Serial.print(bandwidth);
-
-
int centre_freq = mozziAnalogRead(LDR2_PIN);
-
centre_freq = kMapCf(centre_freq);
-
Serial.print("\t cf=");
-
Serial.print(centre_freq);
-
-
Serial.println();
-
-
wavey.set(fundamental, bandwidth, centre_freq);
-
}
-
-
-
-
AudioOutput updateAudio(){
-
return MonoOutput::from16Bit(wavey.next());
-
}
-
-
-
-
void loop(){
-
audioHook(); // required here
-
}
-
-
- - - diff --git a/extras/doc/html/05_8_control__filters_2_d_c_filter_2_d_c_filter_8ino-example.html b/extras/doc/html/05_8_control__filters_2_d_c_filter_2_d_c_filter_8ino-example.html deleted file mode 100644 index 8aeecccd6..000000000 --- a/extras/doc/html/05_8_control__filters_2_d_c_filter_2_d_c_filter_8ino-example.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - -Mozzi: 05.Control_Filters/DCFilter/DCFilter.ino - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
05.Control_Filters/DCFilter/DCFilter.ino
-
-
-

This example demonstrates the DCFilter class.

-
-
- - - diff --git a/extras/doc/html/05_8_control__filters_2_smooth_2_smooth_8ino-example.html b/extras/doc/html/05_8_control__filters_2_smooth_2_smooth_8ino-example.html deleted file mode 100644 index 9f2142a27..000000000 --- a/extras/doc/html/05_8_control__filters_2_smooth_2_smooth_8ino-example.html +++ /dev/null @@ -1,194 +0,0 @@ - - - - - - - -Mozzi: 05.Control_Filters/Smooth/Smooth.ino - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
05.Control_Filters/Smooth/Smooth.ino
-
-
-

This example demonstrates the Smooth class.

-
/* Example of a sound changing volume with and without
-
smoothing of the control signal to remove obvious clicks,
-
using Mozzi sonification library.
-
-
Demonstrates using Smooth to filter a control signal at audio rate,
-
EventDelay to schedule changes and rand() to choose random volumes.
-
-
Circuit: Audio output on digital pin 9 on a Uno or similar, or
-
DAC/A14 on Teensy 3.1, or
-
your board check the README or http://sensorium.github.io/Mozzi/
-
-
Mozzi documentation/API
-
https://sensorium.github.io/Mozzi/doc/html/index.html
-
-
Mozzi help/discussion/announcements:
-
https://groups.google.com/forum/#!forum/mozzi-users
-
-
Copyright 2013-2024 Tim Barrass and the Mozzi Team
-
-
Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
*/
-
-
#define MOZZI_CONTROL_RATE 128
-
#include <Mozzi.h>
-
#include <Oscil.h> // oscillator template
-
#include <tables/sin2048_int8.h> // sine table for oscillator
-
#include <EventDelay.h>
-
#include <Smooth.h>
-
#include <mozzi_rand.h>
-
-
Oscil <SIN2048_NUM_CELLS, MOZZI_AUDIO_RATE> aSin(SIN2048_DATA);
-
-
// for scheduling audio gain changes
-
EventDelay kGainChangeDelay;
-
const unsigned int gainChangeMsec = 200;
-
-
// for scheduling turning smoothing on and off
-
EventDelay kSmoothOnOff;
-
const unsigned int smoothOnOffMsec = 2000;
-
-
float smoothness = 0.9975f;
-
Smooth <long> aSmoothGain(smoothness);
-
boolean smoothIsOn=true;
-
long target_gain = 0;
-
-
-
void setup(){
-
aSin.setFreq(330); // set the frequency
-
kGainChangeDelay.set(gainChangeMsec);
-
kSmoothOnOff.set(smoothOnOffMsec);
-
startMozzi();
-
}
-
-
-
void updateControl(){
-
// switch smoothing on and off to show the difference
-
if(kSmoothOnOff.ready()){
-
if (smoothIsOn) {
-
aSmoothGain.setSmoothness(0.f);
-
smoothIsOn = false;
-
}
-
else{
-
aSmoothGain.setSmoothness(smoothness);
-
smoothIsOn = true;
-
}
-
kSmoothOnOff.start();
-
}
-
-
// random volume changes
-
if(kGainChangeDelay.ready()){
-
target_gain = rand((byte) 255);
-
kGainChangeDelay.start();
-
}
-
-
}
-
-
-
AudioOutput updateAudio(){
-
return MonoOutput::from16Bit(aSmoothGain.next(target_gain) * aSin.next());
-
}
-
-
-
void loop(){
-
audioHook();
-
}
-
-
- - - diff --git a/extras/doc/html/05_8_control__filters_2_teensy__u_s_b__m_i_d_i_portamento_2_teensy__u_s_b__m_i_d_i_portamento_8ino-example.html b/extras/doc/html/05_8_control__filters_2_teensy__u_s_b__m_i_d_i_portamento_2_teensy__u_s_b__m_i_d_i_portamento_8ino-example.html deleted file mode 100644 index b04a45656..000000000 --- a/extras/doc/html/05_8_control__filters_2_teensy__u_s_b__m_i_d_i_portamento_2_teensy__u_s_b__m_i_d_i_portamento_8ino-example.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - -Mozzi: 05.Control_Filters/Teensy_USB_MIDI_portamento/Teensy_USB_MIDI_portamento.ino - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
05.Control_Filters/Teensy_USB_MIDI_portamento/Teensy_USB_MIDI_portamento.ino
-
-
-

This example demonstrates the Portamento class.

-
-
- - - diff --git a/extras/doc/html/05_8_control__filters_2_thermistor__over_sample_2_thermistor__over_sample_8ino-example.html b/extras/doc/html/05_8_control__filters_2_thermistor__over_sample_2_thermistor__over_sample_8ino-example.html deleted file mode 100644 index 9fbc425bf..000000000 --- a/extras/doc/html/05_8_control__filters_2_thermistor__over_sample_2_thermistor__over_sample_8ino-example.html +++ /dev/null @@ -1,229 +0,0 @@ - - - - - - - -Mozzi: 05.Control_Filters/Thermistor_OverSample/Thermistor_OverSample.ino - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
05.Control_Filters/Thermistor_OverSample/Thermistor_OverSample.ino
-
-
-

This is an example demonstrating the OverSample class.

-
-
/*
-
Example of oversampling analog input from a thermistor
-
for increased resolution. It's a basic attempt at a biofeedback
-
device used as an ineffective treatment for migraines. The idea
-
is that if you can focus on making your hands warm, increased blood
-
flow to the extremities is associated with a reduced stress response.
-
Anyway, the bleeps sweep up if the temperature increases, down for decrease,
-
and level for no change. The tremelo rate increases with the temperature.
-
Using Mozzi sonification library.
-
-
Demonstrates OverSample object.
-
-
The circuit:
-
Audio output on digital pin 9 on a Uno or similar, or
-
DAC/A14 on Teensy 3.1, or
-
check the README or http://sensorium.github.io/Mozzi/
-
-
Temperature dependent resistor (Thermistor) and 5.1k resistor on analog pin 1:
-
Thermistor from analog pin to +5V (3.3V on Teensy 3.1)
-
5.1k resistor from analog pin to ground
-
-
Mozzi documentation/API
-
https://sensorium.github.io/Mozzi/doc/html/index.html
-
-
Mozzi help/discussion/announcements:
-
https://groups.google.com/forum/#!forum/mozzi-users
-
-
Copyright 2013-2024 Tim Barrass and the Mozzi Team
-
-
Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
*/
-
-
#include <Mozzi.h>
-
#include <Oscil.h> // oscillator template
-
#include <Line.h>
-
#include <tables/sin2048_int8.h> // SINe table for oscillator
-
#include <OverSample.h>
-
#include <ControlDelay.h>
-
-
// use: Oscil <table_size, update_rate> oscilName (wavetable)
-
Oscil <SIN2048_NUM_CELLS, MOZZI_AUDIO_RATE> aSin(SIN2048_DATA);
-
Oscil <SIN2048_NUM_CELLS, MOZZI_AUDIO_RATE> aTremelo(SIN2048_DATA);
-
Oscil <SIN2048_NUM_CELLS, MOZZI_AUDIO_RATE> aEnvelope(SIN2048_DATA);
-
-
Line <float> freqLine;
-
-
OverSample <unsigned int, 3> overSampler; // will give 10+3=13 bits resolution, 0->8191, using 128 bytes
-
-
const byte INPUT_PIN = 1;
-
-
float ENVELOPE_DURATION = 1.f;
-
-
const byte LINE_LENGTH = (byte)((float)MOZZI_CONTROL_RATE*ENVELOPE_DURATION*0.5); // 0.5 seconds per line
-
-
// adjustments to get tremelo in useful range from oversampled temperature input
-
const int TREMOLO_OFFSET = 4000;
-
const float TREMOLO_SCALE = 0.002;
-
-
void setup(){
-
pinMode(INPUT_PIN,INPUT);
-
//Serial.begin(9600); // for Teensy 3.1, beware printout can cause glitches
-
Serial.begin(115200);
-
aEnvelope.setFreq(ENVELOPE_DURATION);
-
startMozzi();
-
}
-
-
-
void updateControl(){
-
float start_freq, end_freq;
-
static int counter, old_oversampled;
-
-
// read the variable resistor
-
int sensor_value = mozziAnalogRead<10>(INPUT_PIN); // value is 0-1023
-
-
// get the next oversampled sensor value
-
int oversampled = overSampler.next(sensor_value);
-
-
// modulate the amplitude of the sound in proportion to the magnitude of the oversampled sensor
-
float tremeloRate = TREMOLO_SCALE*(oversampled-TREMOLO_OFFSET);
-
tremeloRate = tremeloRate*tremeloRate*tremeloRate*tremeloRate*tremeloRate;
-
aTremelo.setFreq(tremeloRate);
-
-
// every half second
-
if (--counter<0){
-
-
if (oversampled>old_oversampled){ // high tweet up if temp rose
-
start_freq = 550.f;
-
end_freq = 660.f;
-
}else if(oversampled<old_oversampled){ // low tweet down if temp fell
-
start_freq = 330.f;
-
end_freq = 220.f;
-
} else { // flat beep if no change
-
start_freq = 440.f;
-
end_freq = 440.f;
-
}
-
old_oversampled = oversampled;
-
counter = LINE_LENGTH-1; // reset counter
-
-
// set the line to change the main frequency
-
freqLine.set(start_freq,end_freq,LINE_LENGTH);
-
-
// print out for debugging
-
Serial.print(oversampled);Serial.print("\t");Serial.print(start_freq);Serial.print("\t");Serial.println(end_freq);
-
}
-
-
// update the main frequency of the sound
-
aSin.setFreq(freqLine.next());
-
-
}
-
-
-
AudioOutput updateAudio(){
-
return MonoOutput::from16Bit((((int)aSin.next()*(128+aTremelo.next()))>>8)*aEnvelope.next());
-
}
-
-
-
void loop(){
-
audioHook(); // required here
-
}
-
-
- - - diff --git a/extras/doc/html/06_8_synthesis_2_non_alias__meta_oscil_2_non_alias__meta_oscil_8ino-example.html b/extras/doc/html/06_8_synthesis_2_non_alias__meta_oscil_2_non_alias__meta_oscil_8ino-example.html deleted file mode 100644 index 5d64d4891..000000000 --- a/extras/doc/html/06_8_synthesis_2_non_alias__meta_oscil_2_non_alias__meta_oscil_8ino-example.html +++ /dev/null @@ -1,230 +0,0 @@ - - - - - - - -Mozzi: 06.Synthesis/NonAlias_MetaOscil/NonAlias_MetaOscil.ino - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
06.Synthesis/NonAlias_MetaOscil/NonAlias_MetaOscil.ino
-
-
-

This example demonstrates the Meta_Oscil class.

-
/* Example using a MetaOscil to generate an alias free square wave on a sweep
-
using Mozzi sonification library.
-
-
Waveforms which are not only sines (Saw, square, triangle) are composed by a lot of harmonics which are at frequencies multiple of the fundamental frequency.
-
If the frequency of one of these harmonics is higher than half the sampling frequency (https://en.wikipedia.org/wiki/Nyquist_frequency) (MOZZI_AUDIO_RATE/2 here)
-
it will create "aliases" (https://en.wikipedia.org/wiki/Aliasing) which will sound out of tune are they not harmonically related to the fundamental.
-
The higher the pitch, the more harmonics are above the Nyquist limit and the more aliased will be present for a given waveform.
-
-
One way to avoid aliases is to use "band-limited" waveforms which have a limited sets of harmonics in order to avoid them to reach the Nyquist limit.
-
As these waveforms are band-limited they will sound less "crunchy" if they are used at frequencies lower than what they are meant to be because they
-
lack the high frequency contents.
-
-
In order to paliate that, a common technique is to "swap" wave tables on the fly in order to keep the frequency content up to the Nyquist frequency but
-
not above. This is the principal usage of MetaOscil.
-
-
MetaOscil can be used (after construction) as a proper Oscil but really is a bunch of oscillators with only one playing.
-
It will switch between different oscils seemlessly depending on the asked frequency. This allows to switch between oscillators with less
-
and less harmonics as the pitch goes up, in order to avoid aliases, which is demonstrated by this example.
-
-
The bandlimited tables are nammed according to the max frequency they can play without bringing aliases at a given frequency. For example:
-
square_max_90_at_16384_512_int8.h ensures that no aliases will be present up to 90Hz at 16384Hz sampling rate (the default for Arduino).
-
If your sampling rate is higher (say 32768 which is the default for most 32bits platforms) this table will be able to play up to
-
180=90*2Hz without aliases, as the Nyquist frequency is two times higher.
-
-
Circuit: Audio output on digital pin 9 on a Uno or similar, or
-
DAC/A14 on Teensy 3.1, or
-
check the README or http://sensorium.github.io/Mozzi/
-
-
Mozzi documentation/API
-
https://sensorium.github.io/Mozzi/doc/html/index.html
-
-
Mozzi help/discussion/announcements:
-
https://groups.google.com/forum/#!forum/mozzi-users
-
-
Copyright 2021-2024 Tom Combriat and the Mozzi Team
-
-
Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
*/
-
-
// use #define for MOZZI_CONTROL_RATE, not a constant
-
#define MOZZI_CONTROL_RATE 256 // Hz, powers of 2 are most reliable
-
#include <Mozzi.h>
-
#include <Oscil.h> // oscillator template
-
#include <MetaOscil.h>
-
-
// All the tables used for the MetaOscil need to be included
-
#include <tables/BandLimited_SQUARE/512/square_max_90_at_16384_512_int8.h> // band limited table that guarantee no alias up to a frequency of 90Hz at a sampling frequency of 16384 (or 180Hz at a sampling frequency of 32768Hz)
-
#include <tables/BandLimited_SQUARE/512/square_max_101_at_16384_512_int8.h> // band limited table that guarantee no alias up to a frequency of 101Hz at a sampling frequency of 16384
-
#include <tables/BandLimited_SQUARE/512/square_max_122_at_16384_512_int8.h> // band limited table that guarantee no alias up to a frequency of 122Hz at a sampling frequency of 16384
-
#include <tables/BandLimited_SQUARE/512/square_max_138_at_16384_512_int8.h> // band limited table that guarantee no alias up to a frequency of 138Hz at a sampling frequency of 16384
-
#include <tables/BandLimited_SQUARE/512/square_max_154_at_16384_512_int8.h> // band limited table that guarantee no alias up to a frequency of 154Hz at a sampling frequency of 16384
-
#include <tables/BandLimited_SQUARE/512/square_max_174_at_16384_512_int8.h> // band limited table that guarantee no alias up to a frequency of 174Hz at a sampling frequency of 16384
-
#include <tables/BandLimited_SQUARE/512/square_max_210_at_16384_512_int8.h> // band limited table that guarantee no alias up to a frequency of 210Hz at a sampling frequency of 16384
-
#include <tables/BandLimited_SQUARE/512/square_max_264_at_16384_512_int8.h> // band limited table that guarantee no alias up to a frequency of 264Hz at a sampling frequency of 16384
-
#include <tables/BandLimited_SQUARE/512/square_max_327_at_16384_512_int8.h> // band limited table that guarantee no alias up to a frequency of 327Hz at a sampling frequency of 16384
-
#include <tables/BandLimited_SQUARE/512/square_max_431_at_16384_512_int8.h> // band limited table that guarantee no alias up to a frequency of 431Hz at a sampling frequency of 16384
-
#include <tables/BandLimited_SQUARE/512/square_max_546_at_16384_512_int8.h> // band limited table that guarantee no alias up to a frequency of 546Hz at a sampling frequency of 16384
-
#include <tables/BandLimited_SQUARE/512/square_max_744_at_16384_512_int8.h> // band limited table that guarantee no alias up to a frequency of 744Hz at a sampling frequency of 16384
-
#include <tables/BandLimited_SQUARE/512/square_max_910_at_16384_512_int8.h> // band limited table that guarantee no alias up to a frequency of 910Hz at a sampling frequency of 16384
-
#include <tables/BandLimited_SQUARE/512/square_max_1170_at_16384_512_int8.h> // band limited table that guarantee no alias up to a frequency of 1170Hz at a sampling frequency of 16384
-
#include <tables/BandLimited_SQUARE/512/square_max_1638_at_16384_512_int8.h> // band limited table that guarantee no alias up to a frequency of 1638Hz at a sampling frequency of 16384
-
#include <tables/BandLimited_SQUARE/512/square_max_2730_at_16384_512_int8.h> // band limited table that guarantee no alias up to a frequency of 2730Hz at a sampling frequency of 16384
-
#include <tables/BandLimited_SQUARE/512/square_max_8192_at_16384_512_int8.h> // band limited table that guarantee no alias up to a frequency of 8192Hz at a sampling frequency of 16384 (this is basically a sine wave)
-
-
// The proper Oscillators that will be managed by the MetaOscil
-
// use: Oscil <table_size, update_rate> oscilName (wavetable), look in .h file of table #included above
-
Oscil <SQUARE_MAX_90_AT_16384_512_NUM_CELLS, MOZZI_AUDIO_RATE> aSq90(SQUARE_MAX_90_AT_16384_512_DATA);
-
Oscil <SQUARE_MAX_101_AT_16384_512_NUM_CELLS, MOZZI_AUDIO_RATE> aSq101(SQUARE_MAX_101_AT_16384_512_DATA);
-
Oscil <SQUARE_MAX_122_AT_16384_512_NUM_CELLS, MOZZI_AUDIO_RATE> aSq122(SQUARE_MAX_122_AT_16384_512_DATA);
-
Oscil <SQUARE_MAX_138_AT_16384_512_NUM_CELLS, MOZZI_AUDIO_RATE> aSq138(SQUARE_MAX_138_AT_16384_512_DATA);
-
Oscil <SQUARE_MAX_154_AT_16384_512_NUM_CELLS, MOZZI_AUDIO_RATE> aSq154(SQUARE_MAX_154_AT_16384_512_DATA);
-
Oscil <SQUARE_MAX_174_AT_16384_512_NUM_CELLS, MOZZI_AUDIO_RATE> aSq174(SQUARE_MAX_174_AT_16384_512_DATA);
-
Oscil <SQUARE_MAX_210_AT_16384_512_NUM_CELLS, MOZZI_AUDIO_RATE> aSq210(SQUARE_MAX_210_AT_16384_512_DATA);
-
Oscil <SQUARE_MAX_264_AT_16384_512_NUM_CELLS, MOZZI_AUDIO_RATE> aSq264(SQUARE_MAX_264_AT_16384_512_DATA);
-
Oscil <SQUARE_MAX_327_AT_16384_512_NUM_CELLS, MOZZI_AUDIO_RATE> aSq327(SQUARE_MAX_327_AT_16384_512_DATA);
-
Oscil <SQUARE_MAX_431_AT_16384_512_NUM_CELLS, MOZZI_AUDIO_RATE> aSq431(SQUARE_MAX_431_AT_16384_512_DATA);
-
Oscil <SQUARE_MAX_546_AT_16384_512_NUM_CELLS, MOZZI_AUDIO_RATE> aSq546(SQUARE_MAX_546_AT_16384_512_DATA);
-
Oscil <SQUARE_MAX_744_AT_16384_512_NUM_CELLS, MOZZI_AUDIO_RATE> aSq744(SQUARE_MAX_744_AT_16384_512_DATA);
-
Oscil <SQUARE_MAX_910_AT_16384_512_NUM_CELLS, MOZZI_AUDIO_RATE> aSq910(SQUARE_MAX_910_AT_16384_512_DATA);
-
Oscil <SQUARE_MAX_1170_AT_16384_512_NUM_CELLS, MOZZI_AUDIO_RATE> aSq1170(SQUARE_MAX_1170_AT_16384_512_DATA);
-
Oscil <SQUARE_MAX_1638_AT_16384_512_NUM_CELLS, MOZZI_AUDIO_RATE> aSq1638(SQUARE_MAX_1638_AT_16384_512_DATA);
-
Oscil <SQUARE_MAX_2730_AT_16384_512_NUM_CELLS, MOZZI_AUDIO_RATE> aSq2730(SQUARE_MAX_2730_AT_16384_512_DATA);
-
Oscil <SQUARE_MAX_8192_AT_16384_512_NUM_CELLS, MOZZI_AUDIO_RATE> aSq8192(SQUARE_MAX_8192_AT_16384_512_DATA);
-
-
// use: MetaOscil <table_size, update_rate, number_of_oscil> MetaoscilName. All oscils used should have the same table_size and **have to be put in increasing order of cutoff_frequencies**.
-
MetaOscil<SQUARE_MAX_90_AT_16384_512_NUM_CELLS, MOZZI_AUDIO_RATE, 16> BL_aSq {&aSq90, &aSq101, &aSq122, &aSq138, &aSq154, &aSq174, &aSq210, &aSq264, &aSq327, &aSq431, &aSq546, &aSq744, &aSq1170, &aSq1638, &aSq2730, &aSq8192};
-
-
int freq = 10;
-
-
-
void setup() {
-
// Set the cutoff frequencies for all the Oscil in the MetaOscil ie at which frequency the MetaOscil will switch to the next Oscillator. Note that these are the same frequencies than the tables names in this case.
-
// This have to follow the order given at the MetaOscil creation: this needs to be in increasing order.
-
BL_aSq.setCutoffFreqs(90, 101, 122, 138, 154, 174, 210, 264, 327, 431, 546, 744, 1170, 1638, 2730, 8192);
-
-
// Cutoff frequencies can also be set or changed individually.
-
BL_aSq.setCutoffFreq(3000, 14);
-
startMozzi();
-
}
-
-
-
void updateControl() {
-
// Manually increasing the frequency by 1Hz
-
freq += 1;
-
if (freq > 3000) freq = 10;
-
-
aSq90.setFreq(freq);
-
BL_aSq.setFreq(freq); //BL_aSq which is a metaOscil can be used just as a regular Oscil.
-
}
-
-
-
AudioOutput updateAudio() {
-
//return MonoOutput::from8Bit(aSq90.next()); // try to use this line instead to hear the non-band limited version, sounds a bit like a radio
-
return MonoOutput::from8Bit(BL_aSq.next()); // return a sample of the correct oscil to acheive no alias
-
-
}
-
-
-
void loop() {
-
audioHook(); // required here
-
}
-
-
- - - diff --git a/extras/doc/html/06_8_synthesis_2_p_w_m__phasing_2_p_w_m__phasing_8ino-example.html b/extras/doc/html/06_8_synthesis_2_p_w_m__phasing_2_p_w_m__phasing_8ino-example.html deleted file mode 100644 index 18eb86666..000000000 --- a/extras/doc/html/06_8_synthesis_2_p_w_m__phasing_2_p_w_m__phasing_8ino-example.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - - -Mozzi: 06.Synthesis/PWM_Phasing/PWM_Phasing.ino - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
06.Synthesis/PWM_Phasing/PWM_Phasing.ino
-
-
-

This example demonstrates the Phasor class.

-
/* Example of pulse width modulation,
-
using Mozzi sonification library.
-
-
Based Miller Puckette's j03.pulse.width.mod example
-
in the Pure Data documentation, subtracting 2 sawtooth
-
waves with slightly different tunings to produce a
-
varying phase difference.
-
-
Demonstrates Phasor().
-
-
Circuit: Audio output on digital pin 9 on a Uno or similar, or
-
DAC/A14 on Teensy 3.1, or
-
check the README or http://sensorium.github.io/Mozzi/
-
-
Mozzi documentation/API
-
https://sensorium.github.io/Mozzi/doc/html/index.html
-
-
Mozzi help/discussion/announcements:
-
https://groups.google.com/forum/#!forum/mozzi-users
-
-
Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
-
Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
*/
-
-
#include <Mozzi.h>
-
#include <Phasor.h>
-
-
Phasor <MOZZI_AUDIO_RATE> aPhasor1;
-
Phasor <MOZZI_AUDIO_RATE> aPhasor2;
-
-
float freq = 55.f;
-
-
void setup(){
-
aPhasor1.setFreq(freq);
-
aPhasor2.setFreq(freq+0.2f);
-
startMozzi(); // :)
-
}
-
-
-
void updateControl(){
-
}
-
-
-
AudioOutput updateAudio(){
-
char asig1 = (char)(aPhasor1.next()>>24);
-
char asig2 = (char)(aPhasor2.next()>>24);
-
return MonoOutput::fromNBit(9, ((int)asig1-asig2));
-
}
-
-
-
void loop(){
-
audioHook(); // required here
-
}
-
-
- - - diff --git a/extras/doc/html/06_8_synthesis_2_wave_packet_2_wave_packet_8ino-example.html b/extras/doc/html/06_8_synthesis_2_wave_packet_2_wave_packet_8ino-example.html deleted file mode 100644 index 5d2a868f4..000000000 --- a/extras/doc/html/06_8_synthesis_2_wave_packet_2_wave_packet_8ino-example.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - -Mozzi: 06.Synthesis/WavePacket/WavePacket.ino - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
06.Synthesis/WavePacket/WavePacket.ino
-
-
-

This is an example of how to use the WavePacket class.

-
-
- - - diff --git a/extras/doc/html/06_8_synthesis_2_wave_packet__sample_2_wave_packet__sample_8ino-example.html b/extras/doc/html/06_8_synthesis_2_wave_packet__sample_2_wave_packet__sample_8ino-example.html deleted file mode 100644 index 9d7a902f6..000000000 --- a/extras/doc/html/06_8_synthesis_2_wave_packet__sample_2_wave_packet__sample_8ino-example.html +++ /dev/null @@ -1,188 +0,0 @@ - - - - - - - -Mozzi: 06.Synthesis/WavePacket_Sample/WavePacket_Sample.ino - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
06.Synthesis/WavePacket_Sample/WavePacket_Sample.ino
-
-
-

This is an example of how to use the WavePacketSample class.

-
/* Example of Wavepacket synthesis, using Mozzi sonification library.
-
This sketch draws on Miller Puckette's
-
Pure Data example, F14.wave.packet.pd, with
-
two overlapping streams of wave packets.
-
-
Demonstrates the WavePacketSample object, which enables a
-
custom sound table to be used as the audio source for wavepackets.
-
-
Circuit:
-
Audio output on DAC/A14 on Teensy 3.0, 3.1,
-
or digital pin 9 on a Uno or similar, or
-
check the README or http://sensorium.github.io/Mozzi/
-
-
Potentiometer connected to analog pin 0.
-
Center pin of the potentiometer goes to the analog pin.
-
Side pins of the potentiometer go to +5V and ground
-
-
Potentiometer connected to analog pin 1.
-
Center pin of the potentiometer goes to the analog pin.
-
Side pins of the potentiometer go to +5V and ground
-
-
Potentiometer connected to analog pin 2.
-
Center pin of the potentiometer goes to the analog pin.
-
Side pins of the potentiometer go to +5V and ground
-
-
Mozzi documentation/API
-
https://sensorium.github.io/Mozzi/doc/html/index.html
-
-
Mozzi help/discussion/announcements:
-
https://groups.google.com/forum/#!forum/mozzi-users
-
-
Copyright 2013-2024 Tim Barrass and the Mozzi Team
-
-
Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
*/
-
-
#include <Mozzi.h>
-
#include <mozzi_analog.h>
-
#include <WavePacketSample.h>
-
#include <RollingAverage.h>
-
#include <samples/raven_arh_int8.h>
-
-
#define FUNDAMENTAL_PIN 0
-
#define BANDWIDTH_PIN 1
-
#define CENTREFREQ_PIN 2
-
-
// for smoothing the control signals
-
// use: RollingAverage <number_type, how_many_to_average> myThing
-
RollingAverage <int, 32> kAverageF;
-
RollingAverage <int, 32> kAverageBw;
-
RollingAverage <int, 32> kAverageCf;
-
-
WavePacketSample <DOUBLE> wavey; // DOUBLE selects 2 overlapping streams
-
-
-
void setup(){
-
wavey.setTable(RAVEN_ARH_DATA);
-
pinMode(11,OUTPUT);
-
digitalWrite(11,LOW);
-
startMozzi();
-
}
-
-
-
void updateControl(){
-
int f = kAverageF.next(mozziAnalogRead<10>(FUNDAMENTAL_PIN))+1;
-
int b = kAverageBw.next(mozziAnalogRead<10>(BANDWIDTH_PIN));
-
int cf = kAverageCf.next(mozziAnalogRead<11>(CENTREFREQ_PIN));
-
wavey.set(f, b, cf);
-
}
-
-
-
AudioOutput updateAudio(){
-
return MonoOutput::from16Bit(wavey.next());
-
}
-
-
-
void loop(){
-
audioHook(); // required here
-
}
-
-
- - - diff --git a/extras/doc/html/06_8_synthesis_2_wave_shaper_2_wave_shaper_8ino-example.html b/extras/doc/html/06_8_synthesis_2_wave_shaper_2_wave_shaper_8ino-example.html deleted file mode 100644 index c1cd2ff8b..000000000 --- a/extras/doc/html/06_8_synthesis_2_wave_shaper_2_wave_shaper_8ino-example.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - -Mozzi: 06.Synthesis/WaveShaper/WaveShaper.ino - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
06.Synthesis/WaveShaper/WaveShaper.ino
-
-
-

This is an example of how to use the WaveShaper class.

-
-
- - - diff --git a/extras/doc/html/07_8_envelopes_2_a_d_s_r__envelope_2_a_d_s_r__envelope_8ino-example.html b/extras/doc/html/07_8_envelopes_2_a_d_s_r__envelope_2_a_d_s_r__envelope_8ino-example.html deleted file mode 100644 index 8d58a575f..000000000 --- a/extras/doc/html/07_8_envelopes_2_a_d_s_r__envelope_2_a_d_s_r__envelope_8ino-example.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - -Mozzi: 07.Envelopes/ADSR_Envelope/ADSR_Envelope.ino - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
07.Envelopes/ADSR_Envelope/ADSR_Envelope.ino
-
-
-

This is an example of how to use the ADSR class.

-
-
- - - diff --git a/extras/doc/html/07_8_envelopes_2_ead__envelope_2_ead__envelope_8ino-example.html b/extras/doc/html/07_8_envelopes_2_ead__envelope_2_ead__envelope_8ino-example.html deleted file mode 100644 index 3983cce14..000000000 --- a/extras/doc/html/07_8_envelopes_2_ead__envelope_2_ead__envelope_8ino-example.html +++ /dev/null @@ -1,177 +0,0 @@ - - - - - - - -Mozzi: 07.Envelopes/Ead_Envelope/Ead_Envelope.ino - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
07.Envelopes/Ead_Envelope/Ead_Envelope.ino
-
-
-

This is an example of how to use the Ead class.

-
/* Example playing an enveloped noise source
-
using Mozzi sonification library.
-
-
Demonstrates Ead (exponential attack decay).
-
-
Circuit: Audio output on digital pin 9 on a Uno or similar, or
-
DAC/A14 on Teensy 3.1, or
-
check the README or http://sensorium.github.io/Mozzi/
-
-
Mozzi documentation/API
-
https://sensorium.github.io/Mozzi/doc/html/index.html
-
-
Mozzi help/discussion/announcements:
-
https://groups.google.com/forum/#!forum/mozzi-users
-
-
Copyright 2013-2024 Tim Barrass and the Mozzi Team
-
-
Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
*/
-
-
#define MOZZI_CONTROL_RATE 256 // Hz, powers of 2 are most reliable
-
#include <Mozzi.h>
-
#include <Oscil.h> // oscillator template
-
#include <tables/brownnoise8192_int8.h> // recorded audio wavetable
-
#include <Ead.h> // exponential attack decay
-
#include <EventDelay.h>
-
#include <mozzi_rand.h>
-
-
Oscil<BROWNNOISE8192_NUM_CELLS, MOZZI_AUDIO_RATE> aNoise(BROWNNOISE8192_DATA);
-
EventDelay kDelay; // for triggering envelope start
-
Ead kEnvelope(MOZZI_CONTROL_RATE); // resolution will be MOZZI_CONTROL_RATE
-
-
int gain;
-
-
-
void setup(){
-
// use float to set freq because it will be small and fractional
-
aNoise.setFreq((float)MOZZI_AUDIO_RATE/BROWNNOISE8192_SAMPLERATE);
-
randSeed(); // fresh random, MUST be called before startMozzi - wierd bug
-
startMozzi();
-
kDelay.start(1000);
-
}
-
-
-
void updateControl(){
-
// jump around in audio noise table to disrupt obvious looping
-
aNoise.setPhase(rand((unsigned int)BROWNNOISE8192_NUM_CELLS));
-
-
if(kDelay.ready()){
-
// set random parameters
-
unsigned int duration = rand(500u)+200;
-
unsigned int attack = rand(75)+5; // +5 so the internal step size is more likely to be >0
-
unsigned int decay = duration - attack;
-
kEnvelope.start(attack,decay);
-
kDelay.start(duration+500);
-
}
-
gain = (int) kEnvelope.next();
-
}
-
-
-
AudioOutput updateAudio(){
-
return MonoOutput::from16Bit(gain*aNoise.next());
-
}
-
-
-
void loop(){
-
audioHook(); // required here
-
}
-
-
- - - diff --git a/extras/doc/html/08_8_samples_2_sample_2_sample_8ino-example.html b/extras/doc/html/08_8_samples_2_sample_2_sample_8ino-example.html deleted file mode 100644 index 9aad66c0d..000000000 --- a/extras/doc/html/08_8_samples_2_sample_2_sample_8ino-example.html +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - -Mozzi: 08.Samples/Sample/Sample.ino - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
08.Samples/Sample/Sample.ino
-
-
-

This example demonstrates the Sample class.

-
/* Example of playing a sampled sound,
-
using Mozzi sonification library.
-
-
Demonstrates one-shot samples scheduled
-
with EventDelay.
-
-
Circuit: Audio output on digital pin 9 on a Uno or similar, or
-
DAC/A14 on Teensy 3.1, or
-
check the README or http://sensorium.github.io/Mozzi/
-
-
Mozzi documentation/API
-
https://sensorium.github.io/Mozzi/doc/html/index.html
-
-
Mozzi help/discussion/announcements:
-
https://groups.google.com/forum/#!forum/mozzi-users
-
-
Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
-
Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
*/
-
-
#include <Mozzi.h>
-
#include <Sample.h> // Sample template
-
#include <samples/burroughs1_18649_int8.h>
-
#include <EventDelay.h>
-
-
// use: Sample <table_size, update_rate> SampleName (wavetable)
-
Sample <BURROUGHS1_18649_NUM_CELLS, MOZZI_AUDIO_RATE> aSample(BURROUGHS1_18649_DATA);
-
-
// for scheduling sample start
-
EventDelay kTriggerDelay;
-
-
void setup(){
-
startMozzi();
-
aSample.setFreq((float) BURROUGHS1_18649_SAMPLERATE / (float) BURROUGHS1_18649_NUM_CELLS); // play at the speed it was recorded
-
kTriggerDelay.set(1500); // 1500 msec countdown, within resolution of MOZZI_CONTROL_RATE
-
}
-
-
-
void updateControl(){
-
if(kTriggerDelay.ready()){
-
aSample.start();
-
kTriggerDelay.start();
-
}
-
}
-
-
-
AudioOutput updateAudio(){
-
return MonoOutput::from8Bit((int) aSample.next());
-
}
-
-
-
void loop(){
-
audioHook();
-
}
-
-
- - - diff --git a/extras/doc/html/08_8_samples_2_sample_huffman__umpah_2_sample_huffman__umpah_8ino-example.html b/extras/doc/html/08_8_samples_2_sample_huffman__umpah_2_sample_huffman__umpah_8ino-example.html deleted file mode 100644 index e7e92dfd3..000000000 --- a/extras/doc/html/08_8_samples_2_sample_huffman__umpah_2_sample_huffman__umpah_8ino-example.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - - -Mozzi: 08.Samples/SampleHuffman_Umpah/SampleHuffman_Umpah.ino - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
08.Samples/SampleHuffman_Umpah/SampleHuffman_Umpah.ino
-
-
-

This example demonstrates the Sample class.

-
/*
-
Example playing samples encoded with Huffman compression.
-
-
Demonstrates the SampleHuffman class.
-
SampleHuffman, most of this explanation, and the audio2huff.py script are adapted from "audioout",
-
an Arduino sketch by Thomas Grill, 2011 http//grrrr.org.
-
-
Huffman decoding is used on sample differentials,
-
saving 50-70% of space for 8 bit data, depending on the sample rate.
-
-
This implementation just plays back one sample each time next() is called, with no
-
speed or other adjustments. It's slow, so it's likely you will only be able to play one sound at a time.
-
-
Audio data, Huffman decoder table, sample rate and bit depth are defined
-
in a sounddata.h header file. This file can be generated for a sound file with the
-
accompanying Python script audio2huff.py, in Mozzi/extras/python/
-
-
Invoke with:
-
python audio2huff.py --sndfile=arduinosnd.wav --hdrfile=sounddata.h --bits=8 --name=soundtablename
-
-
You can resample and dither your audio file with SOX,
-
e.g. to 8 bits depth @ Mozzi's 16384 Hz sample rate:
-
sox fullglory.wav -b 8 -r 16384 arduinosnd.wav
-
-
Alternatively you can export a sound from Audacity, which seems to have less noticeable or no dithering,
-
using Project Rate 16384 Hz and these output options:
-
Other uncompressed files, Header: WAV(Microsoft), Encoding: Unsigned 8 bit PCM
-
-
The header file contains two lengthy arrays:
-
One is "SOUNDDATA" which must fit into Flash RAM (available in total: 32k for ATMega328)
-
The other is "HUFFMAN" which must also fit into Flash RAM
-
-
Circuit:
-
Audio output on digital pin 9 on a Uno or similar, or
-
DAC/A14 on Teensy 3.1, or
-
check the README or http://sensorium.github.io/Mozzi/
-
-
Mozzi documentation/API
-
https://sensorium.github.io/Mozzi/doc/html/index.html
-
-
Mozzi help/discussion/announcements:
-
https://groups.google.com/forum/#!forum/mozzi-users
-
-
Copyright 2013-2024 Tim Barrass and the Mozzi Team
-
-
Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
*/
-
-
#include <Mozzi.h>
-
#include <SampleHuffman.h>
-
#include "umpah_huff.h"
-
-
SampleHuffman umpah(UMPAH_SOUNDDATA,UMPAH_HUFFMAN,UMPAH_SOUNDDATA_BITS);
-
-
void setup() {
-
umpah.setLoopingOn();
-
startMozzi();
-
}
-
-
-
void updateControl(){
-
}
-
-
-
AudioOutput updateAudio(){
-
return MonoOutput::from8Bit(umpah.next());
-
}
-
-
-
void loop() {
-
audioHook();
-
}
-
-
- - - diff --git a/extras/doc/html/09_8_delays_2_audio_delay_2_audio_delay_8ino-example.html b/extras/doc/html/09_8_delays_2_audio_delay_2_audio_delay_8ino-example.html deleted file mode 100644 index b48af9927..000000000 --- a/extras/doc/html/09_8_delays_2_audio_delay_2_audio_delay_8ino-example.html +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - - -Mozzi: 09.Delays/AudioDelay/AudioDelay.ino - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
09.Delays/AudioDelay/AudioDelay.ino
-
-
-

This is an example of how to use the AudioDelay class.

-
/* Example of modulating a signal by using a variable delay,
-
using Mozzi sonification library.
-
-
Demonstrates AudioDelay.
-
-
Circuit: Audio output on digital pin 9 on a Uno or similar, or
-
DAC/A14 on Teensy 3.1, or
-
check the README or http://sensorium.github.io/Mozzi/
-
-
Mozzi documentation/API
-
https://sensorium.github.io/Mozzi/doc/html/index.html
-
-
Mozzi help/discussion/announcements:
-
https://groups.google.com/forum/#!forum/mozzi-users
-
-
Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
-
Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
*/
-
-
#define MOZZI_CONTROL_RATE 256 // Hz, powers of 2 are most reliable
-
#include <Mozzi.h>
-
#include <Oscil.h>
-
#include <tables/triangle_analogue512_int8.h> // wavetable
-
#include <tables/cos2048_int8.h> // wavetable
-
#include <AudioDelay.h>
-
#include <mozzi_midi.h> // for mtof
-
-
Oscil<TRIANGLE_ANALOGUE512_NUM_CELLS, MOZZI_AUDIO_RATE> aTriangle(TRIANGLE_ANALOGUE512_DATA);
-
Oscil<COS2048_NUM_CELLS, MOZZI_CONTROL_RATE> kFreq(COS2048_DATA);
-
-
AudioDelay <256> aDel;
-
int del_samps;
-
-
void setup(){
-
aTriangle.setFreq(mtof(60.f));
-
kFreq.setFreq(.63f);
-
startMozzi();
-
}
-
-
void loop(){
-
audioHook();
-
}
-
-
void updateControl(){
-
del_samps = 128+kFreq.next();
-
}
-
-
AudioOutput updateAudio(){
-
int8_t asig = aDel.next(aTriangle.next(), del_samps);
-
return MonoOutput::from8Bit(asig);
-
}
-
-
- - - diff --git a/extras/doc/html/09_8_delays_2_audio_delay_feedback_2_audio_delay_feedback_8ino-example.html b/extras/doc/html/09_8_delays_2_audio_delay_feedback_2_audio_delay_feedback_8ino-example.html deleted file mode 100644 index 33973f140..000000000 --- a/extras/doc/html/09_8_delays_2_audio_delay_feedback_2_audio_delay_feedback_8ino-example.html +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - - -Mozzi: 09.Delays/AudioDelayFeedback/AudioDelayFeedback.ino - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
09.Delays/AudioDelayFeedback/AudioDelayFeedback.ino
-
-
-

This is an example of how to use the AudioDelayFeedback class.

-
/* Example of flanging,
-
using Mozzi sonification library.
-
-
Demonstrates AudioDelayFeedback.
-
-
Circuit: Audio output on digital pin 9 on a Uno or similar, or
-
DAC/A14 on Teensy 3.1, or
-
check the README or http://sensorium.github.io/Mozzi/
-
-
Mozzi documentation/API
-
https://sensorium.github.io/Mozzi/doc/html/index.html
-
-
Mozzi help/discussion/announcements:
-
https://groups.google.com/forum/#!forum/mozzi-users
-
-
Copyright 2013-2024 Tim Barrass and the Mozzi Team
-
-
Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
*/
-
-
#define MOZZI_CONTROL_RATE 128 // Hz, powers of 2 are most reliable
-
#include <Mozzi.h>
-
#include <Oscil.h>
-
#include <tables/triangle_analogue512_int8.h> // wavetable
-
#include <tables/triangle512_int8.h> // wavetable
-
#include <AudioDelayFeedback.h>
-
#include <mozzi_midi.h> // for mtof
-
-
Oscil<TRIANGLE_ANALOGUE512_NUM_CELLS, MOZZI_AUDIO_RATE> aTriangle(TRIANGLE_ANALOGUE512_DATA); // audio oscillator
-
Oscil<TRIANGLE512_NUM_CELLS, MOZZI_CONTROL_RATE> kDelSamps(TRIANGLE512_DATA); // for modulating delay time, measured in audio samples
-
-
AudioDelayFeedback <128> aDel;
-
-
// the delay time, measured in samples, updated in updateControl, and used in updateAudio
-
byte del_samps;
-
-
void setup(){
-
startMozzi();
-
aTriangle.setFreq(mtof(48.f));
-
kDelSamps.setFreq(.163f); // set the delay time modulation frequency (ie. the sweep frequency)
-
aDel.setFeedbackLevel(-111); // can be -128 to 127
-
}
-
-
-
Q16n16 deltime;
-
-
-
void updateControl(){
-
// delay time range from 0 to 127 samples, @ 16384 samps per sec = 0 to 7 milliseconds
-
//del_samps = 64+kDelSamps.next();
-
-
// delay time range from 1 to 33 samples, @ 16384 samps per sec = 0 to 2 milliseconds
-
//del_samps = 17+kDelSamps.next()/8;
-
-
deltime = Q8n0_to_Q16n16(17) + ((long)kDelSamps.next()<<12);
-
-
}
-
-
-
AudioOutput updateAudio(){
-
int8_t asig = aTriangle.next(); // get this so it can be used twice without calling next() again
-
//return asig/8 + aDel.next(asig, (uint16_t) del_samps); // mix some straight signal with the delayed signal
-
//return aDel.next(aTriangle.next(), (uint16_t) del_samps); // instead of the previous 2 lines for only the delayed signal
-
return MonoOutput::fromAlmostNBit(9, (asig >> 3) + aDel.next(asig, deltime)); // mix some straight signal with the delayed signal
-
}
-
-
-
void loop(){
-
audioHook();
-
}
-
-
- - - diff --git a/extras/doc/html/09_8_delays_2_reverb_tank__s_t_a_n_d_a_r_d_2_reverb_tank__s_t_a_n_d_a_r_d_8ino-example.html b/extras/doc/html/09_8_delays_2_reverb_tank__s_t_a_n_d_a_r_d_2_reverb_tank__s_t_a_n_d_a_r_d_8ino-example.html deleted file mode 100644 index 69362ffeb..000000000 --- a/extras/doc/html/09_8_delays_2_reverb_tank__s_t_a_n_d_a_r_d_2_reverb_tank__s_t_a_n_d_a_r_d_8ino-example.html +++ /dev/null @@ -1,185 +0,0 @@ - - - - - - - -Mozzi: 09.Delays/ReverbTank_STANDARD/ReverbTank_STANDARD.ino - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
09.Delays/ReverbTank_STANDARD/ReverbTank_STANDARD.ino
-
-
-

This example demonstrates the ReverbTank class.

-
/* Example of reverb on a synthesised sound
-
using Mozzi sonification library.
-
-
Demonstrates ReverbTank, a reverb small enough to fit on
-
the Arduino Nano, which for some reason wasn't able to fit a larger version
-
which did fit on other 328 based boards.
-
It's a pretty horrible reverb which sounds like the inside of a tin can.
-
For simplicity, ReverbTank has hardcoded maximum delay sizes
-
but also has default delay times which can be changed in the constructor
-
or by setting during run time to allow live tweaking.
-
The synthesised sound comes from the phasemod synth example.
-
-
Circuit: Audio output on digital pin 9 for STANDARD output on a Uno or similar, or
-
see the readme.md file for others.
-
-
Mozzi documentation/API
-
https://sensorium.github.io/Mozzi/doc/html/index.html
-
-
Mozzi help/discussion/announcements:
-
https://groups.google.com/forum/#!forum/mozzi-users
-
-
Copyright 2013-2024 Tim Barrass and the Mozzi Team
-
-
Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
*/
-
-
#define MOZZI_CONTROL_RATE 640 // quite fast, keeps modulation smooth
-
#include <Mozzi.h>
-
#include <ReverbTank.h>
-
#include <Oscil.h>
-
#include <tables/cos8192_int8.h>
-
#include <tables/envelop2048_uint8.h>
-
-
ReverbTank reverb;
-
-
// Synth from PhaseMod_Envelope example
-
Oscil <COS8192_NUM_CELLS, MOZZI_AUDIO_RATE> aCarrier(COS8192_DATA);
-
Oscil <COS8192_NUM_CELLS, MOZZI_AUDIO_RATE> aModulator(COS8192_DATA);
-
Oscil <COS8192_NUM_CELLS, MOZZI_AUDIO_RATE> aModWidth(COS8192_DATA);
-
Oscil <COS8192_NUM_CELLS, MOZZI_CONTROL_RATE> kModFreq1(COS8192_DATA);
-
Oscil <COS8192_NUM_CELLS, MOZZI_CONTROL_RATE> kModFreq2(COS8192_DATA);
-
Oscil <ENVELOP2048_NUM_CELLS, MOZZI_AUDIO_RATE> aEnvelop(ENVELOP2048_DATA);
-
-
-
void setup(){
-
// synth params
-
aCarrier.setFreq(55);
-
kModFreq1.setFreq(3.98f);
-
kModFreq2.setFreq(3.31757f);
-
aModWidth.setFreq(2.52434f);
-
aEnvelop.setFreq(9.0f);
-
-
startMozzi();
-
}
-
-
-
void updateControl(){
-
// synth control
-
aModulator.setFreq(277.0f + 0.4313f*kModFreq1.next() + kModFreq2.next());
-
}
-
-
-
AudioOutput updateAudio(){
-
int synth = aCarrier.phMod((int)aModulator.next()*(150u+aModWidth.next()));
-
synth *= (byte)aEnvelop.next();
-
synth >>= 8;
-
// here's the reverb
-
int arev = reverb.next(synth);
-
// add the dry and wet signals
-
return MonoOutput::fromAlmostNBit(9, synth + (arev>>3));
-
}
-
-
-
void loop(){
-
audioHook();
-
}
-
-
- - - diff --git a/extras/doc/html/10_8_audio__filters_2_multi_resonant_filter_2_multi_resonant_filter_8ino-example.html b/extras/doc/html/10_8_audio__filters_2_multi_resonant_filter_2_multi_resonant_filter_8ino-example.html deleted file mode 100644 index 6e1d44b2f..000000000 --- a/extras/doc/html/10_8_audio__filters_2_multi_resonant_filter_2_multi_resonant_filter_8ino-example.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - - -Mozzi: 10.Audio_Filters/MultiResonantFilter/MultiResonantFilter.ino - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
10.Audio_Filters/MultiResonantFilter/MultiResonantFilter.ino
-
-
-

This example demonstrates the MultiResonantFilter specification of this class.

-
/* Example of filtering a wave with different types of filters
-
using Mozzi sonification library.
-
-
Demonstrates MultiResonantFilter<uint8_t>.
-
-
MultiResonantFilter is a derivative of ResonantFilter which allows all filter types to be accessed with only one filter.
-
It behaves similarly to ResonantFilter except:
-
- next(in) does not return anything and is just used to pass the current sample to the filter. Except for special cases should probably be called only once in updateAudio()
-
- different filter outputs are accessible via low(), high(), band() and notch() functions.
-
- note that the different filter types can be called in the same updateAudio(), for eg. to get different part of the signal.
-
-
Circuit: Audio output on digital pin 9 on a Uno or similar, or
-
DAC/A14 on Teensy 3.1, or
-
check the README or http://sensorium.github.io/Mozzi/
-
-
Mozzi documentation/API
-
https://sensorium.github.io/Mozzi/doc/html/index.html
-
-
Mozzi help/discussion/announcements:
-
https://groups.google.com/forum/#!forum/mozzi-users
-
-
Copyright 2023-2024 Tom Combriat and the Mozzi Team
-
-
Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
*/
-
-
#include <Mozzi.h>
-
#include <Oscil.h>
-
#include <tables/chum9_int8.h> // recorded audio wavetable
-
#include <tables/cos2048_int8.h> // for filter modulation
-
#include <ResonantFilter.h>
-
#include <mozzi_rand.h>
-
-
Oscil<CHUM9_NUM_CELLS, MOZZI_AUDIO_RATE> aCrunchySound(CHUM9_DATA);
-
Oscil<COS2048_NUM_CELLS, MOZZI_CONTROL_RATE> kFilterMod(COS2048_DATA);
-
Oscil<COS2048_NUM_CELLS, MOZZI_CONTROL_RATE> kFilterMod2(COS2048_DATA);
-
-
MultiResonantFilter<uint8_t> mf; // Multifilter applied to a 8 bits signal.
-
// MultiResonantFilter<uint16_t> can also be used for signals with higher number of bits
-
// in this last case, both the cutoff frequency and the resonance are uint16_t,
-
// ranging from 0, to 65535.
-
-
enum types {lowpass, bandpass, highpass, notch};
-
byte filter_type = 0;
-
-
uint8_t resonance = 200; // range 0-255, 255 is most resonant.
-
-
void setup() {
-
startMozzi();
-
aCrunchySound.setFreq(2.f);
-
kFilterMod.setFreq(1.3f);
-
kFilterMod2.setFreq(0.1f);
-
}
-
-
void loop() {
-
audioHook();
-
}
-
-
void updateControl() {
-
if (rand(MOZZI_CONTROL_RATE / 2) == 0) { // about once every half second
-
kFilterMod.setFreq((float)rand(255) / 64); // choose a new modulation frequency
-
filter_type = rand(4); // change the filter type, randomly
-
}
-
// map the modulation into the filter range (0-255), corresponds with 0-MOZZI_AUDIO_RATE/(sqrt(2)*pi) Hz
-
uint8_t cutoff_freq = (100 + kFilterMod.next() / 2) ;
-
mf.setCutoffFreqAndResonance(cutoff_freq, resonance);
-
}
-
-
AudioOutput updateAudio() {
-
AudioOutput asig;
-
mf.next(aCrunchySound.next()); // this send the current sample to the filter, does not return anything
-
switch (filter_type) // recover the output from the current selected filter type.
-
{
-
case lowpass:
-
asig = mf.low(); // lowpassed sample
-
break;
-
case highpass:
-
asig = mf.high(); // highpassed sample
-
break;
-
case bandpass:
-
asig = mf.band(); // bandpassed sample
-
break;
-
case notch:
-
asig = mf.notch(); // notched sample
-
break;
-
}
-
return MonoOutput::fromNBit(9, asig); // signal is theoretically 8 bits, but resonance push it further so we let one bit of margin
-
}
-
-
- - - diff --git a/extras/doc/html/10_8_audio__filters_2_resonant_filter16_2_resonant_filter16_8ino-example.html b/extras/doc/html/10_8_audio__filters_2_resonant_filter16_2_resonant_filter16_8ino-example.html deleted file mode 100644 index b821a9219..000000000 --- a/extras/doc/html/10_8_audio__filters_2_resonant_filter16_2_resonant_filter16_8ino-example.html +++ /dev/null @@ -1,180 +0,0 @@ - - - - - - - -Mozzi: 10.Audio_Filters/ResonantFilter16/ResonantFilter16.ino - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
10.Audio_Filters/ResonantFilter16/ResonantFilter16.ino
-
-
-

This example demonstrates the ResonantFilter16 specification of this class.

-
/* Example of filtering a wave,
-
using Mozzi sonification library.
-
-
Demonstrates ResonantFilter<uint16_t, FILTER_TYPE>.
-
-
ResonantFilter<uint16_t, FILTER_TYPE> is a different version of ResonantFilter<uint8_t, FILTER_TYPE> which uses bigger containing types for internal calculations.
-
The main differences with LowPassFilter are:
-
- parameters (resonance and cutoff_freq) are coded on 16bits, allowing for smoother transitions and finer tuning if needed,
-
- for 8bits platforms (like the Arduino) it will accept input samples of more than 8bits without overflowing,
-
- the drawback is higher CPU usage, especially for 8bits platform. If speed is crucial, you should probably use ResonantFilter<uint8_t, FILTER_TYPE> instead.
-
-
Circuit: Audio output on digital pin 9 on a Uno or similar, or
-
DAC/A14 on Teensy 3.1, or
-
check the README or http://sensorium.github.io/Mozzi/
-
-
Mozzi documentation/API
-
https://sensorium.github.io/Mozzi/doc/html/index.html
-
-
Mozzi help/discussion/announcements:
-
https://groups.google.com/forum/#!forum/mozzi-users
-
-
Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
-
Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
*/
-
-
#include <Mozzi.h>
-
#include <Oscil.h>
-
#include <tables/chum9_int8.h> // recorded audio wavetable
-
#include <tables/cos2048_int8.h> // for filter modulation
-
#include <ResonantFilter.h>
-
#include <mozzi_rand.h>
-
-
Oscil<CHUM9_NUM_CELLS, MOZZI_AUDIO_RATE> aCrunchySound(CHUM9_DATA);
-
Oscil<COS2048_NUM_CELLS, MOZZI_CONTROL_RATE> kFilterMod(COS2048_DATA);
-
Oscil<COS2048_NUM_CELLS, MOZZI_CONTROL_RATE> kFilterMod2(COS2048_DATA);
-
-
//Different types of filters available
-
LowPassFilter16 rf; // Equivalent to ResonantFilter<LOWPASS, uint16_t>
-
//ResonantFilter<HIGHPASS, uint16_t> rf; // HighPass filter
-
//ResonantFilter<BANDPASS, uint16_t> rf; // BandPass filter
-
//ResonantFilter<NOTCH, uint16_t> rf; // Notch filter
-
-
-
uint16_t resonance = 50000; // range 0-65535, 65535 is most resonant.
-
// note the difference of type with the LowPassFilter()
-
-
void setup(){
-
startMozzi();
-
aCrunchySound.setFreq(2.f);
-
kFilterMod.setFreq(1.3f);
-
kFilterMod2.setFreq(0.1f);
-
}
-
-
void loop(){
-
audioHook();
-
}
-
-
void updateControl(){
-
if (rand(MOZZI_CONTROL_RATE/2) == 0){ // about once every half second
-
kFilterMod.setFreq((float)rand(255)/64); // choose a new modulation frequency
-
}
-
// map the modulation into the filter range (0-255), corresponds with 0-MOZZI_AUDIO_RATE/(sqrt(2)*pi) Hz
-
uint16_t cutoff_freq = (100 + kFilterMod.next()/2) * (170+kFilterMod2.next());
-
rf.setCutoffFreqAndResonance(cutoff_freq, resonance);
-
}
-
-
AudioOutput updateAudio(){
-
AudioOutput asig = rf.next(aCrunchySound.next());
-
return MonoOutput::from8Bit(asig);
-
}
-
-
- - - diff --git a/extras/doc/html/10_8_audio__filters_2_resonant_filter_2_resonant_filter_8ino-example.html b/extras/doc/html/10_8_audio__filters_2_resonant_filter_2_resonant_filter_8ino-example.html deleted file mode 100644 index ed356c210..000000000 --- a/extras/doc/html/10_8_audio__filters_2_resonant_filter_2_resonant_filter_8ino-example.html +++ /dev/null @@ -1,174 +0,0 @@ - - - - - - - -Mozzi: 10.Audio_Filters/ResonantFilter/ResonantFilter.ino - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
10.Audio_Filters/ResonantFilter/ResonantFilter.ino
-
-
-

This example demonstrates the ResonantFilter specification of this class.

-
/* Example of filtering a wave,
-
using Mozzi sonification library.
-
-
Demonstrates ResonantFilter<uint8_t, FILTER_TYPE>>.
-
-
Note that, on 8bits platforms (Arduino) this filter cannot work
-
on samples of more than 8bits. Use LowPassFilter16() if you need
-
more than that.
-
-
Circuit: Audio output on digital pin 9 on a Uno or similar, or
-
DAC/A14 on Teensy 3.1, or
-
check the README or http://sensorium.github.io/Mozzi/
-
-
Mozzi documentation/API
-
https://sensorium.github.io/Mozzi/doc/html/index.html
-
-
Mozzi help/discussion/announcements:
-
https://groups.google.com/forum/#!forum/mozzi-users
-
-
Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
-
Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
*/
-
-
#include <Mozzi.h>
-
#include <Oscil.h>
-
#include <tables/chum9_int8.h> // recorded audio wavetable
-
#include <tables/cos2048_int8.h> // for filter modulation
-
#include <ResonantFilter.h>
-
#include <mozzi_rand.h>
-
-
Oscil<CHUM9_NUM_CELLS, MOZZI_AUDIO_RATE> aCrunchySound(CHUM9_DATA);
-
Oscil<COS2048_NUM_CELLS, MOZZI_CONTROL_RATE> kFilterMod(COS2048_DATA);
-
-
//Different types of filters available
-
LowPassFilter rf; // Equivalent to ResonantFilter<LOWPASS>
-
//ResonantFilter<HIGHPASS> rf; // HighPass filter
-
//ResonantFilter<BANDPASS> rf; // BandPass filter
-
//ResonantFilter<NOTCH> rf; // Notch filter
-
-
uint8_t resonance = 200; // range 0-255, 255 is most resonant
-
-
void setup(){
-
startMozzi();
-
aCrunchySound.setFreq(2.f);
-
kFilterMod.setFreq(1.3f);
-
}
-
-
void loop(){
-
audioHook();
-
}
-
-
void updateControl(){
-
if (rand(MOZZI_CONTROL_RATE/2) == 0){ // about once every half second
-
kFilterMod.setFreq((float)rand(255)/64); // choose a new modulation frequency
-
}
-
// map the modulation into the filter range (0-255), corresponds with 0-MOZZI_AUDIO_RATE/(sqrt(2)*pi) Hz
-
byte cutoff_freq = 100 + kFilterMod.next()/2;
-
rf.setCutoffFreqAndResonance(cutoff_freq, resonance);
-
}
-
-
AudioOutput updateAudio(){
-
char asig = rf.next(aCrunchySound.next());
-
return MonoOutput::from8Bit(asig);
-
}
-
-
- - - diff --git a/extras/doc/html/11_8_audio__filters_2_state_variable_filter_2_state_variable_filter_8ino-example.html b/extras/doc/html/11_8_audio__filters_2_state_variable_filter_2_state_variable_filter_8ino-example.html deleted file mode 100644 index 9037d7fbe..000000000 --- a/extras/doc/html/11_8_audio__filters_2_state_variable_filter_2_state_variable_filter_8ino-example.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - - -Mozzi: 11.Audio_Filters/StateVariableFilter/StateVariableFilter.ino - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
11.Audio_Filters/StateVariableFilter/StateVariableFilter.ino
-
-
-

This example demonstrates the StateVariable class.

-
-
- - - diff --git a/extras/doc/html/_a_d_s_r_8h_source.html b/extras/doc/html/_a_d_s_r_8h_source.html deleted file mode 100644 index b6c47cbd9..000000000 --- a/extras/doc/html/_a_d_s_r_8h_source.html +++ /dev/null @@ -1,548 +0,0 @@ - - - - - - - -Mozzi: ADSR.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
ADSR.h
-
-
-
1 /*
-
2  * ADSR.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 #ifndef ADSR_H_
-
13 #define ADSR_H_
-
14 
-
15 #include <Arduino.h>
-
16 #include "Line.h"
-
17 #include "mozzi_fixmath.h"
-
18 
-
19 
-
20 /** A simple ADSR envelope generator. This implementation has separate update() and next()
-
21 methods, where next() interpolates values between each update().
-
22 The "normal" way to use this would be with update() in updateControl(), where it calculates a new internal state each control step,
-
23 and then next() is in updateAudio(), called much more often, where it interpolates between the control values.
-
24 This also allows the ADSR updates to be made even more sparsely if desired, eg. every 3rd control update.
-
25 @tparam CONTROL_UPDATE_RATE The frequency of control updates.
-
26 Ordinarily this will be MOZZI_CONTROL_RATE, but an alternative (amongst others) is
-
27 to set this as well as the LERP_RATE parameter to MOZZI_AUDIO_RATE, and call both update() and next() in updateAudio().
-
28 Such a use would allow accurate envelopes with finer resolution of the control points than MOZZI_CONTROL_RATE.
-
29 @tparam LERP_RATE Sets how often next() will be called, to interpolate between updates set by CONTROL_UPDATE_RATE.
-
30 This will produce the smoothest results if it's set to MOZZI_AUDIO_RATE, but if you need to save processor time and your
-
31 envelope changes slowly or controls something like a filter where there may not be problems with glitchy or clicking transitions,
-
32 LERP_RATE could be set to MOZZI_CONTROL_RATE (for instance). Then update() and next() could both be called in updateControl(),
-
33 greatly reducing the amount of processing required compared to calling next() in updateAudio().
-
34 @todo Test whether using the template parameters makes any difference to speed,
-
35 and rationalise which units do and don't need them.
-
36 Template objects are messy when you try to use pointers to them,
-
37 you have to include the whole template in the pointer handling.
-
38 */
-
39 
-
40 template <unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE, typename T = unsigned int>
-
41 class ADSR
-
42 {
-
43 private:
-
44 
-
45  const unsigned int LERPS_PER_CONTROL;
-
46 
-
47  T update_step_counter;
-
48  T num_update_steps;
-
49 
-
50  enum {ATTACK,DECAY,SUSTAIN,RELEASE,IDLE};
-
51 
-
52 
-
53  struct phase{
-
54  byte phase_type;
-
55  T update_steps;
-
56  long lerp_steps; // signed, to match params to transition (line) type Q15n16, below
-
57  Q8n0 level;
-
58  }attack,decay,sustain,release,idle;
-
59 
-
60  phase * current_phase;
-
61 
-
62  // Linear audio rate transitions for envelope
-
63  //Line <unsigned long> transition;
-
64  Line <Q15n16> transition; // scale up unsigned char levels for better accuracy, then scale down again for output
-
65 
-
66  inline
-
67  T convertMsecToControlUpdateSteps(unsigned int msec){
-
68  return (T) (((uint32_t)msec*CONTROL_UPDATE_RATE)>>10); // approximate /1000 with shift
-
69  }
-
70 
-
71 
-
72  inline
-
73  void setPhase(phase * next_phase) {
-
74  update_step_counter = 0;
-
75  num_update_steps = next_phase->update_steps;
-
76  transition.set(Q8n0_to_Q15n16(next_phase->level),next_phase->lerp_steps);
-
77  current_phase = next_phase;
-
78  }
-
79 
-
80 
-
81  inline
-
82  void checkForAndSetNextPhase(phase * next_phase) {
-
83  if (++update_step_counter >= num_update_steps){
-
84  setPhase(next_phase);
-
85  }
-
86  }
-
87 
-
88 
-
89 
-
90  inline
-
91  void setTime(phase * p, unsigned int msec)
-
92  {
-
93  p->update_steps = convertMsecToControlUpdateSteps(msec);
-
94  p->lerp_steps = (long) p->update_steps * LERPS_PER_CONTROL;
-
95  }
-
96 
-
97 
-
98  inline
-
99  void setUpdateSteps(phase * p, unsigned int steps)
-
100  {
-
101  p->update_steps = steps;
-
102  p->lerp_steps = (long) steps * LERPS_PER_CONTROL;
-
103  }
-
104 
-
105 
-
106 
-
107 public:
-
108 
-
109  /** Constructor.
-
110  */
-
111  ADSR():LERPS_PER_CONTROL(LERP_RATE/CONTROL_UPDATE_RATE)
-
112  {
-
113  attack.phase_type = ATTACK;
-
114  decay.phase_type = DECAY;
-
115  sustain.phase_type = SUSTAIN;
-
116  release.phase_type = RELEASE;
-
117  idle.phase_type = IDLE;
-
118  release.level = 0;
-
119  adsr_playing = false;
-
120  current_phase = &idle;
-
121  }
-
122 
-
123 
-
124 
-
125  /** Updates the internal controls of the ADSR.
-
126  Call this in updateControl().
-
127  */
-
128  void update(){ // control rate
-
129 
-
130  switch(current_phase->phase_type) {
-
131 
-
132  case ATTACK:
-
133  checkForAndSetNextPhase(&decay);
-
134  break;
-
135 
-
136  case DECAY:
-
137  checkForAndSetNextPhase(&sustain);
-
138  break;
-
139 
-
140  case SUSTAIN:
-
141  checkForAndSetNextPhase(&release);
-
142  break;
-
143 
-
144  case RELEASE:
-
145  checkForAndSetNextPhase(&idle);
-
146  break;
-
147 
-
148  case IDLE:
-
149  adsr_playing = false;
-
150  break;
-
151  }
-
152  }
-
153 
-
154 
-
155 
-
156  /** Advances one audio step along the ADSR and returns the level.
-
157  Call this in updateAudio().
-
158  @return the next value, as an unsigned char.
-
159  */
-
160  inline
-
161  unsigned char next()
-
162  {
-
163  unsigned char out = 0;
-
164  if (adsr_playing) out = Q15n16_to_Q8n0(transition.next());
-
165  return out;
-
166  }
-
167 
-
168 
-
169 
-
170  /** Start the attack phase of the ADSR. This will restart the ADSR no matter what phase it is up to.
-
171  @param reset If true, the envelope will start from 0, even if it is still playing (often useful for effect envelopes).
-
172  If false (default if omitted), the envelope will start rising from the current level, which could be non-zero, if
-
173  it is still playing (most useful for note envelopes).
-
174  */
-
175  inline
-
176  void noteOn(bool reset=false){
-
177  if (reset) transition.set(0);
-
178  setPhase(&attack);
-
179  adsr_playing = true;
-
180  }
-
181 
-
182 
-
183 
-
184  /** Start the release phase of the ADSR.
-
185  @todo fix release for rate rather than steps (time), so it releases at the same rate whatever the current level.
-
186  */
-
187  inline
-
188  void noteOff(){
-
189  setPhase(&release);
-
190  }
-
191 
-
192 
-
193 
-
194  /** Set the attack level of the ADSR.
-
195  @param value the attack level.
-
196  */
-
197  inline
-
198  void setAttackLevel(byte value)
-
199  {
-
200  attack.level=value;
-
201  }
-
202 
-
203 
-
204 
-
205  /** Set the decay level of the ADSR.
-
206  @param value the decay level.
-
207  */
-
208  inline
-
209  void setDecayLevel(byte value)
-
210  {
-
211  decay.level=value;
-
212  }
-
213 
-
214 
-
215  /** Set the sustain level of the ADSR.
-
216  @param value the sustain level. Usually the same as the decay level,
-
217  for a steady sustained note.
-
218  */
-
219  inline
-
220  void setSustainLevel(byte value)
-
221  {
-
222  sustain.level=value;
-
223  }
-
224 
-
225  /** Set the release level of the ADSR. Normally you'd make this 0,
-
226  but you have the option of some other value.
-
227  @param value the release level (usually 0).
-
228  */
-
229  inline
-
230  void setReleaseLevel(byte value)
-
231  {
-
232  release.level=value;
-
233  }
-
234 
-
235 
-
236  inline
-
237  void setIdleLevel(byte value)
-
238  {
-
239  idle.level=value;
-
240  }
-
241 
-
242 
-
243  /** Set the attack and decay levels of the ADSR. This assumes a conventional
-
244  ADSR where the sustain continues at the same level as the decay, till the release ramps to 0.
-
245  @param attack the new attack level.
-
246  @param decay the new decay level.
-
247  */
-
248  inline
-
249  void setADLevels(byte attack, byte decay)
-
250  {
-
251  setAttackLevel(attack);
-
252  setDecayLevel(decay);
-
253  setSustainLevel(decay); // stay at decay level
-
254  setReleaseLevel(1);
-
255  setIdleLevel(0);
-
256  }
-
257 
-
258 
-
259  /** Set the attack, decay, sustain and release levels.
-
260  @param attack the new attack level.
-
261  @param decay the new sustain level.
-
262  @param attack the new sustain level.
-
263  @param decay the new release level.
-
264  */
-
265  inline
-
266  void setLevels(byte attack, byte decay, byte sustain, byte release)
-
267  {
-
268  setAttackLevel(attack);
-
269  setDecayLevel(decay);
-
270  setSustainLevel(sustain);
-
271  setReleaseLevel(release);
-
272  setIdleLevel(0);
-
273  }
-
274 
-
275 
-
276  /** Set the attack time of the ADSR in milliseconds.
-
277  The actual time taken will be resolved within the resolution of MOZZI_CONTROL_RATE.
-
278  @param msec the unsigned int attack time in milliseconds.
-
279  @note Beware of low values (less than 20 or so, depending on how many steps are being taken),
-
280  in case internal step size gets calculated as 0, which would mean nothing happens.
-
281  */
-
282  inline
-
283  void setAttackTime(unsigned int msec)
-
284  {
-
285  setTime(&attack, msec);
-
286  }
-
287 
-
288 
-
289  /** Set the decay time of the ADSR in milliseconds.
-
290  The actual time taken will be resolved within the resolution of MOZZI_CONTROL_RATE.
-
291  @param msec the unsigned int decay time in milliseconds.
-
292  @note Beware of low values (less than 20 or so, depending on how many steps are being taken),
-
293  in case internal step size gets calculated as 0, which would mean nothing happens.
-
294  */
-
295  inline
-
296  void setDecayTime(unsigned int msec)
-
297  {
-
298  setTime(&decay, msec);
-
299  }
-
300 
-
301 
-
302  /** Set the sustain time of the ADSR in milliseconds.
-
303  The actual time taken will be resolved within the resolution of MOZZI_CONTROL_RATE.
-
304  The sustain phase will finish if the ADSR recieves a noteOff().
-
305  @param msec the unsigned int sustain time in milliseconds.
-
306  @note Beware of low values (less than 20 or so, depending on how many steps are being taken),
-
307  in case internal step size gets calculated as 0, which would mean nothing happens.
-
308  */
-
309  inline
-
310  void setSustainTime(unsigned int msec)
-
311  {
-
312  setTime(&sustain, msec);
-
313  }
-
314 
-
315 
-
316 
-
317  /** Set the release time of the ADSR in milliseconds.
-
318  The actual time taken will be resolved within the resolution of MOZZI_CONTROL_RATE.
-
319  @param msec the unsigned int release time in milliseconds.
-
320  @note Beware of low values (less than 20 or so, depending on how many steps are being taken),
-
321  in case internal step size gets calculated as 0, which would mean nothing happens.
-
322  */
-
323  inline
-
324  void setReleaseTime(unsigned int msec)
-
325  {
-
326  setTime(&release, msec);
-
327  }
-
328 
-
329 
-
330  inline
-
331  void setIdleTime(unsigned int msec)
-
332  {
-
333  setTime(&idle, msec);
-
334  }
-
335 
-
336 
-
337  /** Set the attack, decay and release times of the ADSR in milliseconds.
-
338  The actual times will be resolved within the resolution of MOZZI_CONTROL_RATE.
-
339  @param attack_ms the new attack time in milliseconds.
-
340  @param decay_ms the new decay time in milliseconds.
-
341  @param sustain_ms the new sustain time in milliseconds.
-
342  @param release_ms the new release time in milliseconds.
-
343  @note Beware of low values (less than 20 or so, depending on how many steps are being taken),
-
344  in case internal step size gets calculated as 0, which would mean nothing happens.
-
345  */
-
346  inline
-
347  void setTimes(unsigned int attack_ms, unsigned int decay_ms, unsigned int sustain_ms, unsigned int release_ms)
-
348  {
-
349  setAttackTime(attack_ms);
-
350  setDecayTime(decay_ms);
-
351  setSustainTime(sustain_ms);
-
352  setReleaseTime(release_ms);
-
353  setIdleTime(65535); // guarantee step size of line will be 0
-
354  }
-
355 
-
356 
-
357 
-
358  /** Set the attack time of the ADSR, expressed as the number of update steps (not ADSR::next() interpolation steps) in the attack phase.
-
359  @param steps the number of times ADSR::update() will be called in the attack phase.
-
360  */
-
361  inline
-
362  void setAttackUpdateSteps(unsigned int steps)
-
363  {
-
364  setUpdateSteps(&attack, steps);
-
365  }
-
366 
-
367 
-
368  /** Set the decay time of the ADSR, expressed as the number of update steps (not ADSR::next() interpolation steps) in the decay phase.
-
369  @param steps the number of times ADSR::update() will be called in the decay phase.
-
370  */
-
371  inline
-
372  void setDecayUpdateSteps(unsigned int steps)
-
373  {
-
374  setUpdateSteps(&decay, steps);
-
375  }
-
376 
-
377 
-
378  /** Set the sustain time of the ADSR, expressed as the number of update steps (not ADSR::next() interpolation steps) in the sustain phase.
-
379  @param steps the number of times ADSR::update() will be called in the sustain phase.
-
380  */
-
381  inline
-
382  void setSustainUpdateSteps(unsigned int steps)
-
383  {
-
384  setUpdateSteps(&sustain, steps);
-
385  }
-
386 
-
387 
-
388  /** Set the release time of the ADSR, expressed as the number of update steps (not ADSR::next() interpolation steps) in the release phase.
-
389  @param steps the number of times ADSR::update() will be called in the release phase.
-
390  */
-
391  inline
-
392  void setReleaseUpdateSteps(unsigned int steps)
-
393  {
-
394  setUpdateSteps(&release, steps);
-
395  }
-
396 
-
397 
-
398  inline
-
399  void setIdleUpdateSteps(unsigned int steps)
-
400  {
-
401  setUpdateSteps(&idle, steps);
-
402  }
-
403 
-
404  /** Set the attack, decay and release times of the ADSR, expressed in update steps (not ADSR::next() interpolation steps).
-
405  @param attack_steps the number of update steps in the attack phase
-
406  @param decay_steps the number of update steps in the decay phase
-
407  @param sustain_steps the number of update steps in the sustain phase
-
408  @param release_steps the number of update steps in the release phase
-
409  */
-
410  inline
-
411  void setAllUpdateSteps(unsigned int attack_steps, unsigned int decay_steps, unsigned int sustain_steps, unsigned int release_steps)
-
412  {
-
413  setAttackUpdateSteps(attack_steps);
-
414  setDecayUpdateSteps(decay_steps);
-
415  setSustainUpdateSteps(sustain_steps);
-
416  setReleaseUpdateSteps(release_steps);
-
417  setIdleUpdateSteps(65535); // guarantee step size of line will be 0
-
418  }
-
419 
-
420 
-
421 bool adsr_playing;
-
422 
-
423  /** Tells if the envelope is currently playing.
-
424  @return true if playing, false if in IDLE state
-
425  */
-
426  inline
-
427  bool playing()
-
428  {
-
429  return adsr_playing;
-
430  }
-
431 
-
432 
-
433 };
-
434 
-
435 
-
436 /** @example 07.Envelopes/ADSR_Envelope/ADSR_Envelope.ino
-
437 This is an example of how to use the ADSR class.
-
438 */
-
439 
-
440 #endif /* ADSR_H_ */
-
-
- - - diff --git a/extras/doc/html/_audio_delay_8h_source.html b/extras/doc/html/_audio_delay_8h_source.html deleted file mode 100644 index 1a758abdb..000000000 --- a/extras/doc/html/_audio_delay_8h_source.html +++ /dev/null @@ -1,236 +0,0 @@ - - - - - - - -Mozzi: AudioDelay.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
AudioDelay.h
-
-
-
1 /*
-
2  * AudioDelay.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 #ifndef AUDIODELAY_H_
-
13 #define AUDIODELAY_H_
-
14 
-
15 
-
16 /** Audio delay line for comb filter, flange, chorus and short echo effects.
-
17 @tparam NUM_BUFFER_SAMPLES is the length of the delay buffer in samples. This should
-
18 be a power of two. The largest delay you'll fit in an atmega328 will be 512
-
19 cells, which at 16384 Hz sample rate is 31 milliseconds. More of a flanger or a
-
20 doubler than an echo. The amount of memory available for delays on other chips will vary.
-
21 AudioDelay() doesn't have feedback. If you want feedback, use AudioDelayFeedback().
-
22 @tparam the type of numbers to use for the signal in the delay. The default is int8_t, but int could be useful
-
23 when adding manual feedback. When using int, the input should be limited to 15 bits width, ie. -16384 to 16383.
-
24 */
-
25 
-
26 template <unsigned int NUM_BUFFER_SAMPLES, class T = int8_t>
- -
28 {
-
29 
-
30 private:
-
31 
-
32  T delay_array[NUM_BUFFER_SAMPLES];
-
33  unsigned int _write_pos;
-
34  unsigned int _delaytime_cells;
-
35 
-
36 public:
-
37 
-
38  /** Constructor.
-
39  */
-
40  AudioDelay(): _write_pos(0)
-
41  {}
-
42 
-
43 
-
44  /** Constructor.
-
45  @param delaytime_cells delay time expressed in cells.
-
46  For example, 128 cells delay at MOZZI_AUDIO_RATE would produce a time delay of 128/16384 = 0.0078125 s = 7.8 ms
-
47  Put another way, num_cells = delay_seconds * MOZZI_AUDIO_RATE.
-
48  */
-
49  AudioDelay(unsigned int delaytime_cells): _write_pos(0), _delaytime_cells(delaytime_cells)
-
50  {}
-
51 
-
52 
-
53 
-
54  /** Input a value to the delay and retrieve the signal in the delay line at the position delaytime_cells.
-
55  @param in_value the signal input.
-
56  @param delaytime_cells sets the delay time in terms of cells in the delay buffer.
-
57  */
-
58  inline
-
59  T next(T in_value, unsigned int delaytime_cells)
-
60  {
-
61  ++_write_pos &= (NUM_BUFFER_SAMPLES - 1);
-
62  unsigned int read_pos = (_write_pos - delaytime_cells) & (NUM_BUFFER_SAMPLES - 1);
-
63 
-
64  // why does delay jump if I read it before writing?
-
65  delay_array[_write_pos] = in_value; // write to buffer
-
66  T delay_sig = delay_array[read_pos] ; // read the delay buffer
-
67 
-
68  return (T)delay_sig;
-
69  }
-
70 
-
71 
-
72 
-
73  /** Input a value to the delay and retrieve the signal in the delay line at the position delaytime_cells.
-
74  @param in_value the signal input.
-
75  */
-
76  inline
-
77  T next(T in_value)
-
78  {
-
79  ++_write_pos &= (NUM_BUFFER_SAMPLES - 1);
-
80  unsigned int read_pos = (_write_pos - _delaytime_cells) & (NUM_BUFFER_SAMPLES - 1);
-
81 
-
82  // why does delay jump if I read it before writing?
-
83  delay_array[_write_pos] = in_value; // write to buffer
-
84  T delay_sig = delay_array[read_pos] ; // read the delay buffer
-
85 
-
86  return delay_sig;
-
87  }
-
88 
-
89 
-
90  /** Set the delay time, measured in cells.
-
91  @param delaytime_cells how many cells to delay the input signal by.
-
92  */
-
93  inline
-
94  void set(unsigned int delaytime_cells){
-
95  _delaytime_cells = delaytime_cells;
-
96  }
-
97 
-
98 
-
99  /** Retrieve the signal in the delay line at the position delaytime_cells.
-
100  It doesn't change the stored internal value of _delaytime_cells.
-
101  @param delaytime_cells indicates the delay time in terms of cells in the delay buffer.
-
102  */
-
103  inline
-
104  T read(unsigned int delaytime_cells)
-
105  {
-
106  unsigned int read_pos = (_write_pos - delaytime_cells) & (NUM_BUFFER_SAMPLES - 1);
-
107  return delay_array[read_pos];
-
108  }
-
109 
-
110 
-
111  // /** Input a value to the delay but don't advance the write position, change the delay time or retrieve the output signal.
-
112  // This can be useful for manually adding feedback to the delay line, "behind" the advancing write head.
-
113  // @param input the signal input.
-
114  // */
-
115  // inline
-
116  // void writeFeedback(T input)
-
117  // {
-
118  // delay_array[_write_pos] = input;
-
119  // }
-
120 
-
121 };
-
122 
-
123 /**
-
124 @example 09.Delays/AudioDelay/AudioDelay.ino
-
125 This is an example of how to use the AudioDelay class.
-
126 */
-
127 
-
128 #endif // #ifndef AUDIODELAY_H_
-
-
- - - diff --git a/extras/doc/html/_audio_delay_feedback_8h_source.html b/extras/doc/html/_audio_delay_feedback_8h_source.html deleted file mode 100644 index 9be75c559..000000000 --- a/extras/doc/html/_audio_delay_feedback_8h_source.html +++ /dev/null @@ -1,529 +0,0 @@ - - - - - - - -Mozzi: AudioDelayFeedback.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
AudioDelayFeedback.h
-
-
-
1 /*
-
2  * AudioDelayFeedback.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 #ifndef AUDIODELAY_FEEDBACK_H_
-
13 #define AUDIODELAY_FEEDBACK_H_
-
14 
-
15 #include <Arduino.h>
-
16 
-
17 #include "mozzi_utils.h"
-
18 #include "meta.h"
-
19 #include "IntegerType.h"
-
20 
-
21 enum interpolation_types {LINEAR,ALLPASS};
-
22 
-
23 
-
24 /** Audio delay line with feedback for comb filter, flange, chorus and short echo effects.
-
25 @tparam NUM_BUFFER_SAMPLES is the length of the delay buffer in samples, and should be a
-
26 power of two. The maximum delay length which will fit in an atmega328 is half
-
27 that of a plain AudioDelay object, in this case 256 cells, or about 15
-
28 milliseconds. AudioDelayFeedback uses int16_t sized cells to accomodate the higher
-
29 amplitude of direct input to the delay as well as the feedback, without losing
-
30 precision. Output is only the delay line signal. If you want to mix the delay
-
31 with the input, do it in your sketch. AudioDelayFeedback uses more processing and memory
-
32 than a plain AudioDelay, but allows for more dramatic effects with feedback.
-
33 @tparam INTERP_TYPE a choice of LINEAR (default) or ALLPASS interpolation. LINEAR is better
-
34 for sweeping delay times, ALLPASS may be better for reverb-like effects.
-
35 @tparam su the type of numbers to use for the signal in the delay. The default is int8_t, but int16_t could be useful. Larger types (int32_t) might produce overflows as of v2.0.2.
-
36 */
-
37 template <uint16_t NUM_BUFFER_SAMPLES, int8_t INTERP_TYPE = LINEAR, typename su=int8_t>
- -
39 {
-
40 
-
41  typedef typename IntegerType<sizeof(su)+sizeof(su)>::signed_type return_type;
-
42 
-
43 public:
-
44  /** Constructor.
-
45  */
- -
47  {}
-
48 
-
49 
-
50  /** Constructor.
-
51  @param delaytime_cells delay time expressed in cells.
-
52  For example, 128 cells delay at MOZZI_AUDIO_RATE 16384 would produce a time delay of 128/16384 = 0.0078125 s = 7.8 ms
-
53  Put another way, num_cells = delay_seconds * MOZZI_AUDIO_RATE.
-
54  */
- -
56  {}
-
57 
-
58 
-
59  /** Constructor.
-
60  @param delaytime_cells delay time expressed in cells.
-
61  For example, 128 cells delay at MOZZI_AUDIO_RATE 16384 would produce a time delay of 128/16384 = 0.0078125 s = 7.8 ms
-
62  Put another way, num_cells = delay_seconds * MOZZI_AUDIO_RATE.
-
63  @param feedback_level is the feedback level from -128 to 127 (representing -1 to 1).
-
64  */
-
65  AudioDelayFeedback(uint16_t delaytime_cells, int8_t feedback_level): write_pos(0), _feedback_level(feedback_level), _delaytime_cells(delaytime_cells)
-
66  {}
-
67 
-
68 
-
69 
-
70  /** Input a value to the delay and retrieve the signal in the delay line at the position delaytime_cells.
-
71  @param input the signal input.
-
72  @note slower than next(int8_t input, uint16_t delaytime_cells)
-
73  */
-
74  inline
-
75  return_type next(su input)
-
76  {
-
77  // chooses a different next() function depending on whether the
-
78  // the template parameter is LINEAR(default if none provided) or ALLPASS.
-
79  // See meta.h.
-
80  return next(input, Int2Type<INTERP_TYPE>());
-
81  }
-
82 
-
83 
-
84 
-
85  /** Input a value to the delay, retrieve the signal in the delay line at the position delaytime_cells, and add feedback from the output to the input.
-
86  @param input the signal input.
-
87  @param delaytime_cells indicates the delay time in terms of cells in the delay buffer.
-
88  It doesn't change the stored internal value of _delaytime_cells.
-
89  @note Timing: 4us
-
90  */
-
91  inline
-
92  return_type next(su input, uint16_t delaytime_cells)
-
93  {
-
94  //setPin13High();
-
95  ++write_pos &= (NUM_BUFFER_SAMPLES - 1);
-
96  uint16_t read_pos = (write_pos - delaytime_cells) & (NUM_BUFFER_SAMPLES - 1);
-
97  // < 1us to here
-
98  return_type delay_sig = delay_array[read_pos]; // read the delay buffer
-
99  // with this line, the method takes 18us
-
100  //int8_t feedback_sig = (int8_t) min(max(((delay_sig * _feedback_level)/128),-128),127); // feedback clipped
-
101  // this line, the whole method takes 4us... Compiler doesn't optimise pow2 divides. Why?
-
102  //int8_t feedback_sig = (int8_t) min(max(((delay_sig * _feedback_level)>>7),-128),127); // feedback clipped
-
103  su feedback_sig = (su) constrain( ((delay_sig * _feedback_level)>>7), -(1<<((sizeof(su)<<3)-1)), (1<<((sizeof(su)<<3)-1))-1);
-
104  delay_array[write_pos] = (return_type)input + feedback_sig; // write to buffer
-
105  //setPin13Low();
-
106  return delay_sig;
-
107  }
-
108 
-
109 
-
110 
-
111  /** Input a value to the delay, retrieve the signal in the delay line at the interpolated fractional position delaytime_cells, and add feedback from the output to the input.
-
112  @param input the signal input.
-
113  @param delaytime_cells is a fractional number to set the delay time in terms of cells
-
114  or partial cells in the delay buffer. It doesn't change the stored internal
-
115  value of _delaytime_cells.
-
116  */
-
117  inline
-
118  return_type next(su input, Q16n16 delaytime_cells)
-
119  {
-
120  //setPin13High();
-
121  ++write_pos &= (NUM_BUFFER_SAMPLES - 1);
-
122 
-
123  uint16_t index = Q16n16_to_Q16n0(delaytime_cells);
-
124  uint16_t fraction = (uint16_t) delaytime_cells; // keeps low word
-
125 
-
126  uint16_t read_pos1 = (write_pos - index) & (NUM_BUFFER_SAMPLES - 1);
-
127  return_type delay_sig1 = delay_array[read_pos1]; // read the delay buffer
-
128 
-
129  uint16_t read_pos2 = (write_pos - (index+1)) & (NUM_BUFFER_SAMPLES - 1);
-
130  return_type delay_sig2 = delay_array[read_pos2]; // read the delay buffer
-
131 
-
132 
-
133  return_type difference = delay_sig2 - delay_sig1;
-
134  //int16_t delay_sig_fraction = (int16_t)((int32_t)((int32_t) fraction * difference) >> 16);
-
135  return_type delay_sig_fraction = (return_type)((typename IntegerType<sizeof(return_type)+sizeof(return_type)>::signed_type)((typename IntegerType<sizeof(return_type)+sizeof(return_type)>::signed_type)fraction * difference) >> 16);
-
136 
-
137  return_type delay_sig = delay_sig1+delay_sig_fraction;
-
138 
-
139  //int16_t delay_sig = delay_sig1 + ((int32_t)delay_sig2*fraction)>>16;
-
140 
-
141  //int8_t feedback_sig = (int8_t) min(max((((int16_t)(delay_sig * _feedback_level))>>7),-128),127); // feedback clipped
-
142  su feedback_sig = (su) constrain(((delay_sig * _feedback_level)>>7), -(1<<((sizeof(su)<<3)-1)), (1<<((sizeof(su)<<3)-1))-1);
-
143  delay_array[write_pos] = (return_type) input + feedback_sig; // write to buffer
-
144  //setPin13Low();
-
145  return delay_sig;
-
146  }
-
147 
-
148 
-
149  /** Input a value to the delay but don't change the delay time or retrieve the output signal.
-
150  @param input the signal input.
-
151  */
-
152  inline
-
153  void write(su input)
-
154  {
-
155  ++write_pos &= (NUM_BUFFER_SAMPLES - 1);
-
156  delay_array[write_pos] = input;
-
157  }
-
158 
-
159 
-
160  /** Input a value to the delay but don't advance the write position, change the delay time or retrieve the output signal.
-
161  This can be useful for manually adding feedback to the delay line, "behind" the advancing write head.
-
162  @param input the signal input.
-
163  */
-
164  inline
-
165  void writeFeedback(su input)
-
166  {
-
167  delay_array[write_pos] = input;
-
168  }
-
169 
-
170 
-
171  /** Input a value to the delay at an offset from the current write position. Don't advance the main
-
172  write position or change the stored delay time or retrieve the output signal.
-
173  @param input the signal input.
-
174  @param offset the number of cells behind the ordinary write position where the input will be written.
-
175  */
-
176  inline
-
177  void write(su input, uint16_t offset)
-
178  {
-
179  uint16_t _pos = (write_pos + offset) & (NUM_BUFFER_SAMPLES - 1);
-
180  delay_array[_pos] = input;
-
181  }
-
182 
-
183 
-
184  /** Retrieve the signal in the delay line at the interpolated fractional position delaytime_cells.
-
185  It doesn't change the stored internal value of _delaytime_cells or feedback the output to the input.
-
186  @param delaytime_cells indicates the delay time in terms of cells in the delay buffer.
-
187  */
-
188  inline
-
189  return_type read(Q16n16 delaytime_cells)
-
190  {
-
191  return read(delaytime_cells, Int2Type<INTERP_TYPE>());
-
192  }
-
193 
-
194 
-
195  /** Retrieve the signal in the delay line at the current stored delaytime_cells.
-
196  It doesn't change the stored internal value of _delaytime_cells or feedback the output to the input.
-
197  */
-
198  inline
-
199  return_type read()
-
200  {
-
201  return read(Int2Type<INTERP_TYPE>());
-
202  }
-
203 
-
204 
-
205  /** Set delay time expressed in samples.
-
206  @param delaytime_cells delay time expressed in cells, with each cell played per tick of MOZZI_AUDIO_RATE.
-
207  For example, 128 cells delay at MOZZI_AUDIO_RATE would produce a time delay of 128/16384 = 0.0078125 s = 7.8 ms
-
208  Put another way, num_cells = delay_seconds * MOZZI_AUDIO_RATE.
-
209  */
-
210  inline
-
211  void setDelayTimeCells(uint16_t delaytime_cells)
-
212  {
-
213  _delaytime_cells = (uint16_t) delaytime_cells;
-
214  }
-
215 
-
216 
-
217  /** Set delay time expressed in samples, fractional Q16n16 for an interpolating delay.
-
218  @param delaytime_cells delay time expressed in cells, with each cell played per tick of MOZZI_AUDIO_RATE.
-
219  For example, 128 cells delay at MOZZI_AUDIO_RATE would produce a time delay of 128/16384 = 0.0078125 s = 7.8 ms
-
220  Put another way, num_cells = delay_seconds * MOZZI_AUDIO_RATE.
-
221  */
-
222  inline
-
223  void setDelayTimeCells(Q16n16 delaytime_cells)
-
224  {
-
225  return setDelayTimeCells(delaytime_cells, Int2Type<INTERP_TYPE>());
-
226  }
-
227 
-
228 
-
229  /** Set delay time expressed in samples, fractional float for an interpolating delay.
-
230  @param delaytime_cells delay time expressed in cells, with each cell played per tick of MOZZI_AUDIO_RATE.
-
231  For example, 128 cells delay at MOZZI_AUDIO_RATE would produce a time delay of 128/16384 = 0.0078125 s = 7.8 ms
-
232  Put another way, num_cells = delay_seconds * MOZZI_AUDIO_RATE.
-
233  */
-
234  inline
-
235  void setDelayTimeCells(float delaytime_cells)
-
236  {
-
237  return setDelayTimeCells(delaytime_cells, Int2Type<INTERP_TYPE>());
-
238  }
-
239 
-
240 
-
241  /** Set the feedback gain.
-
242  @param feedback_level is the feedback level from -128 to 127 (representing -1 to 1).
-
243  */
-
244  inline
-
245  void setFeedbackLevel(int8_t feedback_level)
-
246  {
-
247  _feedback_level = feedback_level;
-
248  }
-
249 
-
250 
-
251 
-
252 private:
-
253  return_type delay_array[NUM_BUFFER_SAMPLES];
-
254  uint16_t write_pos;
-
255  int8_t _feedback_level;
-
256  uint16_t _delaytime_cells;
-
257  Q15n16 _coeff; // for allpass interpolation
-
258  su last_in;
-
259  return_type last_out;
-
260 
-
261 
-
262 
-
263  /** Input a value to the delay and retrieve the signal in the delay line at the position delaytime_cells.
-
264  @param in_value the signal input.
-
265  */
-
266  inline
-
267  return_type next(su in_value, Int2Type<LINEAR>)
-
268  {
-
269  ++write_pos &= (NUM_BUFFER_SAMPLES - 1);
-
270  uint16_t read_pos = (write_pos - _delaytime_cells) & (NUM_BUFFER_SAMPLES - 1);
-
271 
-
272  return_type delay_sig = delay_array[read_pos]; // read the delay buffer
-
273  //int8_t feedback_sig = (int8_t) min(max(((delay_sig * _feedback_level)/128),-128),127); // feedback clipped
-
274  su feedback_sig = (su) constrain(((delay_sig * _feedback_level)>>7), -(1<<((sizeof(su)<<3)-1)), (1<<((sizeof(su)<<3)-1))-1);
-
275  delay_array[write_pos] = (return_type) in_value + feedback_sig; // write to buffer
-
276 
-
277  return delay_sig;
-
278  }
-
279 
-
280 
-
281 
-
282  /** The delaytime_cells has to be set seperately, because it's slowish
-
283  and in this implementation the allpass interpolation mode doesn't slide
-
284  nicely from one delay time to another.
-
285  @param input an audio signal in
-
286  @return the delayed signal, including feedback
-
287  @note Timing: 10us
-
288  */
-
289  inline
-
290  return_type next(su input, Int2Type<ALLPASS>)
-
291  {
-
292  /*
-
293  http://www.scandalis.com/Jarrah/Documents/DelayLine.pdf
-
294  also https://ccrma.stanford.edu/~jos/Interpolation/Interpolation_4up.pdf
-
295  for desired fractional delay of d samples,
-
296  coeff = (1-d)/(1+d)
-
297  or
-
298  coeff = ((d-1)>1) + (((d-1)*(d-1))>>2) - (((d-1)*(d-1)*(d-1))>>3)
-
299  out = coeff * in + last_in - coeff * last_out
-
300  = coeff * (in-last_out) + last_in
-
301  */
-
302  //setPin13High();
-
303 
-
304  /* I think these should **not** be static
-
305  static int8_t last_in;
-
306  static int16_t last_out;
-
307  */
-
308 
-
309  ++write_pos &= (NUM_BUFFER_SAMPLES - 1);
-
310 
-
311  uint16_t read_pos1 = (write_pos - _delaytime_cells) & (NUM_BUFFER_SAMPLES - 1);
-
312  return_type delay_sig = delay_array[read_pos1]; // read the delay buffer
-
313 
-
314  //int16_t interp = (int16_t)(_coeff * ((int16_t)input - last_out)>>16) + last_in; // Q15n16*Q15n0 + Q15n0 = Q15n16 + Q15n0 = Q15n16
-
315  return_type interp = (return_type)(_coeff * ((return_type)input - last_out)>>(sizeof(su)<<4)) + last_in;
-
316  delay_sig += interp;
-
317 
-
318  //int8_t feedback_sig = (int8_t) min(max(((delay_sig * _feedback_level)>>7),-128),127); // feedback clipped
-
319  su feedback_sig = (su) constrain(((delay_sig * _feedback_level)>>7), -(1<<((sizeof(su)<<3)-1)), (1<<((sizeof(su)<<3)-1))-1);
-
320  delay_array[write_pos] = (return_type) input + feedback_sig; // write to buffer
-
321 
-
322  last_in = input;
-
323  last_out = delay_sig;
-
324  //setPin13Low();
-
325  return delay_sig;
-
326  }
-
327 
-
328 
-
329 
-
330  // 20-25us
-
331  inline
-
332  void setDelayTimeCells(Q16n16 delaytime_cells, Int2Type<ALLPASS>)
-
333  {
-
334  /*
-
335  integer optimisation/approximation from
-
336  Van Duyne, Jaffe, Scandalis, Stilson 1997
-
337  http://www.scandalis.com/Jarrah/Documents/DelayLine.pdf
-
338  //coeff = -((d-1)>1) + (((d-1)*(d-1))>>2) - (((d-1)*(d-1)*(d-1))>>3) , d is fractional part
-
339  */
-
340  _delaytime_cells = delaytime_cells>>16; // whole integer part
-
341  Q15n16 dminus1 = - Q15n16_FIX1 + (uint16_t) delaytime_cells;
-
342  Q15n16 dminus1squared = (dminus1)*(dminus1)>>16;
-
343  _coeff = -(dminus1>>1) + (dminus1squared>>2) - (((dminus1squared*dminus1)>>16)>>3);
-
344  }
-
345 
-
346 
-
347  // 100us
-
348  inline
-
349  void setDelayTimeCells(float delaytime_cells, Int2Type<ALLPASS>)
-
350  {
-
351  //coeff = (1-d)/(1+d)
-
352  _delaytime_cells = (uint16_t) delaytime_cells;
-
353 
-
354  float fraction = delaytime_cells - _delaytime_cells;
-
355 
-
356  // modified from stk DelayA.cpp
-
357  float alpha_ = 1.0f + fraction; // fractional part
-
358  if ( alpha_ < 0.5f ) {
-
359  // (stk): The optimal range for alpha is about 0.5 - 1.5 in order to
-
360  // achieve the flattest phase delay response.
-
361 
-
362  // something's not right about how I use _delaytime_cells and
-
363  // NUM_BUFFER_SAMPLES etc. in my ringbuffer compared to stk
-
364  _delaytime_cells += 1;
-
365  if ( _delaytime_cells >= NUM_BUFFER_SAMPLES ) _delaytime_cells -= NUM_BUFFER_SAMPLES;
-
366  alpha_ += 1.0f;
-
367  }
-
368  // otherwise this would use fraction instead of alpha
-
369  _coeff = float_to_Q15n16((1.f-alpha_)/(1.f+alpha_));
-
370  }
-
371 
-
372  // Retrieve the signal in the delay line at the position delaytime_cells.
-
373  // It doesn't change the stored internal value of _delaytime_cells or feedback the output to the input.
-
374  // param delaytime_cells indicates the delay time in terms of cells in the delay buffer.
-
375  //
-
376  // inline
-
377  // int16_t read(uint16_t delaytime_cells, Int2Type<LINEAR>)
-
378  // {
-
379  // uint16_t read_pos = (write_pos - delaytime_cells) & (NUM_BUFFER_SAMPLES - 1);
-
380  // int16_t delay_sig = delay_array[read_pos]; // read the delay buffer
-
381  //
-
382  // return delay_sig;
-
383  // }
-
384 
-
385  /** Retrieve the signal in the delay line at the interpolated fractional position delaytime_cells.
-
386  It doesn't change the stored internal value of _delaytime_cells or feedback the output to the input.
-
387  @param delaytime_cells indicates the delay time in terms of cells in the delay buffer.
-
388  */
-
389  inline
-
390  return_type read(Q16n16 delaytime_cells, Int2Type<LINEAR>)
-
391  {
-
392  uint16_t index = (Q16n16)delaytime_cells >> 16;
-
393  uint16_t fraction = (uint16_t) delaytime_cells; // keeps low word
-
394 
-
395  uint16_t read_pos1 = (write_pos - index) & (NUM_BUFFER_SAMPLES - 1);
-
396  return_type delay_sig1 = delay_array[read_pos1]; // read the delay buffer
-
397 
-
398  uint16_t read_pos2 = (write_pos - (index+1)) & (NUM_BUFFER_SAMPLES - 1);
-
399  return_type delay_sig2 = delay_array[read_pos2]; // read the delay buffer
-
400 
-
401  /*
-
402  int16_t difference = delay_sig2 - delay_sig1;
-
403  int16_t delay_sig_fraction = ((int32_t) fraction * difference) >> 16;
-
404 
-
405  int16_t delay_sig = delay_sig1+delay_sig_fraction;
-
406  */
-
407  //int16_t delay_sig = delay_sig1 + ((int32_t)delay_sig2*fraction)>>16;
-
408  return_type delay_sig = delay_sig1 + ((typename IntegerType<sizeof(return_type)+sizeof(return_type)>::signed_type)delay_sig2*fraction)>>16;
-
409 
-
410  return delay_sig;
-
411  }
-
412 
-
413 
-
414 };
-
415 
-
416 /**
-
417 @example 09.Delays/AudioDelayFeedback/AudioDelayFeedback.ino
-
418 This is an example of how to use the AudioDelayFeedback class.
-
419 */
-
420 
-
421 #endif // #ifndef AUDIODELAY_FEEDBACK_H_
-
-
- - - diff --git a/extras/doc/html/_audio_output_8h_source.html b/extras/doc/html/_audio_output_8h_source.html deleted file mode 100644 index 104b9489a..000000000 --- a/extras/doc/html/_audio_output_8h_source.html +++ /dev/null @@ -1,355 +0,0 @@ - - - - - - - -Mozzi: AudioOutput.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
AudioOutput.h
-
-
-
1 /*
-
2  * AudioOutput.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2021-2024 Thomas Friedrichsmeier and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 /** @defgroup audio_output Audio Output and Buffering
-
13  *
-
14  * @details Documentation on basic Mozzi architecture and output modes */
-
15 
-
16 /** @ingroup audio_output
-
17  * @page mozzi_audio_output_architecture Basic architecture of audio generation, buffering, and output in Mozzi
-
18  *
-
19  * Mozzi provides support for audio ouput on a range of different boards and CPUs. This page is about the following related topics:
-
20  *
-
21  * - adding a custom output method (importantly using external DACs) to your sketch
-
22  * - writing sketches that will work on different platforms / with different output methods
-
23  * - extending Mozzi for a new architecture
-
24  *
-
25  * For all of these topics, it is helpful to have a basic understanding of the basic output steps in Mozzi:
-
26  *
-
27  * 1. Inside the loop() function in your sketch you call audioHook().
-
28  * 1a. If the audio output buffer is currently filled, this does nothing.
-
29  * 1b. Otherwise, this calls updateAudio(). The generated sample is then added to the audio output buffer. (Also, updateControl() will be called at an appropriate rate,
-
30  * and a few other details that are not important for this discussion.)
-
31  *
-
32  * 2. A platform-specific timer is triggered at audio rate (usually), takes a sample from the output buffer and sends it to audioOutput().
-
33  *
-
34  * 3. The audioOutput() function - usually predefined inside Mozzi - takes care of sending the sample to the hardware.
-
35  *
-
36  * These output steps are not always followed, however. Firstly, when using @ref external_audio output, the audioOutput() funtion is supplied by the user sketch,
-
37  * instead of Mozzi. @ref external_audio output.
-
38  *
-
39  * Some ports will also want to bypass the Mozzi audio output buffer. For instance, an internal DAC may be addressable via an efficient DMA-connected
-
40  * buffer, already, and also have a built-in rate control. In this case, ports will internally set the define @ref BYPASS_MOZZI_OUTPUT_BUFFER to true. Such a port will
-
41  * have to provide a custom definition of canBufferAudioOutput(), returning true, whenever a new sample of output can be accepted. No timer at audio-rate is set up in this
-
42  * case.
-
43  *
-
44  * Finally, the @ref external_audio output mode (@ref MOZZI_AUDIO_MODE MOZZI_OUTPUT_EXTERNAL_CUSTOM) is essentially a combination of the two. Here, the user sketch needs to provide
-
45  * both audioOutput() and canBufferAudioOutput(). The latter is again called from audioHook(), and whenever it returns true, a new sample is generated and passed to
-
46  * audioOutput().
-
47  *
-
48  * @section audio_shifting Platform specific audio resolution
-
49  * Different output methods often support a different resolution of output samples. To provide best performance on slow boards, Mozzi expects your updateAudio() function to
-
50  * return samples in exactly the width that is needed at the output stage. Thus, defining this naively, an updateAudio() function designed for 8 bit output will produce very
-
51  * low volume output on a 16 bit DAC, while the other way around overflows will result in way too loud and heavily distored output. Fortunately, all that is needed to write
-
52  * portable sketches is to specify how many bits your updateAudio() function provides. The (inline) functions in the AudioOutput namespace do just that. Using them makes sure
-
53  * your audio output is shifted if, and as much as needed on all platforms.
-
54  *
-
55  * @see MonoOutput::fromNBit(), StereoOutput::fromNBit()
-
56  */
-
57 
-
58 #ifndef AUDIOOUTPUT_H
-
59 #define AUDIOOUTPUT_H
-
60 #include <FixMath.h>
-
61 
-
62 /** The type used to store a single channel of a single frame, internally. For compatibility with earlier versions of Mozzi this is defined as int.
-
63  * If you do not care about keeping old sketches working, you may be able to save some RAM by using int16_t, instead (on boards where int is larger
-
64  * than 16 bits). */
-
65 #define AudioOutputStorage_t int
-
66 
-
67 template<typename T> constexpr AudioOutputStorage_t SCALE_AUDIO(T x, byte bits) { return (bits > MOZZI_AUDIO_BITS ? (x) >> (bits - MOZZI_AUDIO_BITS) : (x) << (MOZZI_AUDIO_BITS - bits)); }
-
68 template<typename T> constexpr AudioOutputStorage_t SCALE_AUDIO_NEAR(T x, byte bits) { return (bits > MOZZI_AUDIO_BITS_OPTIMISTIC ? (x) >> (bits - MOZZI_AUDIO_BITS_OPTIMISTIC) : (x) << (MOZZI_AUDIO_BITS_OPTIMISTIC - bits)); }
-
69 template<typename T> constexpr AudioOutputStorage_t CLIP_AUDIO(T x) { return (constrain((x), (-(AudioOutputStorage_t) MOZZI_AUDIO_BIAS), (AudioOutputStorage_t) (MOZZI_AUDIO_BIAS-1))); }
-
70 
-
71 struct MonoOutput;
-
72 struct StereoOutput;
-
73 
- -
75 typedef StereoOutput AudioOutput;
-
76 #else
-
77 /** Representation of an single audio output sample/frame. This typedef maps to either MonoOutput or StereoOutput, depending on what is configured
-
78  * in MOZZI_AUDIO_CHANNELS. Since the two are source compatible to a large degree, it often isn't even necessary to test, which it is, in your code. E.g.
-
79  * both have functions l() and r(), to return "two" audio channels (which will be the same in case of mono).
-
80  *
-
81  * You will not usually use or encounter this definition, unless using @ref external_audio output mode.
-
82  */
-
83 typedef MonoOutput AudioOutput;
-
84 #endif
-
85 
- - -
88 typedef int AudioOutput_t; // Note: Needed for pre 1.1 backwards compatibility
-
89 #else
-
90 /** Transitory alias to AudioOutput. The only point of this typedef is to keep old code working. In new code,
-
91  * use AudioOutput, directly, instead.
-
92 */
-
93 MOZZI_DEPRECATED("2.0", "Replace AudioOutput_t with simple AudioOutput") typedef AudioOutput AudioOutput_t;
-
94 #endif
-
95 #endif
-
96 
-
97 /** This struct encapsulates one frame of mono audio output. Internally, it really just boils down to a single int value, but the struct provides
-
98  * useful API an top of that, for the following:
-
99  *
-
100  * a) To construct an output frame, you should use one of the from8Bit(), fromNBit(), etc. functions. Given a raw input value, at a known resolution (number of bits),
-
101  * this scales the output efficiently to whatever is needed on the target platform. Using this, your updateAudio() function will be portable across different CPU and
-
102  * different output methods, including external DACs.
-
103  * b) The struct provides some convenience API on top of this. Right now, this is the function clip(), replacing the more verbose, and non-portable constrain(x, -244, 243)
-
104  * found in some old sketches.
-
105  * c) The struct provides accessors l() and r() that are source-compatible with StereoOutput, making it easy to e.g. implement support for an external DAC in both mono
-
106  * and stereo.
-
107  * d) Finally, an automatic conversion operator to int aka AudioOutput_t provides backward compatibility with old Mozzi sketches. Internally, the compiler will actually
-
108  * do away with this whole struct, leaving just the same basic fast integer operations as in older Mozzi sketches. However, now, you don't have to rewrite those for
-
109  * different configurations.
-
110  */
-
111 struct MonoOutput {
-
112  /** Default constructor. Does not initialize the sample! */
- -
114  /** Construct an audio frame from raw values (zero-centered) */
- -
116 #if (MOZZI_AUDIO_CHANNELS > 1)
-
117  /** Conversion to stereo operator: If used in a stereo config, returns identical channels (and gives a compile time warning).
-
118  This _could_ be turned into an operator for implicit conversion in this case. For now we chose to apply conversion on demand, only, as most of the time
-
119  using StereoOutput in a mono config, is not intended. */
-
120  StereoOutput portable() const __attribute__((deprecated("Sketch generates mono output, but Mozzi is configured for stereo. Check MOZZI_AUDIO_CHANNELS setting."))); // Note: defintion below
-
121 #endif
-
122  /** Conversion to int operator. */
-
123  operator AudioOutputStorage_t() const { return _l; };
-
124 
-
125  AudioOutputStorage_t l() const { return _l; };
-
126  AudioOutputStorage_t r() const { return _l; };
-
127  /** Clip frame to supported range. This is useful when at times, but only rarely, the signal may exceed the usual range. Using this function does not avoid
-
128  * artifacts, entirely, but gives much better results than an overflow. */
-
129  MonoOutput& clip() { _l = CLIP_AUDIO(_l); return *this; };
-
130 
-
131  /** Construct an audio frame a zero-centered value known to be in the N bit range. Appropriate left- or right-shifting will be performed, based on the number of output
-
132  * bits available. While this function takes care of the shifting, beware of potential overflow issues, if your intermediary results exceed the 16 bit range. Use proper
-
133  * casts to int32_t or larger in that case (and the compiler will automatically pick the 32 bit overload in this case) */
-
134  template<typename T> static inline MonoOutput fromNBit(uint8_t bits, T l) { return MonoOutput(SCALE_AUDIO(l, bits)); }
-
135  /** Construct an audio frame from a zero-centered value known to be in the 8 bit range. On AVR, if MOZZI_OUTPUT_PWM mode, this is effectively the same as calling the
-
136  * constructor, directly (no scaling gets applied). On platforms/configs using more bits, an appropriate left-shift will be performed. */
-
137  static inline MonoOutput from8Bit(int16_t l) { return fromNBit(8, l); }
-
138  /** Construct an audio frame from a zero-centered value known to be in the 16 bit range. This is jsut a shortcut for fromNBit(16, ...) provided for convenience. */
-
139  static inline MonoOutput from16Bit(int16_t l) { return fromNBit(16, l); }
-
140  /** Construct an audio frame from a SFix type from FixMath. Mozzi will figure out how many bits are in there and performs appropriate shifting to match the output range. */
-
141  template<int8_t NI, int8_t NF, uint64_t RANGE>
-
142  static inline MonoOutput fromSFix(SFix<NI,NF,RANGE> l) { return MonoOutput(SCALE_AUDIO(l.asRaw(), (NI+NF+1))) ;}
-
143  /** Construct an audio frame a zero-centered value known to be above at almost but not quite the N bit range, e.g. at N=8 bits and a litte. On most platforms, this is
-
144  * exactly the same as fromNBit(), shifting up or down to the platforms' available resolution.
-
145  *
-
146  * However, on AVR, MOZZI_OUTPUT_PWM mode (where about 8.5 bits are usable), the value will be shifted to the (almost) 9 bit range, instead of to the 8 bit range. allowing to
-
147  * make use of that extra half bit of resolution. In many cases it is useful to follow up this call with clip(). E.g.:
-
148  *
-
149  * @code
-
150  * return MonoOutput::fromAlmostNBit(10, oscilA.next() + oscilB.next() + oscilC.next()).clip();
-
151  * @endcode
-
152  */
-
153  template<typename A, typename B> static inline MonoOutput fromAlmostNBit(A bits, B l) { return MonoOutput(SCALE_AUDIO_NEAR(l, bits)); }
-
154 
-
155 private:
- -
157 };
-
158 
-
159 /** This struct encapsulates one frame of mono audio output. Internally, it really just boils down to two int values, but the struct provides
-
160  * useful API an top of that. For more detail see @ref MonoOutput . */
-
161 struct StereoOutput {
-
162  /** Construct an audio frame from raw values (zero-centered) */
- -
164  /** Default constructor. Does not initialize the sample! */
- - -
167  /** Conversion to int operator: If used in a mono config, returns only the left channel (and gives a compile time warning).
-
168  This _could_ be turned into an operator for implicit conversion in this case. For now we chose to apply conversion on demand, only, as most of the time
-
169  using StereoOutput in a mono config, is not intended. */
-
170  inline AudioOutput portable() const __attribute__((deprecated("Sketch generates stereo output, but Mozzi is configured for mono. Check MOZZI_AUDIO_CHANNELS setting."))) { return _l; };
-
171 # if GITHUB_RUNNER_ACCEPT_STEREO_IN_MONO
-
172  inline operator AudioOutput() const __attribute__((deprecated("Stereo converted to mono on github runner"))) { return _l; };
-
173 # endif
-
174 #endif
-
175  AudioOutputStorage_t l() const { return _l; };
-
176  AudioOutputStorage_t r() const { return _r; };
-
177  /** See @ref MonoOutput::clip(). Clips both channels. */
-
178  StereoOutput& clip() { _l = CLIP_AUDIO(_l); _r = CLIP_AUDIO(_r); return *this; };
-
179 
-
180  /** See @ref MonoOutput::fromNBit(), stereo variant */
-
181 template<typename T> static inline StereoOutput fromNBit(uint8_t bits, T l, T r) { return StereoOutput(SCALE_AUDIO(l, bits), SCALE_AUDIO(r, bits)); }
-
182  /** See @ref MonoOutput::from8Bit(), stereo variant */
-
183  static inline StereoOutput from8Bit(int16_t l, int16_t r) { return fromNBit(8, l, r); }
-
184  /** See @ref MonoOutput::from16Bit(), stereo variant */
-
185  static inline StereoOutput from16Bit(int16_t l, int16_t r) { return fromNBit(16, l, r); }
-
186 /** See @ref MonoOutput::fromSFix(), stereo variant. Note that the two channels do not need to have the same number of bits. */
-
187  template<int8_t NI, int8_t NF, uint64_t RANGE, int8_t _NI, int8_t _NF, uint64_t _RANGE>
-
188  static inline StereoOutput fromSFix(SFix<NI,NF,RANGE> l, SFix<_NI,_NF,_RANGE> r) { return StereoOutput(SCALE_AUDIO(l.asRaw(), (NI+NF+1)), SCALE_AUDIO(r.asRaw(), (_NI+_NF+1))); }
-
189  /** See @ref MonoOutput::fromAlmostNBit(), stereo variant */
-
190  template<typename A, typename B> static inline StereoOutput fromAlmostNBit(A bits, B l, B r) { return StereoOutput(SCALE_AUDIO_NEAR(l, bits), SCALE_AUDIO_NEAR(r, bits)); }
-
191 private:
- - -
194 };
-
195 
-
196 #if MOZZI_AUDIO_CHANNELS > 1
-
197 StereoOutput MonoOutput::portable() const { return StereoOutput(_l, _l); };
-
198 #endif
-
199 
- -
201 /** When setting using one of the external output modes (@ref MOZZI_OUTPUT_EXTERNAL_TIMED or @ref MOZZI_OUTPUT_EXTERNAL_CUSTOM) implement this function to take care of writing samples to the hardware.
-
202  * In all otther cases, it will be provided by the platform implementation. You should never call this function, directly, in your sketch. */
-
203 void audioOutput(const AudioOutput f);
-
204 #endif
-
205 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_CUSTOM)
-
206 /** For @ref MOZZI_OUTPUT_EXTERNAL_CUSTOM implement this function to return true, if and only if your hardware (or custom buffer) is ready to accept the next sample. */
-
207 inline bool canBufferAudioOutput();
-
208 #endif
-
209 
-
210 /** Perform one step of (fast) pdm encoding, returning 8 "bits" (i.e. 8 ones and zeros).
-
211  * You will usually call this at least four or eight times, and possibly much more often
-
212  * for a single input sample.
-
213  *
-
214  * The return type is defined as uint32_t to avoid conversion steps. Actually, only the 8 lowest
-
215  * bits of the return value are set. */
-
216 inline uint32_t pdmCode8(uint16_t sample) {
-
217  // lookup table for fast pdm coding on 8 output bits at a time
-
218  static const byte fast_pdm_table[]{0, 0b00010000, 0b01000100,
-
219  0b10010010, 0b10101010, 0b10110101,
-
220  0b11011101, 0b11110111, 0b11111111};
-
221 
-
222  static uint32_t lastwritten = 0;
-
223  static uint32_t nexttarget = 0;
-
224  // in each iteration, code the highest 3-and-a-little bits.
-
225  // Note that sample only has 16 bits, while the
-
226  // highest bit we consider for writing is bit 17.
-
227  // Thus, if the highest bit is set, the next
-
228  // three bits cannot be. (highest possible values:
-
229  // nexttarget-lastwritten == 0b00001111111111111,
-
230  // sample == 0b01111111111111111)
-
231  nexttarget += sample;
-
232  nexttarget -= lastwritten;
-
233  lastwritten = nexttarget & 0b11110000000000000;
-
234  return fast_pdm_table[lastwritten >> 13];
-
235 }
-
236 
-
237 /** Convenience function to perform four iterations of pdmCode8() */
-
238 inline uint32_t pdmCode32(uint16_t sample) {
-
239  uint32_t outbits = 0;
-
240  for (uint8_t i = 0; i < 4; ++i) {
-
241  outbits = outbits << 8;
-
242  outbits |= pdmCode8(sample);
-
243  }
-
244  return outbits;
-
245 }
-
246 
-
247 #endif
-
-
- - - diff --git a/extras/doc/html/_auto_map_8h_source.html b/extras/doc/html/_auto_map_8h_source.html deleted file mode 100644 index 1c6da1adb..000000000 --- a/extras/doc/html/_auto_map_8h_source.html +++ /dev/null @@ -1,185 +0,0 @@ - - - - - - - -Mozzi: AutoMap.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
AutoMap.h
-
-
-
1 /*
-
2  * AutoMap.h
-
3 /*
-
4  * AutoMap.h
-
5  *
-
6  * This file is part of Mozzi.
-
7  *
-
8  * Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
9  *
-
10  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
11  *
-
12  */
-
13 
-
14 #ifndef AUTOMAP_H_
-
15 #define AUTOMAP_H_
-
16 
-
17 // for map - maybe rewrite my own templated map for better efficiency
-
18 #include <Arduino.h> // for map
-
19 
-
20 #include "AutoRange.h"
-
21 
-
22 /** @defgroup sensortools Automatic range adjustment
-
23 */
-
24 
-
25 /** @ingroup sensortools
-
26 Automatically map an input value to an output range without knowing the precise range of inputs beforehand.
-
27 */
-
28 
-
29 class AutoMap : public AutoRange<int>
-
30 {
-
31 public:
-
32  /** Constructor.
-
33  @param min_expected the minimum possible input value.
-
34  @param max_expected the maximum possible input value.
-
35  */
-
36  AutoMap(int min_expected, int max_expected, int map_to_min, int map_to_max)
-
37  : inherited(min_expected,max_expected),map_min(map_to_min), map_max(map_to_max)
-
38  {
-
39  }
-
40 
-
41 
-
42  /** Process the next value and return it mapped to the range which was set in the constructor.
-
43  Can use the operator instead if you prefer, eg. myMap(n) instead of myMap.next(n).
-
44  @param n the next value to process.
-
45  @return the input value mapped to the range which was set in the constructor.
-
46  */
-
47  inline
-
48  int next(int n)
-
49  {
-
50  inherited::next(n);
-
51  return map(n,inherited::getMin(),inherited::getMax(),map_min,map_max);
-
52  }
-
53 
-
54  /** Process the next value and return it mapped to the range which was set in the constructor.
-
55  This is an alternative to next() if you prefer, eg. myMap(n) instead of myMap.next(n).
-
56  @param n the next value to process.
-
57  @return the input value mapped to the range which was set in the constructor.
-
58  */
-
59  inline
-
60  int operator()(int n)
-
61  {
-
62  return next(n);
-
63  }
-
64 
-
65 
-
66 private:
-
67  typedef AutoRange <int> inherited;
-
68  int map_min, map_max;
-
69 };
-
70 
-
71 
-
72 /**
-
73 @example 03.Sensors/Knob_LDR_x2_WavePacket/Knob_LDR_x2_WavePacket.ino
-
74 This example demonstrates the AutoMap class.
-
75 */
-
76 
-
77 #endif // #ifndef AUTOMAP_H_
-
-
- - - diff --git a/extras/doc/html/_auto_range_8h_source.html b/extras/doc/html/_auto_range_8h_source.html deleted file mode 100644 index bc1faf798..000000000 --- a/extras/doc/html/_auto_range_8h_source.html +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - - -Mozzi: AutoRange.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
AutoRange.h
-
-
-
1 /*
-
2  * AutoRange.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2013-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 #ifndef AUTORANGE_H
-
13 #define AUTORANGE_H
-
14 
-
15 /** @ingroup sensortools
-
16 Keeps a running calculation of the range of the input values it receives.
-
17 */
-
18 template <class T>
-
19 class
-
20  AutoRange {
-
21 
-
22 public:
-
23  /** Constructor.
-
24  @tparam T the type of numbers to to use, eg. int, unsigned int, float etc.
-
25  @param min_expected the minimum possible input value.
-
26  @param max_expected the maximum possible input value.
-
27  */
-
28  AutoRange(T min_expected, T max_expected):range_min(max_expected),range_max(min_expected),range(0)
-
29  {
-
30  }
-
31 
-
32 
-
33  /** Updates the current range.
-
34  @param n the next value to include in the range calculation.
-
35  */
-
36  void next(T n)
-
37  {
-
38  if (n > range_max)
-
39  {
-
40  range_max = n;
-
41  range = range_max - range_min;
-
42  }
-
43  else
-
44  {
-
45  if (n< range_min)
-
46  {
-
47  range_min = n;
-
48  range = range_max - range_min;
-
49  }
-
50  }
-
51  }
-
52 
-
53  /** Returns the current minimum.
-
54  @return minimum
-
55  */
-
56  T getMin()
-
57  {
-
58  return range_min;
-
59  }
-
60 
-
61 
-
62  /** Returns the current maximum.
-
63  @return maximum
-
64  */
-
65  T getMax()
-
66  {
-
67  return range_max;
-
68  }
-
69 
-
70 
-
71  /** Returns the current range.
-
72  @return range
-
73  */
- -
75  {
-
76  return range;
-
77  }
-
78 
-
79 private:
-
80  T range_max, range_min, range;
-
81 
-
82 };
-
83 
-
84 #endif // #ifndef AUTORANGE_H
-
-
- - - diff --git a/extras/doc/html/_cap_poll_8h_source.html b/extras/doc/html/_cap_poll_8h_source.html deleted file mode 100644 index 6e85e0452..000000000 --- a/extras/doc/html/_cap_poll_8h_source.html +++ /dev/null @@ -1,174 +0,0 @@ - - - - - - - -Mozzi: CapPoll.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
CapPoll.h
-
-
-
1 /*
-
2  * CapPoll.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2015-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 #ifndef RCPOLL_H
-
13 #define RCPOLL_H
-
14 
-
15 
-
16 /**
-
17 A class for reading voltage on a digital pin, derived from http://arduino.cc/en/Tutorial/RCtime.
-
18 This is designed to be used in updateControl(). Each time it is called, it checks if a capacitor has charged,
-
19 and returns an output reflecting how long it took for the most recent charge.
-
20 */
-
21 
-
22 template <unsigned char SENSOR_PIN, unsigned char SEND_PIN>
-
23 class CapPoll
-
24 {
-
25 
-
26 public:
-
27  /** Constructor.
-
28  */
-
29  CapPoll():result(0),rc_cued(true), output(0)
-
30  {
-
31  ;
-
32  }
-
33 
-
34  /** Checks whether the capacitor has charged, and returns how long it took for the most recent charge.
-
35  This would preferably be called in updateControl(), but if the resolution isn't fine enough or the
-
36  pin charges too fast for updateControl() to catch, try it in updateAudio().
-
37  @return the sensor value, reflected in how many checking cycles it took to charge the capacitor.
-
38  */
-
39  inline
-
40  unsigned int next(){
-
41  if (rc_cued){
-
42  pinMode(SENSOR_PIN, INPUT); // turn pin into an input and time till pin goes low
-
43  digitalWrite(SENSOR_PIN, LOW); // turn pullups off - or it won't work
-
44  rc_cued = false;
-
45  }
-
46  if(digitalRead(SENSOR_PIN)){ // wait for pin to go low
-
47  result++;
-
48  }
-
49  else{
-
50  output = result;
-
51  result = 0;
-
52  pinMode(SENSOR_PIN, OUTPUT); // make pin OUTPUT
-
53  digitalWrite(SENSOR_PIN, HIGH); // make pin HIGH to discharge capacitor - see the schematic
-
54  rc_cued = true;
-
55  }
-
56  return output;
-
57  }
-
58 
-
59 private:
-
60  unsigned int result;
-
61  boolean rc_cued;
-
62  unsigned int output;
-
63 
-
64 };
-
65 
-
66 #endif // #ifndef RCPOLL_H
-
-
- - - diff --git a/extras/doc/html/_circular_buffer_8h_source.html b/extras/doc/html/_circular_buffer_8h_source.html deleted file mode 100644 index ee44935d8..000000000 --- a/extras/doc/html/_circular_buffer_8h_source.html +++ /dev/null @@ -1,202 +0,0 @@ - - - - - - - -Mozzi: CircularBuffer.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
CircularBuffer.h
-
-
-
1 /*
-
2  * CircularBuffer.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2014-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 /*
-
13 Modified from https://en.wikipedia.org/wiki/Circular_buffer
-
14 Mirroring version
-
15 On 18 April 2014, the simplified version on the Wikipedia page for power of 2 sized buffers
-
16 doesn't work - cbIsEmpty() returns true whether the buffer is full or empty.
-
17 */
-
18 
-
19 #define MOZZI_BUFFER_SIZE 256 // do not expect to change and it to work.
-
20  // just here for forward compatibility if one day
-
21  // the buffer size might be editable
-
22 
-
23 /** Circular buffer object. Has a fixed number of cells, set to 256.
-
24 @tparam ITEM_TYPE the kind of data to store, eg. int, int8_t etc.
-
25 */
-
26 template <class ITEM_TYPE>
- -
28 {
-
29 
-
30 public:
-
31  /** Constructor
-
32  */
- -
34  {
-
35  }
-
36 
-
37  inline
-
38  bool isFull() {
-
39  return end == start && e_msb != s_msb;
-
40  }
-
41 
-
42  inline
-
43  bool isEmpty() {
-
44  return end == start && e_msb == s_msb;
-
45  }
-
46 
-
47  inline
-
48  void write(ITEM_TYPE in) {
-
49  items[end] = in;
-
50  //if (isFull()) cbIncrStart(); /* full, overwrite moves start pointer */
-
51  cbIncrEnd();
-
52  }
-
53 
-
54  inline
-
55  ITEM_TYPE read() {
-
56  ITEM_TYPE out = items[start];
-
57  cbIncrStart();
-
58  return out;
-
59  }
-
60 
-
61  inline
-
62  unsigned long count() {
-
63  return (num_buffers_read << 8) + start;
-
64  }
-
65  inline
-
66  ITEM_TYPE * address() {
-
67  return items;
-
68  }
-
69 
-
70 private:
-
71  ITEM_TYPE items[MOZZI_BUFFER_SIZE];
-
72  uint8_t start; /* index of oldest itement */
-
73  uint8_t end; /* index at which to write new itement */
-
74  uint8_t s_msb;
-
75  uint8_t e_msb;
-
76  unsigned long num_buffers_read;
-
77 
-
78 
-
79  inline
-
80  void cbIncrStart() {
-
81  start++;
-
82  if (start == 0) {
-
83  s_msb ^= 1;
-
84  num_buffers_read++;
-
85  }
-
86  }
-
87 
-
88  inline
-
89  void cbIncrEnd() {
-
90  end++;
-
91  if (end == 0) e_msb ^= 1;
-
92  }
-
93 
-
94 };
-
-
- - - diff --git a/extras/doc/html/_control_delay_8h_source.html b/extras/doc/html/_control_delay_8h_source.html deleted file mode 100644 index 3332d65f5..000000000 --- a/extras/doc/html/_control_delay_8h_source.html +++ /dev/null @@ -1,146 +0,0 @@ - - - - - - - -Mozzi: ControlDelay.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
ControlDelay.h
-
-
-
1 /*
-
2  * ControlDelay.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 #ifndef CONTROLDELAY_H_
-
13 #define CONTROLDELAY_H_
-
14 
-
15 #include "AudioDelay.h"
-
16 
-
17 /**
-
18 @brief Control-rate delay line for delaying control signals.
-
19 For example, this could be used to produce echo-like effects using multiple
-
20 instances of the same voice, when AudioDelay would be too short for an actual
-
21 audio echo. This is in fact just a wrapper of the AudioDelay code.
-
22 @tparam NUM_BUFFER_SAMPLES is the length of the delay buffer in samples. This should
-
23 be a power of two.
-
24 @tparam the type of numbers to use for the signal in the delay. The default is int8_t, but int could be useful
-
25 when adding manual feedback. When using int, the input should be limited to 15 bits width, ie. -16384 to 16383.
-
26 */
-
27 
-
28 template <unsigned int NUM_BUFFER_SAMPLES, class T = int>
-
29 class ControlDelay: public AudioDelay<NUM_BUFFER_SAMPLES, T>
-
30 {
-
31 };
-
32 
-
33 /**
-
34 @example 02.Control/Control_Echo_Theremin/Control_Echo_Theremin.ino
-
35 This is an example of how to use the ControlDelay class.
-
36 */
-
37 
-
38 #endif // #ifndef CONTROLDELAY_H_
-
-
- - - diff --git a/extras/doc/html/_d_cfilter_8h_source.html b/extras/doc/html/_d_cfilter_8h_source.html deleted file mode 100644 index a51504e8c..000000000 --- a/extras/doc/html/_d_cfilter_8h_source.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - - -Mozzi: DCfilter.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
DCfilter.h
-
-
-
1 /*
-
2  * DCfilter.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 #ifndef DCFILTER_H
-
13 #define DCFILTER_H
-
14 
-
15 /*
-
16 tb2010 adapted from:
-
17 robert bristow-johnson, DSP Trick: Fixed-Point DC Blocking Filter with Noise-Shaping
-
18 http://www.dspguru.com/book/export/html/126
-
19 
-
20 y[n] = x[n] - x[n-1] + a * y[n-1]
-
21 
-
22 Where y[n] is the output at the current time n, and x[n] is the input at the current time n.
-
23 
-
24 also, see DC Blocker Algorithms, http://www.ingelec.uns.edu.ar/pds2803/materiales/articulos/04472252.pdf
-
25  */
-
26 
-
27 /**
-
28 A DC-blocking filter useful for highlighting changes in control signals.
-
29 The output of the filter settles to 0 if the incoming signal stays constant. If the input changes, the
-
30 filter output swings to track the change and eventually settles back to 0.
-
31 */
-
32 class DCfilter
-
33 {
-
34 public:
-
35 /**
-
36 Instantiate a DC-blocking filter.
-
37 @param pole sets the responsiveness of the filter,
-
38 how long it takes to settle to 0 if the input signal levels out at a constant value.
-
39 */
-
40  DCfilter(float pole):acc(0),prev_x(0),prev_y(0)
-
41  {
-
42  A = (int)(32768.0*(1.0 - pole));
-
43  }
-
44 
-
45 /* almost original
-
46  // timing: 20us
-
47  int next(int x)
-
48  {
-
49  setPin13High();
-
50  acc -= prev_x;
-
51  prev_x = (long)x<<15;
-
52  acc += prev_x;
-
53  acc -= A*prev_y;
-
54  prev_y = acc>>15; // quantization happens here
-
55  int filtered = (int)prev_y;
-
56  // acc has y[n] in upper 17 bits and -e[n] in lower 15 bits
-
57  setPin13Low();
-
58  return filtered;
-
59  }
-
60  */
-
61 
-
62  /**
-
63  Filter the incoming value and return the result.
-
64  @param x the value to filter
-
65  @return filtered signal
-
66  */
-
67  // timing :8us
-
68  inline
-
69  int next(int x)
-
70  {
-
71  acc += ((long)(x-prev_x)<<16)>>1;
-
72  prev_x = x;
-
73  acc -= (long)A*prev_y; // acc has y[n] in upper 17 bits and -e[n] in lower 15 bits
-
74  prev_y = (acc>>16)<<1; // faster than >>15 but loses bit 0
-
75  if (acc & 32784) prev_y += 1; // adds 1 if it was in the 0 bit position lost in the shifts above
-
76  return prev_y;
-
77  }
-
78 
-
79 private:
-
80  long acc;
-
81  int prev_x, prev_y,A;
-
82 };
-
83 
-
84 /**
-
85 @example 05.Control_Filters/DCFilter/DCFilter.ino
-
86 This example demonstrates the DCFilter class.
-
87 */
-
88 
-
89 #endif // #ifndef DCFILTER_H
-
-
- - - diff --git a/extras/doc/html/_ead_8h_source.html b/extras/doc/html/_ead_8h_source.html deleted file mode 100644 index 4f947afd0..000000000 --- a/extras/doc/html/_ead_8h_source.html +++ /dev/null @@ -1,280 +0,0 @@ - - - - - - - -Mozzi: Ead.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Ead.h
-
-
-
1 /*
-
2  * Ead.h
-
3  *
-
4  * Adapted from ead~.c puredata external (creb library)
-
5  *
-
6  * This file is part of Mozzi.
-
7  *
-
8  * Copyright (c) 2000-2003 by Tom Schouten
-
9  * Copyright 2012 Tim Barrass
-
10  * Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
11  *
-
12  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
13  *
-
14  */
-
15 
-
16 #ifndef EAD_H_
-
17 #define EAD_H_
-
18 
-
19 #include "math.h"
-
20 #include "mozzi_fixmath.h"
-
21 
-
22 
-
23 /** Exponential attack decay envelope. This produces a natural sounding
-
24 envelope. It calculates a new value each time next() is called, which can be
-
25 mapped to other parameters to change the amplitude or timbre of a sound.
-
26 @note Currently doesn't work at audio rate... may need larger number
-
27 types for Q8n8attack and Q8n8decay ?
-
28 */
-
29 
-
30 class Ead
-
31 {
-
32 
-
33 public:
-
34 
-
35  /** Constructor
-
36  @param update_rate
-
37  Usually this will be MOZZI_CONTROL_RATE or MOZZI_AUDIO_RATE, unless you
-
38  design another scheme for updating. One such alternative scheme could take turns
-
39  for various control changes in a rotating schedule to spread out calculations
-
40  made in successive updateControl() routines.
-
41  */
-
42  Ead(unsigned int update_rate) : UPDATE_RATE(update_rate)
-
43  {
-
44  ;
-
45  }
-
46 
-
47  /** Set the attack time in milliseconds.
-
48  @param attack_ms The time taken for values returned by successive calls of
-
49  the next() method to change from 0 to 255.
-
50  */
-
51  inline
-
52  void setAttack(unsigned int attack_ms)
-
53  {
-
54  Q8n8attack = float_to_Q8n8(millisToOneMinusRealPole(attack_ms));
-
55  }
-
56 
-
57 
-
58  /** Set the decay time in milliseconds.
-
59  @param decay_ms The time taken for values returned by successive calls of
-
60  the next() method to change from 255 to 0.
-
61  */
-
62  inline
-
63  void setDecay(unsigned int decay_ms)
-
64  {
-
65  Q8n8decay = float_to_Q8n8(millisToOneMinusRealPole(decay_ms));
-
66  }
-
67 
-
68 
-
69  /** Set attack and decay times in milliseconds.
-
70  @param attack_ms The time taken for values returned by successive calls of
-
71  the next() method to change from 0 to 255.
-
72  @param decay_ms The time taken for values returned by successive calls of
-
73  the next() method to change from 255 to 0.
-
74  */
-
75  inline
-
76  void set(unsigned int attack_ms, unsigned int decay_ms)
-
77  {
-
78  setAttack(attack_ms);
-
79  setDecay(decay_ms);
-
80  }
-
81 
-
82 
-
83  /** Start the envelope from the beginning.
-
84  This can be used at any time, even if the previous envelope is not finished.
-
85  */
-
86  inline
-
87  void start()
-
88  {
-
89  Q8n24state = 0;
-
90  attack_phase = true;
-
91  }
-
92 
-
93 
-
94  /** Set attack and decay times in milliseconds, and start the envelope from the beginning.
-
95  This can be used at any time, even if the previous envelope is not finished.
-
96  @param attack_ms The time taken for values returned by successive calls of
-
97  the next() method to change from 0 to 255.
-
98  @param decay_ms The time taken for values returned by successive calls of
-
99  the next() method to change from 255 to 0.
-
100  */
-
101  inline
-
102  void start(unsigned int attack_ms, unsigned int decay_ms)
-
103  {
-
104  set(attack_ms, decay_ms);
-
105  //Q8n24state = 0; // don't restart from 0, just go from whatever the current level is, to avoid glitches
-
106  attack_phase = true;
-
107  }
-
108 
-
109 
-
110  /** Calculate and return the next envelope value, in the range -128 to 127
-
111  @note Timing: 5us
-
112  */
-
113 
-
114  inline
- -
116  {
-
117  if(attack_phase)
-
118  {
-
119  // multiply A(a1,b1) * A(a2,b2) = A(a1+a2, b1+b2)
-
120  Q8n24state += (((Q8n24)(Q8n24_FIX1 - Q8n24state) * Q8n8attack)) >> 8; // Q8n24, shifts all back into n24
-
121  if (Q8n24state >= Q8n24_FIX1-256)
-
122  {
-
123  Q8n24state = Q8n24_FIX1-256;
-
124  attack_phase = false;
-
125  }
-
126  }else{ /* decay phase */
-
127  Q8n24state -= (Q8n24state * Q8n8decay)>>8;
-
128  }
-
129  return Q8n24_to_Q0n8(Q8n24state);
-
130  }
-
131 
-
132 
-
133 private:
-
134 
-
135  Q8n8 Q8n8attack;
-
136  Q8n8 Q8n8decay;
-
137  Q8n24 Q8n24state;
-
138  bool attack_phase;
-
139  const unsigned int UPDATE_RATE;
-
140 
-
141 
-
142  /* convert milliseconds to 1-p, with p a real pole */
-
143  inline
-
144  float millisToOneMinusRealPole(unsigned int milliseconds)
-
145  {
-
146  static const float NUMERATOR = 1000.0f * log(0.001f);
-
147  return -expm1(NUMERATOR / ((float)UPDATE_RATE * milliseconds));
-
148  }
-
149 
-
150 
-
151  // Compute exp(x) - 1 without loss of precision for small values of x.
-
152  inline
-
153  float expm1(float x)
-
154  {
-
155  if (fabs(x) < 1e-5)
-
156  {
-
157  return x + 0.5*x*x;
-
158  }
-
159  else
-
160  {
-
161  return exp(x) - 1.0;
-
162  }
-
163  }
-
164 
-
165 };
-
166 
-
167 /**
-
168 @example 07.Envelopes/Ead_Envelope/Ead_Envelope.ino
-
169 This is an example of how to use the Ead class.
-
170 */
-
171 
-
172 #endif /* EAD_H_ */
-
-
- - - diff --git a/extras/doc/html/_event_delay_8h_source.html b/extras/doc/html/_event_delay_8h_source.html deleted file mode 100644 index bb4db7283..000000000 --- a/extras/doc/html/_event_delay_8h_source.html +++ /dev/null @@ -1,201 +0,0 @@ - - - - - - - -Mozzi: EventDelay.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
EventDelay.h
-
-
-
1 /*
-
2  * EventDelay.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 #ifndef EVENTDELAY_H_
-
13 #define EVENTDELAY_H_
-
14 
-
15 
-
16 /** A non-blocking replacement for Arduino's delay() function.
-
17 EventDelay can be set() to a number of milliseconds, then after calling start(), ready() will return true when the time is up.
-
18 Alternatively, start(milliseconds) will call set() and start() together.
-
19 */
- -
21 {
-
22 
-
23 public:
-
24 
-
25  /** Constructor.
-
26  Declare an EventDelay object.
-
27  @param delay_milliseconds how long until ready() returns true, after calling start(). Defaults to 0 if no parameter is supplied.
-
28  */
-
29  EventDelay(unsigned int delay_milliseconds = 0): AUDIO_TICKS_PER_MILLISECOND((float)MOZZI_AUDIO_RATE/1000.0f)
-
30  {
-
31  set(delay_milliseconds);
-
32  }
-
33 
-
34 
-
35  /** Set the delay time. This setting is persistent, until you change it by using set() again.
-
36  @param delay_milliseconds delay time in milliseconds.
-
37  @note timing: 12us
-
38  */
-
39  inline
-
40  void set(unsigned int delay_milliseconds)
-
41  {
-
42  ticks = (unsigned long)(AUDIO_TICKS_PER_MILLISECOND*delay_milliseconds); // 12us
-
43  }
-
44 
-
45 
-
46  /** Start the delay.
-
47  @todo have a parameter to set whether it's single or repeating, so start doesn't have to be called for repeats.
-
48  Pro: simpler user programming. Con: would require an if..then every time ready() is called.
-
49  */
-
50  inline
-
51  void start()
-
52  {
-
53  deadline=audioTicks()+ticks;
-
54  }
-
55 
-
56 
-
57  /** Set the delay time and start the delay.
-
58  @param delay_milliseconds delay time in milliseconds.
-
59  */
-
60  inline
-
61  void start(unsigned int delay_milliseconds)
-
62  {
-
63  set(delay_milliseconds);
-
64  start();
-
65  }
-
66 
-
67 
-
68  /** Call this in updateControl() or updateAudio() to check if the delay time is up.
-
69  @return true if the time is up.
-
70  @note timing: 1us.
-
71  */
-
72  inline
-
73  bool ready()
-
74  {
-
75  return(audioTicks()>=deadline); // 1us
-
76  }
-
77 
-
78 
-
79 protected:
-
80  // Metronome accesses these
-
81  unsigned long deadline;
-
82  unsigned long ticks;
-
83 
-
84 private:
-
85  const float AUDIO_TICKS_PER_MILLISECOND;
-
86 };
-
87 
-
88 /**
-
89 @example 02.Control/EventDelay/EventDelay.ino
-
90 This example shows how to use the EventDelay class.
-
91 */
-
92 
-
93 #endif /* EVENTDELAY_H_ */
-
-
- - - diff --git a/extras/doc/html/_int_map_8h_source.html b/extras/doc/html/_int_map_8h_source.html deleted file mode 100644 index 69912339b..000000000 --- a/extras/doc/html/_int_map_8h_source.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - - - -Mozzi: IntMap.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
IntMap.h
-
-
-
1 /*
-
2  * IntMap.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 
-
13 #ifndef INTMAP_H_
-
14 #define INTMAP_H_
-
15 
-
16 /** A faster version of Arduino's map() function.
-
17 This uses ints instead of longs internally and does some of the maths at compile time.
-
18 */
-
19 class IntMap {
-
20 
-
21 public:
-
22  /** Constructor.
-
23  @param in_min the minimum of the input range.
-
24  @param in_max the maximum of the input range.
-
25  @param out_min the minimum of the output range.
-
26  @param out_max the maximum of the output range.
-
27  */
-
28  IntMap(int in_min, int in_max, int out_min, int out_max)
-
29  : _IN_MIN(in_min),_IN_MAX(in_max),_OUT_MIN(out_min),_OUT_MAX(out_max),
-
30  _MULTIPLIER((256L * (out_max-out_min)) / (in_max-in_min))
-
31  {
-
32  ;
-
33  }
-
34 
-
35  /** Process the next input value.
-
36  @param n the next integer to process.
-
37  @return the input integer mapped to the output range.
-
38  */
-
39  int operator()(int n) const {
-
40  return (int) (((_MULTIPLIER*(n-_IN_MIN))>>8) + _OUT_MIN);
-
41  }
-
42 
-
43 
-
44 private:
-
45  const int _IN_MIN, _IN_MAX, _OUT_MIN, _OUT_MAX;
-
46  const long _MULTIPLIER;
-
47 };
-
48 
-
49 #endif /* INTMAP_H_ */
-
-
- - - diff --git a/extras/doc/html/_integer_type_8h_source.html b/extras/doc/html/_integer_type_8h_source.html deleted file mode 100644 index c2554ad16..000000000 --- a/extras/doc/html/_integer_type_8h_source.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - - -Mozzi: IntegerType.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
IntegerType.h
-
-
-
1 /*
-
2  * IntegerType.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2021-2024 Thomas Friedrichsmeier and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 #ifndef INTTYPE_H_
-
13 #define INTTYPE_H_
-
14 
-
15 #include <Arduino.h>
-
16 
-
17 /** @ingroup util
-
18 Provides appropriate integer types that can bit the given number of bytes on this platform (at most 64).
-
19 */
-
20 template<uint8_t BYTES> struct IntegerType {
-
21  // at an odd value, such as 3 bytes? Add one more byte (up to at most 8 bytes)..
-
22  typedef typename IntegerType<(BYTES < 8) ? (BYTES+1) : 8>::unsigned_type unsigned_type;
-
23  typedef typename IntegerType<(BYTES < 8) ? (BYTES+1) : 8>::signed_type signed_type;
-
24 };
-
25 
-
26 // These are the specializations for the types that we actually assume to exist:
-
27 template<> struct IntegerType<1> {
-
28  typedef uint8_t unsigned_type;
-
29  typedef int8_t signed_type;
-
30 };
-
31 
-
32 template<> struct IntegerType<2> {
-
33  typedef uint16_t unsigned_type;
-
34  typedef int16_t signed_type;
-
35 };
-
36 
-
37 template<> struct IntegerType<4> {
-
38  typedef uint32_t unsigned_type;
-
39  typedef int32_t signed_type;
-
40 };
-
41 
-
42 template<> struct IntegerType<8> {
-
43  typedef uint64_t unsigned_type;
-
44  typedef int64_t signed_type;
-
45 };
-
46 
-
47 #endif /* INTTYPE_H_ */
-
-
- - - diff --git a/extras/doc/html/_line_8h_source.html b/extras/doc/html/_line_8h_source.html deleted file mode 100644 index 4b47b521c..000000000 --- a/extras/doc/html/_line_8h_source.html +++ /dev/null @@ -1,601 +0,0 @@ - - - - - - - -Mozzi: Line.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Line.h
-
-
-
1 /*
-
2  * Line.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 
-
13 #ifndef LINE_H_
-
14 #define LINE_H_
-
15 
-
16 #include <Arduino.h>
-
17 
-
18 #include<FixMath.h>
-
19 
-
20 /** For linear changes with a minimum of calculation at each step. For instance,
-
21 you can use Line to make an oscillator glide from one frequency to another,
-
22 pre-calculating the required phase increments for each end and then letting your
-
23 Line change the phase increment with only a simple addition at each step.
-
24 @tparam T the type of numbers to use. For example, Line <int> myline; makes a
-
25 Line which uses ints.
-
26 @note Watch out for underflows in the internal calcualtion of Line() if you're not
-
27 using floats (but on the other hand try to avoid lots of floats, they're too slow!).
-
28 If it seems like the Line() is not working, there's a good chance you need to
-
29 scale up the numbers you're using, so internal calculations don't get truncated
-
30 away. Use Mozzi's fixed-point number types in mozzi_fixmath.h, which enable you to
-
31 represent fractional numbers. Google "fixed point arithmetic" if this is new to
-
32 you.
-
33 */
-
34 
-
35 
-
36 
-
37 
-
38 template <class T>
-
39 class Line
-
40 {
-
41 private:
-
42  T current_value;
-
43  T step_size;
-
44 
-
45 public:
-
46  /** Constructor. Use the template parameter to set the type of numbers you
-
47  want to use. For example, Line <int> myline; makes a Line which uses ints.
-
48  */
-
49  Line ()
-
50  {
-
51  ;
-
52  }
-
53 
-
54 
-
55 
-
56  /** Increments one step along the line.
-
57  @return the next value.
-
58  */
-
59  inline
-
60  T next()
-
61  {
-
62  current_value += step_size;
-
63  //Serial.println(current_value);
-
64  return current_value;
-
65  }
-
66 
-
67 
-
68 
-
69  /** Set the current value of the line.
-
70  The Line will continue incrementing from this
-
71  value using any previously calculated step size.
-
72  @param value the number to set the Line's current_value to.
-
73  */
-
74  inline
-
75  void set(T value)
-
76  {
-
77  current_value=value;
-
78  }
-
79 
-
80 
-
81 
-
82  /** Given a target value and the number of steps to take on the way, this calculates the step size needed to get there from the current value.
-
83  @param targetvalue the value to move towards.
-
84  @param num_steps how many steps to take to reach the target.
-
85  */
-
86  inline
-
87  void set(T targetvalue, T num_steps)
-
88  {
-
89  if(num_steps) {
-
90  T numerator = targetvalue-current_value;
-
91  step_size= numerator/num_steps;
-
92  } else {
-
93  step_size = 0;
-
94  current_value = targetvalue;
-
95  }
-
96  }
-
97 
-
98  /** Given a new starting value, target value and the number of steps to take on the way, this sets the step size needed to get there.
-
99  @param startvalue the number to set the Line's current_value to.
-
100  @param targetvalue the value to move towards.
-
101  @param num_steps how many steps to take to reach the target.
-
102  */
-
103  inline
-
104  void set(T startvalue, T targetvalue, T num_steps)
-
105  {
-
106  set(startvalue);
-
107  set(targetvalue, num_steps);
-
108  }
-
109 };
-
110 
-
111 
-
112 /* unsigned char specialisation (probably not very useful because step size will likely = 0) */
-
113 template <>
-
114 class Line <unsigned char>
-
115 {
-
116 private:
-
117  unsigned char current_value;
-
118  char step_size;
-
119 
-
120 public:
-
121  /** Constructor. Use the template parameter to set the type of numbers you
-
122  want to use. For example, Line <int> myline; makes a Line which uses ints.
-
123  */
-
124  Line ()
-
125  {
-
126  ;
-
127  }
-
128 
-
129 
-
130 
-
131  /** Increments one step along the line.
-
132  @return the next value.
-
133  */
-
134  inline
-
135  unsigned char next()
-
136  {
-
137  current_value += step_size;
-
138  return current_value;
-
139  }
-
140 
-
141 
-
142 
-
143  /** Set the current value of the line.
-
144  The Line will continue incrementing from this
-
145  value using any previously calculated step size.
-
146  @param value the number to set the Line's current_value to.
-
147  */
-
148  inline
-
149  void set(unsigned char value)
-
150  {
-
151  current_value=value;
-
152  }
-
153 
-
154 
-
155 
-
156  /** Given a target value and the number of steps to take on the way, this calculates the step size needed to get there from the current value.
-
157  @param targetvalue the value to move towards.
-
158  @param num_steps how many steps to take to reach the target.
-
159  */
-
160  inline
-
161  void set(unsigned char targetvalue, unsigned char num_steps)
-
162  {
-
163  step_size=(char)((((float)targetvalue-current_value)/num_steps));
-
164  }
-
165 
-
166  /** Given a new starting value, target value and the number of steps to take on the way, this sets the step size needed to get there.
-
167  @param startvalue the number to set the Line's current_value to.
-
168  @param targetvalue the value to move towards.
-
169  @param num_steps how many steps to take to reach the target.
-
170  */
-
171  inline
-
172  void set(unsigned char startvalue, unsigned char targetvalue, unsigned char num_steps)
-
173  {
-
174  set(startvalue);
-
175  set(targetvalue, num_steps);
-
176  }
-
177 
-
178 };
-
179 
-
180 
-
181 /* unsigned int specialisation */
-
182 template <>
-
183 class Line <unsigned int>
-
184 {
-
185 private:
-
186  unsigned int current_value;
-
187  int step_size;
-
188 
-
189 public:
-
190  /** Constructor. Use the template parameter to set the type of numbers you
-
191  want to use. For example, Line <int> myline; makes a Line which uses ints.
-
192  */
-
193  Line ()
-
194  {
-
195  ;
-
196  }
-
197 
-
198 
-
199 
-
200  /** Increments one step along the line.
-
201  @return the next value.
-
202  */
-
203  inline
-
204  unsigned int next()
-
205  {
-
206  current_value += step_size;
-
207  return current_value;
-
208  }
-
209 
-
210 
-
211 
-
212  /** Set the current value of the line.
-
213  The Line will continue incrementing from this
-
214  value using any previously calculated step size.
-
215  @param value the number to set the Line's current_value to.
-
216  */
-
217  inline
-
218  void set(unsigned int value)
-
219  {
-
220  current_value=value;
-
221  }
-
222 
-
223 
-
224 
-
225  /** Given a target value and the number of steps to take on the way, this calculates the step size needed to get there from the current value.
-
226  @param targetvalue the value to move towards.
-
227  @param num_steps how many steps to take to reach the target.
-
228  */
-
229  inline
-
230  void set(unsigned int targetvalue, unsigned int num_steps)
-
231  {
-
232  step_size=(int)((((float)targetvalue-current_value)/num_steps));
-
233  }
-
234 
-
235 
-
236  /** Given a new starting value, target value and the number of steps to take on the way, this sets the step size needed to get there.
-
237  @param startvalue the number to set the Line's current_value to.
-
238  @param targetvalue the value to move towards.
-
239  @param num_steps how many steps to take to reach the target.
-
240  */
-
241  inline
-
242  void set(unsigned int startvalue, unsigned int targetvalue, unsigned int num_steps)
-
243  {
-
244  set(startvalue);
-
245  set(targetvalue, num_steps);
-
246  }
-
247 };
-
248 
-
249 
-
250 
-
251 
-
252 
-
253 /* unsigned long specialisation */
-
254 template <>
-
255 class Line <unsigned long>
-
256 {
-
257 private:
-
258  unsigned long current_value;
-
259  long step_size;
-
260 
-
261 public:
-
262  /** Constructor. Use the template parameter to set the type of numbers you
-
263  want to use. For example, Line <int> myline; makes a Line which uses ints.
-
264  */
-
265  Line ()
-
266  {
-
267  ;
-
268  }
-
269 
-
270 
-
271 
-
272  /** Increments one step along the line.
-
273  @return the next value.
-
274  */
-
275  inline
-
276  unsigned long next()
-
277  {
-
278  current_value += step_size;
-
279  return current_value;
-
280  }
-
281 
-
282 
-
283 
-
284  /** Set the current value of the line.
-
285  The Line will continue incrementing from this
-
286  value using any previously calculated step size.
-
287  @param value the number to set the Line's current_value to.
-
288  */
-
289  inline
-
290  void set(unsigned long value)
-
291  {
-
292  current_value=value;
-
293  }
-
294 
-
295 
-
296 
-
297  /** Given a target value and the number of steps to take on the way, this calculates the step size needed to get there from the current value.
-
298  @param targetvalue the value to move towards.
-
299  @param num_steps how many steps to take to reach the target.
-
300  */
-
301  inline
-
302  void set(unsigned long targetvalue, unsigned long num_steps)
-
303  {
-
304  step_size=(long)((((float)targetvalue-current_value)/num_steps));
-
305  }
-
306 
-
307  /** Given a new starting value, target value and the number of steps to take on the way, this sets the step size needed to get there.
-
308  @param startvalue the number to set the Line's current_value to.
-
309  @param targetvalue the value to move towards.
-
310  @param num_steps how many steps to take to reach the target.
-
311  */
-
312  inline
-
313  void set(unsigned long startvalue, unsigned long targetvalue, unsigned long num_steps)
-
314  {
-
315  set(startvalue);
-
316  set(targetvalue, num_steps);
-
317  }
-
318 };
-
319 
-
320 
-
321 /* UFix specialisation */
-
322 template<int8_t NI, int8_t NF>
-
323 class Line<UFix<NI, NF>>
-
324 {
-
325 private:
-
326  typedef UFix<NI, NF> internal_type;
-
327  internal_type current_value;
-
328  SFix<NI,NF> step_size;
-
329 
-
330 public:
-
331  /** Constructor. Use the template parameter to set the type of numbers you
-
332  want to use. For example, Line <int> myline; makes a Line which uses ints.
-
333  */
-
334  Line (){;}
-
335 
-
336  /** Increments one step along the line.
-
337  @return the next value.
-
338  */
-
339  inline
-
340  internal_type next()
-
341  {
-
342  current_value = current_value + step_size;
-
343  return current_value;
-
344  }
-
345 
-
346  /** Set the current value of the line.
-
347  The Line will continue incrementing from this
-
348  value using any previously calculated step size.
-
349  @param value the number to set the Line's current_value to.
-
350  */
-
351  inline
-
352  void set(internal_type value)
-
353  {
-
354  current_value=value;
-
355  }
-
356 
-
357  /** Given a target value and the number of steps to take on the way, this calculates the step size needed to get there from the current value.
-
358  @param targetvalue the value to move towards.
-
359  @param num_steps how many steps to take to reach the target as a UFix<_NI,0>
-
360  */
-
361  template<int8_t _NI>
-
362  void set(internal_type targetvalue, UFix<_NI,0> num_steps)
-
363  {
-
364  if(num_steps.asRaw()) {
-
365  auto numerator = targetvalue-current_value;
-
366  step_size = numerator*num_steps.invAccurate();
-
367  } else {
-
368  step_size = 0;
-
369  current_value = targetvalue;
-
370  }
-
371  }
-
372 
-
373 
-
374  /** Given a target value and the number of steps to take on the way, this calculates the step size needed to get there from the current value.
-
375  @param targetvalue the value to move towards.
-
376  @param num_steps how many steps to take to reach the target.
-
377  */
-
378  template<typename T>
-
379  void set(internal_type targetvalue, T num_steps)
-
380  {
-
381  if(num_steps) {
-
382  auto numerator = targetvalue-current_value;
-
383  step_size = internal_type(numerator.asRaw()/num_steps,true);
-
384  } else {
-
385  step_size = 0;
-
386  current_value = targetvalue;
-
387  }
-
388  }
-
389 
-
390  /** Given a new starting value, target value and the number of steps to take on the way, this sets the step size needed to get there.
-
391  @param startvalue the number to set the Line's current_value to.
-
392  @param targetvalue the value to move towards.
-
393  @param num_steps how many steps to take to reach the target.
-
394  */
-
395  template<typename T>
-
396  void set(internal_type startvalue, internal_type targetvalue, T num_steps)
-
397  {
-
398  set(startvalue);
-
399  set(targetvalue, num_steps);
-
400  }
-
401 };
-
402 
-
403 
-
404 /* SFix specialisation (if someone has an idea to avoid duplication with UFix) */
-
405 template<int8_t NI, int8_t NF>
-
406 class Line<SFix<NI, NF>>
-
407 {
-
408 private:
-
409  typedef SFix<NI, NF> internal_type;
-
410  internal_type current_value;
-
411  SFix<NI+1, NF> step_size;
-
412 
-
413 public:
-
414  /** Constructor. Use the template parameter to set the type of numbers you
-
415  want to use. For example, Line <int> myline; makes a Line which uses ints.
-
416  */
-
417  Line (){;}
-
418 
-
419  /** Increments one step along the line.
-
420  @return the next value.
-
421  */
-
422  inline
-
423  internal_type next()
-
424  {
-
425  current_value = current_value + step_size;
-
426  return current_value;
-
427  }
-
428 
-
429  /** Set the current value of the line.
-
430  The Line will continue incrementing from this
-
431  value using any previously calculated step size.
-
432  @param value the number to set the Line's current_value to.
-
433  */
-
434  inline
-
435  void set(internal_type value)
-
436  {
-
437  current_value=value;
-
438  }
-
439 
-
440  /** Given a target value and the number of steps to take on the way, this calculates the step size needed to get there from the current value.
-
441  @param targetvalue the value to move towards.
-
442  @param num_steps how many steps to take to reach the target as a UFix<_NI,0>
-
443  */
-
444  template<int8_t _NI>
-
445  void set(internal_type targetvalue, UFix<_NI,0> num_steps)
-
446  {
-
447  if(num_steps.asRaw()) {
-
448  auto numerator = targetvalue-current_value;
-
449  step_size = numerator*num_steps.invAccurate();
-
450  } else {
-
451  step_size = 0;
-
452  current_value = targetvalue;
-
453  }
-
454  }
-
455 
-
456 
-
457  /** Given a target value and the number of steps to take on the way, this calculates the step size needed to get there from the current value.
-
458  @param targetvalue the value to move towards.
-
459  @param num_steps how many steps to take to reach the target.
-
460  */
-
461  template<typename T>
-
462  void set(internal_type targetvalue, T num_steps)
-
463  {
-
464  if(num_steps) {
-
465  auto numerator = targetvalue-current_value;
-
466  step_size = internal_type(numerator.asRaw()/num_steps,true);
-
467  } else {
-
468  step_size = 0;
-
469  current_value = targetvalue;
-
470  }
-
471  }
-
472 
-
473  /** Given a new starting value, target value and the number of steps to take on the way, this sets the step size needed to get there.
-
474  @param startvalue the number to set the Line's current_value to.
-
475  @param targetvalue the value to move towards.
-
476  @param num_steps how many steps to take to reach the target.
-
477  */
-
478  template<typename T>
-
479  void set(internal_type startvalue, internal_type targetvalue, T num_steps)
-
480  {
-
481  set(startvalue);
-
482  set(targetvalue, num_steps);
-
483  }
-
484 };
-
485 
-
486 
-
487 
-
488 /**
-
489 @example 02.Control/Control_Tremelo/Control_Tremelo.ino
-
490 This example demonstrates the Line class.
-
491 */
-
492 
-
493 #endif /* LINE_H_ */
-
-
- - - diff --git a/extras/doc/html/_low_pass_filter_8h_source.html b/extras/doc/html/_low_pass_filter_8h_source.html deleted file mode 100644 index 71f483f93..000000000 --- a/extras/doc/html/_low_pass_filter_8h_source.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - -Mozzi: LowPassFilter.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
LowPassFilter.h
-
-
-
1 /*
-
2  * LowPassfilter.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 
-
13 #ifndef LOWPASS_H_
-
14 #define LOWPASS_H_
-
15 
-
16 #include<ResonantFilter.h>
-
17 #warning This header is deprecated, please use ResonantFilter.h instead.
-
18 
-
19 #endif /* LOWPASS_H_ */
-
-
- - - diff --git a/extras/doc/html/_meta_oscil_8h_source.html b/extras/doc/html/_meta_oscil_8h_source.html deleted file mode 100644 index 2779b5f14..000000000 --- a/extras/doc/html/_meta_oscil_8h_source.html +++ /dev/null @@ -1,356 +0,0 @@ - - - - - - - -Mozzi: MetaOscil.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
MetaOscil.h
-
-
-
1 /*
-
2  * MetaOscil.h
-
3  *
-
4  * A wrap-up to swap between different oscillators seemlessly, allowing to produce non-aliased sounds by automatically switching between oscillators.
-
5  *
-
6  * This file is part of Mozzi.
-
7  *
-
8  * Copyright 2021-2024 T. Combriat and the Mozzi Team
-
9  *
-
10  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
11  *
-
12  */
-
13 
-
14 
-
15 #ifndef META_OSCIL_H
-
16 #define META_OSCIL_H
-
17 
-
18 
-
19 #include <Arduino.h>
-
20 
-
21 #include "Oscil.h"
-
22 #include "mozzi_fixmath.h"
-
23 #include <FixMath.h>
-
24 
-
25 
-
26 /**
-
27  MetaOscil is a wrapper for several Oscil. Once constructed it will behave exactly as an Oscil except that it will automatically switch between Oscil depending on the asked frequency. This allows to produce non-aliased sounds by switching between tables with less and less harmonics as the frequency increases.
-
28 */
-
29 
-
30 
-
31 template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE, byte N_OSCIL>
-
32  class MetaOscil
-
33 
-
34 {
-
35  public:
-
36  /** Constructor
-
37  Declare a MetaOscil containing any number of Oscil pointers. Every Oscil should have the same TABLE_NUM_CELLS and UPDATE_RATE which are also passed in the MetaOscil constructor.
-
38  @param N_OSCIL is the number of Oscil contained in the MetaOscil. This cannot be changed after construction. */
-
39  template<class... T> MetaOscil(Oscil<NUM_TABLE_CELLS, UPDATE_RATE>* first, T*... elements):oscillators{first, elements...} {
-
40  current_osc=oscillators[0];};
-
41 
-
42  MetaOscil(){};
-
43 
-
44  /* Add one oscil to the MetaOscil.
-
45  @param osc is a pointer toward an Oscil
-
46  @param cutoff_freq is the cutoff frequency of this Oscil
-
47  void addOscil(Oscil<NUM_TABLE_CELLS, UPDATE_RATE>* osc, int cutoff_freq)
-
48  {
-
49  oscillators[current_rank] = osc;
-
50  cutoff_freqs[current_rank] = cutoff_freq;
-
51  if (current_rank == 0) current_osc=oscillators[0];
-
52  current_rank += 1;
-
53  }*/
-
54 
-
55 
-
56  /** Set all Oscil of a MetaOscil.
-
57  @param first... is a list of pointers towards several Oscil */
-
58  template<typename ... T > void setOscils(Oscil<NUM_TABLE_CELLS, UPDATE_RATE>* first,T... elements)
-
59  {
-
60  oscillators[current_rank]=first;
-
61  if (current_rank == 0) current_osc=oscillators[0];
-
62  current_rank+=1;
-
63  setOscils(elements...);
-
64  current_rank = 0;
-
65  }
-
66 
-
67  void setOscils(){};
-
68 
-
69 
-
70  /** Set all the cutoff frequencies for changing between Oscil. They have to be sorted in increasing values and contain at least N_OSCIL-1 values. Note that the last Oscil will be used by default for frequencies higher than the higher cutoff, hence the last value can be discarded.
-
71  @param first, elements... a set of int cutoff frequencies.*/
-
72  template<typename ... T > void setCutoffFreqs(int first,T... elements)
-
73  {
-
74  cutoff_freqs[current_rank]=first;
-
75  current_rank+=1;
-
76  setCutoffFreqs(elements...);
-
77  current_rank = 0;
-
78  }
-
79 
-
80  void setCutoffFreqs() {};
-
81 
-
82  /** Set or change the cutoff frequency of one Oscil.
-
83  @param rank is the rank of the Oscil.
-
84  @param freq is the cutoff frequency. */
-
85  void setCutoffFreq(int freq, byte rank)
-
86  {
-
87  cutoff_freqs[rank] = freq;
-
88  }
-
89 
-
90  /** Updates the phase according to the current frequency and returns the sample at the new phase position.
-
91  @return the next sample.
-
92  */
-
93  inline
-
94  int8_t next() {return current_osc->next();}
-
95 
-
96  /** Change the sound table which will be played by the Oscil of rank.
-
97  @param TABLE_NAME is the name of the array in the table ".h" file you're using.
-
98  @param rank is the Oscil.*/
-
99  void setTable(const int8_t * TABLE_NAME, byte rank) {oscillators[rank]->setTable(TABLE_NAME);}
-
100 
-
101 
-
102  /** Set the phase of the currently playing Oscil.
-
103  @param phase a position in the wavetable.*/
-
104  void setPhase(unsigned int phase) {current_osc->setPhase(phase);}
-
105 
-
106 
-
107  /** Set the phase of the currently playing Oscil in fractional format.
-
108  @param phase a position in the wavetable.*/
-
109  void setPhaseFractional(unsigned long phase) {current_osc->setPhaseFractional(phase);}
-
110 
-
111 
-
112  /** Get the phase of the currently playin Oscil in fractional format.
-
113  @return position in the wavetable, shifted left by OSCIL_F_BITS (which is 16 when this was written).
-
114  */
-
115  unsigned long getPhaseFractional() {return current_osc->getPhaseFractional();}
-
116 
-
117 
-
118 
-
119  /** Returns the next sample given a phase modulation value.
-
120  @param phmod_proportion a phase modulation value given as a proportion of the wave. The
-
121  phmod_proportion parameter is a Q15n16 fixed-point number where the fractional
-
122  n16 part represents almost -1 to almost 1, modulating the phase by one whole table length in
-
123  each direction.
-
124  @return a sample from the table.*/
-
125  inline
-
126  int8_t phMod(Q15n16 phmod_proportion) {return current_osc->phMod(phmod_proportion);}
-
127 
-
128 
-
129  /** Set the MetaOsc frequency with an unsigned int.
-
130  @param frequency to play the wave table.*/
-
131  inline
-
132  void setFreq(int frequency, bool apply = true)
-
133  {
-
134  if (frequency < cutoff_freqs[0]) //getting out the extreme cases
-
135  {
-
136  oscillators[0]->setPhaseFractional(current_osc->getPhaseFractional());
-
137  current_osc = oscillators[0];
-
138  current_osc->setFreq(frequency);
-
139  }
-
140 
-
141  else if (frequency > cutoff_freqs[N_OSCIL-1])
-
142  {
-
143  oscillators[N_OSCIL-1]->setPhaseFractional(current_osc->getPhaseFractional());
-
144  current_osc = oscillators[N_OSCIL-1];
-
145  current_osc->setFreq(frequency);
-
146  }
-
147  else // dichotomic search
-
148  {
-
149  byte low_point = 0, high_point = N_OSCIL-1, mid_point = (N_OSCIL-1)>>1;
-
150  while(low_point != high_point)
-
151  {
-
152  if (frequency > cutoff_freqs[mid_point]) low_point = mid_point+1;
-
153  else if (frequency < cutoff_freqs[mid_point]) high_point = mid_point;
-
154  else
-
155  {
-
156  break;
-
157  }
-
158  mid_point = (low_point + high_point)>>1;
-
159  }
-
160  oscillators[mid_point]->setPhaseFractional(current_osc->getPhaseFractional());
-
161  current_osc = oscillators[mid_point];
-
162  if (apply) current_osc->setFreq(frequency);
-
163  }
-
164 
-
165  }
-
166 
-
167 
-
168  /** Set the MetaOsc frequency with a float.
-
169  @param frequency to play the wave table.*/
-
170  inline
-
171  void setFreq(float frequency)
-
172  {
-
173  setFreq((int) frequency, false);
-
174  current_osc->setFreq(frequency);
-
175  }
-
176 
-
177 
-
178  /** Set the MetaOsc frequency with a UFix<NI,NF> fixed-point number format. This falls back to using UFix<16,16> internally and is provided as a fallout for other UFix types..
-
179  @param frequency to play the wave table.
-
180 */
-
181  template <int8_t NI, int8_t NF, uint64_t RANGE>
-
182  inline
-
183  void setFreq(UFix<NI,NF,RANGE> frequency)
-
184  {
-
185  setFreq(frequency.asInt(), false);
-
186  current_osc->setFreq(frequency);
-
187  }
-
188 
-
189 
-
190 
-
191  /** Set the MetaOsc frequency with a Q24n8 fixed-point number format.
-
192  @param frequency to play the wave table.*/
-
193  inline
-
194  void setFreq_Q24n8(Q24n8 frequency)
-
195  {
-
196  setFreq((int) (frequency>>8), false);
-
197  current_osc->setFreq_Q24n8(frequency);
-
198  }
-
199 
-
200 
-
201 
-
202  /** Set the MetaOsc frequency with a Q16n16 fixed-point number format.
-
203  @param frequency to play the wave table.*/
-
204  inline
-
205  void setFreq_Q16n16(Q16n16 frequency)
-
206  {
-
207  setFreq((int) (frequency>>16), false);
-
208  current_osc->setFreq_Q16n16(frequency);
-
209  }
-
210 
-
211 
-
212  /** Returns the sample at the given table index of the current Oscil.
-
213  @param index between 0 and the table size.The
-
214  index rolls back around to 0 if it's larger than the table size.
-
215  @return the sample at the given table index.
-
216  */
-
217  inline
-
218  int8_t atIndex(unsigned int index) {return current_osc->atIndex(index);}
-
219 
-
220 
-
221  /** phaseIncFromFreq() and setPhaseInc() are for saving processor time when sliding between frequencies.
-
222  @param frequency for which you want to calculate a phase increment value.
-
223  @return the phase increment value which will produce a given frequency.*/
-
224  inline
-
225  unsigned long phaseIncFromFreq(int frequency) {return current_osc->phaseIncFromFreq(frequency);}
-
226 
-
227  /** Set a specific phase increment.
-
228  @param phaseinc_fractional a phase increment value as calculated by phaseIncFromFreq().
-
229  */
-
230  inline
-
231  void setPhaseInc(unsigned long phaseinc_fractional) {current_osc->setPhaseInc(phaseinc_fractional);}
-
232 
-
233 
-
234 
-
235  private:
-
236  Oscil<NUM_TABLE_CELLS, UPDATE_RATE> * oscillators[N_OSCIL];
-
237  Oscil<NUM_TABLE_CELLS, UPDATE_RATE> * current_osc = NULL;
-
238  int cutoff_freqs[N_OSCIL];
-
239  byte current_rank = 0;
-
240 
-
241 };
-
242 
-
243 /**
-
244 @example 06.Synthesis/NonAlias_MetaOscil/NonAlias_MetaOscil.ino
-
245 This example demonstrates the Meta_Oscil class.
-
246 */
-
247 
-
248 #endif /* META_OSCIL_H */
-
-
- - - diff --git a/extras/doc/html/_metronome_8h_source.html b/extras/doc/html/_metronome_8h_source.html deleted file mode 100644 index d30f3ad36..000000000 --- a/extras/doc/html/_metronome_8h_source.html +++ /dev/null @@ -1,211 +0,0 @@ - - - - - - - -Mozzi: Metronome.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Metronome.h
-
-
-
1 /*
-
2  * Metronome.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 
-
13 #ifndef METRO_H_
-
14 #define METRO_H_
-
15 
-
16 #include "EventDelay.h"
-
17 
-
18 /** A metronome class which is like an EventDelay which retriggers itself when the delay time is up, to produce a repeating beat.
-
19 Metronome can be set() to a number of milliseconds, then after calling start(), ready() will return true when the time is up.
-
20 Alternatively, start(milliseconds) will call set() and start() together.
-
21 This is called Metronome to avoid conflict with the Arduino Metro library.
-
22 */
-
23 class Metronome: public EventDelay
-
24 {
-
25 
-
26 public:
-
27 
-
28  /** Constructor.
-
29  Declare a Metronome object.
-
30  @param delay_milliseconds how long between each occasion when ready() returns true.
-
31  */
-
32  Metronome(unsigned int delay_milliseconds = 0): EventDelay(delay_milliseconds), stopped(false) {
-
33  }
-
34 
-
35 
-
36  /** Start the metronome.
-
37  @todo have a parameter to set whether it's single or repeating, so start doesn't have to be called for repeats.
-
38  Pro: simpler user programming. Con: would require an if..then every time ready() is called.
-
39  */
-
40  inline
-
41  void start()
-
42  {
-
43  deadline=audioTicks()+ticks;
-
44  stopped = false;
-
45  }
-
46 
-
47 
-
48  /** Set the time between beats and start the metronome.
-
49  @param delay_milliseconds delay time in milliseconds.
-
50  */
-
51  inline
-
52  void start(unsigned int delay_milliseconds)
-
53  {
-
54  set(delay_milliseconds);
-
55  start();
-
56  }
-
57 
-
58 
-
59 
-
60  /** Set the beats per minute.
-
61  @param bpm beats per minute
-
62  */
-
63  inline
-
64  void setBPM(float bpm)
-
65  {
-
66  set((unsigned int) (60000.f/bpm));
-
67  }
-
68 
-
69 
-
70 
-
71 
-
72  /** Call this in updateControl() or updateAudio() to check if it is time for a beat.
-
73  @return true if the time for one is up.
-
74  */
-
75  inline
-
76  bool ready()
-
77  {
-
78  unsigned long now = audioTicks();
-
79  if ((now<deadline) || stopped) return false;
-
80 
-
81  deadline=now-(now-deadline)+ticks; // subtract overrun so the timing doesn't slip
-
82  return true;
-
83  }
-
84 
-
85 
-
86  inline
-
87  void stop(){
-
88  stopped = true;
-
89  }
-
90 
-
91 private:
-
92  bool stopped;
-
93 };
-
94 
-
95 
-
96 
-
97 
-
98 /**
-
99 @example 02.Control/Metronome_SampleHuffman/Metronome_SampleHuffman.ino
-
100 This example shows how to use the Metronome class.
-
101 */
-
102 
-
103 #endif /* METRO_H_ */
-
-
- - - diff --git a/extras/doc/html/_mozzi_8h.html b/extras/doc/html/_mozzi_8h.html deleted file mode 100644 index 6ed0cfdc8..000000000 --- a/extras/doc/html/_mozzi_8h.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - -Mozzi: Mozzi.h File Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Mozzi.h File Reference
-
-
- -

This is the main include file in Mozzi. -More...

-
#include "MozziGuts.h"
-
-

Go to the source code of this file.

-

Detailed Description

-

This is the main include file in Mozzi.

-

Almost all sketches using Mozzi will want to include this file exactly once.

-

Should your sketch require Mozzi Core Functions Mozzi functions in more than one translation unit (i.e. you have more than one .cpp-file in your sketch itself), only one of these shall include this file, while any others shall include MozziHeadersOnly instead. (Failing to heed this advice will lead to "duplicate definition" errors.)

- -

Definition in file Mozzi.h.

-
-
- - - diff --git a/extras/doc/html/_mozzi_8h_source.html b/extras/doc/html/_mozzi_8h_source.html deleted file mode 100644 index 29b6e6cdb..000000000 --- a/extras/doc/html/_mozzi_8h_source.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - - -Mozzi: Mozzi.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Mozzi.h
-
-
-Go to the documentation of this file.
1 /*
-
2  * Mozzi.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 
-
13 /** @page basic_info Getting Started
-
14  *
-
15  * You are currently looking at the Mozzi API documentation. It is the most comprehensive source of all functions and
-
16  * classes available in Mozzi, but not necesarrily the best starting point for learning about Mozzi. For getting
-
17  * started, it is recommended to browse through the tutorials at https://sensorium.github.io/Mozzi/learn/ .
-
18  */
-
19 
-
20 /** @ingroup core
-
21  * @file Mozzi.h
-
22  *
-
23  * This is the main include file in Mozzi. Almost all sketches using Mozzi will want to include this file @em exactly once.
-
24  *
-
25  * Should your sketch require \ref core Mozzi functions in more than one translation unit (i.e. you have more than one .cpp-file
-
26  * in your sketch itself), only *one* of these shall include this file, while any others shall include \ref MozziHeadersOnly instead.
-
27  * (Failing to heed this advice will lead to "duplicate definition" errors.)
-
28  */
-
29 
-
30 #ifndef MOZZI_H_
-
31 #define MOZZI_H_
-
32 
-
33 #include "MozziGuts.h"
-
34 
-
35 #endif
-
-
- - - diff --git a/extras/doc/html/_mozzi_config_values_8h.html b/extras/doc/html/_mozzi_config_values_8h.html deleted file mode 100644 index 6e6d767d8..000000000 --- a/extras/doc/html/_mozzi_config_values_8h.html +++ /dev/null @@ -1,182 +0,0 @@ - - - - - - - -Mozzi: MozziConfigValues.h File Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
MozziConfigValues.h File Reference
-
-
- -

This file keeps a list of named configuration values. -More...

-
#include "hardware_defines.h"
-
-

Go to the source code of this file.

-

Detailed Description

-

This file keeps a list of named configuration values.

-

Note that these are all given as defines, instead of e.g. const ints or enum values, because they need to be usable at preprocessor level, in order to control conditional compilation.

- -

Definition in file MozziConfigValues.h.

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Macros

-#define MOZZI_MONO
 
-#define MOZZI_STEREO
 
-#define MOZZI_OUTPUT_PWM
 
-#define MOZZI_OUTPUT_2PIN_PWM
 
-#define MOZZI_OUTPUT_EXTERNAL_TIMED
 
-#define MOZZI_OUTPUT_EXTERNAL_CUSTOM
 
-#define MOZZI_OUTPUT_PDM_VIA_I2S
 
-#define MOZZI_OUTPUT_PDM_VIA_SERIAL
 
-#define MOZZI_OUTPUT_I2S_DAC
 
-#define MOZZI_OUTPUT_INTERNAL_DAC
 
-#define MOZZI_AUDIO_INPUT_NONE
 
-#define MOZZI_AUDIO_INPUT_STANDARD
 
-#define MOZZI_ANALOG_READ_NONE
 
-#define MOZZI_ANALOG_READ_STANDARD
 
-#define MOZZI_I2S_FORMAT_PLAIN
 
-#define MOZZI_I2S_FORMAT_LSBJ
 
-#define MOZZI_COMPATIBILITY_1_1
 
-#define MOZZI_COMPATIBILITY_2_0
 
-#define MOZZI_COMPATIBILITY_LATEST
 
-
-
- - - diff --git a/extras/doc/html/_mozzi_config_values_8h.js b/extras/doc/html/_mozzi_config_values_8h.js deleted file mode 100644 index 184bc5cda..000000000 --- a/extras/doc/html/_mozzi_config_values_8h.js +++ /dev/null @@ -1,22 +0,0 @@ -var _mozzi_config_values_8h = -[ - [ "MOZZI_ANALOG_READ_NONE", "_mozzi_config_values_8h.html#a283cf3ec2e54d3bd0e83a9ad13c47196", null ], - [ "MOZZI_ANALOG_READ_STANDARD", "_mozzi_config_values_8h.html#a84fc50e08fe6399aa79fcfc6d9b5a544", null ], - [ "MOZZI_AUDIO_INPUT_NONE", "_mozzi_config_values_8h.html#aa0166eea48ec88e262126e89bba360f9", null ], - [ "MOZZI_AUDIO_INPUT_STANDARD", "_mozzi_config_values_8h.html#a03787c9546c03c77fa5abdc51af2e8ea", null ], - [ "MOZZI_COMPATIBILITY_1_1", "_mozzi_config_values_8h.html#a400056c9fc6d202d67ec42ae79fbc4c2", null ], - [ "MOZZI_COMPATIBILITY_2_0", "_mozzi_config_values_8h.html#ae7cc4a1ce04d3aacbe968e8f920462e9", null ], - [ "MOZZI_COMPATIBILITY_LATEST", "_mozzi_config_values_8h.html#a7bb35f3ef754aa2d2ae6d6b1a5356afa", null ], - [ "MOZZI_I2S_FORMAT_LSBJ", "_mozzi_config_values_8h.html#ab71e0b01253f5d12a17bacdcd0d4bc98", null ], - [ "MOZZI_I2S_FORMAT_PLAIN", "_mozzi_config_values_8h.html#aa6a3c50b0c4d8c057d8464cea20f493d", null ], - [ "MOZZI_MONO", "_mozzi_config_values_8h.html#a9b71d48222658fcc7f7334135a5ea3b0", null ], - [ "MOZZI_OUTPUT_2PIN_PWM", "_mozzi_config_values_8h.html#ad079ff2303024d89ac144dd8dd4880ae", null ], - [ "MOZZI_OUTPUT_EXTERNAL_CUSTOM", "_mozzi_config_values_8h.html#ac568d605c859af89429417e5e7e52607", null ], - [ "MOZZI_OUTPUT_EXTERNAL_TIMED", "_mozzi_config_values_8h.html#ae1a1bac4312daa42b2de8479c60bfc57", null ], - [ "MOZZI_OUTPUT_I2S_DAC", "_mozzi_config_values_8h.html#a4c4808f0925b7b8e53cfe325989b8da4", null ], - [ "MOZZI_OUTPUT_INTERNAL_DAC", "_mozzi_config_values_8h.html#ad9ae19449181ec345e3ca4797b4efb1e", null ], - [ "MOZZI_OUTPUT_PDM_VIA_I2S", "_mozzi_config_values_8h.html#aa53f4f4b18e85fadf2b21767c520571b", null ], - [ "MOZZI_OUTPUT_PDM_VIA_SERIAL", "_mozzi_config_values_8h.html#a5a46cd28abf78a0e314b7325fb2c17b8", null ], - [ "MOZZI_OUTPUT_PWM", "_mozzi_config_values_8h.html#a3d19bcc872932c7b9fb663cbef8d9d5a", null ], - [ "MOZZI_STEREO", "_mozzi_config_values_8h.html#ae7468340827c0cf521b19b0a6f352fea", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/_mozzi_config_values_8h_source.html b/extras/doc/html/_mozzi_config_values_8h_source.html deleted file mode 100644 index ad30c3d64..000000000 --- a/extras/doc/html/_mozzi_config_values_8h_source.html +++ /dev/null @@ -1,162 +0,0 @@ - - - - - - - -Mozzi: MozziConfigValues.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
MozziConfigValues.h
-
-
-Go to the documentation of this file.
1 /*
-
2  * MozziConfigValues.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2023-2024 Thomas Friedrichsmeier and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 /** @file MozziConfigValues.h
-
13  * This file keeps a list of named configuration values.
-
14  *
-
15  * Note that these are all given as defines, instead of e.g. const ints or enum values, because they need to be usable at preprocessor level, in order to control conditional compilation.
-
16 */
-
17 
-
18 #ifndef MOZZICONFIG_VALUES_H
-
19 #define MOZZICONFIG_VALUES_H
-
20 
-
21 
-
22 
-
23 #define MOZZI_MONO 1
-
24 #define MOZZI_STEREO 2
-
25 
-
26 // We try to use distinct values as much as possible so we can catch semantic errors like "#define MOZZI_AUDIO_MODE MOZZI_STEREO"
-
27 #define MOZZI_OUTPUT_PWM 101
-
28 #define MOZZI_OUTPUT_2PIN_PWM 102
-
29 #define MOZZI_OUTPUT_EXTERNAL_TIMED 103
-
30 #define MOZZI_OUTPUT_EXTERNAL_CUSTOM 104
-
31 #define MOZZI_OUTPUT_PDM_VIA_I2S 105
-
32 #define MOZZI_OUTPUT_PDM_VIA_SERIAL 106
-
33 #define MOZZI_OUTPUT_I2S_DAC 107
-
34 #define MOZZI_OUTPUT_INTERNAL_DAC 108
-
35 
-
36 #define MOZZI_AUDIO_INPUT_NONE 201
-
37 #define MOZZI_AUDIO_INPUT_STANDARD 202
-
38 
-
39 #define MOZZI_ANALOG_READ_NONE 301
-
40 #define MOZZI_ANALOG_READ_STANDARD 302
-
41 
-
42 #define MOZZI_I2S_FORMAT_PLAIN 401
-
43 #define MOZZI_I2S_FORMAT_LSBJ 402
-
44 
-
45 // defined with some space in between, just in case. This should be numerically ordered.
-
46 #define MOZZI_COMPATIBILITY_1_1 1100
-
47 #define MOZZI_COMPATIBILITY_2_0 2000
-
48 #define MOZZI_COMPATIBILITY_LATEST 9000 // May be upped, arbitrarily
-
49 
-
50 // For convenience
-
51 #include "hardware_defines.h"
-
52 
-
53 
-
54 #endif
-
-
- - - diff --git a/extras/doc/html/_mozzi_guts_8h_source.html b/extras/doc/html/_mozzi_guts_8h_source.html deleted file mode 100644 index 8183b0f43..000000000 --- a/extras/doc/html/_mozzi_guts_8h_source.html +++ /dev/null @@ -1,316 +0,0 @@ - - - - - - - -Mozzi: MozziGuts.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
MozziGuts.h
-
-
-
1 /*
-
2  * MozziGuts.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 #ifndef MOZZIGUTS_H_
-
13 #define MOZZIGUTS_H_
-
14 
-
15 #include "Arduino.h"
-
16 
-
17 #include "MozziConfigValues.h"
-
18 
-
19 #if !(defined(MOZZI_H_) || defined(MOZZI_HEADERS_ONLY_H_))
-
20 #warning Direct inclusion of MozziGuts.h is deprecated. Use Mozzi.h, instead, and read about porting to Mozzi 2.0
-
21 #define MOZZI_COMPATIBILITY_LEVEL MOZZI_COMPATIBILITY_1_1
-
22 #endif
-
23 
-
24 #include "hardware_defines.h"
-
25 
-
26 #if IS_TEENSY3() || IS_TEENSY4()
-
27 // required from http://github.com/pedvide/ADC for Teensy 3.*
-
28 #include <ADC.h>
-
29 #endif
-
30 
-
31 #include "internal/config_checks_generic.h"
-
32 
-
33 #include "mozzi_analog.h"
-
34 #include "AudioOutput.h"
-
35 
-
36 // TODO Mozzi 2.0: These typedef probably obsolete?
-
37 // common numeric types
-
38 typedef unsigned char uchar;
-
39 typedef unsigned int uint;
-
40 typedef unsigned long ulong;
-
41 
-
42 #if defined(__AVR__)
-
43 typedef unsigned char byte; // for arduino ide
-
44 typedef unsigned char uint8_t;
-
45 typedef signed char int8_t;
-
46 typedef unsigned int uint16_t;
-
47 typedef signed int int16_t;
-
48 typedef unsigned long uint32_t;
-
49 typedef signed long int32_t;
-
50 #else
-
51 // Other supported arches add typedefs, here, unless already defined for that platform needed
-
52 #endif
-
53 
-
54 /*! @defgroup core Mozzi Core Functions
-
55 
-
56 The bones of every Mozzi sketch.
-
57 
-
58 @ingroup core
-
59 Sets up the timers for audio and control rate processes, storing the timer
-
60 registers so they can be restored when Mozzi stops. startMozzi() goes in your sketch's
-
61 setup() routine.
-
62 
-
63 This function intializes the timer(s) needed to move audio samples to the output according to the
-
64 configured @ref MOZZI_AUDIO_MODE .
-
65 
-
66 @param control_rate_hz Sets how often updateControl() is called. It must be a power of 2.
-
67 If no parameter is provided, control_rate_hz is set to MOZZI_CONTROL_RATE,
-
68 which has a default value of 64 (you can re-\#define it in your sketch).
-
69 The practical upper limit for control rate depends on how busy the processor is,
-
70 and you might need to do some tests to find the best setting.
-
71 
-
72 @note startMozzi calls setupMozziADC(), which calls setupFastAnalogRead() and adcDisconnectAllDigitalIns(),
-
73 which disables digital inputs on all analog input pins. All in mozzi_analog.h and easy to change if you need to (hack).
-
74 They are all called automatically and hidden away because it keeps things simple for a STANDARD_PLUS set up,
-
75 but if it turns out to be confusing, they might need to become visible again.
-
76 */
-
77 void startMozzi(int control_rate_hz = MOZZI_CONTROL_RATE);
-
78 
-
79 
-
80 
-
81 /** @ingroup core
-
82 Stops audio and control interrupts and restores the timers to the values they
-
83 had before Mozzi was started. This could be useful when using sensor libraries
-
84 which depend on the same timers as Mozzi.
-
85 
-
86 A potentially better option for resolving timer conflicts involves using
-
87 non-blocking methods, such as demonstrated by the twowire_nonblock code in the
-
88 forked version of Mozzi on github, so sound production can continue while
-
89 reading sensors.
-
90 
-
91 As it is, stopMozzi restores all the Timers used by Mozzi to their previous
-
92 settings. Another scenario which could be easily hacked in MozziGuts.hpp could
-
93 involve individually saving and restoring particular Timer registers depending
-
94 on which one(s) are required for other tasks.
-
95 
-
96 @note This function is not actually implemented on all platforms.
-
97 */
-
98 void stopMozzi();
-
99 
-
100 
- -
102 AudioOutput_t updateAudio();
-
103 #else
-
104 /** @ingroup core
-
105 This is where you put your audio code. updateAudio() has to keep up with the
-
106 MOZZI_AUDIO_RATE of 16384 or 32768 Hz, so to keep things running smoothly, avoid doing any
-
107 calculations here which could be done in setup() or updateControl().
-
108 @return an audio sample.
-
109 
-
110 While is possible (in mono sketches) to return a plain unscaled int, it is generally best to return
-
111 auto-scaled samples using MonoOutput::from8Bit(), MonoOutput::from16Bit(), MonoOutput::fromNbit(), or
-
112 their StereoOutput equivalents.
-
113 */
-
114 AudioOutput updateAudio();
-
115 #endif
-
116 
-
117 /** @ingroup core
-
118 This is where you put your control code. You need updateControl() somewhere in
-
119 your sketch, even if it's empty. updateControl() is called at the control rate
-
120 you set in startMozzi(). To save processor load, avoid any calculations here
-
121 which could be done in setup().
-
122 */
-
123 void updateControl();
-
124 
-
125 
-
126 /** @ingroup core
-
127 This is required in Arduino's loop(). If there is room in Mozzi's output buffer,
-
128 audioHook() calls updateAudio() once and puts the result into the output
-
129 buffer. Also, if \@ref MOZZI_AUDIO_INPUT is enabled in the config,
-
130 audioHook() takes care of moving audio input from the input buffer so it can be
-
131 accessed with getAudioInput() in your updateAudio() routine.
-
132 If other functions are called in loop() along with audioHook(), see if
-
133 they can be called less often by moving them into updateControl(),
-
134 to save processing power. Otherwise it may be most efficient to
-
135 calculate a block of samples at a time by putting audioHook() in a loop of its
-
136 own, rather than calculating only 1 sample for each time your other functions
-
137 are called.
-
138 */
-
139 void audioHook();
-
140 
-
141 /** @ingroup analog
-
142 
-
143 See getAudioInput(). The template parameter specifies the desired value range in bits. */
-
144 template<byte RES> uint16_t getAudioInput();
-
145 
-
146 /** @ingroup analog
-
147 
-
148 See getAudioInput(). Equivalent to getAudioInput<16>(). */
-
149 template<byte RES> inline uint16_t getAudioInput16() { return getAudioInput<16>(); }
-
150 
-
151 /** @ingroup analog
-
152 This returns audio input from the input buffer, if
-
153 \@ref MOZZI_AUDIO_INPUT is enabled in the config (see also the related option MOZZI_AUDIO_INPUT_PIN).
-
154 
-
155 The audio signal needs to be in the range 0 to VCC volts (i.e. 5 volts on Arduino Uno R3).
-
156 Circuits and discussions about biasing a signal
-
157 in the middle of this range can be found at
-
158 http://electronics.stackexchange.com/questions/14404/dc-biasing-audio-signal
-
159 and
-
160 http://interface.khm.de/index.php/lab/experiments/arduino-realtime-audio-processing/ .
-
161 A circuit and instructions for amplifying and biasing a microphone signal can be found at
-
162 http://www.instructables.com/id/Arduino-Audio-Input/?ALLSTEPS
-
163 
-
164 @note The value range returned by this function follows the same rules as detailed in the documentation
-
165  for mozziAnalogRead(): For portable code, define MOZZI_ANALGO_READ_RESOLUTION at the top of your
-
166  sketch, or use the templated version of this function.
-
167 
-
168 @return audio data from the input buffer
-
169 */
-
170 #if defined(FOR_DOXYGEN_ONLY) || (!MOZZI_IS(MOZZI_AUDIO_INPUT, MOZZI_AUDIO_INPUT_NONE))
-
171 #if defined(FOR_DOXYGEN_ONLY) || defined(MOZZI_ANALOG_READ_RESOLUTION)
-
172 inline uint16_t getAudioInput() { return getAudioInput<MOZZI_ANALOG_READ_RESOLUTION>(); };
-
173 #else
-
174 MOZZI_DEPRECATED("2.0", "This use of getAudioInput() is not portable. Refer to the API documentation for suggested alternatives") inline uint16_t getAudioInput() { return getAudioInput<MOZZI__INTERNAL_ANALOG_READ_RESOLUTION>(); };
-
175 #endif
-
176 #endif
-
177 
-
178 
-
179 /** @ingroup core
-
180 An alternative for Arduino time functions like micros() and millis(). This is slightly faster than micros(),
-
181 and also it is synchronized with the currently processed audio sample (which, due to the audio
-
182 output buffer, could diverge up to 256/MOZZI_AUDIO_RATE seconds from the current time).
-
183 audioTicks() is updated each time an audio sample
-
184 is output, so the resolution is 1/MOZZI_AUDIO_RATE microseconds (61 microseconds when MOZZI_AUDIO_RATE is
-
185 16384 Hz).
-
186 @return the number of audio ticks since the program began.
-
187 */
-
188 unsigned long audioTicks();
-
189 
-
190 
-
191 
-
192 /** @ingroup core
-
193 An alternative for Arduino time functions like micros() and millis(). This is slightly faster than micros(),
-
194 and also it is synchronized with the currently processed audio sample (which, due to the audio
-
195 output buffer, could diverge up to 256/MOZZI_AUDIO_RATE seconds from the current time).
-
196 audioTicks() is updated each time an audio sample
-
197 is output, so the resolution is 1/MOZZI_AUDIO_RATE microseconds (61 microseconds when MOZZI_AUDIO_RATE is
-
198 16384 Hz).
-
199 @return the approximate number of microseconds since the program began.
-
200 @todo incorporate mozziMicros() in a more accurate EventDelay()?
-
201 */
-
202 unsigned long mozziMicros();
-
203 
-
204 #ifndef _MOZZI_HEADER_ONLY
-
205 #include "internal/MozziGuts.hpp"
-
206 #endif
-
207 
-
208 #endif /* MOZZIGUTS_H_ */
-
-
- - - diff --git a/extras/doc/html/_mozzi_guts_8hpp_source.html b/extras/doc/html/_mozzi_guts_8hpp_source.html deleted file mode 100644 index 5dda9c593..000000000 --- a/extras/doc/html/_mozzi_guts_8hpp_source.html +++ /dev/null @@ -1,430 +0,0 @@ - - - - - - - -Mozzi: MozziGuts.hpp Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
MozziGuts.hpp
-
-
-
1 /*
-
2  * MozziGuts.hpp
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10 */
-
11 
-
12 #include <Arduino.h>
-
13 
-
14 #include "CircularBuffer.h"
-
15 #include "mozzi_analog.h"
-
16 #include "internal/mozzi_rand_p.h"
-
17 #include "AudioOutput.h"
-
18 
-
19 /** @brief Internal. Do not use function in this namespace in your sketch!
-
20 
-
21 This namespace contains various functions that are used by Mozzi, internally, but are not meant to be used in a sketch.
-
22 
-
23 The details of these may change without warning. I repeat: Do not use these in your sketch!
-
24 */
-
25 namespace MozziPrivate {
-
26 
-
27 // Forward declarations of functions to be provided by platform specific implementations
-
28 #if (!BYPASS_MOZZI_OUTPUT_BUFFER)
-
29 static void CACHED_FUNCTION_ATTR defaultAudioOutput();
-
30 #endif
-
31 #if MOZZI_IS(MOZZI_ANALOG_READ, MOZZI_ANALOG_READ_STANDARD)
-
32 static void advanceADCStep(); // to be provided by platform implementation
-
33 static void startSecondADCReadOnCurrentChannel(); // to be provided by platform implementation
-
34 static uint8_t adc_count = 0; // needed below
-
35 #endif
-
36 
-
37 // TODO: make this helper public?
-
38 template<byte BITS_IN, byte BITS_OUT, typename T> constexpr T smartShift(T value) {
-
39  return (BITS_IN > BITS_OUT) ? value >> (BITS_IN - BITS_OUT) : (BITS_IN < BITS_OUT) ? value << (BITS_OUT - BITS_IN) : value;
-
40 }
-
41 }
-
42 
-
43 // Include the appropriate implementation
-
44 #if IS_AVR()
-
45 # include "MozziGuts_impl_AVR.hpp"
-
46 #elif IS_STM32MAPLE()
-
47 # include "MozziGuts_impl_STM32.hpp"
-
48 #elif IS_STM32DUINO()
-
49 # include "MozziGuts_impl_STM32duino.hpp"
-
50 #elif IS_ESP32()
-
51 # include "MozziGuts_impl_ESP32.hpp"
-
52 #elif IS_ESP8266()
-
53 # include "MozziGuts_impl_ESP8266.hpp"
-
54 #elif (IS_TEENSY3() || IS_TEENSY4())
-
55 # include "MozziGuts_impl_TEENSY.hpp"
-
56 #elif (IS_SAMD21())
-
57 # include "MozziGuts_impl_SAMD.hpp"
-
58 #elif (IS_RP2040())
-
59 # include "MozziGuts_impl_RP2040.hpp"
-
60 #elif (IS_MBED())
-
61 # include "MozziGuts_impl_MBED.hpp"
-
62 #elif (IS_RENESAS())
-
63 # include "MozziGuts_impl_RENESAS.hpp"
-
64 #else
-
65 # error "Platform not (yet) supported. Check MozziGuts_impl_template.hpp and existing implementations for a blueprint for adding your favorite MCU."
-
66 #endif
-
67 
-
68 /* Retro-compatibility with "legacy" boards which use the async
-
69  ADC for getting AUDIO_INPUT
-
70 */
-
71 #if !defined(MOZZI__LEGACY_AUDIO_INPUT_IMPL)
-
72 # if !MOZZI_IS(MOZZI_AUDIO_INPUT, MOZZI_AUDIO_INPUT_NONE)
-
73 # define MOZZI__LEGACY_AUDIO_INPUT_IMPL 1
-
74 # else
-
75 # define MOZZI__LEGACY_AUDIO_INPUT_IMPL 0
-
76 # endif
-
77 #endif
-
78 
-
79 namespace MozziPrivate {
-
80 ////// BEGIN Output buffering /////
-
81 #if BYPASS_MOZZI_OUTPUT_BUFFER == true
- -
83 
-
84 inline void bufferAudioOutput(const AudioOutput f) {
-
85  audioOutput(f);
- -
87 }
-
88 #else
-
89 CircularBuffer<AudioOutput> output_buffer; // fixed size 256
-
90 # define canBufferAudioOutput() (!output_buffer.isFull())
-
91 # define bufferAudioOutput(f) output_buffer.write(f)
-
92 static void CACHED_FUNCTION_ATTR defaultAudioOutput() {
-
93 
-
94 #if MOZZI_IS(MOZZI__LEGACY_AUDIO_INPUT_IMPL, 1) // in that case, we rely on asynchroneous ADC reads implemented for mozziAnalogRead to get the audio in samples
-
95  MOZZI_ASSERT_NOTEQUAL(MOZZI_ANALOG_READ, MOZZI_ANALOG_READ_NONE);
-
96  adc_count = 0;
-
97  startSecondADCReadOnCurrentChannel(); // the current channel is the AUDIO_INPUT pin
-
98 # endif
-
99  audioOutput(output_buffer.read());
-
100 }
-
101 #endif // #if (AUDIO_INPUT_MODE == AUDIO_INPUT_LEGACY)
-
102 ////// END Output buffering ///////
-
103 
-
104 
-
105 ////// BEGIN Analog input code ////////
-
106 /* Analog input code was informed initially by a discussion between
-
107 jRaskell, bobgardner, theusch, Koshchi, and code by jRaskell.
-
108 http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&p=789581
-
109 */
-
110 
-
111 #if MOZZI_IS(MOZZI_ANALOG_READ, MOZZI_ANALOG_READ_STANDARD)
-
112 
-
113 #include "Stack.h"
- - -
116 volatile static int8_t current_channel = -1; // volatile because accessed in control and adc ISRs
-
117 
-
118 /* gets the next channel to read off the stack, and if there is a channel there, it changes to that channel and starts a conversion.
-
119 */
- -
121  // ugly syntax below saves a few bytes/instructions (as current_channel is declared volatile)
- -
123 }
-
124 
-
125 /* Called each time in updateControlWithAutoADC(), after updateControl()
-
126  Forbidding inline, here, saves a wholesome 16 bytes flash on AVR (without USE_AUDIO_INPUT). No idea, why.
-
127 */
-
128 __attribute__((noinline)) void adcStartReadCycle() {
-
129  if (current_channel < 0) // last read of adc_channels_to_read stack was empty, ie. all channels from last time have been read
-
130  {
-
131 #if MOZZI_IS(MOZZI__LEGACY_AUDIO_INPUT_IMPL, 1) // use of async ADC for audio input
- -
133 #else
- -
135  adc_count = 0;
-
136 #endif
-
137  }
-
138 }
-
139 
- -
141  pin = adcPinToChannelNum(pin); // allow for channel or pin numbers; on most platforms other than AVR this has no effect. See note on pins/channels
- - -
144 }
-
145 
-
146 #if !MOZZI_IS(MOZZI_AUDIO_INPUT, MOZZI_AUDIO_INPUT_NONE)
-
147 static uint16_t audio_input; // holds the latest audio from input_buffer
-
148 uint16_t getAudioInput() { return audio_input; }
-
149 #endif
-
150 
-
151 #if MOZZI_IS(MOZZI__LEGACY_AUDIO_INPUT_IMPL, 1)
-
152 // ring buffer for audio input
-
153 CircularBuffer<uint16_t> input_buffer; // fixed size 256
-
154 #define audioInputAvailable() (!input_buffer.isEmpty())
-
155 #define readAudioInput() (input_buffer.read())
-
156 /** NOTE: Triggered at MOZZI_AUDIO_RATE via defaultAudioOutput(). In addition to the MOZZI_AUDIO_INPUT_PIN, at most one reading is taken for mozziAnalogRead(). */
-
157 inline void advanceADCStep() {
-
158  switch (adc_count) {
-
159  case 0:
-
160  // 6us
-
161  // the input pin was the last thing we read
- -
163  adcReadSelectedChannels(); // TODO: doesn't this stop the cycle, in case no pins to read?
-
164  break;
-
165 
-
166  case 1:
-
167  // <2us, <1us w/o receive
-
168  // receiveFirstControlADC();
- -
170  break;
-
171 
-
172  case 2:
-
173  // 3us
- -
175  adcStartConversion(adcPinToChannelNum(MOZZI_AUDIO_INPUT_PIN)); // -> result is ignored, but first thing in the next cycle, a second reading is taken.
-
176  break;
-
177 
-
178  }
-
179  adc_count++;
-
180 }
-
181 #else // no (legacy) audio input
-
182 /** NOTE: Triggered at CONTROL_RATE via advanceControlLoop().
-
183 
-
184 This interrupt handler cycles through all analog inputs on the adc_channels_to_read Stack,
-
185 doing 2 conversions on each channel but only keeping the second conversion each time,
-
186 because the first conversion after changing channels is often inaccurate (on atmel-based arduinos).*/
-
187 inline void advanceADCStep() {
-
188  if (!adc_count) { // i.e. first step
-
189  //<1us
-
190  startSecondADCReadOnCurrentChannel(); // discard fist - noisy - reading, start another on same pin
-
191  adc_count=1;
-
192  } else {
-
193  // 3us
-
194  analog_readings[channelNumToIndex(current_channel)] = getADCReading(); // register second reading
-
195  adcReadSelectedChannels(); // start first reading on next pin (if any)
-
196  adc_count=0;
-
197  }
-
198 }
-
199 #endif
-
200 
-
201 #else
- -
203 
- -
205  return analogRead(pin);
-
206 }
-
207 
-
208 #endif // MOZZI_ANALOG_READ
-
209 
-
210 ////// END analog input code ////////
-
211 
-
212 
-
213 ////// BEGIN audio/control hook /////
- -
215 static uint16_t update_control_counter;
-
216 
-
217 inline void advanceControlLoop() {
-
218  if (!update_control_counter) {
-
219  update_control_counter = update_control_timeout;
-
220  updateControl();
-
221 #if MOZZI_IS(MOZZI_ANALOG_READ, MOZZI_ANALOG_READ_STANDARD)
-
222  adcStartReadCycle();
-
223 #endif
-
224  } else {
-
225  --update_control_counter;
-
226  }
-
227 }
-
228 
-
229 void audioHook() // 2us on AVR excluding updateAudio()
-
230 {
-
231 // setPin13High();
-
232  if (canBufferAudioOutput()) {
-
233  advanceControlLoop();
-
234  bufferAudioOutput(updateAudio());
-
235 
-
236 #if defined(LOOP_YIELD)
-
237  LOOP_YIELD
-
238 #endif
-
239 
-
240 #if !MOZZI_IS(MOZZI_AUDIO_INPUT, MOZZI_AUDIO_INPUT_NONE)
-
241  if (audioInputAvailable()) audio_input = readAudioInput();
-
242 #endif
-
243  }
-
244 // Like LOOP_YIELD, but running every cycle of audioHook(), not just once per sample
-
245 #if defined(AUDIO_HOOK_HOOK)
-
246  AUDIO_HOOK_HOOK
-
247 #endif
-
248  // setPin13Low();
-
249 }
-
250 
-
251 // NOTE: This function counts the ticks of audio _output_, corresponding to real time elapsed.
-
252 // It does _not_ provide the count of the current audio frame to be generated by updateAudio(). These two things will differ, slightly,
-
253 // depending on the fill state of the buffer.
-
254 // TODO: In many - but not all - use cases, it might be more useful to provide a count of the current audio frame to be generated, however,
-
255 // the existing semantics have always been in place, so far.
-
256 unsigned long audioTicks() {
-
257 #if (BYPASS_MOZZI_OUTPUT_BUFFER != true)
-
258  return output_buffer.count();
-
259 #elif defined(AUDIOTICK_ADJUSTMENT)
-
260  return samples_written_to_buffer - (AUDIOTICK_ADJUSTMENT);
-
261 #else
-
262  return samples_written_to_buffer;
-
263 #endif
-
264 }
-
265 
-
266 unsigned long mozziMicros() { return audioTicks() * MICROS_PER_AUDIO_TICK; }
-
267 
-
268 ////// END audio/control hook /////
-
269 
-
270 ////// BEGIN initialization ///////
-
271 void startMozzi(int control_rate_hz) {
-
272 #if !MOZZI_IS(MOZZI_ANALOG_READ, MOZZI_ANALOG_READ_NONE)
-
273  MozziPrivate::setupMozziADC(FAST_ADC); // you can use setupFastAnalogRead() with FASTER_ADC or FASTEST_ADC
-
274  // in setup() if desired (not for Teensy 3.* )
-
275 #endif
-
276  // delay(200); // so AutoRange doesn't read 0 to start with
-
277  update_control_timeout = MOZZI_AUDIO_RATE / control_rate_hz - 1;
-
278  startAudio();
-
279 }
-
280 
-
281 uint32_t MozziRandPrivate::x=132456789;
-
282 uint32_t MozziRandPrivate::y=362436069;
-
283 uint32_t MozziRandPrivate::z=521288629;
-
284 
-
285 ////// END initialization ///////
-
286 }
-
287 
-
288 // reduce Macro leakage
-
289 #undef LOOP_YIELD
-
290 #undef BYPASS_MOZZI_OUTPUT_BUFFER
-
291 #undef AUDIO_HOOK_HOOK
-
292 #undef AUDIOTICK_ADJUSTMENT
-
293 #undef MOZZI__LEGACY_AUDIO_INPUT_IMPL
-
294 
-
295 // "export" publicly accessible functions defined in this file
-
296 // NOTE: unfortunately, we cannot just write "using MozziPrivate::mozziMicros()", etc. as that would conflict with, rather than define mozziMicros().
-
297 // Instead, for now, we forward the global-scope functions to their implementations inside MozziPrivate.
-
298 // We might want to rethink how this is done. What matters is that these functions are user accessible, though, while most of what we
-
299 // now keep in MozziPrivate is hidden away.
-
300 unsigned long mozziMicros() { return MozziPrivate::mozziMicros(); };
-
301 unsigned long audioTicks() { return MozziPrivate::audioTicks(); };
-
302 void startMozzi(int control_rate_hz) { MozziPrivate::startMozzi(control_rate_hz); };
-
303 void stopMozzi() { MozziPrivate::stopMozzi(); };
-
304 template<byte RES> uint16_t mozziAnalogRead(uint8_t pin) { return MozziPrivate::smartShift<MOZZI__INTERNAL_ANALOG_READ_RESOLUTION, RES>(MozziPrivate::mozziAnalogRead(pin));};
-
305 #if !MOZZI_IS(MOZZI_AUDIO_INPUT, MOZZI_AUDIO_INPUT_NONE)
-
306 template<byte RES> uint16_t getAudioInput() { return MozziPrivate::smartShift<MOZZI__INTERNAL_ANALOG_READ_RESOLUTION, RES>(MozziPrivate::getAudioInput()); };
-
307 #endif
-
308 #if MOZZI_IS(MOZZI_ANALOG_READ, MOZZI_ANALOG_READ_STANDARD)
-
309 void setupMozziADC(int8_t speed) { MozziPrivate::setupMozziADC(speed); };
-
310 void setupFastAnalogRead(int8_t speed) { MozziPrivate::setupFastAnalogRead(speed); };
-
311 uint8_t adcPinToChannelNum(uint8_t pin) { return MozziPrivate::adcPinToChannelNum(pin); };
-
312 #endif
-
313 void audioHook() { MozziPrivate::audioHook(); };
-
314 
-
315 // This is not strictly needed, but we want it to throw an error, if users have audioOutput() in their sketch without external output configured
-
316 #if !MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_TIMED, MOZZI_OUTPUT_EXTERNAL_CUSTOM)
-
317 MOZZI_DEPRECATED("n/a", "Sketch has audioOutput() function, although external output is not configured.") void audioOutput(const AudioOutput) {};
-
318 #endif
-
319 #if !MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_CUSTOM)
-
320 // TODO: This won't work without a rename:
-
321 //MOZZI_DEPRECATED("n/a", "Sketch has canBufferAudioOutput() function, although custom external output is not configured.") bool canBufferAudioOutput() {};
-
322 #endif
-
-
- - - diff --git a/extras/doc/html/_mozzi_guts__impl___a_v_r_8hpp_source.html b/extras/doc/html/_mozzi_guts__impl___a_v_r_8hpp_source.html deleted file mode 100644 index f69922955..000000000 --- a/extras/doc/html/_mozzi_guts__impl___a_v_r_8hpp_source.html +++ /dev/null @@ -1,555 +0,0 @@ - - - - - - - -Mozzi: MozziGuts_impl_AVR.hpp Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
MozziGuts_impl_AVR.hpp
-
-
-
1 /*
-
2  * MozziGuts_impl_AVR.hpp
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10 */
-
11 
-
12 #include "utility/FrequencyTimer2.h"
-
13 #include "utility/TimerOne.h"
-
14 
-
15 #if (F_CPU != 16000000)
-
16 #warning
-
17  "Mozzi has been tested with a cpu clock speed of 16MHz on Arduino! Results may vary with other speeds."
-
18 #endif
-
19 
-
20 ////// BEGIN analog input code ////////
-
21 #if MOZZI_IS(MOZZI_ANALOG_READ, MOZZI_ANALOG_READ_STANDARD)
-
22 extern uint8_t analog_reference;
-
23 
-
24 ISR(ADC_vect, ISR_BLOCK)
-
25 {
-
26  MozziPrivate::advanceADCStep();
-
27 }
-
28 
-
29 namespace MozziPrivate {
-
30 #define getADCReading() ADC /* officially (ADCL | (ADCH << 8)) but the compiler works it out */
-
31 #define channelNumToIndex(channel) channel
-
32 uint8_t adcPinToChannelNum(uint8_t pin) {
-
33 #if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
-
34  if (pin >= 54) pin -= 54; // allow for channel or pin numbers
-
35 #elif defined(__AVR_ATmega32U4__)
-
36  if (pin >= 18) pin -= 18; // allow for channel or pin numbers
-
37 # if defined(CORE_TEENSY) // special handling for Teensy2, which does not (did not?) have an analogPinToChannel() define (see https://github.com/sensorium/Mozzi/issues/10)
-
38  static const uint8_t PROGMEM adc_mapping[] = {
-
39  // 0, 1, 4, 5, 6, 7, 13, 12, 11, 10, 9, 8
-
40  0, 1, 4, 5, 6, 7, 13, 12, 11, 10, 9, 8, 10, 11, 12, 13, 7, 6, 5, 4, 1, 0, 8
-
41  };
-
42  pin = pgm_read_byte(adc_mapping + (pin));
-
43 # else
-
44  pin = analogPinToChannel(pin);
-
45 # endif
-
46 #elif defined(__AVR_ATmega1284__)
-
47  if (pin >= 24) pin -= 24; // allow for channel or pin numbers
-
48 #else
-
49  if (pin >= 14) pin -= 14; // allow for channel or pin numbers
-
50 #endif
-
51  return pin;
-
52 }
-
53 
-
54 void adcStartConversion(uint8_t channel) {
-
55 #if defined(__AVR_ATmega32U4__)
-
56  ADCSRB = (ADCSRB & ~(1 << MUX5)) | (((channel >> 3) & 0x01) << MUX5);
-
57 #elif defined(ADCSRB) && defined(MUX5)
-
58  // the MUX5 bit of ADCSRB selects whether we're reading from channels
-
59  // 0 to 7 (MUX5 low) or 8 to 15 (MUX5 high).
-
60  ADCSRB = (ADCSRB & ~(1 << MUX5)) | (((channel >> 3) & 0x01) << MUX5);
-
61 #endif
-
62 
-
63 // from wiring_analog.c:
-
64 // set the analog reference (high two bits of ADMUX) and select the
-
65 // channel (low 4 bits). this also sets ADLAR (left-adjust result)
-
66 // to 0 (the default).
-
67 #if defined(ADMUX)
-
68 # if defined(TEENSYDUINO) // analog_reference is not part TEENSY 2.0 codebase
-
69  ADMUX = (1 << REFS0) | (channel & 0x07); // TB2017 this overwrote analog_reference
-
70 # else
-
71  ADMUX = (analog_reference << 6) | (channel & 0x07);
-
72 # endif
-
73 #endif
-
74 #if defined(ADCSRA) && defined(ADCL)
-
75  // start the conversion
-
76  ADCSRA |= (1 << ADSC);
-
77 #endif
-
78 }
-
79 
-
80 static void startSecondADCReadOnCurrentChannel() {
-
81  ADCSRA |= (1 << ADSC); // start a second conversion on the current channel
-
82 }
-
83 
-
84 /*
-
85 void adcEnableInterrupt(){
-
86  ADCSRA |= (1 << ADIE);
-
87 }
-
88 */
-
89 
-
90 void setupMozziADC(int8_t speed) {
-
91  ADCSRA |= (1 << ADIE); // adc Enable Interrupt
-
92  adcDisconnectAllDigitalIns();
-
93  setupFastAnalogRead(speed);
-
94 }
-
95 
-
96 void setupFastAnalogRead(int8_t speed) {
-
97  if (speed == FAST_ADC){ // divide by 16
-
98  ADCSRA |= (1 << ADPS2);
-
99  ADCSRA &= ~(1 << ADPS1);
-
100  ADCSRA &= ~(1 << ADPS0);
-
101  } else if(speed == FASTER_ADC){ // divide by 8
-
102  ADCSRA &= ~(1 << ADPS2);
-
103  ADCSRA |= (1 << ADPS1);
-
104  ADCSRA |= (1 << ADPS0);
-
105  } else if(speed == FASTEST_ADC){ // divide by 4
-
106  ADCSRA &= ~(1 << ADPS2);
-
107  ADCSRA |= (1 << ADPS1);
-
108  ADCSRA &= ~(1 << ADPS0);
-
109  }
-
110 }
-
111 }
-
112 
-
113 #endif
-
114 
-
115 ////// END analog input code ////////
-
116 
-
117 
-
118 namespace MozziPrivate {
-
119 //// BEGIN AUDIO OUTPUT code ///////
-
120 /*
-
121 ATmega328 technical manual, Section 12.7.4:
-
122 The dual-slope operation [of phase correct pwm] has lower maximum operation
-
123 frequency than single slope operation. However, due to the symmetric feature
-
124 of the dual-slope PWM modes, these modes are preferred for motor control
-
125 applications.
-
126 Due to the single-slope operation, the operating frequency of the
-
127 fast PWM mode can be twice as high as the phase correct PWM mode that use
-
128 dual-slope operation. This high frequency makes the fast PWM mode well suited
-
129 for power regulation, rectification, and DAC applications. High frequency allows
-
130 physically small sized external components (coils, capacitors)..
-
131 
-
132 DAC, that's us! Fast PWM.
-
133 
-
134 PWM frequency tests
-
135 62500Hz, single 8 or dual 16 bits, bad aliasing
-
136 125000Hz dual 14 bits, sweet
-
137 250000Hz dual 12 bits, gritty, if you're gonna have 2 pins, have 14 bits
-
138 500000Hz dual 10 bits, grittier
-
139 16384Hz single nearly 9 bits (original mode) not bad for a single pin, but
-
140 carrier freq noise can be an issue
-
141 */
-
142 
-
143 // to store backups of timer registers so Mozzi can be stopped and pre_mozzi
-
144 // timer values can be restored
-
145 static uint8_t pre_mozzi_TCCR1A, pre_mozzi_TCCR1B, pre_mozzi_OCR1A,
- -
147 
-
148 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_2PIN_PWM)
-
149 #if defined(TCCR2A)
- - -
152 #elif defined(TCCR2)
- -
154 #elif defined(TCCR4A)
- - -
157 #endif
-
158 #endif
-
159 
-
160 static void backupPreMozziTimer1() {
-
161  // backup pre-mozzi register values for pausing later
-
162  pre_mozzi_TCCR1A = TCCR1A;
-
163  pre_mozzi_TCCR1B = TCCR1B;
-
164  pre_mozzi_OCR1A = OCR1A;
-
165  pre_mozzi_TIMSK1 = TIMSK1;
-
166 }
-
167 
-
168 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_2PIN_PWM)
-
169 #if defined(TCCR2A)
- -
171 #elif defined(TCCR2)
- -
173 #elif defined(TCCR4A)
- - -
176 #endif
-
177 #endif
-
178 
-
179 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_TIMED)
-
180 static void startAudio() {
- - -
183  (F_CPU/MOZZI_AUDIO_RATE)-1, // the -1 here is a result of empirical tests
-
184  // that showed that it brings the resulting frequency
-
185  // closer to what is expected.
-
186  // see: https://github.com/sensorium/Mozzi/pull/202
-
187 
-
188  PHASE_FREQ_CORRECT); // set period, phase and frequency correct
-
189  TIMSK1 = _BV(TOIE1); // Overflow Interrupt Enable (when not using
-
190  // Timer1.attachInterrupt())
-
191 }
-
192 
-
193 } // namespace MozziPrivate
-
194 
- - -
197 }
-
198 
-
199 namespace MozziPrivate {
-
200 #elif MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_CUSTOM)
-
201 static void startAudio() {}
-
202 #elif MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PWM)
-
203 inline void audioOutput(const AudioOutput f)
-
204 {
- -
206 # if (MOZZI_AUDIO_CHANNELS > 1)
- -
208 # endif
-
209 }
-
210 
-
211 static void startAudio() {
- -
213 
-
214  pinMode(MOZZI_AUDIO_PIN_1, OUTPUT); // set pin to output for audio
-
215 # if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PWM) && (MOZZI_PWM_RATE < 32768) // Formerly known as the - long since deprecated - "STANDARD" mode
- -
217  (F_CPU/MOZZI_AUDIO_RATE)-1,// the -1 here is a result of empirical tests
-
218  // that showed that it brings the resulting frequency
-
219  // closer to what is expected.
-
220  // see: https://github.com/sensorium/Mozzi/pull/202
-
221  PHASE_FREQ_CORRECT); // set period, phase and frequency correct
-
222 # else // Formerly known as "STANDARD_PLUS" mode
-
223  Timer1.initializeCPUCycles((F_CPU/MOZZI_PWM_RATE)-1, // the -1 here is a result of empirical tests
-
224  // that showed that it brings the resulting frequency
-
225  // closer to what is expected.
-
226  // see: https://github.com/sensorium/Mozzi/pull/202
-
227  FAST); // fast mode enables higher PWM rate
-
228 # endif
- -
230  MOZZI_AUDIO_BIAS); // pwm pin, 50% of Mozzi's duty cycle, ie. 0 signal
-
231 # if (MOZZI_AUDIO_CHANNELS > 1)
-
232  pinMode(MOZZI_AUDIO_PIN_2, OUTPUT); // set pin to output for audio
- -
234 # endif
-
235  TIMSK1 = _BV(TOIE1); // Overflow Interrupt Enable (when not using
-
236  // Timer1.attachInterrupt())
-
237 }
-
238 
-
239 } // namespace MozziPrivate
-
240 
-
241 /* Interrupt service routine moves sound data from the output buffer to the
-
242 Arduino output register, running at MOZZI_AUDIO_RATE. */
- -
244 # if (MOZZI_AUDIO_RATE < MOZZI_PWM_RATE) // only update every second ISR, if lower audio rate
-
245  static_assert(2l*MOZZI_AUDIO_RATE == MOZZI_PWM_RATE, "audio rate must the same, or exactly half of the pwm rate!");
-
246  static boolean alternate;
-
247  alternate = !alternate;
-
248  if (alternate) return;
-
249 # endif
-
250 
- -
252 }
-
253 
-
254 namespace MozziPrivate {
-
255 #elif MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_2PIN_PWM)
-
256 inline void audioOutput(const AudioOutput f) {
-
257  // read about dual pwm at
-
258  // http://www.openmusiclabs.com/learning/digital/pwm-dac/dual-pwm-circuits/
-
259  // sketches at http://wiki.openmusiclabs.com/wiki/PWMDAC,
-
260  // http://wiki.openmusiclabs.com/wiki/MiniArDSP
-
261  // if (!output_buffer.isEmpty()){
-
262  //unsigned int out = output_buffer.read();
-
263  // 14 bit, 7 bits on each pin
-
264  // MOZZI_AUDIO_PIN_1_REGISTER = out >> 7; // B00111111 10000000 becomes
-
265  // B1111111
-
266  // try to avoid looping over 7 shifts - need to check timing or disassemble to
-
267  // see what really happens unsigned int out_high = out<<1; // B00111111
-
268  // 10000000 becomes B01111111 00000000
-
269  // MOZZI_AUDIO_PIN_1_REGISTER = out_high >> 8; // B01111111 00000000
-
270  // produces B01111111 MOZZI_AUDIO_PIN_1_LOW_REGISTER = out & 127;
-
271  /* Atmega manual, p123
-
272  The high byte (OCR1xH) has to be written first.
-
273  When the high byte I/O location is written by the CPU,
-
274  the TEMP Register will be updated by the value written.
-
275  Then when the low byte (OCR1xL) is written to the lower eight bits,
-
276  the high byte will be copied into the upper 8-bits of
-
277  either the OCR1x buffer or OCR1x Compare Register in
-
278  the same system clock cycle.
-
279  */
- - -
282 }
-
283 
-
284 static void setupTimer2();
-
285 static void startAudio() {
- -
287  // pwm on timer 1
-
288  pinMode(MOZZI_AUDIO_PIN_1, OUTPUT); // set pin to output for audio, use 3.9k resistor
-
289  pinMode(MOZZI_AUDIO_PIN_1_LOW, OUTPUT); // set pin to output for audio, use 499k resistor
- -
291  F_CPU/125000,
-
292  FAST); // set period for 125000 Hz fast pwm carrier frequency = 14 bits
-
293  Timer1.pwm(MOZZI_AUDIO_PIN_1, 0); // pwm pin, 0% duty cycle, ie. 0 signal
- -
295  // audio output interrupt on timer 2, sets the pwm levels of timer 1
-
296  setupTimer2();
-
297 }
-
298 
-
299 /* set up Timer 2 using modified FrequencyTimer2 library */
-
300 void dummy() {}
-
301 
-
302 static void backupPreMozziTimer2() {
-
303  // backup Timer2 register values
-
304 #if defined(TCCR2A)
- - - - -
309 #elif defined(TCCR2)
- - - -
313 #elif defined(TCCR4A)
- - - - - - - -
321 #endif
-
322 }
-
323 
-
324 // audio output interrupt on timer 2 (or 4 on ATMEGA32U4 cpu), sets the pwm
-
325 // levels of timer 2
-
326 static void setupTimer2() {
-
327  backupPreMozziTimer2(); // to reset while pausing
-
328  unsigned long period = F_CPU / MOZZI_AUDIO_RATE;
- - - -
332 }
-
333 
-
334 } // namespace MozziPrivate
-
335 
-
336 #if defined(TIMER2_COMPA_vect)
- -
338 #elif defined(TIMER2_COMP_vect)
- -
340 #elif defined(TIMER4_COMPA_vect)
- -
342 #else
-
343 #error
-
344  "This board does not have a hardware timer which is compatible with FrequencyTimer2"
-
345 void dummy_function(void)
-
346 #endif
-
347 {
- -
349 }
-
350 
-
351 // end of HIFI
-
352 
-
353 namespace MozziPrivate {
-
354 
-
355 #endif
-
356 
-
357 //-----------------------------------------------------------------------------------------------------------------
-
358 
-
359 
-
360 void stopMozzi() {
-
361  noInterrupts();
-
362 
-
363  // restore backed up register values
-
364  TCCR1A = pre_mozzi_TCCR1A;
-
365  TCCR1B = pre_mozzi_TCCR1B;
-
366  OCR1A = pre_mozzi_OCR1A;
-
367 
-
368  TIMSK1 = pre_mozzi_TIMSK1;
-
369 
-
370 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_2PIN_PWM)
-
371 #if defined(TCCR2A)
-
372  TCCR2A = pre_mozzi_TCCR2A;
-
373  TCCR2B = pre_mozzi_TCCR2B;
-
374  OCR2A = pre_mozzi_OCR2A;
-
375  TIMSK2 = pre_mozzi_TIMSK2;
-
376 #elif defined(TCCR2)
-
377  TCCR2 = pre_mozzi_TCCR2;
-
378  OCR2 = pre_mozzi_OCR2;
-
379  TIMSK = pre_mozzi_TIMSK;
-
380 #elif defined(TCCR4A)
-
381  TCCR4B = pre_mozzi_TCCR4A;
-
382  TCCR4B = pre_mozzi_TCCR4B;
-
383  TCCR4B = pre_mozzi_TCCR4C;
-
384  TCCR4B = pre_mozzi_TCCR4D;
-
385  TCCR4B = pre_mozzi_TCCR4E;
-
386  OCR4C = pre_mozzi_OCR4C;
-
387  TIMSK4 = pre_mozzi_TIMSK4;
-
388 #endif
-
389 #endif
-
390  interrupts();
-
391 }
-
392 
-
393 // Unmodified TimerOne.cpp has TIMER3_OVF_vect.
-
394 // Watch out if you update the library file.
-
395 // The symptom will be no sound.
-
396 // ISR(TIMER1_OVF_vect)
-
397 // {
-
398 // Timer1.isrCallback();
-
399 // }
-
400 //// END AUDIO OUTPUT code ///////
-
401 
-
402 //// BEGIN Random seeding ////////
-
403 #if defined (__AVR_ATmega644P__)
-
404 
-
405 // a less fancy version for gizduino (__AVR_ATmega644P__) which doesn't know INTERNAL
-
406 static long longRandom()
-
407 {
-
408  return ((long)analogRead(0)+63)*(analogRead(1)+97); // added offsets in case analogRead is 0
-
409 }
-
410 
-
411 #else
-
412 
-
413 /*
-
414 longRandom(), used as a seed generator, comes from:
-
415 http://arduino.cc/forum/index.php/topic,38091.0.html
-
416 // AUTHOR: Rob Tillaart
-
417 // PURPOSE: Simple Random functions based upon unreliable internal temp sensor
-
418 // VERSION: 0.1
-
419 // DATE: 2011-05-01
-
420 //
-
421 // Released to the public domain, use at own risk
-
422 //
-
423 */
-
424 static long longRandom()
-
425 {
-
426  //analogReference(INTERNAL);
-
427  unsigned long rv = 0;
-
428  for (uint8_t i=0; i< 32; i++) rv |= ((analogRead(8)+1171) & 1L) << i; // added 1171 in case analogRead is 0
-
429  return rv;
-
430 }
-
431 #endif
-
432 
-
433 void MozziRandPrivate::autoSeed() {
-
434  ADCSRA &= ~ (1 << ADIE); // adc Disable Interrupt, re-enable at end
-
435  // this attempt at remembering analog_reference stops it working
-
436  // maybe needs a delay after changing analog reference in longRandom (Arduino reference suggests this)
-
437  // because the analog reads return 0
-
438  //uint8_t analog_reference_orig = ADMUX&192; // analog_reference is high 2 bits of ADMUX, store this because longRandom sets it to internal
-
439  x = longRandom();
-
440  y = longRandom();
-
441  z = longRandom();
-
442  //analogReference(analog_reference_orig); // change back to original
-
443  ADCSRA |= (1 << ADIE); // adc re-Enable Interrupt
-
444 }
-
445 
-
446 //// END Random seeding ////////
-
447 }
-
-
- - - diff --git a/extras/doc/html/_mozzi_guts__impl___e_s_p32_8hpp_source.html b/extras/doc/html/_mozzi_guts__impl___e_s_p32_8hpp_source.html deleted file mode 100644 index 1f55858cb..000000000 --- a/extras/doc/html/_mozzi_guts__impl___e_s_p32_8hpp_source.html +++ /dev/null @@ -1,286 +0,0 @@ - - - - - - - -Mozzi: MozziGuts_impl_ESP32.hpp Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
MozziGuts_impl_ESP32.hpp
-
-
-
1 /*
-
2  * MozziGuts_impl_ESP32.hpp
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2020-2024 Dieter Vandoren, Thomas Friedrichsmeier and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10 */
-
11 
-
12 #if !(IS_ESP32())
-
13 # error "Wrong implementation included for this platform"
-
14 #endif
-
15 
-
16 namespace MozziPrivate {
-
17 ////// BEGIN analog input code ////////
-
18 #if MOZZI_IS(MOZZI_ANALOG_READ, MOZZI_ANALOG_READ_STANDARD)
-
19 #error not yet implemented
-
20 
-
21 #define getADCReading() 0
-
22 #define channelNumToIndex(channel) channel
- -
24  return pin;
-
25 }
- -
27 }
- -
29 }
- -
31 }
- -
33 }
-
34 
-
35 #endif
-
36 ////// END analog input code ////////
-
37 
-
38 
-
39 //// BEGIN AUDIO OUTPUT code ///////
-
40 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_INTERNAL_DAC) || MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_I2S_DAC) || MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PDM_VIA_I2S)
-
41 } // namespace MozziPrivate
-
42 # include <driver/i2s.h> // for I2S-based output modes, including - technically - internal DAC
-
43 namespace MozziPrivate {
- -
45 
-
46 // On ESP32 we cannot test wether the DMA buffer has room. Instead, we have to use a one-sample mini buffer. In each iteration we
-
47 // _try_ to write that sample to the DMA buffer, and if successful, we can buffer the next sample. Somewhat cumbersome, but works.
-
48 // TODO: Should ESP32 gain an implemenation of i2s_available(), we should switch to using that, instead.
-
49 static bool _esp32_can_buffer_next = true;
-
50 # if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_INTERNAL_DAC)
- -
52 # define ESP_SAMPLE_SIZE (2*sizeof(uint16_t))
-
53 # elif MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_I2S_DAC)
-
54 static int16_t _esp32_prev_sample[2];
-
55 # define ESP_SAMPLE_SIZE (2*sizeof(int16_t))
-
56 # elif MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PDM_VIA_I2S)
- -
58 # define ESP_SAMPLE_SIZE (PDM_RESOLUTION*sizeof(uint32_t))
-
59 # endif
-
60 
-
61 inline bool esp32_tryWriteSample() {
- - -
64  return (bytes_written != 0);
-
65 }
-
66 
-
67 inline bool canBufferAudioOutput() {
-
68  if (_esp32_can_buffer_next) return true;
- - -
71 }
-
72 
-
73 inline void audioOutput(const AudioOutput f) {
-
74 # if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_INTERNAL_DAC)
-
75  _esp32_prev_sample[0] = (f.l() + MOZZI_AUDIO_BIAS) << 8;
-
76 # if (MOZZI_AUDIO_CHANNELS > 1)
-
77  _esp32_prev_sample[1] = (f.r() + MOZZI_AUDIO_BIAS) << 8;
-
78 # else
-
79  // For simplicity of code, even in mono, we're writing stereo samples
- -
81 # endif
-
82 # elif MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PDM_VIA_I2S)
-
83  for (uint8_t i=0; i<MOZZI_PDM_RESOLUTION; ++i) {
- -
85  }
-
86 # else
-
87  // PT8211 takes signed samples
-
88  _esp32_prev_sample[0] = f.l();
-
89  _esp32_prev_sample[1] = f.r();
-
90 # endif
- -
92 }
-
93 #endif
-
94 
-
95 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_TIMED)
-
96 
-
97 } // namespace MozziPrivate
-
98 # include <driver/timer.h>
-
99 namespace MozziPrivate {
-
100 
- - - - -
105 }
-
106 #endif
-
107 
-
108 static void startAudio() {
-
109 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_TIMED) // for external audio output, set up a timer running a audio rate
-
110  static intr_handle_t s_timer_handle;
-
111  const int div = 2;
-
112  timer_config_t config = {
-
113  .alarm_en = (timer_alarm_t)true,
-
114  .counter_en = (timer_start_t)false,
-
115  .intr_type = (timer_intr_mode_t) TIMER_INTR_LEVEL,
-
116  .counter_dir = TIMER_COUNT_UP,
-
117  .auto_reload = (timer_autoreload_t) true,
-
118  .divider = div // For max available precision: The APB_CLK clock signal is running at 80 MHz, i.e. 2/80 uS per tick
-
119  // Min acceptable value is 2
-
120  };
-
121  timer_init(TIMER_GROUP_0, TIMER_0, &config);
-
122  timer_set_counter_value(TIMER_GROUP_0, TIMER_0, 0);
-
123  timer_set_alarm_value(TIMER_GROUP_0, TIMER_0, 80000000UL / MOZZI_AUDIO_RATE / div);
-
124  timer_enable_intr(TIMER_GROUP_0, TIMER_0);
-
125  timer_isr_register(TIMER_GROUP_0, TIMER_0, &timer0_audio_output_isr, nullptr, 0, &s_timer_handle);
-
126  timer_start(TIMER_GROUP_0, TIMER_0);
-
127 
-
128 #elif !MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_CUSTOM)
-
129  static const i2s_config_t i2s_config = {
-
130 # if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_I2S_DAC) || MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PDM_VIA_I2S)
-
131  .mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX),
-
132 # elif MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_INTERNAL_DAC)
-
133  .mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX | I2S_MODE_DAC_BUILT_IN),
-
134 # endif
-
135  .sample_rate = MOZZI_AUDIO_RATE * MOZZI_PDM_RESOLUTION,
-
136  .bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT, // only the top 8 bits will actually be used by the internal DAC, but using 8 bits straight away seems buggy
-
137  .channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT, // always use stereo output. mono seems to be buggy, and the overhead is insignifcant on the ESP32
-
138  .communication_format = (i2s_comm_format_t)(I2S_COMM_FORMAT_I2S | I2S_COMM_FORMAT_I2S_LSB), // this appears to be the correct setting for internal DAC and PT8211, but not for other dacs
-
139  .intr_alloc_flags = 0, // default interrupt priority
-
140  .dma_buf_count = 8, // 8*128 bytes of buffer corresponds to 256 samples (2 channels, see above, 2 bytes per sample per channel)
-
141  .dma_buf_len = 128,
-
142  .use_apll = false
-
143  };
-
144 
-
145  i2s_driver_install(i2s_num, &i2s_config, 0, NULL);
-
146 # if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_I2S_DAC) || MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PDM_VIA_I2S)
-
147  static const i2s_pin_config_t pin_config = {
-
148  .bck_io_num = MOZZI_I2S_PIN_BCK,
-
149  .ws_io_num = MOZZI_I2S_PIN_WS,
-
150  .data_out_num = MOZZI_I2S_PIN_DATA,
-
151  .data_in_num = -1
-
152  };
-
153  i2s_set_pin((i2s_port_t)i2s_num, &pin_config);
-
154 # elif MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_INTERNAL_DAC)
-
155  i2s_set_pin((i2s_port_t)i2s_num, NULL);
-
156  i2s_set_dac_mode(I2S_DAC_CHANNEL_BOTH_EN);
-
157 # endif
-
158  i2s_zero_dma_buffer((i2s_port_t)i2s_num);
-
159 
-
160 #endif
-
161 }
-
162 
-
163 void stopMozzi() {
-
164  // TODO: implement me
-
165 }
-
166 //// END AUDIO OUTPUT code ///////
-
167 
-
168 //// BEGIN Random seeding ////////
-
169 void MozziRandPrivate::autoSeed() {
-
170  x = esp_random();
-
171  y = esp_random();
-
172  z = esp_random();
-
173 }
-
174 //// END Random seeding ////////
-
175 
-
176 #undef ESP_SAMPLE_SIZE // only used inside this file
-
177 
-
178 } // namespace MozziPrivate
-
-
- - - diff --git a/extras/doc/html/_mozzi_guts__impl___e_s_p8266_8hpp_source.html b/extras/doc/html/_mozzi_guts__impl___e_s_p8266_8hpp_source.html deleted file mode 100644 index 84a82a749..000000000 --- a/extras/doc/html/_mozzi_guts__impl___e_s_p8266_8hpp_source.html +++ /dev/null @@ -1,265 +0,0 @@ - - - - - - - -Mozzi: MozziGuts_impl_ESP8266.hpp Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
MozziGuts_impl_ESP8266.hpp
-
-
-
1 /*
-
2  * MozziGuts_impl_ESP8266.hpp
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2020-2024 Thomas Friedrichsmeier and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10 */
-
11 
-
12 #if !(IS_ESP8266())
-
13 # error "Wrong implementation included for this platform"
-
14 #endif
-
15 
-
16 namespace MozziPrivate {
-
17 
-
18 ////// BEGIN analog input code ////////
-
19 #if MOZZI_IS(MOZZI_ANALOG_READ, MOZZI_ANALOG_READ_STANDARD)
-
20 #error not yet implemented
-
21 
-
22 #define getADCReading() 0
-
23 #define channelNumToIndex(channel) channel
- -
25  return pin;
-
26 }
- -
28 }
- -
30 }
- -
32 }
- -
34 }
-
35 #endif
-
36 ////// END analog input code ////////
-
37 
-
38 //// BEGIN AUDIO OUTPUT code ///////
-
39 #define LOOP_YIELD yield();
-
40 
-
41 } // namespace MozziPrivate
-
42 #include <uart.h>
-
43 #include <I2S.h>
-
44 namespace MozziPrivate {
-
45 uint16_t output_buffer_size = 0;
-
46 
-
47 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PDM_VIA_I2S, MOZZI_OUTPUT_PDM_VIA_SERIAL, MOZZI_OUTPUT_I2S_DAC) // i.e. not external
-
48 
-
49 # if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PDM_VIA_I2S)
-
50 } // namespace MozziPrivate
-
51 # include <i2s.h>
-
52 namespace MozziPrivate {
-
53 inline bool canBufferAudioOutput() {
-
54  return (i2s_available() >= MOZZI_PDM_RESOLUTION);
-
55 }
-
56 inline void audioOutput(const AudioOutput f) {
-
57  for (uint8_t words = 0; words < MOZZI_PDM_RESOLUTION; ++words) {
- -
59  }
-
60 }
-
61 # elif MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_I2S_DAC)
-
62 } // namespace MozziPrivate
-
63 # include <i2s.h>
-
64 namespace MozziPrivate {
-
65 inline bool canBufferAudioOutput() {
-
66  return (i2s_available() >= MOZZI_PDM_RESOLUTION);
-
67 }
-
68 inline void audioOutput(const AudioOutput f) {
-
69  i2s_write_lr(f.l(), f.r()); // Note: i2s_write expects zero-centered output
-
70 }
-
71 # else
- -
73 // NOTE: This intermediate step is needed because the output timer is running at a rate higher than MOZZI_AUDIO_RATE, and we need to rely on the (tiny)
-
74 // serial buffer itself to achieve appropriate rate control
- -
76  // Note: That unreadble mess is an optimized version of Serial1.availableForWrite()
-
77  while ((UART_TX_FIFO_SIZE - ((U1S >> USTXC) & 0xff)) > (MOZZI_PDM_RESOLUTION * 4)) {
- -
79  }
-
80 }
-
81 
-
82 inline void audioOutput(const AudioOutput f) {
-
83  // optimized version of: Serial1.write(...);
-
84  for (uint8_t i = 0; i < MOZZI_PDM_RESOLUTION*4; ++i) {
- -
86  }
-
87 }
-
88 # endif
-
89 #endif
-
90 
-
91 static void startAudio() {
-
92 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_TIMED) // for external audio output, set up a timer running a audio rate
-
93  timer1_isr_init();
-
94  timer1_attachInterrupt(defaultAudioOutput);
-
95  timer1_enable(TIM_DIV1, TIM_EDGE, TIM_LOOP);
-
96  timer1_write(F_CPU / MOZZI_AUDIO_RATE);
-
97 #elif MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PDM_VIA_SERIAL)
-
98  Serial1.begin(
-
99  MOZZI_AUDIO_RATE * (MOZZI_PDM_RESOLUTION * 40), SERIAL_8N1,
-
100  SERIAL_TX_ONLY); // Note: PDM_RESOLUTION corresponds to packets of 32
-
101  // encoded bits However, the UART (unfortunately) adds a
-
102  // start and stop bit each around each byte, thus sending
-
103  // a total to 40 bits per audio sample per
-
104  // PDM_RESOLUTION.
-
105  // set up a timer to copy from Mozzi output_buffer into Serial TX buffer
-
106  timer1_isr_init();
-
107  timer1_attachInterrupt(esp8266_serial_audio_output);
-
108  // UART FIFO buffer size is 128 bytes. To be on the safe side, we keep the
-
109  // interval to the time needed to write half of that. PDM_RESOLUTION * 4 bytes
-
110  // per sample written.
-
111  timer1_enable(TIM_DIV16, TIM_EDGE, TIM_LOOP);
-
112  timer1_write(F_CPU / (MOZZI_AUDIO_RATE * MOZZI_PDM_RESOLUTION));
-
113 #else
-
114  i2s_begin();
-
115 # if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PDM_VIA_I2S)
-
116  pinMode(2, INPUT); // Set the two unneeded I2S pins to input mode, to reduce
-
117  // side effects
-
118  pinMode(15, INPUT);
-
119 # endif
-
120  i2s_set_rate(MOZZI_AUDIO_RATE * MOZZI_PDM_RESOLUTION);
-
121  if (output_buffer_size == 0)
-
122  output_buffer_size =
-
123  i2s_available(); // Do not reset count when stopping / restarting
-
124 #endif
-
125 }
-
126 
-
127 
-
128 void stopMozzi() {
-
129 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PDM_VIA_I2S, MOZZI_OUTPUT_I2S_DAC)
-
130  i2s_end();
-
131 #elif MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PDM_VIA_SERIAL, MOZZI_OUTPUT_EXTERNAL_TIMED)
-
132  timer1_disable();
-
133 #endif
-
134  interrupts();
-
135 }
-
136 
-
137 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PDM_VIA_I2S) && (MOZZI_PDM_RESOLUTION != 1)
-
138 # define AUDIOTICK_ADJUSTMENT ((output_buffer_size - i2s_available()) / MOZZI_PDM_RESOLUTION)
-
139 #else
-
140 # define AUDIOTICK_ADJUSTMENT (output_buffer_size - i2s_available())
-
141 #endif
-
142 
-
143 //// END AUDIO OUTPUT code ///////
-
144 
-
145 //// BEGIN Random seeding ////////
-
146 } //namespace MozziPrivate
-
147 #include <esp8266_peri.h>
-
148 namespace MozziPrivate {
-
149 void MozziRandPrivate::autoSeed() {
-
150  x = RANDOM_REG32;
-
151  // TODO: The XORs may not be needed, but for lack of documentation (that I could find), let's assume RANDOM_REG32
-
152  // itself might not get updated on every read. NOTE: x, y, and z are initialized to non-zero, before this.
-
153  y = y ^ RANDOM_REG32;
-
154  z = z ^ RANDOM_REG32;
-
155 }
-
156 //// END Random seeding ////////
-
157 } // namespace MozziPrivate
-
-
- - - diff --git a/extras/doc/html/_mozzi_guts__impl___m_b_e_d_8hpp_source.html b/extras/doc/html/_mozzi_guts__impl___m_b_e_d_8hpp_source.html deleted file mode 100644 index 941316b7d..000000000 --- a/extras/doc/html/_mozzi_guts__impl___m_b_e_d_8hpp_source.html +++ /dev/null @@ -1,350 +0,0 @@ - - - - - - - -Mozzi: MozziGuts_impl_MBED.hpp Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
MozziGuts_impl_MBED.hpp
-
-
-
1 /*
-
2  * MozziGuts_impl_MBED.hpp
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2023-2024 T. Combriat and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10 */
-
11 
-
12 #if !(IS_MBED())
-
13 # error "Wrong implementation included for this platform"
-
14 #endif
-
15 
-
16 #define CHUNKSIZE 64
-
17 
-
18 namespace MozziPrivate {
-
19 
-
20 ////// BEGIN analog input code ////////
-
21 
-
22 #if MOZZI_IS(MOZZI_AUDIO_INPUT, MOZZI_AUDIO_INPUT_STANDARD)
-
23 #define MOZZI__LEGACY_AUDIO_INPUT_IMPL 0
-
24 
-
25 } // namespace MozziPrivate
-
26 #include <Arduino_AdvancedAnalog.h>
-
27 namespace MozziPrivate {
-
28 
- - -
31 int inbufpos=0;
-
32 
-
33 bool audioInputAvailable() {
-
34  if (inbufpos >= CHUNKSIZE) {
-
35  if (!adc.available()) return false;
- -
37  memcpy(inbuf,buf.data(), CHUNKSIZE*sizeof(Sample));
-
38  inbufpos = 0;
-
39  buf.release();
-
40  return true;
-
41  }
-
42  else return true;
-
43 }
- -
45  return inbuf[inbufpos++];
-
46 }
-
47 
-
48 
-
49 static void startAudioInput() {
- -
51  Serial.println("Failed to start analog acquisition!");
-
52  while (1);
-
53  }
-
54 }
-
55 #else
-
56 static void startAudioInput() {}; // dummy to ease coding
-
57 #endif
-
58 
-
59 #if MOZZI_IS(MOZZI_ANALOG_READ, MOZZI_ANALOG_READ_STANDARD)
-
60 #error not yet implemented
-
61 /** NOTE: This section deals with implementing (fast) asynchronous analog reads, which form the backbone of mozziAnalogRead(), but also of USE_AUDIO_INPUT (if enabled).
-
62  * This template provides empty/dummy implementations to allow you to skip over this section, initially. Once you have an implementation, be sure to enable the
-
63  * #define, above */
-
64 
-
65 // Insert here code to read the result of the latest asynchronous conversion, when it is finished.
-
66 // You can also provide this as a function returning unsigned int, should it be more complex on your platform
-
67 #define getADCReading() 0
-
68 
-
69 /** NOTE: On "pins" vs. "channels" vs. "indices"
-
70  * "Pin" is the pin number as would usually be specified by the user in mozziAnalogRead().
-
71  * "Channel" is an internal ADC channel number corresponding to that pin. On many platforms this is simply the same as the pin number, on others it differs.
-
72  * In other words, this is an internal representation of "pin".
-
73  * "Index" is the index of the reading for a certain pin/channel in the array of analog_readings, ranging from 0 to NUM_ANALOG_PINS. This, again may be the
-
74  * same as "channel" (e.g. on AVR), however, on platforms where ADC-capable "channels" are not numbered sequentially starting from 0, the channel needs
-
75  * to be converted to a suitable index.
-
76  *
-
77  * In summary, the semantics are roughly
-
78  * mozziAnalogRead(pin) -> _ADCimplementation_(channel) -> analog_readings[index]
-
79  * Implement adcPinToChannelNum() and channelNumToIndex() to perform the appropriate mapping.
-
80  */
-
81 // NOTE: Theoretically, adcPinToChannelNum is public API for historical reasons, thus cannot be replaced by a define
- -
83  return pin;
-
84 }
-
85 
-
86 /** NOTE: Code needed to trigger a conversion on a new channel */
- -
88 }
-
89 
-
90 /** NOTE: Code needed to trigger a subsequent conversion on the latest channel. If your platform has no special code for it, you should store the channel from
-
91  * adcStartConversion(), and simply call adcStartConversion(previous_channel), here. */
- -
93 }
-
94 
-
95 /** NOTE: Code needed to set up faster than usual analog reads, e.g. specifying the number of CPU cycles that the ADC waits for the result to stabilize.
-
96  * This particular function is not super important, so may be ok to leave empty, at least, if the ADC is fast enough by default. */
- -
98 }
-
99 
-
100 /** NOTE: Code needed to initialize the ADC for asynchronous reads. Typically involves setting up an interrupt handler for when conversion is done, and
-
101  * possibly calibration. */
-
102 void setupMozziADC(int8_t speed) {
-
103 }
-
104 
-
105 #endif
-
106 
-
107 ////// END analog input code ////////
-
108 
-
109 ////// BEGIN audio output code //////
-
110 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_TIMED)
-
111 
-
112 #define US_PER_AUDIO_TICK (1000000L / MOZZI_AUDIO_RATE)
-
113 } // namespace MozziPrivate
-
114 #include <mbed.h>
-
115 namespace MozziPrivate {
- -
117 
-
118 volatile bool audio_output_requested = false;
-
119 inline void defaultAudioOutputCallback() {
-
120  audio_output_requested = true;
-
121 }
-
122 
-
123 #define AUDIO_HOOK_HOOK { if (audio_output_requested) { audio_output_requested = false; defaultAudioOutput(); } }
-
124 
-
125 static void startAudio() {
- -
127  startAudioInput();
-
128 }
-
129 
-
130 void stopMozzi() {
- -
132 }
-
133 
-
134 #elif MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_INTERNAL_DAC)
-
135 
-
136 } // namespace MozziPrivate
-
137 #include <Arduino_AdvancedAnalog.h>
-
138 namespace MozziPrivate {
-
139 
- - -
142 #if (MOZZI_AUDIO_CHANNELS > 1)
- - -
145 #endif
-
146 int bufpos = 0;
-
147 
-
148 inline void commitBuffer(Sample buffer[], AdvancedDAC &dac) {
- -
150  // NOTE: Yes, this is silly code, and originated as an accident. Somehow it appears to help _a little_ against current problem wrt DAC stability
-
151  for (unsigned int i=0;i<CHUNKSIZE;i++) memcpy(dmabuf.data(), buffer, CHUNKSIZE*sizeof(Sample));
-
152  dac.write(dmabuf);
-
153 }
-
154 
-
155 inline void audioOutput(const AudioOutput f) {
-
156  if (bufpos >= CHUNKSIZE) {
- -
158 #if (MOZZI_AUDIO_CHANNELS > 1)
- -
160 #endif
-
161  bufpos = 0;
-
162  }
- -
164 #if (MOZZI_AUDIO_CHANNELS > 1)
- -
166 #endif
-
167  ++bufpos;
-
168 }
-
169 
-
170 bool canBufferAudioOutput() {
-
171  return (bufpos < CHUNKSIZE || (dac1.available()
-
172 #if (MOZZI_AUDIO_CHANNELS > 1)
-
173  && dac2.available()
-
174 #endif
-
175  ));
-
176 }
-
177 
-
178 static void startAudio() {
-
179  //NOTE: DAC setup currently affected by https://github.com/arduino-libraries/Arduino_AdvancedAnalog/issues/35 . Don't expect this to work, until using a fixed version fo Arduino_AdvancedAnalog!
- -
181  Serial.println("Failed to start DAC1 !");
-
182  while (1);
-
183  }
-
184 #if (MOZZI_AUDIO_CHANNELS > 1)
- -
186  Serial.println("Failed to start DAC2 !");
-
187  while (1);
-
188  }
-
189 #endif
-
190  startAudioInput();
-
191 }
-
192 
-
193 void stopMozzi() {
-
194  dac1.stop();
-
195 #if (MOZZI_AUDIO_CHANNELS > 1)
-
196  dac2.stop();
-
197 #endif
-
198 }
-
199 
-
200 #elif MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PDM_VIA_SERIAL)
-
201 
-
202 } // namespace MozziPrivate
-
203 #include <mbed.h>
-
204 namespace MozziPrivate {
-
205 
- - -
208 
-
209 bool canBufferAudioOutput() {
-
210  return serial_out1.writable();
-
211 }
-
212 
-
213 inline void audioOutput(const AudioOutput f) {
-
214  for (uint8_t i = 0; i < MOZZI_PDM_RESOLUTION*4; ++i) {
- -
216  }
- -
218 }
-
219 
-
220 static void startAudio() {
-
221  serial_out1.set_baud(MOZZI_AUDIO_RATE*MOZZI_PDM_RESOLUTION*40); // NOTE: 40 == 4 * (8 bits + stop-bits)
- -
223 }
-
224 
-
225 void stopMozzi() {
-
226 #warning implement me
-
227 }
-
228 
-
229 
-
230 #endif
-
231 ////// END audio output code //////
-
232 
-
233 //// BEGIN Random seeding ////////
-
234 void MozziRandPrivate::autoSeed() {
-
235 #warning Automatic random seeding is not implemented on this platform
-
236 }
-
237 //// END Random seeding ////////
-
238 
-
239 } // namespace MozziPrivate
-
240 
-
241 #undef CHUNKSIZE
-
242 #undef US_PER_AUDIO_TICK
-
-
- - - diff --git a/extras/doc/html/_mozzi_guts__impl___r_e_n_e_s_a_s_8hpp_source.html b/extras/doc/html/_mozzi_guts__impl___r_e_n_e_s_a_s_8hpp_source.html deleted file mode 100644 index def826c64..000000000 --- a/extras/doc/html/_mozzi_guts__impl___r_e_n_e_s_a_s_8hpp_source.html +++ /dev/null @@ -1,292 +0,0 @@ - - - - - - - -Mozzi: MozziGuts_impl_RENESAS.hpp Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
MozziGuts_impl_RENESAS.hpp
-
-
-
1 /*
-
2  * MozziGuts_impl_RENESAS.hpp
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2023-2024 T. Combriat and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10 */
-
11 
-
12 #if !(IS_RENESAS())
-
13 # error "Wrong implementation included for this platform"
-
14 #endif
-
15 
-
16 #include <FspTimer.h>
-
17 
-
18 namespace MozziPrivate {
-
19 
-
20 ////// BEGIN analog input code ////////
-
21 
-
22 #if MOZZI_IS(MOZZI_ANALOG_READ, MOZZI_ANALOG_READ_STANDARD)
-
23 
-
24 #define channelNumToIndex(channel) channel-14 // A0=14
-
25 void const *const p_context = 0; // unused but needed for the ADC call
- -
27 uint16_t cfg_adc = 0; // put at 0 for starters but modified by the ADC_container
-
28 uint8_t r4_pin; // to store it between calls
-
29 
- - -
32 }
-
33 
-
34 } // namespace MozziPrivate
-
35 
-
36 #include "MozziGuts_impl_RENESAS_ADC.hpp"
-
37 
-
38 namespace MozziPrivate {
-
39 
-
40 #define getADCReading() readADC(r4_pin)
-
41 
- -
43  return pin;
-
44 }
-
45 
- -
47  r4_pin = channel; // remember for startSecondADCReadOnCurrentChannel()
- -
49 }
-
50 
- - -
53 }
-
54 
- -
56  //#warning Fast analog read not implemented on this platform
-
57 }
-
58 
- -
60  IRQManager::getInstance().addADCScanEnd(&adc, NULL); // this is needed to change some config inside the ADC, even though we do not give the callback here (doing so crashes the board). The callback is declared to the ADC by: R_ADC_CallbackSet(&(_adc->ctrl), adc_callback, p_context, p_callback_memory); in MozziGuts_impl_RENESAS_ADC.hpp.
-
61 }
-
62 #endif
-
63 
-
64 ////// END analog input code ////////
-
65 
-
66 
-
67 
-
68 //// BEGIN AUDIO OUTPUT code ///////
-
69 
-
70 /*
-
71 The strategy to output sound on this platform differs somehow from what is usually done in Mozzi.
-
72 Usually, Mozzi's circular buffer are read from the outputting device (PWM, DAC...) or committed as
-
73 a whole (for the MBED platform) and thus emptied. Once a free spot is present, Mozzi fills it with updateAudio().
-
74 Here, the DAC works straight from a buffer, outputting samples from it at a fixed rate.
-
75 This is sweet as we can branch it straight to Mozzi's buffer and it will read from it without
-
76 further action from us.
-
77 The big difference is that it *does not* empty the buffer, nor notify that something has been
-
78 read, which is okay for outputting a periodic signal where just a full period is present
-
79 in the buffer.
-
80 As a consequence we need to artificially empty the buffer at the same rate that the DAC is reading
-
81 it.
-
82 */
-
83 
-
84 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_INTERNAL_DAC, MOZZI_OUTPUT_EXTERNAL_TIMED)
- -
86 #endif
-
87 
-
88 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_INTERNAL_DAC)
- -
90 } // namespace MozziPrivate
-
91 #include "MozziGuts_impl_RENESAS_analog.hpp"
-
92 namespace MozziPrivate {
-
93 #endif
-
94 
-
95 
-
96 //////////////// TIMER ////////////////
-
97 
-
98 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_TIMED)
- -
100 #elif MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_INTERNAL_DAC)
-
101 //void timer_callback_dummy(timer_callback_args_t __attribute__((unused)) *args){
-
102 void timer_callback_dummy(timer_callback_args_t __attribute__((unused)) *args){output_buffer.read();}; // to empty the buffer (the dac does not take care of it), a bit a waste of timer...
-
103 #endif
-
104 
-
105 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_INTERNAL_DAC, MOZZI_OUTPUT_EXTERNAL_TIMED)
-
106 void timer_init() {
-
107  uint8_t type;
- -
109 
-
110  if (tindex < 0) {
- -
112  }
-
113 
-
114  if (tindex >= 0) {
- - -
117  }
-
118 
-
119 # if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_INTERNAL_DAC)
-
120  // we need to set up another timer for dac caring
-
121  // note: it is running at the same speed than the other one, but could not manage
-
122  // to get the other one updating the dac and removing the samples from the buffer…
- -
124 
-
125  if (tindex < 0) {
- -
127  }
-
128 
-
129  if (tindex >= 0) {
- - - - -
134  timer_dac.open();
-
135  }
-
136 # endif // TODO: This endif used to be two lines up from here (above timer.open), which does not make sense syntactically, for external output
-
137  timer.open();
-
138 }
-
139 #endif
-
140 
-
141 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_INTERNAL_DAC)
-
142 inline void audioOutput(const AudioOutput f) {
- -
144 }
-
145 # define canBufferAudioOutput() (!output_buffer.isFull())
-
146 #endif
-
147 
-
148 static void startAudio() {
-
149 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_INTERNAL_DAC)
-
150  dac_creation(MOZZI_AUDIO_PIN_1);
-
151 #endif
-
152 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_INTERNAL_DAC, MOZZI_OUTPUT_EXTERNAL_TIMED)
-
153  timer_init(); // this need to be done between the DAC creation and initialization in the case where the on-board DAC is used, hence the ugly repetition here.
-
154 #endif
-
155 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_INTERNAL_DAC)
-
156  dac_init();
-
157  R_DTC_Open(&dtc_ctrl, &dtc_cfg);
-
158  R_DTC_Enable(&dtc_ctrl);
-
159 
-
160  // The following branches the DAC straight on Mozzi's circular buffer.
-
161  dtc_cfg.p_info->p_src = output_buffer.address();
-
162  dtc_cfg.p_info->length = MOZZI_BUFFER_SIZE;
-
163  R_DTC_Reconfigure(&dtc_ctrl, dtc_cfg.p_info);
-
164  timer_dac.start();
-
165 #endif
-
166 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_INTERNAL_DAC, MOZZI_OUTPUT_EXTERNAL_TIMED)
-
167  timer.start();
-
168 #endif
-
169 }
-
170 
-
171 void stopMozzi() {
-
172 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_INTERNAL_DAC, MOZZI_OUTPUT_EXTERNAL_TIMED)
-
173  timer.stop();
-
174 #endif
-
175 }
-
176 //// END AUDIO OUTPUT code ///////
-
177 
-
178 //// BEGIN Random seeding ////////
-
179 void MozziRandPrivate::autoSeed() {
-
180 #warning Automatic random seeding is not implemented on this platform
-
181 }
-
182 //// END Random seeding ////////
-
183 
-
184 } // namespace MozziPrivate
-
-
- - - diff --git a/extras/doc/html/_mozzi_guts__impl___r_e_n_e_s_a_s___a_d_c_8hpp_source.html b/extras/doc/html/_mozzi_guts__impl___r_e_n_e_s_a_s___a_d_c_8hpp_source.html deleted file mode 100644 index 0f624f416..000000000 --- a/extras/doc/html/_mozzi_guts__impl___r_e_n_e_s_a_s___a_d_c_8hpp_source.html +++ /dev/null @@ -1,239 +0,0 @@ - - - - - - - -Mozzi: MozziGuts_impl_RENESAS_ADC.hpp Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
MozziGuts_impl_RENESAS_ADC.hpp
-
-
-
1 /*
-
2  * MozziGuts_impl_ADC.hpp
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2023-2024 T. Combriat and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9 
-
10 Parts of this file are drawn from Arduino's source code for analogRead() (https://github.com/arduino/ArduinoCore-renesas/blob/main/cores/arduino/analog.cpp) and part from Renesas' documentation (https://renesas.github.io/fsp/group___a_d_c.html), among other things.
-
11 It contains functions to interact with the ADC in order to implement async ADC reads, aka mozziAnalogRead().
-
12 */
-
13 
-
14 #include <analog.h>
-
15 //#include <analog.cpp>
-
16 #include <IRQManager.h>
-
17 
-
18 namespace MozziPrivate {
-
19 
-
20 /** VERBATIM from Arduino's analog.cpp
-
21  */
-
22 #define MAX_ADC_CHANNELS 29
- -
24 static void ADC_irq_cbk(adc_callback_args_t * cb_data);
-
25 static ADC_Container adc(0,ADC_irq_cbk);
-
26 static ADC_Container adc1(1,ADC_irq_cbk);
-
27 
-
28 static ADCIrqCbk_f scan_complete_cbk = nullptr;
-
29 static ADCIrqCbk_f scan_complete_b_cbk = nullptr;
-
30 static ADCIrqCbk_f window_compare_a_cbk = nullptr;
-
31 static ADCIrqCbk_f window_compare_b_cbk = nullptr;
-
32 
-
33 static void readAllGroupA(ADC_Container *_adc) {
-
34  for(int i = 0; i < MAX_ADC_CHANNELS; i++) {
-
35  if(_adc->channel_cfg.scan_mask & (1 << i)) {
-
36  //is the channel active -> yes, read it
-
37  R_ADC_Read(&(_adc->ctrl), (adc_channel_t)i, analog_values_by_channels + i);
-
38  }
-
39  }
-
40 }
-
41 
-
42 static void readAllGroupB(ADC_Container *_adc) {
-
43  for(int i = 0; i < MAX_ADC_CHANNELS; i++) {
-
44  if(_adc->channel_cfg.scan_mask_group_b & (1 << i)) {
-
45  //is the channel active -> yes, read it
-
46  R_ADC_Read(&(_adc->ctrl), (adc_channel_t)i, analog_values_by_channels + i);
-
47  }
-
48  }
-
49 }
-
50 
-
51 
-
52 static void ADC_irq_cbk(adc_callback_args_t * cb_data) {
-
53  if(cb_data->event == ADC_EVENT_SCAN_COMPLETE) {
-
54  if(scan_complete_cbk != nullptr) {
-
55  if(cb_data->unit == 0) {
-
56  readAllGroupA(&adc);
-
57  }
-
58  else if(cb_data->unit == 1) {
-
59  readAllGroupA(&adc1);
-
60  }
-
61  scan_complete_cbk(cb_data->unit);
-
62  }
-
63  }
-
64  else if(cb_data->event == ADC_EVENT_SCAN_COMPLETE_GROUP_B) {
-
65  if(scan_complete_b_cbk != nullptr) {
-
66  if(cb_data->unit == 0) {
-
67  readAllGroupB(&adc);
-
68  }
-
69  else if(cb_data->unit == 1) {
-
70  readAllGroupB(&adc1);
-
71  }
-
72  scan_complete_b_cbk(cb_data->unit);
-
73  }
-
74  }
-
75  else if(cb_data->event == ADC_EVENT_WINDOW_COMPARE_A) {
-
76  if(window_compare_a_cbk != nullptr) {
-
77  window_compare_a_cbk(cb_data->unit);
-
78  }
-
79  }
-
80  else if(cb_data->event == ADC_EVENT_WINDOW_COMPARE_B) {
-
81  if(window_compare_b_cbk != nullptr) {
-
82  window_compare_b_cbk(cb_data->unit);
-
83  }
-
84  }
-
85 }
-
86 
-
87 /* -------------------------------------------------------------------------- */
-
88 static ADC_Container *get_ADC_container_ptr(int32_t pin, uint16_t &cfg) {
-
89 /* -------------------------------------------------------------------------- */
-
90  ADC_Container *rv = nullptr;
-
91  auto cfg_adc = getPinCfgs(pin, PIN_CFG_REQ_ADC);
-
92  if(cfg_adc[0] > 0 ) {
-
93  if(IS_ADC1(cfg_adc[0])) {
-
94  rv = &adc1;
-
95  }
-
96  else {
-
97  rv = &adc;
-
98  }
-
99  }
-
100  cfg = cfg_adc[0];
-
101  return rv;
-
102 
-
103 }
-
104 
-
105 /* END of verbatim
-
106  */
-
107 //////////////////// ADC //////////////
-
108 
-
109 void startScan(int pin)
-
110 {
-
111  int32_t adc_idx = digitalPinToAnalogPin(pin);
-
112  ADC_Container *_adc = get_ADC_container_ptr(adc_idx, cfg_adc);
-
113  _adc->cfg.mode = ADC_MODE_SINGLE_SCAN;
-
114  pinPeripheral(digitalPinToBspPin(adc_idx), (uint32_t)IOPORT_CFG_ANALOG_ENABLE);
-
115  _adc->channel_cfg.scan_mask |= (1 << GET_CHANNEL(cfg_adc));
-
116  R_ADC_Open(&(_adc->ctrl), &(_adc->cfg));
-
117  R_ADC_CallbackSet(&(_adc->ctrl), adc_callback, p_context, p_callback_memory);
-
118  R_ADC_ScanCfg(&(_adc->ctrl), &(_adc->channel_cfg));
-
119  R_ADC_ScanStart(&(_adc->ctrl));
-
120 }
-
121 
-
122 uint16_t readADC(int pin)
-
123 {
-
124  uint16_t result;
-
125  int32_t adc_idx = digitalPinToAnalogPin(pin);
-
126  ADC_Container *_adc = get_ADC_container_ptr(adc_idx, cfg_adc);
-
127  R_ADC_Read(&(_adc->ctrl), (adc_channel_t)GET_CHANNEL(cfg_adc), &result);
-
128  return result;
-
129 }
-
130 
-
131 } // namespace MozziPrivate
-
-
- - - diff --git a/extras/doc/html/_mozzi_guts__impl___r_e_n_e_s_a_s__analog_8hpp_source.html b/extras/doc/html/_mozzi_guts__impl___r_e_n_e_s_a_s__analog_8hpp_source.html deleted file mode 100644 index ce8628daf..000000000 --- a/extras/doc/html/_mozzi_guts__impl___r_e_n_e_s_a_s__analog_8hpp_source.html +++ /dev/null @@ -1,208 +0,0 @@ - - - - - - - -Mozzi: MozziGuts_impl_RENESAS_analog.hpp Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
MozziGuts_impl_RENESAS_analog.hpp
-
-
-
1 /*
-
2  * MozziGuts_impl_RENESAS_analog.hpp
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2023-2024 T. Combriat and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10 
-
11 Most of this file is drawn, more or less adapted from the AnalogWave example
-
12 for Renesas board from Arduino.
-
13 It contains functions to create and start the on-board DAC (and associate timer).
-
14 */
-
15 
-
16 #include <dac.h>
-
17 #include <FspTimer.h>
-
18 #include <r_dtc.h>
-
19 
-
20 namespace MozziPrivate {
-
21 
-
22 FspTimer timer_dac;
-
23 
-
24 volatile uint32_t pin;
-
25 uint8_t dac_bits;
-
26 dtc_instance_ctrl_t dtc_ctrl;
-
27 transfer_info_t dtc_info;
-
28 dtc_extended_cfg_t dtc_cfg_extend;
-
29 transfer_cfg_t dtc_cfg;
-
30 
-
31 ////////////// DAC CREATION AND FIRST INIT ///////////////////
-
32 // DAC creation, will take care of specifying the number of bits according to the
-
33 // capacity of the DAC (12 only for now) and set up the transfer mode straight from
-
34 // an external buffer.
-
35 void dac_creation(pin_size_t pinN) {
-
36  if (IS_DAC(pinN)) {
-
37  auto cfg_dac = getPinCfgs(pinN, PIN_CFG_REQ_DAC);
-
38  pin = cfg_dac[0];
-
39  if (IS_DAC_8BIT(pin)) {
-
40  dac_bits = 8;
-
41  dtc_info.transfer_settings_word_b.size = TRANSFER_SIZE_1_BYTE;
-
42  if (GET_CHANNEL(pin) == 0) {
-
43 #ifdef DAC_ADDRESS_8_CH0
-
44  dtc_info.p_dest = (void *)DAC_ADDRESS_8_CH0;
-
45 #endif
-
46  } else if (GET_CHANNEL(pin) == 1) {
-
47 #ifdef DAC_ADDRESS_8_CH1
-
48  dtc_info.p_dest = (void *)DAC_ADDRESS_8_CH1;
-
49 #endif
-
50  }
-
51  } else {
-
52  dac_bits = 12;
-
53  dtc_info.transfer_settings_word_b.size = TRANSFER_SIZE_2_BYTE;
-
54  if (GET_CHANNEL(pin) == 0) {
-
55 #ifdef DAC_ADDRESS_12_CH0
-
56  dtc_info.p_dest = (void *)DAC_ADDRESS_12_CH0;
-
57 #endif
-
58  } else if (GET_CHANNEL(pin) == 1) {
-
59 #ifdef DAC_ADDRESS_12_CH1
-
60  dtc_info.p_dest = (void *)DAC_ADDRESS_12_CH1;
-
61 #endif
-
62  }
-
63  }
-
64  }
-
65 
-
66  dtc_info.transfer_settings_word_b.dest_addr_mode = TRANSFER_ADDR_MODE_FIXED;
-
67  dtc_info.transfer_settings_word_b.repeat_area = TRANSFER_REPEAT_AREA_SOURCE;
-
68  dtc_info.transfer_settings_word_b.irq = TRANSFER_IRQ_END;
-
69  dtc_info.transfer_settings_word_b.chain_mode = TRANSFER_CHAIN_MODE_DISABLED;
-
70  dtc_info.transfer_settings_word_b.src_addr_mode =
-
71  TRANSFER_ADDR_MODE_INCREMENTED;
-
72  dtc_info.transfer_settings_word_b.mode = TRANSFER_MODE_REPEAT;
-
73  dtc_info.p_src = (void const *)NULL;
-
74 
-
75  dtc_info.num_blocks = 0;
-
76  dtc_info.length = 0;
-
77 
-
78  dtc_cfg.p_info = &dtc_info;
-
79  dtc_cfg.p_extend = &dtc_cfg_extend;
-
80 
-
81  dtc_cfg_extend.activation_source = FSP_INVALID_VECTOR;
-
82 }
-
83 
-
84 
-
85 // DAC initialization
-
86 void dac_init() {
-
87  if (IS_DAC_8BIT(pin)) {
-
88 #if DAC8_HOWMANY > 0
-
89  if (GET_CHANNEL(pin) < DAC8_HOWMANY) {
-
90  _dac8[GET_CHANNEL(pin)].init();
-
91  }
-
92 #endif
-
93  } else {
-
94  if (GET_CHANNEL(pin) < DAC12_HOWMANY) {
-
95  _dac12[GET_CHANNEL(pin)].init();
-
96  }
-
97  }
-
98 }
-
99 
-
100 }
-
-
- - - diff --git a/extras/doc/html/_mozzi_guts__impl___r_p2040_8hpp_source.html b/extras/doc/html/_mozzi_guts__impl___r_p2040_8hpp_source.html deleted file mode 100644 index ac5e0317c..000000000 --- a/extras/doc/html/_mozzi_guts__impl___r_p2040_8hpp_source.html +++ /dev/null @@ -1,413 +0,0 @@ - - - - - - - -Mozzi: MozziGuts_impl_RP2040.hpp Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
MozziGuts_impl_RP2040.hpp
-
-
-
1 /*
-
2  * MozziGuts_impl_RP2040.hpp
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2022-2024 Thomas Friedrichsmeier and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10 */
-
11 
-
12 // The main point of this check is to document, what platform & variants this implementation file is for.
-
13 #if !(IS_RP2040())
-
14 # error "Wrong implementation included for this platform"
-
15 #endif
-
16 
-
17 #include <hardware/dma.h>
-
18 
-
19 namespace MozziPrivate {
-
20 
-
21 ////// BEGIN analog input code ////////
-
22 
-
23 #if MOZZI_IS(MOZZI_ANALOG_READ, MOZZI_ANALOG_READ_STANDARD)
-
24 
-
25 /** Implementation notes:
-
26  * - So nobody on the nets seems to have quite figured out, how to run the RP2040 ADC in "regular" asynchronous mode.
-
27  * - The ADC sports an interrupt, presumably to be triggered when a conversion is done, but how to connect a callback to that?
-
28  * - There is, however, an official example on a free running ADC writing to DMA (https://github.com/raspberrypi/pico-examples/blob/master/adc/dma_capture/dma_capture.c ; BSD licensed)
-
29  * We'll abuse that to connect a callback to the DMA channel, instead.
-
30 */
-
31 
-
32 } // namespace MozziPrivate
-
33 
-
34 #include <hardware/adc.h>
-
35 
-
36 namespace MozziPrivate {
-
37 
-
38 #define getADCReading() rp2040_adc_result
-
39 #define channelNumToIndex(channel) channel
-
40 
-
41 inline void adc_run_once () { // see rp2040 sdk code for adc_read() vs adc_run()
-
42  hw_set_bits(&adc_hw->cs, ADC_CS_START_ONCE_BITS); // vs ADC_CS_START_MANY_BITS
-
43 }
-
44 
- -
46  if (pin >= 26) pin -= 26; // allow analog to be called by GP or ADC numbering
-
47  return pin;
-
48 
-
49 }
-
50 
- - -
53  adc_run_once();
-
54  // adc_run(true);
-
55 }
-
56 
- -
58  adc_run_once();
-
59  // adc_run(true);
-
60 }
-
61 
- -
63  if (speed == FAST_ADC) {
-
64  adc_set_clkdiv(2048); // Note: arbritray pick
-
65  } else if (speed == FASTER_ADC) {
-
66  adc_set_clkdiv(256); // Note: arbritray pick
-
67  } else {
-
68  adc_set_clkdiv(0); // max speed
-
69  }
-
70 }
-
71 
- -
73 
-
74 static uint16_t rp2040_adc_result = 0;
- - -
77  for (int i = 0; i < (int) NUM_ANALOG_INPUTS; ++i) {
- -
79  }
-
80 
-
81  adc_init();
- -
83  true, // Write each completed conversion to the sample FIFO
-
84  true, // Enable DMA data request (DREQ)
-
85  1, // DREQ (and IRQ) asserted when at least 1 sample present
-
86  false, // Don't want ERR bit
-
87  false // Keep full sample range
-
88  );
-
89 
- - - -
93 
-
94  // Reading from constant address, writing to incrementing byte addresses
- - -
97  channel_config_set_write_increment(&cfg, false); // we don't really want a fifo, just keep reading to the same address
-
98 
-
99  // Pace transfers based on availability of ADC samples
- -
101 
- -
103  &rp2040_adc_result, // dst
-
104  &adc_hw->fifo, // src
-
105  1, // transfer count
-
106  true // start immediately
-
107  );
-
108 
-
109  // we want notification, when a sample has arrived
- - -
112  irq_set_enabled(DMA_IRQ_0, true);
- -
114 }
-
115 
- -
117  if (!dma_channel_get_irq0_status(rp2040_adc_dma_chan)) return; // shared handler may get called on unrelated events
-
118  dma_channel_acknowledge_irq0(rp2040_adc_dma_chan); // clear interrupt flag
-
119  //adc_run(false); // adc not running continuous
-
120  //adc_fifo_drain(); // no need to drain fifo, the dma transfer did that
-
121  dma_channel_set_trans_count(rp2040_adc_dma_chan, 1, true); // set up for another read
-
122  advanceADCStep();
-
123 }
-
124 
-
125 #endif // MOZZI_ANALOG_READ
-
126 
-
127 ////// END analog input code ////////
-
128 
-
129 
-
130 ////// BEGIN audio output code //////
-
131 #define LOOP_YIELD tight_loop_contents(); // apparently needed, among other things, to service the alarm pool
-
132 
-
133 
-
134 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_TIMED)
-
135 #include <hardware/pwm.h>
-
136 
-
137 
-
138 } // namespace MozziPrivate
-
139 #include <pico/time.h>
-
140 namespace MozziPrivate {
-
141 /** Implementation notes:
-
142  * - For once, two different approaches are used between EXTERNAL_TIMED and PWM:
-
143  * - EXTERNAL_TIMED (here), uses a repeating alarm to induce the user's callback
-
144  * - because the alarm only has a resolution of 1us, we need to trick a bit to get the correct frequency: we compute the desired time target at a higher resolution (next_audio_update_shifted) so that the error is compensated by the higher precision sum.
-
145  */
- - -
148 const uint64_t micros_per_update_shifted = (1000000l << 8) / MOZZI_AUDIO_RATE;
- -
150 
- -
152  do {
- - - -
156  // NOTE: hardware_alarm_set_target returns true, if the target was already missed. In that case, keep pushing samples, until we have caught up.
- -
158 }
-
159 
-
160 #elif MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PWM)
-
161 } // namespace MozziPrivate
-
162 #include<PWMAudio.h>
-
163 namespace MozziPrivate {
-
164  /** Implementation notes:
-
165  * - This uses, straight out of the box, PWMAudio from Arduino-pico
-
166  * - thanks to that, it uses DMA transfer to update the audio output
-
167  * - implementation is extremely similar to I2S case.
-
168  * - PWMAudio expects 16bits samples.
-
169  */
-
170 # if (MOZZI_AUDIO_CHANNELS > 1)
- -
172  inline bool canBufferAudioOutput() {
-
173  return (pwm.availableForWrite()>1); // we will need to transfer 2 samples, for it to be non-blocking we need to ensure there is enough room.
-
174 }
-
175 # else
- -
177  inline bool canBufferAudioOutput() {
-
178  return (pwm.availableForWrite());
-
179 }
-
180 # endif
-
181 
-
182 
-
183  inline void audioOutput(const AudioOutput f) {
-
184  pwm.write(f.l());
-
185  # if (MOZZI_AUDIO_CHANNELS > 1)
-
186  pwm.write(f.r());
-
187  #endif
-
188  }
-
189 
-
190 #elif MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_I2S_DAC)
-
191 } // namespace MozziPrivate
-
192 #include <I2S.h>
-
193 namespace MozziPrivate {
-
194 I2S i2s(OUTPUT);
-
195 
-
196 inline bool canBufferAudioOutput() {
-
197  return (i2s.availableForWrite());
-
198 }
-
199 
-
200 inline void audioOutput(const AudioOutput f) {
-
201 
-
202 # if (MOZZI_AUDIO_BITS == 8)
-
203 # if (MOZZI_AUDIO_CHANNELS > 1)
-
204  i2s.write8(f.l(), f.r());
-
205 # else
-
206  i2s.write8(f.l(), 0);
-
207 # endif
-
208 
-
209 # elif (MOZZI_AUDIO_BITS == 16)
-
210 # if (MOZZI_AUDIO_CHANNELS > 1)
-
211  i2s.write16(f.l(), f.r());
-
212 # else
-
213  i2s.write16(f.l(), 0);
-
214 # endif
-
215 
-
216 # elif (MOZZI_AUDIO_BITS == 24)
-
217 # if (MOZZI_AUDIO_CHANNELS > 1)
-
218  i2s.write24(f.l(), f.r());
-
219 # else
-
220  i2s.write24(f.l(), 0);
-
221 # endif
-
222 
-
223 # elif (MOZZI_AUDIO_BITS == 32)
-
224 # if (MOZZI_AUDIO_CHANNELS > 1)
-
225  i2s.write32(f.l(), f.r());
-
226 # else
-
227  i2s.write32(f.l(), 0);
-
228 # endif
-
229 # else
-
230 # error Invalid number of MOZZI_AUDIO_BITS configured
-
231 # endif
-
232 
-
233 }
-
234 #endif
-
235 
-
236 
-
237 static void startAudio() {
-
238 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PWM)
-
239 
-
240  gpio_set_drive_strength(MOZZI_AUDIO_PIN_1, GPIO_DRIVE_STRENGTH_12MA); // highest we can get
-
241  # if (MOZZI_AUDIO_CHANNELS > 1)
-
242 # if ((MOZZI_AUDIO_PIN_1 / 2) != (MOZZI_AUDIO_PIN_1 / 2))
-
243 # error Audio channel pins for stereo or HIFI must be on the same PWM slice (which is the case for the pairs (0,1), (2,3), (4,5), etc. Adjust MOZZI_AUDIO_PIN_1/2 .
-
244 # endif
-
245  gpio_set_drive_strength(MOZZI_AUDIO_PIN_2, GPIO_DRIVE_STRENGTH_12MA); // highest we can get
-
246 #endif
-
247  pwm.setBuffers(MOZZI_RP2040_BUFFERS, (size_t) (MOZZI_RP2040_BUFFER_SIZE/MOZZI_RP2040_BUFFERS));
-
248 
-
249  pwm.begin(MOZZI_AUDIO_RATE);
-
250 # endif
-
251 
-
252 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_TIMED)
-
253  for (audio_update_alarm_num = 0; audio_update_alarm_num < 4; ++audio_update_alarm_num) {
-
254  if (!hardware_alarm_is_claimed(audio_update_alarm_num)) {
-
255  hardware_alarm_claim(audio_update_alarm_num);
-
256  hardware_alarm_set_callback(audio_update_alarm_num, audioOutputCallback);
-
257  break;
-
258  }
-
259  }
-
260  micros_per_update = 1000000l / MOZZI_AUDIO_RATE;
-
261  do {
-
262  next_audio_update = make_timeout_time_us(micros_per_update);
-
263  next_audio_update_shifted = to_us_since_boot(next_audio_update) << 8;
-
264  // See audioOutputCallback(), above. In _theory_ some interrupt stuff might delay us, here, causing us to miss the first beat (and everything that follows)
-
265  } while (hardware_alarm_set_target(audio_update_alarm_num, next_audio_update));
-
266 
-
267 #elif MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_I2S_DAC)
-
268  i2s.setBCLK(MOZZI_I2S_PIN_BCK);
-
269  i2s.setDATA(MOZZI_I2S_PIN_DATA);
-
270  i2s.setBitsPerSample(MOZZI_AUDIO_BITS);
-
271 
-
272 # if (MOZZI_AUDIO_BITS > 16)
-
273  i2s.setBuffers(MOZZI_RP2040_BUFFERS, (size_t) (MOZZI_RP2040_BUFFER_SIZE/MOZZI_RP2040_BUFFERS), 0);
-
274 # else
-
275  i2s.setBuffers(MOZZI_RP2040_BUFFERS, (size_t) (MOZZI_RP2040_BUFFER_SIZE/MOZZI_RP2040_BUFFERS/2), 0);
-
276 # endif
-
277 # if MOZZI_IS(MOZZI_I2S_FORMAT, MOZZI_I2S_FORMAT_LSBJ)
-
278  i2s.setLSBJFormat();
-
279 # endif
-
280  i2s.begin(MOZZI_AUDIO_RATE);
-
281 #endif
-
282 }
-
283 
-
284 void stopMozzi() {
-
285 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_TIMED)
-
286  hardware_alarm_set_callback(audio_update_alarm_num, NULL);
-
287 #elif MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_I2S_DAC)
-
288  i2s.end();
-
289 #elif MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PWM)
-
290  pwm.end();
-
291 #endif
-
292 
-
293 }
-
294 ////// END audio output code //////
-
295 
-
296 //// BEGIN Random seeding ////////
-
297 void MozziRandPrivate::autoSeed() {
-
298 #warning Automatic random seeding is not implemented on this platform
-
299 }
-
300 //// END Random seeding ////////
-
301 
-
302 } // namespace MozziPrivate
-
303 
-
304 #undef MOZZI_RP2040_BUFFERS
-
305 #undef MOZZI_RP2040_BUFFER_SIZE
-
-
- - - diff --git a/extras/doc/html/_mozzi_guts__impl___s_a_m_d_8hpp_source.html b/extras/doc/html/_mozzi_guts__impl___s_a_m_d_8hpp_source.html deleted file mode 100644 index 11d76e177..000000000 --- a/extras/doc/html/_mozzi_guts__impl___s_a_m_d_8hpp_source.html +++ /dev/null @@ -1,262 +0,0 @@ - - - - - - - -Mozzi: MozziGuts_impl_SAMD.hpp Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
MozziGuts_impl_SAMD.hpp
-
-
-
1 /*
-
2  * MozziGuts_impl_SAMD21.hpp
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2020-2024 Adrian Freed and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10 */
-
11 
-
12 #if !(IS_SAMD21())
-
13 # error "Wrong implementation included for this platform"
-
14 #endif
-
15 
-
16 namespace MozziPrivate {
-
17 
-
18 ////// BEGIN analog input code ////////
-
19 #if MOZZI_IS(MOZZI_ANALOG_READ, NOZZI_ANALOG_READ_STANDARD)
-
20 #error not yet implemented
-
21 #define getADCReading() 0
-
22 #define channelNumToIndex(channel) channel
- -
24  return pin;
-
25 }
- -
27 }
- -
29 }
- -
31 }
- -
33 }
-
34 #endif
-
35 ////// END analog input code ////////
-
36 
-
37 
-
38 
-
39 //// BEGIN AUDIO OUTPUT code ///////
-
40 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_INTERNAL_DAC, MOZZI_OUTPUT_EXTERNAL_TIMED)
-
41 // These are ARM SAMD21 Timer 5 routines to establish a sample rate interrupt
-
42 static bool tcIsSyncing() {
- -
44 }
-
45 
-
46 static void tcReset() {
-
47  // Reset TCx
- -
49  while (tcIsSyncing())
-
50  ;
-
51  while (TC5->COUNT16.CTRLA.bit.SWRST)
-
52  ;
-
53 }
-
54 /* Not currently used, and does not compile with EXTERNAL_AUDIO_OUTPUT
-
55 static void tcEnd() {
-
56  // Disable TC5
-
57  TC5->COUNT16.CTRLA.reg &= ~TC_CTRLA_ENABLE;
-
58  while (tcIsSyncing())
-
59  ;
-
60  tcReset();
-
61  analogWrite(AUDIO_CHANNEL_1_PIN, 0);
-
62 } */
-
63 
-
64 static void tcConfigure(uint32_t sampleRate) {
-
65  // Enable GCLK for TCC2 and TC5 (timer counter input clock)
- - -
68  while (GCLK->STATUS.bit.SYNCBUSY)
-
69  ;
-
70 
-
71  tcReset();
-
72 
-
73  // Set Timer counter Mode to 16 bits
- -
75 
-
76  // Set TC5 mode as match frequency
- -
78 
- -
80 
- -
82  while (tcIsSyncing())
-
83  ;
-
84 
-
85  // Configure interrupt request
- - - - -
90 
-
91  // Enable the TC5 interrupt request
-
92  TC5->COUNT16.INTENSET.bit.MC0 = 1;
-
93  while (tcIsSyncing())
-
94  ;
-
95 }
-
96 
-
97 } // namespace MozziPrivate
-
98 
-
99 void TC5_Handler(void) __attribute__((weak, alias("samd21AudioOutput")));
-
100 
-
101 #ifdef __cplusplus
-
102 extern "C" {
-
103 #endif
-
104 void samd21AudioOutput() {
- -
106  TC5->COUNT16.INTFLAG.bit.MC0 = 1;
-
107 }
-
108 #ifdef __cplusplus
-
109 }
-
110 #endif
-
111 
-
112 namespace MozziPrivate {
-
113 
-
114 #endif // MOZZI_AUDIO_MODE
-
115 
-
116 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_INTERNAL_DAC)
-
117 inline void audioOutput(const AudioOutput f) {
- -
119 }
-
120 #endif
-
121 
-
122 static void startAudio() {
-
123 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_INTERNAL_DAC)
-
124 # ifdef ARDUINO_SAMD_CIRCUITPLAYGROUND_EXPRESS
-
125  {
-
126  static const int CPLAY_SPEAKER_SHUTDOWN = 11;
-
127  pinMode(CPLAY_SPEAKER_SHUTDOWN, OUTPUT);
-
128  digitalWrite(CPLAY_SPEAKER_SHUTDOWN, HIGH);
-
129  }
-
130 
-
131 # endif
-
132 
-
133  analogWriteResolution(MOZZI_AUDIO_BITS);
-
134  analogWrite(MOZZI_AUDIO_PIN_1, 0);
-
135 #endif
-
136 
-
137 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_INTERNAL_DAC, MOZZI_OUTPUT_EXTERNAL_TIMED)
-
138  tcConfigure(MOZZI_AUDIO_RATE);
-
139 #endif
-
140 }
-
141 
-
142 void stopMozzi() {
-
143  // TODO: implement me
-
144  interrupts();
-
145 }
-
146 //// END AUDIO OUTPUT code ///////
-
147 
-
148 //// BEGIN Random seeding ////////
-
149 void MozziRandPrivate::autoSeed() {
-
150 #warning Automatic random seeding is not implemented on this platform
-
151 }
-
152 //// END Random seeding ////////
-
153 
-
154 } // namespace MozziPrivate
-
-
- - - diff --git a/extras/doc/html/_mozzi_guts__impl___s_t_m32_8hpp_source.html b/extras/doc/html/_mozzi_guts__impl___s_t_m32_8hpp_source.html deleted file mode 100644 index 184f415fc..000000000 --- a/extras/doc/html/_mozzi_guts__impl___s_t_m32_8hpp_source.html +++ /dev/null @@ -1,275 +0,0 @@ - - - - - - - -Mozzi: MozziGuts_impl_STM32.hpp Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
MozziGuts_impl_STM32.hpp
-
-
-
1 /*
-
2  * MozziGuts_impl_STM32.hpp
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2020-2024 Thomas Friedrichsmeier and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10 */
-
11 
-
12 #include "HardwareTimer.h"
-
13 
-
14 namespace MozziPrivate {
-
15 
-
16 ////// BEGIN analog input code ////////
-
17 #if MOZZI_IS(MOZZI_ANALOG_READ, MOZZI_ANALOG_READ_STANDARD)
-
18 
-
19 } // namespace MozziPrivate
-
20 //#include <STM32ADC.h> // Disabled, here. See hardware_defines.h
-
21 namespace MozziPrivate {
-
22 
- -
24 uint8_t stm32_current_adc_pin; // TODO: this is actually a "channel" according to our terminology, but "channel" and "pin" are equal on this platform
-
25 #define getADCReading() adc.getData()
-
26 #define channelNumToIndex(channel) STM32PinMap(channel)
- -
28  return pin;
-
29 }
-
30 
- - - - -
35 }
-
36 
- - - -
40 }
-
41 
-
42 void stm32_adc_eoc_handler() {
- -
44 }
-
45 
- - -
48 }
-
49 
-
50 
- -
52 {
-
53  if (pin > 15) return pin-8;
-
54  else return pin;
-
55 }
-
56 
- -
58  // NOTE: These picks are pretty arbitrary. Further available options are 7_5, 28_5, 55_5, 71_5 and 239_5 (i.e. 7.5 ADC cylces, etc.)
- - - -
62 }
-
63 #endif
-
64 
-
65 ////// END analog input code ////////
-
66 
-
67 
-
68 
-
69 //// BEGIN AUDIO OUTPUT code ///////
-
70 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_TIMED)
- -
72 #elif MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PWM, MOZZI_OUTPUT_2PIN_PWM)
- - -
75 
-
76 inline void audioOutput(const AudioOutput f) {
-
77 # if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_2PIN_PWM)
- - -
80 # else
- -
82 # if (MOZZI_AUDIO_CHANNELS > 1)
- -
84 # endif
-
85 #endif
-
86 }
-
87 #endif
-
88 
-
89 static void startAudio() {
-
90 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PWM, MOZZI_OUTPUT_2PIN_PWM, MOZZI_OUTPUT_EXTERNAL_TIMED)
-
91  audio_update_timer.pause();
-
92  //audio_update_timer.setPeriod(1000000UL / MOZZI_AUDIO_RATE);
-
93  // Manually calculate prescaler and overflow instead of using setPeriod, to avoid rounding errors
-
94  uint32_t period_cyc = F_CPU / MOZZI_AUDIO_RATE;
-
95  uint16_t prescaler = (uint16_t)(period_cyc / 65535 + 1);
-
96  uint16_t overflow = (uint16_t)((period_cyc + (prescaler / 2)) / prescaler);
-
97  audio_update_timer.setPrescaleFactor(prescaler);
-
98  audio_update_timer.setOverflow(overflow);
-
99  audio_update_timer.setMode(TIMER_CH1, TIMER_OUTPUT_COMPARE);
-
100  audio_update_timer.setCompare(TIMER_CH1,
-
101  1); // Interrupt 1 count after each update
-
102  audio_update_timer.attachInterrupt(TIMER_CH1, defaultAudioOutput);
-
103  audio_update_timer.refresh();
-
104  audio_update_timer.resume();
-
105 #endif
-
106 
-
107 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PWM, MOZZI_OUTPUT_2PIN_PWM)
-
108  pinMode(MOZZI_AUDIO_PIN_1, PWM);
-
109 # if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_2PIN_PWM)
-
110  pinMode(MOZZI_AUDIO_PIN_1_LOW, PWM);
-
111 # elif (MOZZI_AUDIO_CHANNELS > 1)
-
112  pinMode(MOZZI_AUDIO_PIN_2, PWM);
-
113 # endif
-
114 
-
115 # define MAX_CARRIER_FREQ (F_CPU / (1 << MOZZI_AUDIO_BITS_PER_CHANNEL))
-
116 # if MAX_CARRIER_FREQ < MOZZI_AUDIO_RATE
-
117 # error Configured audio resolution is definitely too high at the configured audio rate (and the given CPU speed)
-
118 # elif MAX_CARRIER_FREQ < (MOZZI_AUDIO_RATE * 3)
-
119 # warning Configured audio resolution may be higher than optimal at the configured audio rate (and the given CPU speed)
-
120 # endif
-
121 
-
122 # if MAX_CARRIER_FREQ < (MOZZI_AUDIO_RATE * 5)
-
123  // Generate as fast a carrier as possible
-
124  audio_pwm_timer.setPrescaleFactor(1);
-
125 # else
-
126  // No point in generating arbitrarily high carrier frequencies. In fact, if
-
127  // there _is_ any headroom, give the PWM pin more time to swing from HIGH to
-
128  // LOW and BACK, cleanly
-
129  audio_pwm_timer.setPrescaleFactor((int)MAX_CARRIER_FREQ / (MOZZI_AUDIO_RATE * 5));
-
130 # endif
-
131  audio_pwm_timer.setOverflow(
-
132  1 << MOZZI_AUDIO_BITS_PER_CHANNEL); // Allocate enough room to write all
-
133  // intended bits
-
134 # undef MAX_CARRIER_FREQ // no longer needed
-
135 #endif
-
136 }
-
137 
-
138 void stopMozzi() {
-
139 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PWM, MOZZI_OUTPUT_2PIN_PWM, MOZZI_OUTPUT_EXTERNAL_TIMED)
-
140  audio_update_timer.pause();
-
141 #endif
-
142 }
-
143 
-
144 //// END AUDIO OUTPUT code ///////
-
145 
-
146 //// BEGIN Random seeding ////////
-
147 void MozziRandPrivate::autoSeed() {
-
148  // Unfortunately the internal temp sensor on STM32s does _not_ appear to create a lot of noise.
-
149  // Ironically, the calls to calibrate help induce some random noise. You're still fairly likely to produce two equal
-
150  // random seeds in two subsequent runs, however.
- -
152  union {
-
153  float cf;
-
154  uint32_t ci;
-
155  } conv;
-
156  conv.cf = adc.readTemp();
-
157  x=x^conv.ci;
-
158  adc.calibrate();
-
159  conv.cf = adc.readTemp();
-
160  y=y^conv.ci;
-
161  adc.calibrate();
-
162  conv.cf = adc.readTemp();
-
163  z=z^conv.ci;
-
164 }
-
165 //// END Random seeding ////////
-
166 
-
167 } // namespace MozziPrivate
-
-
- - - diff --git a/extras/doc/html/_mozzi_guts__impl___s_t_m32duino_8hpp_source.html b/extras/doc/html/_mozzi_guts__impl___s_t_m32duino_8hpp_source.html deleted file mode 100644 index d517d531c..000000000 --- a/extras/doc/html/_mozzi_guts__impl___s_t_m32duino_8hpp_source.html +++ /dev/null @@ -1,291 +0,0 @@ - - - - - - - -Mozzi: MozziGuts_impl_STM32duino.hpp Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
MozziGuts_impl_STM32duino.hpp
-
-
-
1 /*
-
2  * MozziGuts_impl_STM32duino.hpp
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2023-2024 Thomas Friedrichsmeier and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10 */
-
11 
-
12 #include "HardwareTimer.h"
-
13 
-
14 namespace MozziPrivate {
-
15 ////// BEGIN analog input code ////////
-
16 
-
17 #if MOZZI_IS(MOZZI_ANALOG_READ, MOZZI_ANALOG_READ_STANDARD)
-
18 // Notes on ADC implementation: So in hours I could not get IRQ-driven ADC to work, much less in a way that should work across the whole STM32 family.
-
19 // Instead, this code resorts to polling, but contrary to the regular implementation, it sets does so non-blocking. Polling is done from inside audioHook().
-
20 // Not terribly efficient, but seems to work ok.
-
21 //
-
22 // All this still involves coping much, much more low level detail, than I would like. Most of that is moved to MozziGuts_impl_STM32duino_analog.hpp .
-
23 // If this core ever gets a more advanced ADC API, we should definitely switch to using that.
-
24 
-
25 #define getADCReading() HAL_ADC_GetValue(&AdcHandle)
-
26 
-
27 // NOTE: a single uint8_t for ADC channel is no good, here, as we may be dealing with serval distinct ADCs servicing the pins.
-
28 // However, there is a real danger of overflowing an int8_t storage (as is used as an intermediate), so subtract min pin number.
-
29 #define channelNumToIndex(channel) channel
- -
31  return pin - PNUM_ANALOG_BASE;
-
32 }
-
33 
- - -
36 bool conversion_running = false;
- -
38 
-
39 } // namespace MozziPrivate
-
40 #include "MozziGuts_impl_STM32duino_analog.hpp"
-
41 namespace MozziPrivate {
-
42 
- -
44  if (pin != previously_sampled_pin) {
-
45  if (conversion_running) {
- - -
48  }
- -
50  uint32_t mask = 1 << pin;
-
51  if (!(adc_pins_initialized & mask)) {
-
52  analogRead(pin+PNUM_ANALOG_BASE); // I have no idea, what black magic analogRead() performs, but it seems to be needed - once - on STM32F411
- -
54  }
-
55  }
-
56  adc_setup_read(analogInputToPinName(pin+PNUM_ANALOG_BASE), 16); // resolution will be limited to max available, anyway, so let's request 16 bits
-
57  conversion_running = true;
-
58 }
-
59 
- - -
62  conversion_running = true;
-
63 }
-
64 
-
65 void setupMozziADC(int8_t /*speed*/) {
-
66 }
-
67 
-
68 #define AUDIO_HOOK_HOOK checkADCConversionComplete();
-
69 
- -
71  if (!conversion_running) return;
- -
73  conversion_running = false;
- -
75  }
-
76 }
-
77 
-
78 #endif
-
79 
-
80 void setupFastAnalogRead(int8_t /*speed*/) {
-
81 }
-
82 
-
83 ////// END analog input code ////////
-
84 ////// END analog input code ////////
-
85 
-
86 
-
87 
-
88 //// BEGIN AUDIO OUTPUT code ///////
-
89 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_TIMED)
- -
91 #elif MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PWM, MOZZI_OUTPUT_2PIN_PWM)
- - - - -
96 
-
97 # if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_2PIN_PWM)
- - -
100 # elif (MOZZI_AUDIO_CHANNELS > 1)
- - -
103 # endif
-
104 
-
105 inline void audioOutput(const AudioOutput f) {
-
106 # if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_2PIN_PWM)
- - -
109 # else
- -
111 # if (MOZZI_AUDIO_CHANNELS > 1)
- -
113 # endif
-
114 #endif
-
115 }
-
116 #endif
-
117 
-
118 static void startAudio() {
-
119 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PWM, MOZZI_OUTPUT_2PIN_PWM, MOZZI_OUTPUT_EXTERNAL_TIMED)
-
120  audio_update_timer.pause();
-
121  //audio_update_timer.setPeriod(1000000UL / MOZZI_AUDIO_RATE);
-
122  // Manually calculate prescaler and overflow instead of using setPeriod, to avoid rounding errors
-
123  uint32_t period_cyc = F_CPU / MOZZI_AUDIO_RATE;
-
124  uint16_t prescaler = (uint16_t)(period_cyc / 65535 + 1);
-
125  uint16_t overflow = (uint16_t)((period_cyc + (prescaler / 2)) / prescaler);
-
126  audio_update_timer.setPrescaleFactor(prescaler);
-
127  audio_update_timer.setOverflow(overflow);
-
128  audio_update_timer.setMode(/* channel */ 1, TIMER_OUTPUT_COMPARE);
-
129  audio_update_timer.setCaptureCompare(/* channel */ 1, 1); // Interrupt 1 count after each update
-
130  audio_update_timer.attachInterrupt(/* channel */ 1, defaultAudioOutput);
-
131  audio_update_timer.refresh();
-
132 #endif
-
133 
-
134 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PWM, MOZZI_OUTPUT_2PIN_PWM)
-
135  // Configure PWM output
-
136  pinMode(MOZZI_AUDIO_PIN_1, OUTPUT);
-
137 # if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_2PIN_PWM)
-
138  pinMode(MOZZI_AUDIO_PIN_1_LOW, OUTPUT);
-
139 # elif (MOZZI_AUDIO_CHANNELS > 1)
-
140  pinMode(MOZZI_AUDIO_PIN_2, OUTPUT);
-
141 # endif
-
142 
-
143 # define MAX_CARRIER_FREQ (F_CPU / (1 << MOZZI_AUDIO_BITS_PER_CHANNEL))
-
144  // static_assert(MAX_CARRIER_FREQ >= MOZZI_AUDIO_RATE); // Unfortunately, we cannot test this at compile time. F_CPU expands to a runtime variable
-
145  TIM_TypeDef *pwm_timer_tim = (TIM_TypeDef *) pinmap_peripheral(output_pin_1, PinMap_TIM);
-
146  pwm_timer_ht = new HardwareTimer(pwm_timer_tim);
-
147  pwm_timer_ht->setMode(pwm_timer_channel_1, TIMER_OUTPUT_COMPARE_PWM1, output_pin_1);
-
148 # if MAX_CARRIER_FREQ < (MOZZI_AUDIO_RATE * 5)
-
149  // Generate as fast a carrier as possible
-
150  pwm_timer_ht->setPrescaleFactor(1);
-
151 # else
-
152  // No point in generating arbitrarily high carrier frequencies. In fact, if
-
153  // there _is_ any headroom, give the PWM pin more time to swing from HIGH to
-
154  // LOW and BACK, cleanly
-
155  pwm_timer_ht->setPrescaleFactor((int)MAX_CARRIER_FREQ / (MOZZI_AUDIO_RATE * 5)); // as fast as possible
-
156 # endif
-
157 // Allocate enough room to write all intended bits
-
158  pwm_timer_ht->setOverflow(1 << MOZZI_AUDIO_BITS_PER_CHANNEL);
-
159  pwm_timer_ht->setCaptureCompare(pwm_timer_channel_1, MOZZI_AUDIO_BIAS /*, resolution */);
-
160 
-
161  pwm_timer_ht->resume();
-
162 #endif
-
163 
-
164 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PWM, MOZZI_OUTPUT_2PIN_PWM, MOZZI_OUTPUT_EXTERNAL_TIMED)
-
165  audio_update_timer.resume();
-
166 #endif
-
167 }
-
168 
-
169 void stopMozzi() {
-
170 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PWM, MOZZI_OUTPUT_2PIN_PWM, MOZZI_OUTPUT_EXTERNAL_TIMED)
-
171  audio_update_timer.pause();
-
172 #endif
-
173 }
-
174 
-
175 //// END AUDIO OUTPUT code ///////
-
176 
-
177 //// BEGIN Random seeding ////////
-
178 void MozziRandPrivate::autoSeed() {
-
179 #warning Automatic random seeding is not implemented on this platform
-
180 }
-
181 //// END Random seeding ////////
-
182 
-
183 } // namespace MozziPrivate
-
-
- - - diff --git a/extras/doc/html/_mozzi_guts__impl___s_t_m32duino__analog_8hpp_source.html b/extras/doc/html/_mozzi_guts__impl___s_t_m32duino__analog_8hpp_source.html deleted file mode 100644 index 6b9a01603..000000000 --- a/extras/doc/html/_mozzi_guts__impl___s_t_m32duino__analog_8hpp_source.html +++ /dev/null @@ -1,434 +0,0 @@ - - - - - - - -Mozzi: MozziGuts_impl_STM32duino_analog.hpp Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
MozziGuts_impl_STM32duino_analog.hpp
-
-
-
1 /*
-
2  * MozziGuts_impl_STM32duino_analog.hpp
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2023-2024 Thomas Friedrichsmeier and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10 // NOTE: The contents of this file are copied mostly verbatim from Arduino_Core_STM32, (c) STMicroelectronics, BSD 3-clause license.
-
11 */
-
12 
-
13 namespace MozziPrivate {
-
14 static PinName g_current_pin = NC;
-
15 
-
16 #ifndef ADC_SAMPLINGTIME
-
17 #if defined(ADC_SAMPLETIME_8CYCLES_5)
-
18 #define ADC_SAMPLINGTIME ADC_SAMPLETIME_8CYCLES_5;
-
19 #elif defined(ADC_SAMPLETIME_12CYCLES)
-
20 #define ADC_SAMPLINGTIME ADC_SAMPLETIME_12CYCLES;
-
21 #elif defined(ADC_SAMPLETIME_12CYCLES_5)
-
22 #define ADC_SAMPLINGTIME ADC_SAMPLETIME_12CYCLES_5;
-
23 #elif defined(ADC_SAMPLETIME_13CYCLES_5)
-
24 #define ADC_SAMPLINGTIME ADC_SAMPLETIME_13CYCLES_5;
-
25 #elif defined(ADC_SAMPLETIME_15CYCLES)
-
26 #define ADC_SAMPLINGTIME ADC_SAMPLETIME_15CYCLES;
-
27 #elif defined(ADC_SAMPLETIME_16CYCLES)
-
28 #define ADC_SAMPLINGTIME ADC_SAMPLETIME_16CYCLES;
-
29 #elif defined(ADC_SAMPLETIME_19CYCLES_5)
-
30 #define ADC_SAMPLINGTIME ADC_SAMPLETIME_19CYCLES_5;
-
31 #endif
-
32 #endif /* !ADC_SAMPLINGTIME */
-
33 
-
34 #if defined(ADC_VER_V5_V90) && !defined(ADC3_SAMPLINGTIME)
-
35 #define ADC3_SAMPLINGTIME ADC3_SAMPLETIME_24CYCLES_5;
-
36 #endif
-
37 
-
38 #if defined(ADC4_SAMPLETIME_19CYCLES_5) && !defined(ADC4_SAMPLINGTIME)
-
39 #define ADC4_SAMPLINGTIME ADC4_SAMPLETIME_19CYCLES_5;
-
40 #endif
-
41 
-
42 /*
-
43  * Minimum ADC sampling time is required when reading
-
44  * internal channels so set it to max possible value.
-
45  * It can be defined more precisely by defining:
-
46  * ADC_SAMPLINGTIME_INTERNAL
-
47  * to the desired ADC sample time.
-
48  */
-
49 #ifndef ADC_SAMPLINGTIME_INTERNAL
-
50 #if defined(ADC_SAMPLETIME_480CYCLES)
-
51 #define ADC_SAMPLINGTIME_INTERNAL ADC_SAMPLETIME_480CYCLES
-
52 #elif defined(ADC_SAMPLETIME_384CYCLES)
-
53 #define ADC_SAMPLINGTIME_INTERNAL ADC_SAMPLETIME_384CYCLES
-
54 #elif defined(ADC_SAMPLETIME_810CYCLES_5)
-
55 #define ADC_SAMPLINGTIME_INTERNAL ADC_SAMPLETIME_810CYCLES_5
-
56 #elif defined(ADC_SAMPLETIME_814CYCLES)
-
57 #define ADC_SAMPLINGTIME_INTERNAL ADC_SAMPLETIME_814CYCLES
-
58 #elif defined(ADC_SAMPLETIME_640CYCLES_5)
-
59 #define ADC_SAMPLINGTIME_INTERNAL ADC_SAMPLETIME_640CYCLES_5
-
60 #elif defined(ADC_SAMPLETIME_601CYCLES_5)
-
61 #define ADC_SAMPLINGTIME_INTERNAL ADC_SAMPLETIME_601CYCLES_5
-
62 #elif defined(ADC_SAMPLETIME_247CYCLES_5)
-
63 #define ADC_SAMPLINGTIME_INTERNAL ADC_SAMPLETIME_247CYCLES_5
-
64 #elif defined(ADC_SAMPLETIME_239CYCLES_5)
-
65 #define ADC_SAMPLINGTIME_INTERNAL ADC_SAMPLETIME_239CYCLES_5
-
66 #elif defined(ADC_SAMPLETIME_160CYCLES_5)
-
67 #define ADC_SAMPLINGTIME_INTERNAL ADC_SAMPLETIME_160CYCLES_5
-
68 #else
-
69 #error "ADC sampling time could not be defined for internal channels!"
-
70 #endif
-
71 #endif /* !ADC_SAMPLINGTIME_INTERNAL */
-
72 
-
73 
-
74 #ifndef ADC_CLOCK_DIV
-
75 #ifdef ADC_CLOCK_SYNC_PCLK_DIV4
-
76 #define ADC_CLOCK_DIV ADC_CLOCK_SYNC_PCLK_DIV4
-
77 #elif ADC_CLOCK_SYNC_PCLK_DIV2
-
78 #define ADC_CLOCK_DIV ADC_CLOCK_SYNC_PCLK_DIV2
-
79 #elif defined(ADC_CLOCK_ASYNC_DIV4)
-
80 #define ADC_CLOCK_DIV ADC_CLOCK_ASYNC_DIV4
-
81 #endif
-
82 #endif /* !ADC_CLOCK_DIV */
-
83 
-
84 #ifndef ADC_REGULAR_RANK_1
-
85 #define ADC_REGULAR_RANK_1 1
-
86 #endif
-
87 
-
88 // adc_read_value() modified to keep only the ADC setup, but not the (blocking) ADC read
-
89 bool adc_setup_read(PinName pin, uint32_t resolution) {
-
90  AdcHandle = {};
-
91  ADC_ChannelConfTypeDef AdcChannelConf = {};
-
92  uint32_t samplingTime = ADC_SAMPLINGTIME;
-
93  uint32_t channel = 0;
-
94  uint32_t bank = 0;
-
95 
-
96  if ((pin & PADC_BASE) && (pin < ANA_START)) {
-
97 #if defined(STM32H7xx) || defined(STM32MP1xx)
-
98 #ifdef ADC3
-
99  AdcHandle.Instance = ADC3;
-
100 #else
-
101  AdcHandle.Instance = ADC2;
-
102 #endif
-
103 #else
-
104  AdcHandle.Instance = ADC1;
-
105 #if defined(ADC5) && defined(ADC_CHANNEL_TEMPSENSOR_ADC5)
-
106  if (pin == PADC_TEMP_ADC5) {
-
107  AdcHandle.Instance = ADC5;
-
108  }
-
109 #endif
-
110 #endif
-
111  channel = get_adc_internal_channel(pin);
-
112  samplingTime = ADC_SAMPLINGTIME_INTERNAL;
-
113  } else {
-
114  AdcHandle.Instance = (ADC_TypeDef *)pinmap_peripheral(pin, PinMap_ADC);
-
115  channel = get_adc_channel(pin, &bank);
-
116 #if defined(ADC_VER_V5_V90)
-
117  if (AdcHandle.Instance == ADC3) {
-
118  samplingTime = ADC3_SAMPLINGTIME;
-
119  }
-
120 #endif
-
121 #if defined(ADC4_SAMPLINGTIME)
-
122  if (AdcHandle.Instance == ADC4) {
-
123  samplingTime = ADC4_SAMPLINGTIME;
-
124  }
-
125 #endif
-
126  }
-
127 
-
128  if (AdcHandle.Instance == NP) {
-
129  return 0;
-
130  }
-
131 
-
132 #ifdef ADC_CLOCK_DIV
-
133  AdcHandle.Init.ClockPrescaler = ADC_CLOCK_DIV; /* (A)synchronous clock mode, input ADC clock divided */
-
134 #endif
-
135 #ifdef ADC_RESOLUTION_12B
-
136  switch (resolution) {
-
137 #ifdef ADC_RESOLUTION_6B
-
138  case 6:
-
139  AdcHandle.Init.Resolution = ADC_RESOLUTION_6B; /* resolution for converted data */
-
140  break;
-
141 #endif
-
142  case 8:
-
143  AdcHandle.Init.Resolution = ADC_RESOLUTION_8B; /* resolution for converted data */
-
144  break;
-
145  case 10:
-
146  AdcHandle.Init.Resolution = ADC_RESOLUTION_10B; /* resolution for converted data */
-
147  break;
-
148  case 12:
-
149  default:
-
150  AdcHandle.Init.Resolution = ADC_RESOLUTION_12B; /* resolution for converted data */
-
151  break;
-
152 #ifdef ADC_RESOLUTION_14B
-
153  case 14:
-
154  AdcHandle.Init.Resolution = ADC_RESOLUTION_14B; /* resolution for converted data */
-
155  break;
-
156 #endif
-
157 #ifdef ADC_RESOLUTION_16B
-
158  case 16:
-
159  AdcHandle.Init.Resolution = ADC_RESOLUTION_16B; /* resolution for converted data */
-
160  break;
-
161 #endif
-
162  }
-
163 #else
-
164  UNUSED(resolution);
-
165 #endif
-
166 #ifdef ADC_DATAALIGN_RIGHT
-
167  AdcHandle.Init.DataAlign = ADC_DATAALIGN_RIGHT; /* Right-alignment for converted data */
-
168 #endif
-
169 #ifdef ADC_SCAN_SEQ_FIXED
-
170  AdcHandle.Init.ScanConvMode = ADC_SCAN_SEQ_FIXED; /* Sequencer disabled (ADC conversion on only 1 channel: channel set on rank 1) */
-
171 #else
-
172  AdcHandle.Init.ScanConvMode = DISABLE; /* Sequencer disabled (ADC conversion on only 1 channel: channel set on rank 1) */
-
173 #endif
-
174 #ifdef ADC_EOC_SINGLE_CONV
-
175  AdcHandle.Init.EOCSelection = ADC_EOC_SINGLE_CONV; /* EOC flag picked-up to indicate conversion end */
-
176 #endif
-
177 #if !defined(STM32F1xx) && !defined(STM32F2xx) && !defined(STM32F4xx) &&
-
178  !defined(STM32F7xx) && !defined(ADC1_V2_5)
-
179  AdcHandle.Init.LowPowerAutoWait = DISABLE; /* Auto-delayed conversion feature disabled */
-
180 #endif
-
181 #if !defined(STM32F1xx) && !defined(STM32F2xx) && !defined(STM32F3xx) &&
-
182  !defined(STM32F4xx) && !defined(STM32F7xx) && !defined(STM32G4xx) &&
-
183  !defined(STM32H7xx) && !defined(STM32L4xx) && !defined(STM32L5xx) &&
-
184  !defined(STM32MP1xx) && !defined(STM32WBxx) || defined(ADC_SUPPORT_2_5_MSPS)
-
185  AdcHandle.Init.LowPowerAutoPowerOff = DISABLE; /* ADC automatically powers-off after a conversion and automatically wakes-up when a new conversion is triggered */
-
186 #endif
-
187 #ifdef ADC_CHANNELS_BANK_B
-
188  AdcHandle.Init.ChannelsBank = bank;
-
189 #elif defined(ADC_CHANNELS_BANK_A)
-
190  AdcHandle.Init.ChannelsBank = ADC_CHANNELS_BANK_A;
-
191 #endif
-
192  AdcHandle.Init.ContinuousConvMode = DISABLE; /* Continuous mode disabled to have only 1 conversion at each conversion trig */
-
193 #if !defined(STM32F0xx) && !defined(STM32L0xx)
-
194  AdcHandle.Init.NbrOfConversion = 1; /* Specifies the number of ranks that will be converted within the regular group sequencer. */
-
195 #endif
-
196  AdcHandle.Init.DiscontinuousConvMode = DISABLE; /* Parameter discarded because sequencer is disabled */
-
197 #if !defined(STM32C0xx) && !defined(STM32F0xx) && !defined(STM32G0xx) &&
-
198  !defined(STM32L0xx) && !defined(STM32WLxx) && !defined(ADC_SUPPORT_2_5_MSPS)
-
199  AdcHandle.Init.NbrOfDiscConversion = 0; /* Parameter discarded because sequencer is disabled */
-
200 #endif
-
201  AdcHandle.Init.ExternalTrigConv = ADC_SOFTWARE_START; /* Software start to trig the 1st conversion manually, without external event */
-
202 #if !defined(STM32F1xx) && !defined(ADC1_V2_5)
-
203  AdcHandle.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; /* Parameter discarded because software trigger chosen */
-
204 #endif
-
205 #if !defined(STM32F1xx) && !defined(STM32H7xx) && !defined(STM32MP1xx) &&
-
206  !defined(ADC1_V2_5)
-
207  AdcHandle.Init.DMAContinuousRequests = DISABLE; /* DMA one-shot mode selected (not applied to this example) */
-
208 #endif
-
209 #ifdef ADC_CONVERSIONDATA_DR
-
210  AdcHandle.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DR; /* Regular Conversion data stored in DR register only */
-
211 #endif
-
212 #ifdef ADC_OVR_DATA_OVERWRITTEN
-
213  AdcHandle.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN; /* DR register is overwritten with the last conversion result in case of overrun */
-
214 #endif
-
215 #ifdef ADC_LEFTBITSHIFT_NONE
-
216  AdcHandle.Init.LeftBitShift = ADC_LEFTBITSHIFT_NONE; /* No bit shift left applied on the final ADC conversion data */
-
217 #endif
-
218 
-
219 #if defined(STM32F0xx)
-
220  AdcHandle.Init.SamplingTimeCommon = samplingTime;
-
221 #endif
-
222 #if defined(STM32C0xx) || defined(STM32G0xx) || defined(STM32U5xx) ||
-
223  defined(STM32WLxx) || defined(ADC_SUPPORT_2_5_MSPS)
-
224  AdcHandle.Init.SamplingTimeCommon1 = samplingTime; /* Set sampling time common to a group of channels. */
-
225  AdcHandle.Init.SamplingTimeCommon2 = samplingTime; /* Set sampling time common to a group of channels, second common setting possible.*/
-
226 #endif
-
227 #if defined(STM32L0xx)
-
228  AdcHandle.Init.LowPowerFrequencyMode = DISABLE; /* To be enabled only if ADC clock < 2.8 MHz */
-
229  AdcHandle.Init.SamplingTime = samplingTime;
-
230 #endif
-
231 #if !defined(STM32F0xx) && !defined(STM32F1xx) && !defined(STM32F2xx) &&
-
232  !defined(STM32F3xx) && !defined(STM32F4xx) && !defined(STM32F7xx) &&
-
233  !defined(STM32L1xx) && !defined(ADC_SUPPORT_2_5_MSPS)
-
234  AdcHandle.Init.OversamplingMode = DISABLE;
-
235  /* AdcHandle.Init.Oversample ignore for STM32L0xx as oversampling disabled */
-
236  /* AdcHandle.Init.Oversampling ignored for other as oversampling disabled */
-
237 #endif
-
238 #if defined(ADC_CFGR_DFSDMCFG) && defined(DFSDM1_Channel0)
-
239  AdcHandle.Init.DFSDMConfig = ADC_DFSDM_MODE_DISABLE; /* ADC conversions are not transferred by DFSDM. */
-
240 #endif
-
241 #ifdef ADC_TRIGGER_FREQ_HIGH
-
242  AdcHandle.Init.TriggerFrequencyMode = ADC_TRIGGER_FREQ_HIGH;
-
243 #endif
-
244 #ifdef ADC_VREF_PPROT_NONE
-
245  AdcHandle.Init.VrefProtection = ADC_VREF_PPROT_NONE;
-
246 #endif
-
247 
-
248  AdcHandle.State = HAL_ADC_STATE_RESET;
-
249  AdcHandle.DMA_Handle = NULL;
-
250  AdcHandle.Lock = HAL_UNLOCKED;
-
251  /* Some other ADC_HandleTypeDef fields exists but not required */
-
252 
-
253  g_current_pin = pin; /* Needed for HAL_ADC_MspInit*/
-
254 
-
255  if (HAL_ADC_Init(&AdcHandle) != HAL_OK) {
-
256  return 0;
-
257  }
-
258 
-
259  AdcChannelConf.Channel = channel; /* Specifies the channel to configure into ADC */
-
260 
-
261 #if defined(STM32G4xx) || defined(STM32L4xx) || defined(STM32L5xx) ||
-
262  defined(STM32WBxx)
-
263  if (!IS_ADC_CHANNEL(&AdcHandle, AdcChannelConf.Channel)) {
-
264 #else
-
265  if (!IS_ADC_CHANNEL(AdcChannelConf.Channel)) {
-
266 #endif
-
267  return 0;
-
268  }
-
269 #if defined(ADC_SCAN_SEQ_FIXED) && defined(ADC_RANK_CHANNEL_NUMBER)
-
270  AdcChannelConf.Rank = ADC_RANK_CHANNEL_NUMBER; /* Enable the rank of the selected channels when not fully configurable */
-
271 #else
-
272  AdcChannelConf.Rank = ADC_REGULAR_RANK_1; /* Specifies the rank in the regular group sequencer */
-
273 #endif
-
274 #if !defined(STM32L0xx)
-
275 #if !defined(STM32G0xx)
-
276  AdcChannelConf.SamplingTime = samplingTime; /* Sampling time value to be set for the selected channel */
-
277 #else
-
278  AdcChannelConf.SamplingTime = ADC_SAMPLINGTIME_COMMON_1; /* Sampling time value to be set for the selected channel */
-
279 #endif
-
280 #endif
-
281 #if defined(ADC_DIFFERENTIAL_ENDED) && !defined(ADC1_V2_5)
-
282  AdcChannelConf.SingleDiff = ADC_SINGLE_ENDED; /* Single-ended input channel */
-
283  AdcChannelConf.OffsetNumber = ADC_OFFSET_NONE; /* No offset subtraction */
-
284 #endif
-
285 #if !defined(STM32C0xx) && !defined(STM32F0xx) && !defined(STM32F1xx) &&
-
286  !defined(STM32F2xx) && !defined(STM32G0xx) && !defined(STM32L0xx) &&
-
287  !defined(STM32L1xx) && !defined(STM32WBxx) && !defined(STM32WLxx) &&
-
288  !defined(ADC1_V2_5)
-
289  AdcChannelConf.Offset = 0; /* Parameter discarded because offset correction is disabled */
-
290 #endif
-
291 #if defined (STM32H7xx) || defined(STM32MP1xx)
-
292  AdcChannelConf.OffsetRightShift = DISABLE; /* No Right Offset Shift */
-
293  AdcChannelConf.OffsetSignedSaturation = DISABLE; /* Signed saturation feature is not used */
-
294 #endif
-
295 
-
296  /*##-2- Configure ADC regular channel ######################################*/
-
297  if (HAL_ADC_ConfigChannel(&AdcHandle, &AdcChannelConf) != HAL_OK) {
-
298  /* Channel Configuration Error */
-
299  return 0;
-
300  }
-
301 
-
302 #if defined(ADC_CR_ADCAL) || defined(ADC_CR2_RSTCAL)
-
303  /*##-2.1- Calibrate ADC then Start the conversion process ####################*/
-
304 #if defined(ADC_CALIB_OFFSET)
-
305  if (HAL_ADCEx_Calibration_Start(&AdcHandle, ADC_CALIB_OFFSET, ADC_SINGLE_ENDED) != HAL_OK)
-
306 #elif defined(ADC_SINGLE_ENDED) && !defined(ADC1_V2_5)
-
307  if (HAL_ADCEx_Calibration_Start(&AdcHandle, ADC_SINGLE_ENDED) != HAL_OK)
-
308 #else
-
309  if (HAL_ADCEx_Calibration_Start(&AdcHandle) != HAL_OK)
-
310 #endif
-
311  {
-
312  /* ADC Calibration Error */
-
313  return 0;
-
314  }
-
315 #endif
-
316 
-
317  /*##-3- Start the conversion process ####################*/
-
318  if (HAL_ADC_Start(&AdcHandle) != HAL_OK) {
-
319  /* Start Conversion Error */
-
320  return 0;
-
321  }
-
322 
-
323  return HAL_OK;
-
324 }
-
325 
-
326 } // namespace MozziPrivate
-
-
- - - diff --git a/extras/doc/html/_mozzi_guts__impl___t_e_e_n_s_y_8hpp_source.html b/extras/doc/html/_mozzi_guts__impl___t_e_e_n_s_y_8hpp_source.html deleted file mode 100644 index d11c025da..000000000 --- a/extras/doc/html/_mozzi_guts__impl___t_e_e_n_s_y_8hpp_source.html +++ /dev/null @@ -1,236 +0,0 @@ - - - - - - - -Mozzi: MozziGuts_impl_TEENSY.hpp Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
MozziGuts_impl_TEENSY.hpp
-
-
-
1 /*
-
2  * MozziGuts_impl_STM32duino.hpp
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2013-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10 */
-
11 
-
12 #if !(IS_TEENSY3() || IS_TEENSY4())
-
13 # error "Wrong implementation included for this platform"
-
14 #endif
-
15 
-
16 #if (IS_TEENSY3() && F_CPU != 48000000)
-
17 #warning
-
18  "Mozzi has been tested with a cpu clock speed of 16MHz on Arduino and 48MHz on Teensy 3! Results may vary with other speeds."
-
19 #endif
-
20 
-
21 namespace MozziPrivate {
-
22 ////// BEGIN analog input code ////////
-
23 #if MOZZI_IS(MOZZI_ANALOG_READ, MOZZI_ANALOG_READ_STANDARD)
-
24 // required from http://github.com/pedvide/ADC for Teensy 3.*
-
25 } //namespace MozziPrivate
-
26 #include <ADC.h>
-
27 namespace MozziPrivate {
-
28 
-
29 ADC *adc; // adc object
-
30 uint8_t teensy_pin; // TODO: this is actually a "channel" according to our terminology, but "channel" and "pin" are equal on this platform
- -
32 #define getADCReading() adc->readSingle(teensy_adc)
-
33 #define channelNumToIndex(channel) teensyPinMap(channel)
- -
35  return pin;
-
36 }
-
37 
- -
39  adc->adc0->setAveraging(0);
-
40  adc->adc0->setConversionSpeed(ADC_CONVERSION_SPEED::MED_SPEED); // could be HIGH_SPEED, noisier
-
41 #ifdef ADC_DUAL_ADCS
-
42  adc->adc1->setAveraging(0);
- -
44 #endif
-
45 }
-
46 
-
47 } // namespace MozziPrivate
-
48 void adc0_isr(void)
-
49 {
- -
51 }
-
52 namespace MozziPrivate {
-
53 
- -
55  adc = new ADC();
-
56  adc->adc0->enableInterrupts(adc0_isr); // TODO: is this even correct? Does the function take a parameter? And is adc0_isr a predefined name, or are we free to move this to MozziPrivate?
-
57 #ifdef ADC_DUAL_ADCS
- -
59 #endif
-
60 }
-
61 
- -
63  teensy_pin = channel; // remember for startSecondADCReadOnCurrentChannel()
-
64 #ifdef ADC_DUAL_ADCS
- -
66  else teensy_adc=1;
-
67 #endif
- -
69 }
-
70 
- - -
73 }
-
74 #endif // MOZZI_ANALOG_READ
-
75 
-
76 ////// END analog input code ////////
-
77 
-
78 
-
79 
-
80 //// BEGIN AUDIO OUTPUT code ///////
-
81 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PWM, MOZZI_OUTPUT_INTERNAL_DAC, MOZZI_OUTPUT_EXTERNAL_TIMED)
-
82 } // namespace MozziPrivate
-
83 #include "IntervalTimer.h"
-
84 namespace MozziPrivate {
- -
86 #endif
-
87 
-
88 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PWM, MOZZI_OUTPUT_INTERNAL_DAC)
-
89 inline void audioOutput(const AudioOutput f) {
- -
91 # if (MOZZI_AUDIO_CHANNELS > 1)
- -
93 # endif
-
94 }
-
95 #endif
-
96 
-
97 static void startAudio() {
-
98 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PWM, MOZZI_OUTPUT_INTERNAL_DAC)
-
99 # if IS_TEENSY3()
-
100  analogWriteResolution(12);
-
101 # elif IS_TEENSY4()
-
102  analogWriteResolution(10);
-
103  analogWriteFrequency(MOZZI_AUDIO_PIN_1, 146484.38f);
-
104 # if (MOZZI_AUDIO_CHANNELS > 1)
-
105  analogWriteFrequency(MOZZI_AUDIO_PIN_2, 146484.38f);
-
106 # endif // end #if (MOZZI_AUDIO_CHANNELS > 1)
-
107 # endif // TEENSY3/4
-
108 #endif
-
109 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PWM, MOZZI_OUTPUT_INTERNAL_DAC, MOZZI_OUTPUT_EXTERNAL_TIMED)
-
110  timer1.begin(defaultAudioOutput, 1000000. / MOZZI_AUDIO_RATE);
-
111 #endif
-
112 }
-
113 
-
114 void stopMozzi() {
-
115 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PWM, MOZZI_OUTPUT_INTERNAL_DAC, MOZZI_OUTPUT_EXTERNAL_TIMED)
-
116  timer1.end();
-
117 #endif
-
118  interrupts();
-
119 }
-
120 //// END AUDIO OUTPUT code ///////
-
121 
-
122 //// BEGIN Random seeding ////////
-
123 void MozziRandPrivate::autoSeed() {
-
124 #warning Automatic random seeding is not implemented on this platform
-
125 }
-
126 //// END Random seeding ////////
-
127 
-
128 } // namespace MozziPrivate
-
-
- - - diff --git a/extras/doc/html/_mozzi_guts__impl__template_8hpp.html b/extras/doc/html/_mozzi_guts__impl__template_8hpp.html deleted file mode 100644 index 6fbdc767d..000000000 --- a/extras/doc/html/_mozzi_guts__impl__template_8hpp.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - - - - -Mozzi: MozziGuts_impl_template.hpp File Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
MozziGuts_impl_template.hpp File Reference
-
-
- -

Template for implementation of new ports. -More...

- -

Go to the source code of this file.

-

Detailed Description

-

Template for implementation of new ports.

-

README! This file is meant to be used as a template when adding support for a new platform. Please read these instructions, first.

-

Files involved:

    -
  1. Modify hardware_defines.h, adding a macro to detect your target platform
  2. -
  3. Modify MozziGuts.cpp to include MozziGuts_impl_YOURPLATFORM.hpp
  4. -
  5. Modify internal/config_checks_generic.h to include internal/config_checks_YOURPLATFORM.h
  6. -
  7. Copy this file to MozziGuts_impl_YOURPLATFORM.hpp and adjust as necessary, same for internal/config_checks_template.h (If your platform is very similar to an existing port, it may instead be better to modify the existing MozziGuts_impl_XYZ.hpp/config_checks_XYZ.h, instead of steps 2-3.). Some platforms may need small modifications to other files as well, e.g. mozzi_pgmspace.h
  8. -
-

How to implement MozziGuts_impl_YOURPLATFORM.hpp:

    -
  • Follow the NOTEs provided in this file
  • -
  • Read the doc at the top of AudioOutput.h for a better understanding of the basic audio output framework
  • -
  • Take a peek at existing implementations for other hardware (e.g. TEENSY3/4 is rather complete while also simple at the time of this writing)
  • -
  • Wait for more documentation to arrive
  • -
  • Ask when in doubt
  • -
  • Don't forget to provide a PR when done (it does not have to be perfect; e.g. many ports skip analog input, initially)
  • -
- -

Definition in file MozziGuts_impl_template.hpp.

-
- - - - -

-Namespaces

 MozziPrivate
 Internal.
 
- - - -

-Functions

-void MozziPrivate::stopMozzi ()
 
-
-
- - - diff --git a/extras/doc/html/_mozzi_guts__impl__template_8hpp.js b/extras/doc/html/_mozzi_guts__impl__template_8hpp.js deleted file mode 100644 index 02bc88254..000000000 --- a/extras/doc/html/_mozzi_guts__impl__template_8hpp.js +++ /dev/null @@ -1,4 +0,0 @@ -var _mozzi_guts__impl__template_8hpp = -[ - [ "stopMozzi", "_mozzi_guts__impl__template_8hpp.html#adc93e260b19c511c78b82a5ea449c8e6", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/_mozzi_guts__impl__template_8hpp_source.html b/extras/doc/html/_mozzi_guts__impl__template_8hpp_source.html deleted file mode 100644 index 61891fe49..000000000 --- a/extras/doc/html/_mozzi_guts__impl__template_8hpp_source.html +++ /dev/null @@ -1,292 +0,0 @@ - - - - - - - -Mozzi: MozziGuts_impl_template.hpp Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
MozziGuts_impl_template.hpp
-
-
-Go to the documentation of this file.
1 /*
-
2  * MozziGuts_impl_template.hpp
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2023-2024 Thomas Friedrichsmeier and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10 */
-
11 
-
12 /** @file MozziGuts_impl_template.hpp Template for implementation of new ports
-
13  *
-
14  * README!
-
15  * This file is meant to be used as a template when adding support for a new platform. Please read these instructions, first.
-
16  *
-
17  * Files involved:
-
18  * 1. Modify hardware_defines.h, adding a macro to detect your target platform
-
19  * 2. Modify MozziGuts.cpp to include MozziGuts_impl_YOURPLATFORM.hpp
-
20  * 3. Modify internal/config_checks_generic.h to include internal/config_checks_YOURPLATFORM.h
-
21  * 4. Copy this file to MozziGuts_impl_YOURPLATFORM.hpp and adjust as necessary, same for internal/config_checks_template.h
-
22  * (If your platform is very similar to an existing port, it may instead be better to modify the existing MozziGuts_impl_XYZ.hpp/config_checks_XYZ.h,
-
23  * instead of steps 2-3.).
-
24  * Some platforms may need small modifications to other files as well, e.g. mozzi_pgmspace.h
-
25  *
-
26  * How to implement MozziGuts_impl_YOURPLATFORM.hpp:
-
27  * - Follow the NOTEs provided in this file
-
28  * - Read the doc at the top of AudioOutput.h for a better understanding of the basic audio output framework
-
29  * - Take a peek at existing implementations for other hardware (e.g. TEENSY3/4 is rather complete while also simple at the time of this writing)
-
30  * - Wait for more documentation to arrive
-
31  * - Ask when in doubt
-
32  * - Don't forget to provide a PR when done (it does not have to be perfect; e.g. many ports skip analog input, initially)
-
33  */
-
34 
-
35 // The main point of this check is to document, what platform & variants this implementation file is for.
-
36 #if !(IS_MYPLATFORM())
-
37 # error "Wrong implementation included for this platform"
-
38 #endif
-
39 // Add platform specific includes and declarations, here
-
40 
-
41 //#include <my_hardware_header.h>
-
42 
-
43 // In order to allow simple yet efficient user configuration, the entire contents of this file are compiled in the same translation unit
-
44 // as (the main file of) the user sketch. To avoid name clashes, we encapsulate everyghing in a namespace.
-
45 // For the most part, this namescape can just extend from the start of the file to the end (as shown, here), and you will not have to
-
46 // worry about it. However, there may be a few situations, where you have to "leave" the MozziPrivate namespace. This includes:
-
47 // - When you include a further (hardware-dependent library). Consider gathering all includes at the top of this file, instead.
-
48 // - When you provide definitions for special names, importantly for ISR-functions. If these would be placed in the namespace, the linker would not
-
49 // recognize them as the definition of the intended ISR-vector. See MozziGuts_impl_AVR.hpp for examples.
-
50 
-
51 namespace MozziPrivate {
-
52 
-
53 ////// BEGIN analog input code ////////
-
54 
-
55 #if MOZZI_IS(MOZZI_ANALOG_READ, MOZZI_ANALOG_READ_STANDARD)
-
56 /** NOTE: This section deals with implementing (fast) asynchronous analog reads, which form the backbone of mozziAnalogRead(), but also of MOZZI_AUDIO_INPUT (if enabled).
-
57  *
-
58  * It is possible, and even recommended, to skip over this section, initially, when starting a new port. Once you have an implementation, be sure to include something like this
-
59  * in your platform configuration checks:
-
60  *
-
61  * // analog reads shall be enabled by default on platforms that support it
-
62  * #if not defined(MOZZI_ANALOG_READ)
-
63  * #define MOZZI_ANALOG_READ MOZZI_ANALOG_READ_STANDARD
-
64  * #endif
-
65  *
-
66  * Also, of course, remove the #error line, below
-
67  */
-
68 #error not yet implemented
-
69 
-
70 // Insert here code to read the result of the latest asynchronous conversion, when it is finished.
-
71 // You can also provide this as a function returning unsigned int, should it be more complex on your platform
-
72 #define getADCReading() GET_MY_PLATFORM_ADC_REGISTER
-
73 
-
74 /** NOTE: On "pins" vs. "channels" vs. "indices"
-
75  * "Pin" is the pin number as would usually be specified by the user in mozziAnalogRead().
-
76  * "Channel" is an internal ADC channel number corresponding to that pin. On many platforms this is simply the same as the pin number, on others it differs.
-
77  * In other words, this is an internal representation of "pin".
-
78  * "Index" is the index of the reading for a certain pin/channel in the array of analog_readings, ranging from 0 to NUM_ANALOG_PINS. This, again may be the
-
79  * same as "channel" (e.g. on AVR), however, on platforms where ADC-capable "channels" are not numbered sequentially starting from 0, the channel needs
-
80  * to be converted to a suitable index.
-
81  *
-
82  * In summary, the semantics are roughly
-
83  * mozziAnalogRead(pin) -> _ADCimplementation_(channel) -> analog_readings[index]
-
84  * Implement adcPinToChannelNum() and channelNumToIndex() to perform the appropriate mapping.
-
85  */
-
86 // NOTE: Theoretically, adcPinToChannelNum is public API for historical reasons, thus cannot be replaced by a define
-
87 #define channelNumToIndex(channel) channel
- -
89  return pin;
-
90 }
-
91 
-
92 /** NOTE: Code needed to trigger a conversion on a new channel */
- -
94 }
-
95 
-
96 /** NOTE: Code needed to trigger a subsequent conversion on the latest channel. If your platform has no special code for it, you should store the channel from
-
97  * adcStartConversion(), and simply call adcStartConversion(previous_channel), here. */
- -
99 }
-
100 
-
101 /** NOTE: Code needed to initialize the ADC for asynchronous reads. Typically involves setting up an interrupt handler for when conversion is done, and
-
102  * possibly calibration. */
-
103 void setupMozziADC(int8_t speed) {
- -
105  // insert further custom code
-
106 }
-
107 
-
108 /* NOTE: Most platforms call a specific function/ISR when conversion is complete. Provide this function, here.
-
109  * From inside its body, simply call advanceADCStep(). E.g.:
-
110 void stm32_adc_eoc_handler() {
-
111  advanceADCStep();
-
112 }
-
113 */
-
114 
-
115 /** NOTE: Code needed to set up faster than usual analog reads, e.g. specifying the number of CPU cycles that the ADC waits for the result to stabilize.
-
116  * This particular function is not super important, so may be ok to leave empty, at least, if the ADC is fast enough by default. */
- -
118 }
-
119 
-
120 #endif
-
121 
-
122 ////// END analog input code ////////
-
123 
-
124 ////// BEGIN audio output code //////
-
125 /* NOTE: Some platforms rely on control returning from loop() every so often. However, updateAudio() may take too long (it tries to completely fill the output buffer,
-
126  * which of course is being drained at the same time, theoretically it may not return at all). If you set this define, it will be called once per audio frame to keep things
-
127  * running smoothly. */
-
128 //#define LOOP_YIELD yield();
-
129 
-
130 /* NOTE: On some platforms, what can be called in the ISR used to output the sound is limited.
-
131  * This define can be used, for instance, to output the sound in audioHook() instead to overcome
-
132  * this limitation (see MozziGuts_impl_MBED.hpp). It can also be used if something needs to be called in audioHook() regarding
-
133  * analog reads for instance. */
-
134 //#define AUDIO_HOOK_HOOK
-
135 
-
136 /* NOTE: Code sections that are needed for a certain audio mode, only, should be guarded as follows (in this example, code will compile for the
-
137  * two modes MOZZI_OUTPUT_PWM, and MOZZI_OUTPUT_INTERNAL_DAC (should your port happen to support these two).
-
138  *
-
139  * Keep in mind that you probably want to support MOZZI_OUTPUT_EXTERNAL_TIMED, and MOZZI_OUTPUT_EXTERNAL_CUSTOM, too, which is usually very
-
140  * easy: For both, do *not* provide an audioOutput() function, as this will be provided by the user. For MOZZI_OUTPUT_EXTERNAL_TIMED make sure some
-
141  * timer is set up to call defaultAudioOutput() at MOZZI_AUDIO_RATE. For MOZZI_OUTPUT_EXTERNAL_CUSTOM, nothing else will be needed. */
-
142 
-
143 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PWM, MOZZI_OUTPUT_INTERNAL_DAC) // just an example!
-
144 /** NOTE: This is the function that actually write a sample to the output. In case of the two EXTERNAL modes, it is provided by the library user, instead. */
-
145 inline void audioOutput(const AudioOutput f) {
-
146  // e.g. analogWrite(MOZZI_AUDIO_CHANNEL_1_PIN, f.l()+MOZZI_AUDIO_BIAS);
-
147 # if (MOZZI_AUDIO_CHANNELS > 1)
-
148  // e.g. analogWrite(MOZZI_AUDIO_CHANNEL_2_PIN, f.r()+MOZZI_AUDIO_BIAS);
-
149 # endif
-
150 }
-
151 #endif
-
152 
-
153 static void startAudio() {
-
154  // Add here code to get audio output going. This usually involves:
-
155  // 1) setting up some DAC mechanism (e.g. setting up a PWM pin with appropriate resolution
-
156  // 2a) setting up a timer to call defaultAudioOutput() at MOZZI_AUDIO_RATE
-
157  // OR 2b) setting up a buffered output queue such as I2S (see ESP32 / ESP8266 for examples for this setup)
-
158 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PWM)
-
159  // [...]
-
160 #elif MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_INTERNAL_DAC)
-
161  // [...]
-
162 #elif MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_TIMED)
-
163  // remember that the user may configure MOZZI_OUTPUT_EXTERNAL_TIMED, in which case, you'll want to provide step 2a), and only that.
-
164 #endif
-
165 }
-
166 
-
167 void stopMozzi() {
-
168  // Add here code to pause whatever mechanism moves audio samples to the output
-
169 }
-
170 ////// END audio output code //////
-
171 
-
172 //// BEGIN Random seeding ////////
-
173 void MozziRandPrivate::autoSeed() {
-
174  // Add here code to initialize the values of MozziRandPrivate::x, MozziRandPrivate::y, and MozziRandPrivate::z to some random values
-
175  // This doesn't need to be crypographically safe. If nothing better is available, e.g. try reading an internal temperature sensor
-
176  // in order to get some noise. It also doesn't have to be fast.
-
177  // It *should* however ensure that rand() sequences will differ across reboots, after randSeed() has been called.
-
178  // x, y, and z are already initialized to non-zero, when this function is called.
-
179  // It's ok to leave this unimplemented, initially.
-
180 #warning Automatic random seeding is not implemented on this platform
-
181 }
-
182 //// END Random seeding ////////
-
183 
-
184 } // namespace MozziPrivate
-
-
- - - diff --git a/extras/doc/html/_mozzi_headers_only_8h.html b/extras/doc/html/_mozzi_headers_only_8h.html deleted file mode 100644 index 15855b20e..000000000 --- a/extras/doc/html/_mozzi_headers_only_8h.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - - -Mozzi: MozziHeadersOnly.h File Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
MozziHeadersOnly.h File Reference
-
-
- -

This file provides declarations of the Mozzi Core Functions Mozzi functions, but no implementation. -More...

-
#include "MozziGuts.h"
-
-

Go to the source code of this file.

-

Detailed Description

-

This file provides declarations of the Mozzi Core Functions Mozzi functions, but no implementation.

-

Use this only, if you have more than one translation unit in your project (i.e. you have more than one .cpp-file in your sketch itself). Otherwise include Mozzi.h, instead.

-

(Failure to head this advice will lead to "symbol XY undefined" errors.).

- -

Definition in file MozziHeadersOnly.h.

-
-
- - - diff --git a/extras/doc/html/_mozzi_headers_only_8h.js b/extras/doc/html/_mozzi_headers_only_8h.js deleted file mode 100644 index 5eb4cb7db..000000000 --- a/extras/doc/html/_mozzi_headers_only_8h.js +++ /dev/null @@ -1,4 +0,0 @@ -var _mozzi_headers_only_8h = -[ - [ "_MOZZI_HEADER_ONLY", "_mozzi_headers_only_8h.html#a89b59c01543e6c4ac8542308cc22d977", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/_mozzi_headers_only_8h_source.html b/extras/doc/html/_mozzi_headers_only_8h_source.html deleted file mode 100644 index e9725bce1..000000000 --- a/extras/doc/html/_mozzi_headers_only_8h_source.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - - -Mozzi: MozziHeadersOnly.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
MozziHeadersOnly.h
-
-
-Go to the documentation of this file.
1 /*
-
2  * MozziHeadersOnly.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2023-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 /** @ingroup core
-
13  * @file MozziHeadersOnly.h
-
14  *
-
15  * This file provides declarations of the \ref core Mozzi functions, but no implementation. Use this only, if you have more than one
-
16  * translation unit in your project (i.e. you have more than one .cpp-file in your sketch itself). Otherwise include \ref Mozzi.h, instead.
-
17  *
-
18  * (Failure to head this advice will lead to "symbol XY undefined" errors.).
-
19  */
-
20 
-
21 #ifndef MOZZI_HEADERS_ONLY_H_
-
22 #define MOZZI_HEADERS_ONLY_H_
-
23 
-
24 #define _MOZZI_HEADER_ONLY
-
25 #include "MozziGuts.h"
-
26 
-
27 #endif
-
-
- - - diff --git a/extras/doc/html/_oscil_8h_source.html b/extras/doc/html/_oscil_8h_source.html deleted file mode 100644 index 3a8f1b9b7..000000000 --- a/extras/doc/html/_oscil_8h_source.html +++ /dev/null @@ -1,522 +0,0 @@ - - - - - - - -Mozzi: Oscil.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Oscil.h
-
-
-
1 /*
-
2  * Oscil.h
-
3  *
-
4  * Oscil.h owes much to AF_precision_synthesis.pde, 2009, Adrian Freed.
-
5  *
-
6  * This file is part of Mozzi.
-
7  *
-
8  * Copyright 20009 Arian Freed
-
9  * Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
10  *
-
11  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
12  *
-
13  */
-
14 
-
15 
-
16 #ifndef OSCIL_H_
-
17 #define OSCIL_H_
-
18 
-
19 #include "Arduino.h"
-
20 #include "MozziHeadersOnly.h"
-
21 #include "mozzi_fixmath.h"
-
22 #include "FixMath.h"
-
23 #include "mozzi_pgmspace.h"
-
24 
-
25 #ifdef OSCIL_DITHER_PHASE
-
26 #include "mozzi_rand.h"
-
27 #endif
-
28 
-
29 // fractional bits for oscillator index precision
-
30 #define OSCIL_F_BITS 16
-
31 #define OSCIL_F_BITS_AS_MULTIPLIER 65536
-
32 
-
33 // phmod_proportion is an 15n16 fixed-point number
-
34 #define OSCIL_PHMOD_BITS 16
-
35 
-
36 /**
-
37 Oscil plays a wavetable, cycling through the table to generate an audio or
-
38 control signal. The frequency of the signal can be set or changed with
-
39 setFreq(), and the output of an Oscil can be produced with next() for a simple
-
40 cycling oscillator, or atIndex() for a particular sample in the table.
-
41 @tparam NUM_TABLE_CELLS This is defined in the table ".h" file the Oscil will be
-
42 using. It's important that it's a power of 2, and either a literal number (eg. "8192") or a
-
43 defined macro, rather than a const or int, for the Oscil to run fast enough.
-
44 @tparam UPDATE_RATE This will be MOZZI_AUDIO_RATE if the Oscil is updated in
-
45 updateAudio(), or MOZZI_CONTROL_RATE if it's updated each time updateControl() is
-
46 called. It could also be a fraction of MOZZI_CONTROL_RATE if you are doing some kind
-
47 of cyclic updating in updateControl(), for example, to spread out the processor load.
-
48 @todo Use conditional compilation to optimise setFreq() variations for different table
-
49 sizes.
-
50 @note If you #define OSCIL_DITHER_PHASE before you #include <Oscil.h>,
-
51 the phase increments will be dithered, which reduces spurious frequency spurs
-
52 in the audio output, at the cost of some extra processing and memory.
-
53 @section int8_t2mozzi
-
54 Converting soundfiles for Mozzi
-
55 There is a python script called char2mozzi.py in the Mozzi/python folder.
-
56 The usage is:
-
57 char2mozzi.py infilename outfilename tablename samplerate
-
58 */
-
59 //template <unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE, bool DITHER_PHASE=false>
-
60 template <uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE>
-
61 class Oscil
-
62 {
-
63 
-
64 
-
65 public:
-
66  /** Constructor.
-
67  @param TABLE_NAME the name of the array the Oscil will be using. This
-
68  can be found in the table ".h" file if you are using a table made for
-
69  Mozzi by the int8_t2mozzi.py python script in Mozzi's python
-
70  folder.*/
-
71  Oscil(const int8_t * TABLE_NAME):table(TABLE_NAME)
-
72  {}
-
73 
-
74 
-
75  /** Constructor.
-
76  Declare an Oscil with template TABLE_NUM_CELLS and UPDATE_RATE
-
77  parameters, without specifying a particular wave table for it to play.
-
78  The table can be set or changed on the fly with setTable(). Any tables
-
79  used by the Oscil must be the same size.
-
80  */
- -
82  {}
-
83 
-
84 
-
85  /** Updates the phase according to the current frequency and returns the sample at the new phase position.
-
86  @return the next sample.
-
87  */
-
88  inline
- -
90  {
-
91  incrementPhase();
-
92  return readTable();
-
93  }
-
94 
-
95 
-
96  /** Change the sound table which will be played by the Oscil.
-
97  @param TABLE_NAME is the name of the array in the table ".h" file you're using.
-
98  */
-
99  void setTable(const int8_t * TABLE_NAME)
-
100  {
-
101  table = TABLE_NAME;
-
102  }
-
103 
-
104 
-
105  /** Set the phase of the Oscil. This does the same thing as Sample::start(offset). Just different ways of thinking about oscillators and samples.
-
106  @param phase a position in the wavetable.
-
107  */
-
108  // This could be called in the control interrupt, so phase_fractional should really be volatile,
-
109  // but that could limit optimisation. Since phase_fractional gets changed often in updateAudio()
-
110  // (in loop()), it's probably worth keeping it nonvolatile until it causes problems
-
111  void setPhase(unsigned int phase)
-
112  {
-
113  phase_fractional = (uint32_t)phase << OSCIL_F_BITS;
-
114  }
-
115 
-
116  /** Set the phase of the Oscil. Might be useful with getPhaseFractional().
-
117  @param phase a position in the wavetable.
-
118  */
-
119  // This could be called in the control interrupt, so phase_fractional should really be volatile,
-
120  // but that could limit optimisation. Since phase_fractional gets changed often in updateAudio()
-
121  // (in loop()), it's probably worth keeping it nonvolatile until it causes problems
-
122  void setPhaseFractional(uint32_t phase)
-
123  {
-
124  phase_fractional = phase;
-
125  }
-
126 
-
127 
-
128  /** Get the phase of the Oscil in fractional format.
-
129  @return position in the wavetable, shifted left by OSCIL_F_BITS (which is 16 when this was written).
-
130  */
- -
132  {
-
133  return phase_fractional;
-
134  }
-
135 
-
136 
-
137 
-
138  /** Returns the next sample given a phase modulation value.
-
139  @param phmod_proportion a phase modulation value given as a proportion of the wave. The
-
140  phmod_proportion parameter is a Q15n16 fixed-point number where the fractional
-
141  n16 part represents almost -1 to almost 1, modulating the phase by one whole table length in
-
142  each direction.
-
143  @return a sample from the table.
-
144  */
-
145  // PM: cos((angle += incr) + change)
-
146  // FM: cos(angle += (incr + change))
-
147  // The ratio of deviation to modulation frequency is called the "index of modulation". ( I = d / Fm )
-
148  inline
- -
150  {
-
151  incrementPhase();
-
152  return FLASH_OR_RAM_READ<const int8_t>(table + (((phase_fractional+(phmod_proportion * NUM_TABLE_CELLS))>>OSCIL_F_BITS) & (NUM_TABLE_CELLS - 1)));
-
153  }
-
154 
-
155 
-
156  /** Returns the next sample given a phase modulation value.
-
157  @param phmod_proportion a phase modulation value given as a proportion of the wave. The
-
158  phmod_proportion parameter is a SFix<NI,NF> fixed-point number where the fractional part represents almost -1 to almost 1, modulating the phase by one whole table length in
-
159  each direction. This fixed point math number is interpreted as a SFix<15,16> internally.
-
160  @return a sample from the table.
-
161  */
-
162  template <int8_t NI, int8_t NF, uint8_t RANGE>
-
163  inline
- -
165  {
-
166  return phMod(SFix<15,16>(phmod_proportion).asRaw());
-
167  }
-
168 
-
169 
-
170 
-
171  /** Returns the next sample given a phase modulation value.
-
172  @param phmod_proportion a phase modulation value given as a proportion of the wave. The
-
173  phmod_proportion parameter is a SFix<15,16> fixed-point number where the fractional part represents almost -1 to almost 1, modulating the phase by one whole table length in
-
174  each direction.
-
175  @return a sample from the table.
-
176  */
-
177  inline
- -
179  {
-
180  return phMod(phmod_proportion.asRaw());
-
181  }
-
182 
-
183 
-
184  /** Set the oscillator frequency with an unsigned int. This is faster than using a
-
185  float, so it's useful when processor time is tight, but it can be tricky with
-
186  low and high frequencies, depending on the size of the wavetable being used. If
-
187  you're not getting the results you expect, try explicitly using a float, or try
-
188  setFreq_Q24n8() or or setFreq_Q16n16().
-
189  @param frequency to play the wave table.
-
190  */
-
191  inline
-
192  void setFreq (int frequency) {
-
193  // TB2014-8-20 change this following Austin Grossman's suggestion on user list
-
194  // https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!msg/mozzi-users/u4D5NMzVnQs/pCmiWInFvrkJ
-
195  //phase_increment_fractional = ((((uint32_t)NUM_TABLE_CELLS<<ADJUST_FOR_NUM_TABLE_CELLS)*frequency)/UPDATE_RATE) << (OSCIL_F_BITS - ADJUST_FOR_NUM_TABLE_CELLS);
-
196  // to this:
-
197  phase_increment_fractional = ((uint32_t)frequency) * ((OSCIL_F_BITS_AS_MULTIPLIER*NUM_TABLE_CELLS)/UPDATE_RATE);
-
198  }
-
199 
-
200 
-
201  /** Set the oscillator frequency with a float. Using a float is the most reliable
-
202  way to set frequencies, -Might- be slower than using an int but you need either
-
203  this, setFreq_Q24n8() or setFreq_Q16n16() for fractional frequencies.
-
204  @param frequency to play the wave table.
-
205  */
-
206  inline
-
207  void setFreq(float frequency)
-
208  { // 1 us - using float doesn't seem to incur measurable overhead with the oscilloscope
-
209  phase_increment_fractional = (uint32_t)((((float)NUM_TABLE_CELLS * frequency)/UPDATE_RATE) * OSCIL_F_BITS_AS_MULTIPLIER);
-
210  }
-
211 
-
212 
-
213  /** Set the frequency using UFix<NI,NF> fixed-point number format. This falls back to using UFix<16,16> internally and is provided as a fallout for other UFix types. If possible try to use directly UFix<16,16> or UFix<24,8> for well defined (and well tested) behaviors.
-
214  @note This should work OK with tables 2048 cells or smaller and
-
215  frequencies up to 4096 Hz. Can't be used with UPDATE_RATE less than 64 Hz.
-
216  @note This didn't run faster than float last time it was tested, after 2014 code changes. Need to see if 2014 changes improved or worsened performance.
-
217  @param frequency in UFix<NI,NF> fixed-point number format.
-
218  */
-
219  template <int8_t NI, int8_t NF, uint64_t RANGE>
-
220  inline
-
221  void setFreq(UFix<NI,NF,RANGE> frequency)
-
222  {
-
223  setFreq_Q16n16(UFix<16,16>(frequency).asRaw());
-
224  }
-
225 
-
226 
-
227 
-
228  /** Set the frequency using Q24n8 fixed-point number format.
-
229  This might be faster than the float version for setting low frequencies such as
-
230  1.5 Hz, or other values which may not work well with your table size. A Q24n8
-
231  representation of 1.5 is 384 (ie. 1.5 * 256). Can't be used with UPDATE_RATE
-
232  less than 64 Hz.
-
233  @param frequency in Q24n8 fixed-point number format.
-
234  */
-
235  inline
-
236  void setFreq_Q24n8(Q24n8 frequency)
-
237  {
-
238  //phase_increment_fractional = (frequency* (NUM_TABLE_CELLS>>3)/(UPDATE_RATE>>6)) << (F_BITS-(8-3+6));
-
239 // TB2016-10-2 line below might have been left in accidentally while making the 2014 change below, remove for now
-
240 // phase_increment_fractional = (((((uint32_t)NUM_TABLE_CELLS<<ADJUST_FOR_NUM_TABLE_CELLS)>>3)*frequency)/(UPDATE_RATE>>6))
-
241 // << (OSCIL_F_BITS - ADJUST_FOR_NUM_TABLE_CELLS - (8-3+6));
-
242 
-
243  // TB2014-8-20 change this following Austin Grossman's suggestion on user list
-
244  // https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!msg/mozzi-users/u4D5NMzVnQs/pCmiWInFvrkJ
-
245  if ((256UL*NUM_TABLE_CELLS) >= UPDATE_RATE) {
-
246  phase_increment_fractional = ((uint32_t)frequency) * ((256UL*NUM_TABLE_CELLS)/UPDATE_RATE);
-
247  } else {
-
248  phase_increment_fractional = ((uint32_t)frequency) / (UPDATE_RATE/(256UL*NUM_TABLE_CELLS));
-
249  }
-
250  }
-
251 
-
252  /** Set the frequency using UFix<24,8> fixed-point number format.
-
253  This might be faster than the float version for setting low frequencies such as
-
254  1.5 Hz, or other values which may not work well with your table size. A UFix<24,8>
-
255  representation of 1.5 is 384 (ie. 1.5 * 256). Can't be used with UPDATE_RATE
-
256  less than 64 Hz.
-
257  @param frequency in UFix<24,8> fixed-point number format.
-
258  */
-
259  template <uint64_t RANGE>
-
260  inline
-
261  void setFreq(UFix<24,8,RANGE> frequency)
-
262  {
-
263  setFreq_Q24n8(frequency.asRaw());
-
264  }
-
265 
-
266 
-
267  /** Set the frequency using Q16n16 fixed-point number format. This is useful in
-
268  combination with Q16n16_mtof(), a fast alternative to mtof(), using Q16n16
-
269  fixed-point format instead of floats.
-
270  @note This should work OK with tables 2048 cells or smaller and
-
271  frequencies up to 4096 Hz. Can't be used with UPDATE_RATE less than 64 Hz.
-
272  @note This didn't run faster than float last time it was tested, after 2014 code changes. Need to see if 2014 changes improved or worsened performance.
-
273  @param frequency in Q16n16 fixed-point number format.
-
274  */
-
275  inline
-
276  void setFreq_Q16n16(Q16n16 frequency)
-
277  {
-
278  //phase_increment_fractional = ((frequency * (NUM_TABLE_CELLS>>7))/(UPDATE_RATE>>6)) << (F_BITS-16+1);
-
279  // TB2014-8-20 change this following Austin Grossman's suggestion on user list
-
280  // https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!msg/mozzi-users/u4D5NMzVnQs/pCmiWInFvrkJ
-
281  //phase_increment_fractional = (((((uint32_t)NUM_TABLE_CELLS<<ADJUST_FOR_NUM_TABLE_CELLS)>>7)*frequency)/(UPDATE_RATE>>6))
-
282  // << (OSCIL_F_BITS - ADJUST_FOR_NUM_TABLE_CELLS - 16 + 1);
-
283  if (NUM_TABLE_CELLS >= UPDATE_RATE) {
-
284  phase_increment_fractional = ((uint32_t)frequency) * (NUM_TABLE_CELLS/UPDATE_RATE);
-
285  } else {
-
286  phase_increment_fractional = ((uint32_t)frequency) / (UPDATE_RATE/NUM_TABLE_CELLS);
-
287  }
-
288  }
-
289 
-
290 
-
291  /** Set the frequency using UFix<16,16> fixed-point number format. This is useful in
-
292  combination with Q16n16_mtof(), a fast alternative to mtof(), using UFix<16,16>
-
293  fixed-point format instead of fractional numbers.
-
294  @note This should work OK with tables 2048 cells or smaller and
-
295  frequencies up to 4096 Hz. Can't be used with UPDATE_RATE less than 64 Hz.
-
296  @note This didn't run faster than float last time it was tested, after 2014 code changes. Need to see if 2014 changes improved or worsened performance.
-
297  @param frequency in UFix<16,16> fixed-point number format.
-
298  */
-
299  template <uint64_t RANGE>
-
300  inline
-
301  void setFreq(UFix<16,16,RANGE> frequency)
-
302  {
-
303  setFreq_Q16n16(frequency.asRaw());
-
304  }
-
305 
-
306 
-
307 
-
308  /** Set the frequency using SFix<NI,NF> fixed-point number format. This falls back to using UFix<16,16> internally and is provided as a fallout for other UFix types. If possible try to use directly UFix<16,16> or UFix<24,8> for well defined (and well tested) behaviors.
-
309  @note This should work OK with tables 2048 cells or smaller and
-
310  frequencies up to 4096 Hz. Can't be used with UPDATE_RATE less than 64 Hz.
-
311  @note This didn't run faster than float last time it was tested, after 2014 code changes. Need to see if 2014 changes improved or worsened performance.
-
312  @param frequency in SFix<16,16> fixed-point number format.
-
313  */
-
314  template <int8_t NI, int8_t NF, uint64_t RANGE>
-
315  inline
-
316  void setFreq(SFix<NI,NF,RANGE> frequency)
-
317  {
-
318  setFreq_Q16n16(UFix<16,16>(frequency).asRaw());
-
319  }
-
320 
-
321 /*
-
322  inline
-
323  void setFreqMidi(int8_t note_num) {
-
324  setFreq_Q16n16(mtof(note_num));
-
325  }
-
326 */
-
327  /** Returns the sample at the given table index.
-
328  @param index between 0 and the table size.The
-
329  index rolls back around to 0 if it's larger than the table size.
-
330  @return the sample at the given table index.
-
331  */
-
332  inline
-
333  int8_t atIndex(unsigned int index)
-
334  {
-
335  return FLASH_OR_RAM_READ<const int8_t>(table + (index & (NUM_TABLE_CELLS - 1)));
-
336  }
-
337 
-
338 
-
339  /** phaseIncFromFreq() and setPhaseInc() are for saving processor time when sliding between frequencies.
-
340  Instead of recalculating the phase increment for each
-
341  frequency in between, you can just calculate the phase increment for each end
-
342  frequency with phaseIncFromFreq(), then use a Line to interpolate on the fly and
-
343  use setPhaseInc() to set the phase increment at each step. (Note: I should
-
344  really profile this with the oscilloscope to see if it's worth the extra
-
345  confusion!)
-
346  @param frequency for which you want to calculate a phase increment value.
-
347  @return the phase increment value which will produce a given frequency.
-
348  */
-
349  inline
- -
351  {
-
352  // TB2014-8-20 change this following Austin Grossman's suggestion on user list
-
353  // https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!msg/mozzi-users/u4D5NMzVnQs/pCmiWInFvrkJ
-
354  //return (((uint32_t)frequency * NUM_TABLE_CELLS)/UPDATE_RATE) << OSCIL_F_BITS;
-
355  return ((uint32_t)frequency) * ((OSCIL_F_BITS_AS_MULTIPLIER*NUM_TABLE_CELLS)/UPDATE_RATE);
-
356  }
-
357 
-
358 
-
359  /** Set a specific phase increment. See phaseIncFromFreq().
-
360  @param phaseinc_fractional a phase increment value as calculated by phaseIncFromFreq().
-
361  */
-
362  inline
-
363  void setPhaseInc(uint32_t phaseinc_fractional)
-
364  {
-
365  phase_increment_fractional = phaseinc_fractional;
-
366  }
-
367 
-
368 
-
369 
-
370 private:
-
371 
-
372 
-
373  /** Used for shift arithmetic in setFreq() and its variations.
-
374  */
-
375 static const uint8_t ADJUST_FOR_NUM_TABLE_CELLS = (NUM_TABLE_CELLS<2048) ? 8 : 0;
-
376 
-
377 
-
378  /** Increments the phase of the oscillator without returning a sample.
-
379  */
-
380  inline
-
381  void incrementPhase()
-
382  {
-
383  //phase_fractional += (phase_increment_fractional | 1); // odd phase incr, attempt to reduce frequency spurs in output
-
384  phase_fractional += phase_increment_fractional;
-
385  }
-
386 
-
387 
-
388  /** Returns the current sample.
-
389  */
-
390  inline
-
391  int8_t readTable()
-
392  {
-
393 #ifdef OSCIL_DITHER_PHASE
-
394  return FLASH_OR_RAM_READ<const int8_t>(table + (((phase_fractional + ((int)(xorshift96()>>16))) >> OSCIL_F_BITS) & (NUM_TABLE_CELLS - 1)));
-
395 #else
-
396  return FLASH_OR_RAM_READ<const int8_t>(table + ((phase_fractional >> OSCIL_F_BITS) & (NUM_TABLE_CELLS - 1)));
-
397  //return FLASH_OR_RAM_READ<int8_t>(table + (((phase_fractional >> OSCIL_F_BITS) | 1 ) & (NUM_TABLE_CELLS - 1))); odd phase, attempt to reduce frequency spurs in output
-
398 #endif
-
399  }
-
400 
-
401 
-
402  uint32_t phase_fractional;
-
403  uint32_t phase_increment_fractional;
-
404  const int8_t * table;
-
405 
-
406 };
-
407 
-
408 
-
409 /**
-
410 @example 01.Basics/Vibrato/Vibrato.ino
-
411 This is an example using Oscil::phMod to produce vibrato using phase modulation.
-
412 */
-
413 
-
414 #endif /* OSCIL_H_ */
-
-
- - - diff --git a/extras/doc/html/_over_sample_8h_source.html b/extras/doc/html/_over_sample_8h_source.html deleted file mode 100644 index f2af8650a..000000000 --- a/extras/doc/html/_over_sample_8h_source.html +++ /dev/null @@ -1,174 +0,0 @@ - - - - - - - -Mozzi: OverSample.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
OverSample.h
-
-
-
1 /*
-
2  * OverSample.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2013-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 #ifndef OVERSAMPLE_H
-
13 #define OVERSAMPLE_H
-
14 
-
15 #include "RollingAverage.h"
-
16 
-
17 
-
18 /** @ingroup sensortools
-
19  Enables the resolution of analog inputs to be increased by oversampling and decimation.
-
20  Noise should be added to the input before it's digitised, then a succession of input readings are summed and
-
21  finally divided to give a number with greater resolution than the ADC.
-
22  Often, noise in the Arduino system will be enough, but there are other practical methods described in
-
23  [Enhancing ADC Resolution by Oversampling](http://www.atmel.com/images/doc8003.pdf‎),
-
24  as well as an explanation of the overall approach.
-
25  @tparam RESOLUTION_INCREASE_BITS how many extra bits of resolution to produce.
-
26  The window length and the memory it needs increases quickly as the oversampling resolution increases.
-
27  1 bit = 4 unsigned ints (analog input between 0-1023) = 8 uint8_ts,
-
28  2 bits = 16 unsigned ints = 32 uint8_ts,
-
29  3 bits = 64 unsigned ints = 128 uint8_ts,
-
30  More than 3 bits increase in resolution would require either using longs to store the readings,
-
31  which would need 1024 uint8_ts for a 4 bit increase and 4096 uint8_ts for 5 bits (do any avr's have that much room?),
-
32  or the average reading would have to be no more than 128 (for 4 bits increase), because 256 readings would be needed,
-
33  and the sum of all 256 readings would have to fit into an int. (32767 / 256 = 128).
-
34  Changing OverSample to use unsigned ints could enable an average reading of 256, but isn't tested properly yet.
-
35  @note The higher the resolution, the more lag there will be.
-
36  It's almost a RollingAverage filter, with the difference that
-
37  OverSample doesn't divide by as much as you would for an average.
-
38 */
-
39 
-
40 
-
41 template <class T, const uint8_t RESOLUTION_INCREASE_BITS>
-
42 class OverSample: public RollingAverage<T, (1<<(RESOLUTION_INCREASE_BITS*2))>
-
43 {
-
44 
-
45 public:
-
46  using RollingAverage<T, (1<<(RESOLUTION_INCREASE_BITS*2))>::add;
-
47 
-
48  /** Oversample and decimate the input to increase resolution by RESOLUTION_INCREASE_BITS;
-
49  @param input an analog input to oversample.
-
50  @return the higher resolution result.
-
51  @note timing 5.7us
-
52  */
-
53  T next(T input)
-
54  {
-
55  return add(input)>>RESOLUTION_INCREASE_BITS;
-
56  }
-
57 
-
58 };
-
59 
-
60 
-
61 /**
-
62 @example 05.Control_Filters/Thermistor_OverSample/Thermistor_OverSample.ino
-
63 This is an example demonstrating the OverSample class.
-
64 */
-
65 
-
66 #endif // #ifndef OVERSAMPLE_H
-
-
- - - diff --git a/extras/doc/html/_p_d_resonant_8h_source.html b/extras/doc/html/_p_d_resonant_8h_source.html deleted file mode 100644 index dd6944abb..000000000 --- a/extras/doc/html/_p_d_resonant_8h_source.html +++ /dev/null @@ -1,244 +0,0 @@ - - - - - - - -Mozzi: PDResonant.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
PDResonant.h
-
-
-
1 /*
-
2  * PDResonant.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2013-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 #include <mozzi_midi.h>
-
13 #include <ADSR.h>
-
14 #include <Oscil.h>
-
15 #include <Phasor.h>
-
16 // wavetable for oscillator:
-
17 #include <tables/sin2048_int8.h>
-
18 
-
19 /**
-
20  PDResonant is a simple midi instrument using Phase distortion used to simulate resonant filter, based on
-
21  https://en.wikipedia.org/wiki/Phase_distortion_synthesis.
-
22 
-
23  The class shows how the Mozzi Phasor class
-
24  can be used to generate an index into a wavetable, and an ADSR
-
25  is used to modulate the effect by modifying the Phasor frequency and sync.
-
26  More complex phase distortion effects could be developed by using
-
27  precalculated tables, or calcuating tables on the fly using a double buffer,
-
28  or a line-breakpoint model, a sort of hybridPhasor-Line object.
-
29 */
-
30 
- -
32 {
-
33 
-
34 public:
-
35 
-
36  /** Constructor.
-
37  */
- -
39  PDM_SCALE(0.05)
-
40  {
-
41  aOsc.setTable(SIN2048_DATA);
-
42  aAmpEnv.setADLevels(255, 255);
-
43  aAmpEnv.setTimes(50, 300, 60000, 1000);
-
44  kResonantFreqEnv.setADLevels(255,100);
-
45  }
-
46 
-
47  /** Play a note in response to midi input. Params copied from MIDI library HandleNoteOn().
-
48  @param channel is the midi channel
-
49  @param pitch is the midi note
-
50  @param velocity you know what it is
-
51  */
-
52  void noteOn(byte channel, byte pitch, byte velocity)
-
53  {
-
54  kResonantFreqEnv.noteOn();
-
55  aAmpEnv.noteOn();
-
56  freq = mtof(pitch);
-
57  aBaseCounter.setFreq(freq); // gets modulated in updateControl()
-
58  aResonanceFreqCounter.setFreq(freq);
-
59  }
-
60 
-
61 
-
62  /** Stop a note in response to midi input. Params copied from MIDI library HandleNoteOff()
-
63  @param channel is the midi channel
-
64  @param pitch is the midi note
-
65  @param velocity you know what it is
-
66  */
-
67  void noteOff(byte channel, byte pitch, byte velocity)
-
68  {
-
69  aAmpEnv.noteOff();
-
70  kResonantFreqEnv.noteOff();
-
71  }
-
72 
-
73 
-
74  /** Set the resonant filter sweep parameters.
-
75  @param attack ADSR attack
-
76  @param decay ADSR decay
-
77  */
-
78  void setPDEnv(int attack, int decay)
-
79  {
-
80  // sustain and release timesare hardcoded here but don't need to be
-
81  kResonantFreqEnv.setTimes(attack, decay, 60000, 1000);
-
82  kResonantFreqEnv.update();
-
83 
-
84  float resonance_freq = freq + ((float)freq * ((float)kResonantFreqEnv.next()*PDM_SCALE));
-
85  aResonanceFreqCounter.setFreq(resonance_freq);
-
86  }
-
87 
-
88 
-
89  /** Update the filter sweep. Use this in updateControl().
-
90  */
-
91  void update()
-
92  {
-
93  aAmpEnv.update();
-
94  kResonantFreqEnv.update();
-
95  // change freq of resonant freq counter, following the envelope
-
96  float resonance_freq = freq + ((float)freq * ((float)kResonantFreqEnv.next()*PDM_SCALE));
-
97  aResonanceFreqCounter.setFreq(resonance_freq);
-
98  }
-
99 
-
100  /** Produce the audio output. This goes in updateAudio().
-
101  */
-
102  int next()
-
103  {
-
104  static byte previous_base_counter;
-
105  byte base_counter = aBaseCounter.next()>>24;
-
106 
-
107  // reset resonance counter (wiki b.)
-
108  if (base_counter<previous_base_counter) aResonanceFreqCounter.set(0);
-
109  previous_base_counter= base_counter;
-
110 
-
111  // index (phase) needs to end up as 11bit to match 2048 wavetable size
-
112  unsigned int index = aResonanceFreqCounter.next()>>21; // 11 bits fits 2048 cell sin table
-
113 
-
114  // amp ramp smooths the jump when aResonanceFreqCounter is reset (wiki d.)
-
115  byte amp_ramp = 255-base_counter;
-
116 
-
117  // wiki e., with amp envelope added
-
118  return ((long)aAmpEnv.next() * amp_ramp * aOsc.atIndex(index))>>16;
-
119 
-
120  // return ((index>>3)*amp_ramp)>>8; // this also sounds good - squelchy sawtooth
-
121  }
-
122 
-
123 
-
124 private:
-
125  const float PDM_SCALE;
-
126  byte amp;
-
127  int freq;
-
128 
-
129  Phasor <MOZZI_AUDIO_RATE> aBaseCounter;
-
130  Phasor <MOZZI_AUDIO_RATE> aResonanceFreqCounter;
-
131 
-
132  Oscil <SIN2048_NUM_CELLS, MOZZI_AUDIO_RATE> aOsc;
-
133  ADSR <MOZZI_CONTROL_RATE, MOZZI_AUDIO_RATE> aAmpEnv;
-
134  ADSR <MOZZI_CONTROL_RATE, MOZZI_CONTROL_RATE> kResonantFreqEnv;
-
135 
-
136 };
-
-
- - - diff --git a/extras/doc/html/_phasor_8h_source.html b/extras/doc/html/_phasor_8h_source.html deleted file mode 100644 index 3ddad7187..000000000 --- a/extras/doc/html/_phasor_8h_source.html +++ /dev/null @@ -1,224 +0,0 @@ - - - - - - - -Mozzi: Phasor.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Phasor.h
-
-
-
1 /*
-
2  * Phasor.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 #ifndef PHASOR_H_
-
13 #define PHASOR_H_
-
14 
-
15 #include "Arduino.h"
-
16 #include "mozzi_fixmath.h"
-
17 
-
18 #define PHASOR_MAX_VALUE_UL 4294967295UL
-
19 
-
20 /** Phasor repeatedly generates a high resolution ramp at a variable frequency.
-
21 The output of Phasor.next() is an unsigned number between 0 and 4294967295, the
-
22 maximum that can be expressed by an unsigned 32 bit integer.
-
23 @tparam UPDATE_RATE the rate at which the Phasor will be updated,
-
24 usually MOZZI_CONTROL_RATE or MOZZI_AUDIO_RATE.
-
25 */
-
26 
-
27 template <unsigned int UPDATE_RATE>
-
28 class Phasor
-
29 {
-
30 private:
-
31  uint32_t current_value;
-
32  volatile uint32_t step_size;
-
33 
-
34 public:
-
35  /** Constructor. "Phasor <MOZZI_AUDIO_RATE> myphasor;"
-
36  makes a Phasor which updates at MOZZI_AUDIO_RATE.
-
37  */
-
38  Phasor (){
-
39  ;
-
40  }
-
41 
-
42  /** Increments one step along the phase.
-
43  @return the next value.
-
44  */
-
45  inline
- -
47  {
-
48  current_value += step_size; // will wrap
-
49  return current_value;
-
50  }
-
51 
-
52  /** Set the current value of the phasor. The Phasor will continue incrementing from this
-
53  value using any previously calculated step size.
-
54  */
-
55  inline
-
56  void set(uint32_t value)
-
57  {
-
58  current_value=value;
-
59  }
-
60 
-
61 
-
62  /** Set the Phasor frequency with an unsigned int.
-
63  @param frequency is how many times per second to count from
-
64  0 to the maximum uint32_t value 4294967295.
-
65  @note Timing 8us
-
66  */
-
67  inline
-
68  void setFreq( int frequency)
-
69  {
-
70  step_size = ((((uint32_t)((PHASOR_MAX_VALUE_UL>>8)+1))/(UPDATE_RATE))*frequency)<<8;
-
71  }
-
72 
-
73 
-
74  /** Set the Phasor frequency with a float.
-
75  @param frequency is how many times per second to count from
-
76  0 to the maximum uint32_t value 4294967295.
-
77  */
-
78  inline
-
79  void setFreq(float frequency)
-
80  { // 1 us - using float doesn't seem to incur measurable overhead with the oscilloscope
-
81  step_size = (uint32_t)(((float)PHASOR_MAX_VALUE_UL/UPDATE_RATE)*frequency);
-
82  }
-
83 
-
84  /** phaseIncFromFreq() and setPhaseInc() are for saving processor time when sliding between frequencies.
-
85  Instead of recalculating the phase increment for each frequency in between, you
-
86  can just calculate the phase increment for each end frequency with
-
87  phaseIncFromFreq(), then use a Line to interpolate on the fly and use
-
88  setPhaseInc() to set the phase increment at each step. (Note: I should really
-
89  profile this with the oscilloscope to see if it's worth the extra confusion!)
-
90  @param frequency for which you want to calculate a phase increment value.
-
91  @return the phase increment value which will produce a given frequency.
-
92  */
-
93  inline
- -
95  {
-
96  return ((((uint32_t)((PHASOR_MAX_VALUE_UL>>8)+1))/(UPDATE_RATE))*frequency)<<8;
-
97  }
-
98 
-
99 
-
100  /** Set a specific phase increment. See phaseIncFromFreq().
-
101  @param stepsize a phase increment value as calculated by phaseIncFromFreq().
-
102  */
-
103  inline
-
104  void setPhaseInc(uint32_t stepsize)
-
105  {
-
106  step_size = stepsize;
-
107  }
-
108 
-
109 };
-
110 
-
111 /**
-
112 @example 06.Synthesis/PWM_Phasing/PWM_Phasing.ino
-
113 This example demonstrates the Phasor class.
-
114 */
-
115 
-
116 #endif /* PHASOR_H_ */
-
-
- - - diff --git a/extras/doc/html/_portamento_8h_source.html b/extras/doc/html/_portamento_8h_source.html deleted file mode 100644 index 3e9752083..000000000 --- a/extras/doc/html/_portamento_8h_source.html +++ /dev/null @@ -1,214 +0,0 @@ - - - - - - - -Mozzi: Portamento.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Portamento.h
-
-
-
1 /*
-
2  * Portamento.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 #ifndef PORTAMENTO_H_
-
13 #define PORTAMENTO_H_
-
14 
-
15 #include "mozzi_midi.h"
-
16 #include "mozzi_fixmath.h"
-
17 #include "Line.h"
-
18 
-
19 /** A simple portamento (pitch slide from one note to the next) effect, useful for note-based applications.
-
20 */
-
21 template <unsigned int CONTROL_UPDATE_RATE>
-
22 class
-
23  Portamento {
-
24 
-
25 public:
-
26 
-
27  /** Constructor.
-
28  */
- -
30  MICROS_PER_CONTROL_STEP(1000000/CONTROL_UPDATE_RATE)
-
31  {
-
32  }
-
33 
-
34  /** Set how long it will take to slide from note to note, in milliseconds.
-
35  @param milliseconds
-
36  */
-
37  inline
-
38  void setTime(unsigned int milliseconds){
-
39  //control_steps_per_portamento = ((long)milliseconds*1000)/MICROS_PER_CONTROL_STEP; // more accurate but slower
-
40  control_steps_per_portamento = convertMsecToControlSteps(milliseconds);
-
41  }
-
42 
-
43  /** Call this at note-on, it initialises the portamento.
-
44  @param note a midi note number, a whole number.
-
45  */
-
46  inline
-
47  void start(uint8_t note) {
-
48  target_freq = Q16n16_mtof(Q8n0_to_Q16n16(note));
-
49  aPortamentoLine.set(target_freq, control_steps_per_portamento);
-
50  countdown = control_steps_per_portamento;
-
51  portamento_on=true;
-
52  }
-
53 
-
54  /** Call this at note-on, it initialises the portamento.
-
55  @param note a midi note number in Q16n16 fractional format. This is useful for non-whole note or detuned values.
-
56  */
-
57  inline
-
58  void start(Q16n16 note) {
-
59  target_freq = Q16n16_mtof(note);
-
60  aPortamentoLine.set(target_freq, control_steps_per_portamento);
-
61  countdown = control_steps_per_portamento;
-
62  portamento_on=true;
-
63  }
-
64 
-
65 
-
66  /** Use this in updateControl() to provide a frequency to the oscillator it's controlling.
-
67  For example:
-
68  myOscil.setFreq_Q16n16(myPortamento.next());
-
69  @return a Q16n16 fractional frequency value, progressing smoothly between successive notes.
-
70  */
-
71  inline
- -
73  if (portamento_on==true){
-
74  if(--countdown < 0) {
-
75  // stay level when portamento has finished
-
76  aPortamentoLine.set(target_freq, target_freq, control_steps_per_portamento);
-
77  portamento_on=false;
-
78  }
-
79  }
-
80  return aPortamentoLine.next();
-
81  }
-
82 
-
83  private:
-
84 
-
85  int countdown;
-
86  int control_steps_per_portamento;
-
87  Q16n16 target_freq;
-
88  bool portamento_on;
-
89  const unsigned int MICROS_PER_CONTROL_STEP;
-
90  Line <Q16n16> aPortamentoLine;
-
91 
-
92 
-
93  // copied from ADSR.h
-
94  inline
-
95  static const unsigned int convertMsecToControlSteps(unsigned int msec){
-
96  return (uint16_t) (((uint32_t)msec*CONTROL_UPDATE_RATE)>>10); // approximate /1000 with shift
-
97  }
-
98 
-
99 };
-
100 
-
101 /**
-
102 @example 05.Control_Filters/Teensy_USB_MIDI_portamento/Teensy_USB_MIDI_portamento.ino
-
103 This example demonstrates the Portamento class.
-
104 */
-
105 
-
106 #endif /* PORTAMENTO_H_ */
-
-
- - - diff --git a/extras/doc/html/_r_cpoll_8h_source.html b/extras/doc/html/_r_cpoll_8h_source.html deleted file mode 100644 index 2ef27a184..000000000 --- a/extras/doc/html/_r_cpoll_8h_source.html +++ /dev/null @@ -1,174 +0,0 @@ - - - - - - - -Mozzi: RCpoll.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
RCpoll.h
-
-
-
1 /*
-
2  * RCpoll.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2014-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 #ifndef RCPOLL_H
-
13 #define RCPOLL_H
-
14 
-
15 
-
16 /**
-
17 A class for reading voltage on a digital pin, derived from http://arduino.cc/en/Tutorial/RCtime.
-
18 This is designed to be used in updateControl(). Each time it is called, it checks if a capacitor has charged,
-
19 and returns an output reflecting how long it took for the most recent charge.
-
20 */
-
21 
-
22 template <unsigned char SENSOR_PIN>
-
23 class RCpoll
-
24 {
-
25 
-
26 public:
-
27  /** Constructor.
-
28  */
-
29  RCpoll():result(0),rc_cued(true), output(0)
-
30  {
-
31  ;
-
32  }
-
33 
-
34  /** Checks whether the capacitor has charged, and returns how long it took for the most recent charge.
-
35  This would preferably be called in updateControl(), but if the resolution isn't fine enough or the
-
36  pin charges too fast for updateControl() to catch, try it in updateAudio().
-
37  @return the sensor value, reflected in how many checking cycles it took to charge the capacitor.
-
38  */
-
39  inline
-
40  unsigned int next(){
-
41  if (rc_cued){
-
42  pinMode(SENSOR_PIN, INPUT); // turn pin into an input and time till pin goes low
-
43  digitalWrite(SENSOR_PIN, LOW); // turn pullups off - or it won't work
-
44  rc_cued = false;
-
45  }
-
46  if(digitalRead(SENSOR_PIN)){ // wait for pin to go low
-
47  result++;
-
48  }
-
49  else{
-
50  output = result;
-
51  result = 0;
-
52  pinMode(SENSOR_PIN, OUTPUT); // make pin OUTPUT
-
53  digitalWrite(SENSOR_PIN, HIGH); // make pin HIGH to discharge capacitor - see the schematic
-
54  rc_cued = true;
-
55  }
-
56  return output;
-
57  }
-
58 
-
59 private:
-
60  unsigned int result;
-
61  boolean rc_cued;
-
62  unsigned int output;
-
63 
-
64 };
-
65 
-
66 #endif // #ifndef RCPOLL_H
-
-
- - - diff --git a/extras/doc/html/_resonant_filter_8h_source.html b/extras/doc/html/_resonant_filter_8h_source.html deleted file mode 100644 index e0014c524..000000000 --- a/extras/doc/html/_resonant_filter_8h_source.html +++ /dev/null @@ -1,348 +0,0 @@ - - - - - - - -Mozzi: ResonantFilter.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
ResonantFilter.h
-
-
-
1 /*
-
2  * ResonantFilter.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 #ifndef RESONANTFILTER_H_
-
13 #define RESONANTFILTER_H_
-
14 
-
15 #include "IntegerType.h"
-
16 #include "AudioOutput.h"
-
17 #include "meta.h"
-
18 
-
19 
-
20 
-
21 /*
-
22 simple resonant filter posted to musicdsp.org by Paul Kellett
-
23 http://www.musicdsp.org/archive.php?classid=3#259, applying the
-
24 modification from Peter Schoffhauzer to make it able to output
-
25 all filter types (LowPass, HighPass, Notch and BandPass).
-
26 
-
27 The generic filter is ResonantFilter<unsigned_t type, FILTER_TYPE>.
-
28  - type specifies the type expected for the cutoff and resonance. Only uint8_t and uint16_t have been tested. These are denoted 8bits and 16bits versions of the filter in the following.
-
29  - FILTER_TYPE specifies the filter type. LOWPASS, BANDPASS, HIGHPASS and NOTCH are available types.
-
30 
-
31 Two versions are available: the 8bits and 16bits versions (see above).
-
32 The 8bits version is an optimized version that uses 8bits values to set
-
33 the resonance and the cutoff_freq. It can works on 8bits samples only
-
34 on 8bits platforms.
-
35 The 16bits version consumes more CPU ressources but uses 16bits values
-
36 for resonance and cutoff_freq and can work on samples up to 16bits on
-
37 8bits platforms and up to 32 on 32bits platforms.
-
38 
-
39 The filter can be instanciated using the template version ResonantFilter<unsigned_t type, FILTER_TYPE>. For ease of use, the following types are also accepted:
-
40 
-
41 8bits versions: LowPassFilter, HighPassFilter, BandPassFilter, NotchFilter
-
42 16bits versions: LowPassFilter16, HighPassFilter16, BandPassFilter16, NotchFilter16
-
43 
-
44 
-
45 
-
46 //// ALGORITHM ////
-
47 // set feedback amount given f and q between 0 and 1
-
48 fb = q + q/(1.0 - f);
-
49 In order to avoid a slow division we use the use a Taylor expansion to approximate 1/(1.0 - f):
-
50 Close to f=0: 1/(1.0-f) approx 1.0+f.
-
51 Hence: fb = q + q * (1.0 + f)
-
52 This approximation is less and less valid with an increasing cutoff, leading to a reduction of the resonance of the filter at high cutoff frequencies.
-
53 
-
54 // for each sample...
-
55 buf0 = buf0 + f * (in - buf0 + fb * (buf0 - buf1));
-
56 buf1 = buf1 + f * (buf0 - buf1);
-
57 out = buf1; // LowPass
-
58 out = in - buf0; // HighPass
-
59 out = buf0 - buf1; // BandPass
-
60 out = in - buf0 + buf1; // Notch
-
61 
-
62 fixed point version of the filter
-
63 "dave's blog of art and programming" http://www.pawfal.org/dave/blog/2011/09/
-
64 */
-
65 
-
66 
-
67 
-
68 
-
69 
-
70 enum filter_types { LOWPASS, BANDPASS, HIGHPASS, NOTCH };
-
71 
-
72 /** A generic resonant filter for audio signals.
-
73  */
-
74 template<int8_t FILTER_TYPE, typename su=uint8_t>
- -
76 {
-
77 
-
78 public:
-
79  /** Constructor.
-
80  */
- -
82 
-
83 
-
84  /** deprecated. Use setCutoffFreqAndResonance(su cutoff, su
-
85  resonance).
-
86 
-
87  Set the cut off frequency,
-
88  @param cutoff use the range 0-255 to represent 0-8191 Hz (MOZZI_AUDIO_RATE/2) for ResonantFilter, cutoff use the range 0-65535 to represent 0-MOZZI_AUDIO_RATE/2.
-
89  Be careful of distortion at the lower end, especially with high resonance.
-
90  */
-
91  void setCutoffFreq(su cutoff)
-
92  {
-
93  f = cutoff;
-
94  fb = q + ucfxmul(q, (typename IntegerType<sizeof(su)+sizeof(su)>::unsigned_type) SHIFTED_1 + cutoff);
-
95  }
-
96 
-
97  /** deprecated. Use setCutoffFreqAndResonance(su cutoff, su
-
98  resonance).
-
99 
-
100  Set the resonance. If you hear unwanted distortion, back off the resonance.
-
101  After setting resonance, you need to call setCuttoffFreq() to hear the change!
-
102  @param resonance in the range 0-255 for ResonantFilter, 0-65535 for ResonantFilter<FILTER_TYPE, uint16_t>, with 255/65535 being most resonant
-
103  @note Remember to call setCuttoffFreq() after resonance is changed!
-
104  */
-
105  void setResonance(su resonance) { q = resonance; }
-
106 
-
107  /**
-
108  Set the cut off frequency and resonance. Replaces setCutoffFreq() and
-
109  setResonance(). (Because the internal calculations need to be done whenever either parameter changes.)
-
110  @param cutoff range 0-255 represents 0-8191 Hz (MOZZI_AUDIO_RATE/2) for ResonantFilter, range 0-65535 for ResonantFilter16
-
111  Be careful of distortion at the lower end, especially with high resonance.
-
112  @param resonance range 0-255 for ResonantFilter, 0-65535 for ResonantFilter<FILTER_TYPE, uint16_t>, 255/65535 is most resonant.
-
113  */
-
114  void setCutoffFreqAndResonance(su cutoff, su resonance)
-
115  {
-
116  f = cutoff;
-
117  q = resonance; // hopefully optimised away when compiled, just here for
-
118  // backwards compatibility
-
119  fb = q + ucfxmul(q,(typename IntegerType<sizeof(su)+sizeof(su)>::unsigned_type) SHIFTED_1 + cutoff);
-
120  }
-
121 
-
122  /** Calculate the next sample, given an input signal.
-
123  @param in the signal input. Should not be more than 8bits on 8bits platforms (Arduino) if using the 8bits version and not 16bits version.
-
124  @return the signal output.
-
125  @note Timing: about 11us.
-
126  */
-
127  // 10.5 to 12.5 us, mostly 10.5 us (was 14us)
- -
129  {
-
130  advanceBuffers(in);
-
131  return current(in, Int2Type<FILTER_TYPE>());
-
132  }
-
133 
-
134 protected:
-
135  su q;
-
136  su f;
-
137  typename IntegerType<sizeof(su)+sizeof(su)>::unsigned_type fb;
-
138  AudioOutputStorage_t buf0, buf1;
-
139  const uint8_t FX_SHIFT = sizeof(su) << 3;
-
140  const uint8_t FX_SHIFT_M_1 = FX_SHIFT-1;
-
141  const su SHIFTED_1 = (1<<FX_SHIFT)-1;
-
142 
-
143  // // multiply two fixed point numbers (returns fixed point)
-
144  // inline
-
145  // long fxmul(long a, long b)
-
146  // {
-
147  // return (a*b)>>FX_SHIFT;
-
148  // }
-
149 
-
150  inline void advanceBuffers(AudioOutputStorage_t in)
-
151  {
-
152  buf0 += fxmul(((in - buf0) + fxmul(fb, buf0 - buf1)), f);
-
153  buf1 += ifxmul(buf0 - buf1, f); // could overflow if input changes fast
-
154  }
-
155 
-
156  inline AudioOutputStorage_t current(AudioOutputStorage_t in, Int2Type<LOWPASS>) {return buf1;}
-
157 
-
158  inline AudioOutputStorage_t current(AudioOutputStorage_t in, Int2Type<HIGHPASS>) {return in - buf0;}
-
159 
-
160  inline AudioOutputStorage_t current(AudioOutputStorage_t in, Int2Type<BANDPASS>) {return buf0-buf1;}
-
161 
-
162  inline AudioOutputStorage_t current(AudioOutputStorage_t in, Int2Type<NOTCH>) {return in - buf0 + buf1;}
-
163 
-
164  // multiply two fixed point numbers (returns fixed point)
-
165  inline typename IntegerType<sizeof(su)+sizeof(su)>::unsigned_type ucfxmul(su a, typename IntegerType<sizeof(su)+sizeof(su)>::unsigned_type b)
-
166  {
-
167  return (((typename IntegerType<sizeof(su)+sizeof(su)>::unsigned_type)a * (b >> 1)) >> (FX_SHIFT_M_1));
-
168  }
-
169 
-
170  // multiply two fixed point numbers (returns fixed point)
-
171  inline typename IntegerType<sizeof(AudioOutputStorage_t)+sizeof(su)-1>::signed_type ifxmul(typename IntegerType<sizeof(AudioOutputStorage_t )+sizeof(su)-1>::signed_type a, su b) { return ((a * b) >> FX_SHIFT); }
-
172 
-
173  // multiply two fixed point numbers (returns fixed point)
-
174  inline typename IntegerType<sizeof(AudioOutputStorage_t)+sizeof(AudioOutputStorage_t)>::signed_type fxmul(typename IntegerType<sizeof(AudioOutputStorage_t)+sizeof(AudioOutputStorage_t)>::signed_type a, typename IntegerType<sizeof(AudioOutputStorage_t)+sizeof(su)-1>::signed_type b) { return ((a * b) >> FX_SHIFT); }
-
175 };
-
176 
-
177 /** A generic filter for audio signals that can produce lowpass, highpass, bandpass and notch outputs at runtime.
-
178 Behaves like ResonantFilter for setting the resonance and cutoff frequency.
-
179 Like ResonantFilter, it can be used on different sample sizes: MultiResonantFilter<uint8_t> and MultiResonantFilter<uint16_t> have been tested.
-
180 For the former, both cutoff and resonance are uint8_t, hence between 0-255.
-
181 For the later, both cutoff and resonance are uint16_t, hence between 0-65535.
-
182  */
-
183 template<typename su=uint8_t>
-
184 class MultiResonantFilter: public ResonantFilter<LOWPASS,su>
-
185 {
-
186 public:
-
187  /** Compute the filters, given an input signal.
-
188  @param in the signal input. Should not be more than 8bits on 8bits platforms (Arduino) if using the 8bits version and not 16bits version.
-
189  */
-
190 inline void next (AudioOutputStorage_t in)
-
191  {
-
192  last_in = in;
-
193  ResonantFilter<LOWPASS,su>::advanceBuffers(in);
-
194  }
-
195  /** Return the input filtered with a lowpass filter
-
196  @return the filtered signal output.
-
197  */
-
198  inline AudioOutputStorage_t low() {return ResonantFilter<LOWPASS,su>::current(last_in,Int2Type<LOWPASS>());}
-
199  /** Return the input filtered with a highpass filter
-
200  @return the filtered signal output.
-
201  */
-
202  inline AudioOutputStorage_t high() {return ResonantFilter<LOWPASS,su>::current(last_in,Int2Type<HIGHPASS>());}
-
203  /** Return the input filtered with a bandpass filter
-
204  @return the filtered signal output.
-
205  */
-
206  inline AudioOutputStorage_t band() {return ResonantFilter<LOWPASS,su>::current(last_in,Int2Type<BANDPASS>());}
-
207  /** Return the input filtered with a notch filter
-
208  @return the filtered signal output.
-
209  */
-
210  inline AudioOutputStorage_t notch() {return ResonantFilter<LOWPASS,su>::current(last_in,Int2Type<NOTCH>());}
-
211 
-
212 private:
-
213  AudioOutputStorage_t last_in;
-
214 };
-
215 
-
216 
-
217 typedef ResonantFilter<LOWPASS> LowPassFilter;
-
218 typedef ResonantFilter<LOWPASS, uint16_t> LowPassFilter16;
-
219 /*
-
220 typedef ResonantFilter<uint8_t, HIGHPASS> HighPassFilter;
-
221 typedef ResonantFilter<uint16_t, HIGHPASS> HighPassFilter16;
-
222 typedef ResonantFilter<uint8_t, BANDPASS> BandPassFilter;
-
223 typedef ResonantFilter<uint16_t, BANDPASS> BandPassFilter16;
-
224 typedef ResonantFilter<uint8_t, NOTCH> NotchFilter;
-
225 typedef ResonantFilter<uint16_t, NOTCH> NotchFilter16;
-
226 */
-
227 
-
228 
-
229 /**
-
230 @example 10.Audio_Filters/ResonantFilter/ResonantFilter.ino
-
231 This example demonstrates the ResonantFilter specification of this class.
-
232 
-
233 @example 10.Audio_Filters/ResonantFilter16/ResonantFilter16.ino
-
234 This example demonstrates the ResonantFilter16 specification of this class.
-
235 
-
236 @example 10.Audio_Filters/MultiResonantFilter/MultiResonantFilter.ino
-
237 This example demonstrates the MultiResonantFilter specification of this class.
-
238 */
-
239 
-
240 #endif /* RESONANTFILTER_H_ */
-
-
- - - diff --git a/extras/doc/html/_reverb_tank_8h_source.html b/extras/doc/html/_reverb_tank_8h_source.html deleted file mode 100644 index 0265cb6de..000000000 --- a/extras/doc/html/_reverb_tank_8h_source.html +++ /dev/null @@ -1,241 +0,0 @@ - - - - - - - -Mozzi: ReverbTank.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
ReverbTank.h
-
-
-
1 /*
-
2  * ReverbTank.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2013-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 #ifndef REVERBTANK_H
-
13 #define REVERBTANK_H
-
14 
-
15 #include "AudioDelay.h"
-
16 /**
-
17 A reverb which sounds like the inside of a tin can.
-
18 ReverbTank is small enough to fit on the Arduino Nano, which for some reason
-
19 wasn't able to fit a larger version which did fit on other 328 based boards. For
-
20 simplicity, ReverbTank has hardcoded maximum delay sizes but also has default
-
21 delay times which can be changed in the constructor or by setting during run
-
22 time to allow live tweaking.
-
23 This is a highly simplified design drawing on and probably misinterpreting
-
24 Miller Puckette's G08.reverb recirculating reverb example for Pure Data.
-
25 
-
26 The room size according to the maximum delay lengths corresponds to:
-
27 
-
28 early reflections and recirculating delay 1: 128/16384 seconds * 340.29 m/s speed of sound = 3.5 metres
-
29 recirculating delay 2: 7 metres
-
30 It looks bigger on paper than it sounds.
-
31 */
-
32 class
-
33  ReverbTank {
-
34 
-
35 public:
-
36  /** Constructor. This has default values for the early reflection times, recirculating delay lengths and feedback level,
-
37  which can be changed here in the constructor or set with other functions during run time.
-
38  @param early_reflection1 how long in delay cells till the first early reflection, from 0 to 127
-
39  @param early_reflection2 how long in delay cells till the second early reflection, from early_reflection1 to 127
-
40  @param early_reflection3 how long in delay cells till the third early reflection, from early_reflection2 to 127
-
41  @param loop1_delay how long in delay cells for the first recirculating delay, form 0 to 127
-
42  @param loop2_delay how long in delay cells for the first recirculating delay, form 0 to 255
-
43  @param feedback_level how much recirculation, from -128 to 127
-
44  */
- -
46  int8_t early_reflection1 = 37,
-
47  int8_t early_reflection2 = 77,
-
48  int8_t early_reflection3 = 127,
-
49  int8_t loop1_delay=117,
-
50  uint8_t loop2_delay=255,
-
51  int8_t feedback_level = 85):
- - -
54  {
-
55  aLoopDel1.set(loop1_delay);
-
56  aLoopDel2.set(loop2_delay);
-
57  }
-
58 
-
59 
-
60  /** Process the next audio sample and return the reverbed signal. This returns only the "wet" signal,
-
61  which can be combined with the dry input signal in the sketch.
-
62  @param input the audio signal to process
-
63  @return the processed signal
-
64  */
-
65  int next(int input){
-
66  static int recycle1, recycle2;
-
67 
-
68  // early reflections
-
69  int asig = aLoopDel0.next(input, _early_reflection1);
-
70  asig += aLoopDel0.read(_early_reflection2);
-
71  asig += aLoopDel0.read(_early_reflection3);
-
72  asig >>= 2;
-
73 
-
74  // recirculating delays
-
75  int8_t feedback_sig1 = (int8_t) min(max(((recycle1 * _feedback_level)>>7),-128),127); // feedback clipped
-
76  int8_t feedback_sig2 = (int8_t) min(max(((recycle2 * _feedback_level)>>7),-128),127); // feedback clipped
-
77  int sig3 = aLoopDel1.next(asig+feedback_sig1);
-
78  int sig4 = aLoopDel2.next(asig+feedback_sig2);
-
79  recycle1 = sig3 + sig4;
-
80  recycle2 = sig3 - sig4;
-
81 
-
82  return recycle1;
-
83  }
-
84 
-
85 
-
86  /** Set the early reflection times in terms of delay cells.
-
87  @param early_reflection1 how long in delay cells till the first early reflection, from 0 to 127
-
88  @param early_reflection2 how long in delay cells till the second early reflection, from early_reflection1 to 127
-
89  @param early_reflection3 how long in delay cells till the third early reflection, from early_reflection2 to 127
-
90  */
-
91  void setEarlyReflections(int8_t early_reflection1, int8_t early_reflection2, int8_t early_reflection3){
-
92  _early_reflection1=early_reflection1;
-
93  _early_reflection2=early_reflection2;
-
94  _early_reflection3=early_reflection3;
-
95  }
-
96 
-
97 
-
98  /** Set the loop delay times in terms of delay cells.
-
99  @param loop1_delay how long in delay cells for the first recirculating delay, form 0 to 127
-
100  @param loop2_delay how long in delay cells for the first recirculating delay, form 0 to 255
-
101  */
-
102  void setLoopDelays(int8_t loop1_delay, uint8_t loop2_delay){
-
103  aLoopDel1.set(loop1_delay);
-
104  aLoopDel2.set(loop2_delay);
-
105  }
-
106 
-
107  /** Set the feedback level for the recirculating delays.
-
108  @param feedback_level how much recirculation, from -128 to 127
-
109  */
-
110  void setFeebackLevel(int8_t feedback_level){
-
111  _feedback_level=feedback_level;
-
112  }
-
113 
-
114 
-
115 private:
-
116  int8_t _early_reflection1;
-
117  int8_t _early_reflection2;
-
118  int8_t _early_reflection3;
-
119 
-
120  int8_t _feedback_level;
-
121 
-
122  AudioDelay <128> aLoopDel0; // 128/16384 seconds * 340.29 m/s speed of sound = 3.5 metres
-
123  AudioDelay <128,int> aLoopDel1;
-
124  AudioDelay <256,int> aLoopDel2; // 7 metres
-
125 
-
126 };
-
127 
-
128 /**
-
129 @example 09.Delays/ReverbTank_STANDARD/ReverbTank_STANDARD.ino
-
130 This example demonstrates the ReverbTank class.
-
131 */
-
132 
-
133 #endif // #ifndef REVERBTANK_H
-
-
- - - diff --git a/extras/doc/html/_rolling_average_8h_source.html b/extras/doc/html/_rolling_average_8h_source.html deleted file mode 100644 index de3da1fae..000000000 --- a/extras/doc/html/_rolling_average_8h_source.html +++ /dev/null @@ -1,321 +0,0 @@ - - - - - - - -Mozzi: RollingAverage.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
RollingAverage.h
-
-
-
1 /*
-
2  * RollingAverage.h
-
3  *
-
4  Draws on Arduino Smoothing example,
-
5  Created 22 April 2007
-
6  By David A. Mellis <dam@mellis.org>
-
7  modified 9 Apr 2012
-
8  by Tom Igoe
-
9  http://www.arduino.cc/en/Tutorial/Smoothing
-
10 
-
11  * This file is part of Mozzi.
-
12  *
-
13  * Copyright 2013-2024 Tim Barrass and the Mozzi Team
-
14  *
-
15  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
16  *
-
17  */
-
18 
-
19 #ifndef ROLLINGAVERAGE_H
-
20 #define ROLLINGAVERAGE_H
-
21 
-
22 #include "mozzi_utils.h" // for trailingZeros()
-
23 
-
24 
-
25 /** @ingroup sensortools
-
26  Calculates a running average over a
-
27  specified number of the most recent readings.
-
28  Like Smooth(), this is good for smoothing analog inputs in updateControl().
-
29  @tparam WINDOW_LENGTH the number of readings to include in the rolling average.
-
30  It must be a power of two (unless you're averaging floats). The higher the
-
31  number, the more the readings will be smoothed, but the slower the output
-
32  will respond to the input.
-
33 */
-
34 
-
35 template <class T, int WINDOW_LENGTH>
-
36 class
- -
38 
-
39 public:
-
40 
-
41  /** Constructor.
-
42  @tparam T the type of numbers to average, eg. int, unsigned int, float etc. It will be relatively slow with
-
43  floating point numbers, as it will use a divide operation for the averaging.
-
44  Nevertheless, there might be a time when it's useful.
-
45  @tparam WINDOW_LENGTH the number of readings to keep track of. It must be a power of two (unless
-
46  you're averaging floats). The higher the number, the more the readings will be
-
47  smoothed, but the slower the output will respond to the input.
-
48  @note Watch out for overflows!
-
49  */
- -
51  {
-
52  // initialize all the readings to 0:
-
53  for (int thisReading = 0; thisReading < WINDOW_LENGTH; thisReading++)
-
54  readings[thisReading] = 0;
-
55  }
-
56 
-
57 
-
58  /** Give the average of the last WINDOW_LENGTH.
-
59  @param input a control signal such as an analog input which needs smoothing.
-
60  @return the smoothed result.
-
61  @note unsigned int timing 5.7us
-
62  */
-
63  T next(T input)
-
64  {
-
65  return add(input)>>WINDOW_LENGTH_AS_RSHIFT;
-
66  }
-
67 
-
68 
-
69 protected:
-
70 
-
71  inline
-
72  T add(T input){
-
73  // out with the old
-
74  total -= readings[index];
-
75  // in with the new
-
76  total += input;
-
77  readings[index] = input;
-
78 
-
79  // advance and wrap index
-
80  ++index &= WINDOW_LENGTH -1;
-
81  return total;
-
82  }
-
83 
-
84 
-
85 private:
-
86  T readings[WINDOW_LENGTH]; // the readings from the analog input
-
87  unsigned int index; // the index of the current reading
-
88  long total; // the running total
-
89  const uint8_t WINDOW_LENGTH_AS_RSHIFT;
-
90 
-
91 };
-
92 
-
93 // no need to show the specialisations
-
94 /** @cond */
-
95 
-
96 /** unsigned int partial specialisation of RollingAverage template.
-
97 This is needed because unsigned types need to remind (unsigned) for rshift.
-
98 */
-
99 template <int WINDOW_LENGTH>
-
100 class RollingAverage <unsigned int, WINDOW_LENGTH>
-
101 {
-
102 public:
-
103  /** Constructor.
-
104  @tparam WINDOW_LENGTH A power of two, the number of readings to keep track of.
-
105  The higher the number, the more the readings will be smoothed, but the slower the output will
-
106  respond to the input.
-
107  @note The internal total of all the values being averaged is held in a long (4 uint8_t) integer, to avoid overflowing.
-
108  However, watch out for overflows if you are averaging a long number types!
-
109  */
-
110  RollingAverage():index(0),total(0), WINDOW_LENGTH_AS_RSHIFT(trailingZerosConst(WINDOW_LENGTH))
-
111  {
-
112  // initialize all the readings to 0:
-
113  for (int thisReading = 0; thisReading < WINDOW_LENGTH; thisReading++)
-
114  readings[thisReading] = 0;
-
115  }
-
116 
-
117  /** Give the average of the last WINDOW_LENGTH.
-
118  @param a control signal such as an analog input which needs smoothing.
-
119  @return the smoothed result.
-
120  @note timing for int 6us
-
121  */
-
122  unsigned int next(unsigned int input)
-
123  {
-
124  // calculate the average:
-
125  // this unsigned cast is the only difference between the int and unsigned int specialisations
-
126  // it tells the shift not to sign extend in from the left
-
127  return (unsigned)add(input)>>WINDOW_LENGTH_AS_RSHIFT;
-
128  }
-
129 
-
130 protected:
-
131 
-
132 
-
133  inline
-
134  unsigned int add(unsigned int input){
-
135  // out with the old
-
136  total -= readings[index];
-
137  // in with the new
-
138  total += input;
-
139  readings[index] = input;
-
140 
-
141  // advance and wrap index
-
142  ++index &= WINDOW_LENGTH -1;
-
143  return total;
-
144  }
-
145 
-
146 
-
147 private:
-
148  unsigned int readings[WINDOW_LENGTH]; // the readings from the analog input
-
149  unsigned int index; // the index of the current reading
-
150  long total; // the running total
-
151  const uint8_t WINDOW_LENGTH_AS_RSHIFT;
-
152 
-
153 };
-
154 
-
155 
-
156 
-
157 /** float partial specialisation of RollingAverage template*/
-
158 template <int WINDOW_LENGTH>
-
159 class RollingAverage <float, WINDOW_LENGTH>
-
160 {
-
161 public:
-
162  /** Constructor.
-
163  @tparam WINDOW_LENGTH A power of two, the number of readings to keep track of.
-
164  The higher the number, the more the readings will be smoothed, but the slower the output will
-
165  respond to the input.
-
166  @note The internal total of all the values being averaged is held in a long (4 uint8_t) integer, to avoid overflowing.
-
167  However, watch out for overflows if you are averaging a long number types!
-
168  */
-
169  RollingAverage():index(0),total(0.0)
-
170  {
-
171  // initialize all the readings to 0:
-
172  for (int thisReading = 0; thisReading < WINDOW_LENGTH; thisReading++)
-
173  readings[thisReading] = 0.0;
-
174  }
-
175 
-
176  /** Give the average of the last WINDOW_LENGTH.
-
177  @param a control signal such as an analog input which needs smoothing.
-
178  @return the smoothed result.
-
179  @note timing for float 37us
-
180  */
-
181  float next(float input)
-
182  {
-
183  // out with the old
-
184  total -= readings[index];
-
185  // in with the new
-
186  total += input;
-
187  readings[index] = input;
-
188 
-
189  // advance and wrap index
-
190  ++index &= WINDOW_LENGTH -1;
-
191 
-
192  // calculate the average:
-
193  return total/WINDOW_LENGTH;
-
194  }
-
195 
-
196 private:
-
197  float readings[WINDOW_LENGTH]; // the readings from the analog input
-
198  unsigned int index; // the index of the current reading
-
199  float total; // the running total
-
200 
-
201 };
-
202 
-
203 
-
204 // no need to show the specialisations
-
205 /** @endcond
-
206 */
-
207 
-
208 /**
-
209 @example 03.Sensors/Knob_LDR_x2_WavePacket/Knob_LDR_x2_WavePacket.ino
-
210 This example demonstrates the RollingAverage class.
-
211 */
-
212 
-
213 #endif // #ifndef ROLLINGAVERAGE_H
-
-
- - - diff --git a/extras/doc/html/_rolling_stat_8h_source.html b/extras/doc/html/_rolling_stat_8h_source.html deleted file mode 100644 index 0eb9f4332..000000000 --- a/extras/doc/html/_rolling_stat_8h_source.html +++ /dev/null @@ -1,256 +0,0 @@ - - - - - - - -Mozzi: RollingStat.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
RollingStat.h
-
-
-
1 /*
-
2  * RollingStat.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2013-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  * WARNING: this code is incomplete, it doesn't work yet
-
11  */
-
12 
-
13 #ifndef ROLLINGSTAT_H
-
14 #define ROLLINGSTAT_H
-
15 
-
16 #include "RollingAverage.h"
-
17 #include "mozzi_fixmath.h"
-
18 
-
19 // adapted from RunningStat, http://www.johndcook.com/standard_deviation.html
-
20 /** @ingroup sensortools
-
21 WARNING: this class is work in progress, don't use it yet.
-
22 Calculates an approximation of the variance and standard deviation for a window of recent inputs.
-
23 @tparam T the type of numbers to use. Choose unsigned int, int , uint8_t, int8_t, or float
-
24 @tparam WINDOW_LENGTH how many recent input values to include in the calculations.
-
25 */
-
26 template <class T, int WINDOW_LENGTH>
- -
28 {
-
29 public:
-
30 
-
31  /** Constructor */
-
32  RollingStat() : _previous_mean(0), _mean(0), _variance(0), WINDOW_LENGTH_AS_RSHIFT(trailingZerosConst(WINDOW_LENGTH))
-
33  {}
-
34 
-
35 
-
36  /** Update the mean and variance given a new input value.
-
37  @param x the next input value
-
38  @note timing for unsigned int 10us, int 22us
-
39  */
-
40  void update(T x) {
-
41  _mean = rollingMean.next(x);
-
42  _variance = (((long)x - _previous_mean)*((long)x - _mean))>>WINDOW_LENGTH_AS_RSHIFT; // should really be div by (WINDOW_LENGTH-1), but exact values are not important for this application
-
43  _previous_mean = _mean;
-
44  }
-
45 
-
46 
-
47  /** Update the mean and variance given a new input value.
-
48  @param x the next input value
-
49  */
-
50  void update(int8_t x) {
-
51  _mean = rollingMean.next(x);
-
52  _variance = (((int)x - _previous_mean)*((int)x - _mean))>>WINDOW_LENGTH_AS_RSHIFT; // should really be div by (WINDOW_LENGTH-1), but exact values are not important for this application
-
53  _previous_mean = _mean;
-
54  }
-
55 
-
56 
-
57  /** Return the mean of the last WINDOW_LENGTH number of inputs.
-
58  @return mean
-
59  */
-
60  T getMean() const {
-
61  return _mean;
-
62  }
-
63 
-
64 
-
65  /** Return the approximate variance of the last WINDOW_LENGTH number of inputs.
-
66  @return variance
-
67  @note This should really be calculated using WINDOW_LENGTH-1, but sacrificing accuracy for speed
-
68  we use the power of two value of WINDOW_LENGTH.
-
69  */
-
70  T getVariance() const {
-
71  return _variance;
-
72  }
-
73 
-
74  /** Return the approximate standard deviation of the last WINDOW_LENGTH number of inputs.
-
75  @return standard deviation.
-
76  */
- -
78  return isqrt16(_variance);
-
79  }
-
80 
-
81 
-
82 
-
83 private:
-
84  T _previous_mean, _mean, _variance;
-
85  RollingAverage <T, WINDOW_LENGTH> rollingMean;
-
86  const uint8_t WINDOW_LENGTH_AS_RSHIFT;
-
87 };
-
88 
-
89 // no need to show the specialisations
-
90 /** @cond */
-
91 
-
92 /** float specialisation of RollingStat template */
-
93 template <int WINDOW_LENGTH>
-
94 class RollingStat <float, WINDOW_LENGTH>
-
95 {
-
96 public:
-
97 
-
98  /** Constructor */
-
99  RollingStat() : _previous_mean(0), _mean(0), _variance(0), WINDOW_LENGTH_AS_RSHIFT(trailingZerosConst(WINDOW_LENGTH))
-
100  {}
-
101 
-
102 
-
103  /** Update the mean and variance given a new input value.
-
104  @param x the next input value
-
105  @note timing for float: 60 to 90us
-
106  */
-
107  void update(float x) {
-
108  _mean = rollingMean.next(x);
-
109  _variance = ((x - _previous_mean)*(x - _mean))/(WINDOW_LENGTH-1);
-
110  _previous_mean = _mean;
-
111  }
-
112 
-
113 
-
114  /** Return the mean of the last WINDOW_LENGTH number of inputs.
-
115  @return mean
-
116  */
-
117  float getMean() const {
-
118  return _mean;
-
119  }
-
120 
-
121 
-
122  /** Return the approximate variance of the last WINDOW_LENGTH number of inputs.
-
123  @return variance
-
124  */
-
125  float getVariance() const {
-
126  return _variance;
-
127  }
-
128 
-
129  /** Calculate and return the approximate standard deviation of the last WINDOW_LENGTH number of inputs.
-
130  @return standard deviation.
-
131  @note this is probably too slow to use!
-
132  */
-
133  float getStandardDeviation() const {
-
134  return sqrt(_variance);
-
135  }
-
136 
-
137 
-
138 
-
139 private:
-
140  float _previous_mean, _mean, _variance;
-
141  RollingAverage <float, WINDOW_LENGTH> rollingMean;
-
142  const uint8_t WINDOW_LENGTH_AS_RSHIFT;
-
143 };
-
144 
-
145 // no need to show the specialisations
-
146 /** @endcond */
-
147 
-
148 #endif // #ifndef ROLLINGSTAT_H
-
-
- - - diff --git a/extras/doc/html/_sample_8h_source.html b/extras/doc/html/_sample_8h_source.html deleted file mode 100644 index 90a10b6e7..000000000 --- a/extras/doc/html/_sample_8h_source.html +++ /dev/null @@ -1,435 +0,0 @@ - - - - - - - -Mozzi: Sample.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Sample.h
-
-
-
1 /*
-
2  * Sample.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 #ifndef SAMPLE_H_
-
13 #define SAMPLE_H_
-
14 
-
15 #include "MozziHeadersOnly.h"
-
16 #include "mozzi_fixmath.h"
-
17 #include "mozzi_pgmspace.h"
-
18 
-
19 // fractional bits for sample index precision
-
20 #define SAMPLE_F_BITS 16
-
21 #define SAMPLE_F_BITS_AS_MULTIPLIER 65536
-
22 
-
23 // phmod_proportion is an 1n15 fixed-point number only using
-
24 // the fractional part and the sign bit
-
25 #define SAMPLE_PHMOD_BITS 16
-
26 
-
27 enum interpolation {INTERP_NONE, INTERP_LINEAR};
-
28 
-
29 /** Sample is like Oscil, it plays a wavetable. However, Sample can be
-
30 set to play once through only, with variable start and end points,
-
31 or can loop, also with variable start and end points.
-
32 It defaults to playing once through the whole sound table, from start to finish.
-
33 @tparam NUM_TABLE_CELLS This is defined in the table ".h" file the Sample will be
-
34 using. The sound table can be arbitrary length for Sample.
-
35 It's important that NUM_TABLE_CELLS is either a literal number (eg. "8192") or a
-
36 defined macro, rather than a const or int, for the Sample to run fast enough.
-
37 @tparam UPDATE_RATE This will be MOZZI_AUDIO_RATE if the Sample is updated in
-
38 updateAudio(), or MOZZI_CONTROL_RATE if it's updated each time updateControl() is
-
39 called. It could also be a fraction of MOZZI_CONTROL_RATE if you are doing some kind
-
40 of cyclic updating in updateControl(), for example, to spread out the processor load.
-
41 @section int8_t2mozzi
-
42 Converting soundfiles for Mozzi.
-
43 There is a python script called int8_t2mozzi.py in the Mozzi/python folder.
-
44 The script converts raw sound data saved from a program like Audacity.
-
45 Instructions are in the int8_t2mozzi.py file.
-
46 */
-
47 template <unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE, uint8_t INTERP=INTERP_NONE>
-
48 class Sample
-
49 {
-
50 
-
51 public:
-
52 
-
53  /** Constructor.
-
54  @param TABLE_NAME the name of the array the Sample will be using. This
-
55  can be found in the table ".h" file if you are using a table made for
-
56  Mozzi by the int8_t2mozzi.py python script in Mozzi's python
-
57  folder. Sound tables can be of arbitrary lengths for Sample().
-
58  */
-
59  Sample(const int8_t * TABLE_NAME):table(TABLE_NAME),endpos_fractional((unsigned long) NUM_TABLE_CELLS << SAMPLE_F_BITS) // so isPlaying() will work
-
60  {
- -
62  //rangeWholeSample();
-
63  }
-
64 
-
65 
-
66 
-
67  /** Constructor.
-
68  Declare a Sample with template TABLE_NUM_CELLS and UPDATE_RATE parameters, without specifying a particular wave table for it to play.
-
69  The table can be set or changed on the fly with setTable().
-
70  */
-
71  Sample():endpos_fractional((unsigned long) NUM_TABLE_CELLS << SAMPLE_F_BITS)
-
72  {
- -
74  //rangeWholeSample();
-
75  }
-
76 
-
77 
-
78  /** Change the sound table which will be played by the Sample.
-
79  @param TABLE_NAME is the name of the array in the table ".h" file you're using.
-
80  */
-
81  inline
-
82  void setTable(const int8_t * TABLE_NAME)
-
83  {
-
84  table = TABLE_NAME;
-
85  }
-
86 
-
87 
-
88  /** Sets the starting position in samples.
-
89  @param startpos offset position in samples.
-
90  */
-
91  inline
-
92  void setStart(unsigned int startpos)
-
93  {
-
94  startpos_fractional = (unsigned long) startpos << SAMPLE_F_BITS;
-
95  }
-
96 
-
97 
-
98  /** Resets the phase (the playhead) to the start position, which will be 0 unless set to another value with setStart();
-
99  */
-
100  inline
-
101  void start()
-
102  {
-
103  phase_fractional = startpos_fractional;
-
104  }
-
105 
-
106 
-
107  /** Sets a new start position plays the sample from that position.
-
108  @param startpos position in samples from the beginning of the sound.
-
109  */
-
110  inline
-
111  void start(unsigned int startpos)
-
112  {
-
113  setStart(startpos);
-
114  start();
-
115  }
-
116 
-
117 
-
118  /** Sets the end position in samples from the beginning of the sound.
-
119  @param end position in samples.
-
120  */
-
121  inline
-
122  void setEnd(unsigned int end)
-
123  {
-
124  endpos_fractional = (unsigned long) end << SAMPLE_F_BITS;
-
125  }
-
126 
-
127 
-
128  /** Sets the start and end points to include the range of the whole sound table.
-
129  */
-
130  inline
- -
132  {
-
133  startpos_fractional = 0;
-
134  endpos_fractional = (unsigned long) NUM_TABLE_CELLS << SAMPLE_F_BITS;
-
135  }
-
136 
-
137 
-
138  /** Turns looping on.
-
139  */
-
140  inline
- -
142  {
-
143  looping=true;
-
144  }
-
145 
-
146 
-
147  /** Turns looping off.
-
148  */
-
149  inline
- -
151  {
-
152  looping=false;
-
153  }
-
154 
-
155 
-
156 
-
157  /**
-
158  Returns the sample at the current phase position, or 0 if looping is off
-
159  and the phase overshoots the end of the sample. Updates the phase
-
160  according to the current frequency.
-
161  @return the next sample value from the table, or 0 if it's finished playing.
-
162  @todo in next(), incrementPhase() happens in a different position than for Oscil - check if it can be standardised
-
163  */
-
164  inline
-
165  int8_t next() { // 4us
-
166 
-
167  if (phase_fractional>endpos_fractional){
-
168  if (looping) {
-
169  phase_fractional = startpos_fractional + (phase_fractional - endpos_fractional);
-
170  }else{
-
171  return 0;
-
172  }
-
173  }
-
174  int8_t out;
-
175  if(INTERP==INTERP_LINEAR){
-
176  // WARNNG this is hard coded for when SAMPLE_F_BITS is 16
-
177  unsigned int index = phase_fractional >> SAMPLE_F_BITS;
-
178  out = FLASH_OR_RAM_READ<const int8_t>(table + index);
-
179  int8_t difference = FLASH_OR_RAM_READ<const int8_t>((table + 1) + index) - out;
-
180  int8_t diff_fraction = (int8_t)(((((unsigned int) phase_fractional)>>8)*difference)>>8); // (unsigned int) phase_fractional keeps low word, then>> for only 8 bit precision
-
181  out += diff_fraction;
-
182  }else{
-
183  out = FLASH_OR_RAM_READ<const int8_t>(table + (phase_fractional >> SAMPLE_F_BITS));
-
184  }
-
185  incrementPhase();
-
186  return out;
-
187  }
-
188 
-
189 
-
190  /** Checks if the sample is playing by seeing if the phase is within the limits of its end position.
-
191  @return true if the sample is playing
-
192  */
-
193  inline
- -
195  return phase_fractional<endpos_fractional;
-
196  }
-
197 
-
198 
-
199  // Not readjusted for arbitrary table length yet
-
200  //
-
201  // Returns the next sample given a phase modulation value.
-
202  // @param phmod_proportion phase modulation value given as a proportion of the wave. The
-
203  // phmod_proportion parameter is a Q15n16 fixed-point number where to fractional
-
204  // n16 part represents -1 to 1, modulating the phase by one whole table length in
-
205  // each direction.
-
206  // @return a sample from the table.
-
207  //
-
208  // inline
-
209  // int8_t phMod(long phmod_proportion)
-
210  // {
-
211  // incrementPhase();
-
212  // return FLASH_OR_RAM_READ<const int8_t>(table + (((phase_fractional+(phmod_proportion * NUM_TABLE_CELLS))>>SAMPLE_SAMPLE_F_BITS) & (NUM_TABLE_CELLS - 1)));
-
213  // }
-
214 
-
215 
-
216 
-
217  /** Set the oscillator frequency with an unsigned int.
-
218  This is faster than using a float, so it's useful when processor time is tight,
-
219  but it can be tricky with low and high frequencies, depending on the size of the
-
220  wavetable being used. If you're not getting the results you expect, try
-
221  explicitly using a float, or try setFreq_Q24n8.
-
222  @param frequency to play the wave table.
-
223  */
-
224  inline
-
225  void setFreq (int frequency) {
-
226  phase_increment_fractional = ((((unsigned long)NUM_TABLE_CELLS<<ADJUST_FOR_NUM_TABLE_CELLS)*frequency)/UPDATE_RATE) << (SAMPLE_F_BITS - ADJUST_FOR_NUM_TABLE_CELLS);
-
227  }
-
228 
-
229 
-
230  /** Set the sample frequency with a float. Using a float is the most reliable
-
231  way to set frequencies, -Might- be slower than using an int but you need either
-
232  this or setFreq_Q24n8 for fractional frequencies.
-
233  @param frequency to play the wave table.
-
234  */
-
235  inline
-
236  void setFreq(float frequency)
-
237  { // 1 us - using float doesn't seem to incur measurable overhead with the oscilloscope
-
238  phase_increment_fractional = (unsigned long)((((float)NUM_TABLE_CELLS * frequency)/UPDATE_RATE) * SAMPLE_F_BITS_AS_MULTIPLIER);
-
239  }
-
240 
-
241 
-
242  /** Set the frequency using Q24n8 fixed-point number format.
-
243  This might be faster than the float version for setting low frequencies
-
244  such as 1.5 Hz, or other values which may not work well with your table
-
245  size. Note: use with caution because it's prone to overflow with higher
-
246  frequencies and larger table sizes. An Q24n8 representation of 1.5 is 384
-
247  (ie. 1.5 * 256).
-
248  @param frequency in Q24n8 fixed-point number format.
-
249  */
-
250  inline
-
251  void setFreq_Q24n8(Q24n8 frequency)
-
252  {
-
253  //phase_increment_fractional = (frequency* (NUM_TABLE_CELLS>>3)/(UPDATE_RATE>>6)) << (F_BITS-(8-3+6));
-
254  phase_increment_fractional = (((((unsigned long)NUM_TABLE_CELLS<<ADJUST_FOR_NUM_TABLE_CELLS)>>3)*frequency)/(UPDATE_RATE>>6))
-
255  << (SAMPLE_F_BITS - ADJUST_FOR_NUM_TABLE_CELLS - (8-3+6));
-
256  }
-
257 
-
258 
-
259  /** Returns the sample at the given table index.
-
260  @param index between 0 and the table size.
-
261  @return the sample at the given table index.
-
262  */
-
263  inline
-
264  int8_t atIndex(unsigned int index)
-
265  {
-
266  return FLASH_OR_RAM_READ<const int8_t>(table + index);
-
267  }
-
268 
-
269 
-
270  /** phaseIncFromFreq() and setPhaseInc() are for saving processor time when sliding between frequencies.
-
271  Instead of recalculating the phase increment for each
-
272  frequency in between, you can just calculate the phase increment for each end
-
273  frequency with phaseIncFromFreq(), then use a Line to interpolate on the fly and
-
274  use setPhaseInc() to set the phase increment at each step. (Note: I should
-
275  really profile this with the oscilloscope to see if it's worth the extra
-
276  confusion!)
-
277  @param frequency for which you want to calculate a phase increment value.
-
278  @return the phase increment value which will produce a given frequency.
-
279  */
-
280  inline
-
281  unsigned long phaseIncFromFreq(unsigned int frequency)
-
282  {
-
283  return (((unsigned long)frequency * NUM_TABLE_CELLS)/UPDATE_RATE) << SAMPLE_F_BITS;
-
284  }
-
285 
-
286 
-
287  /** Set a specific phase increment. See phaseIncFromFreq().
-
288  @param phaseinc_fractional a phase increment value as calculated by phaseIncFromFreq().
-
289  */
-
290  inline
-
291  void setPhaseInc(unsigned long phaseinc_fractional)
-
292  {
-
293  phase_increment_fractional = phaseinc_fractional;
-
294  }
-
295 
-
296 
-
297 private:
-
298 
-
299 
-
300  /** Used for shift arithmetic in setFreq() and its variations.
-
301  */
-
302 static const uint8_t ADJUST_FOR_NUM_TABLE_CELLS = (NUM_TABLE_CELLS<2048) ? 8 : 0;
-
303 
-
304 
-
305  /** Increments the phase of the oscillator without returning a sample.
-
306  */
-
307  inline
-
308  void incrementPhase()
-
309  {
-
310  phase_fractional += phase_increment_fractional;
-
311  }
-
312 
-
313 
-
314  volatile unsigned long phase_fractional;
-
315  volatile unsigned long phase_increment_fractional;
-
316  const int8_t * table;
-
317  bool looping;
-
318  unsigned long startpos_fractional, endpos_fractional;
-
319 };
-
320 
-
321 
-
322 /**
-
323 @example 08.Samples/Sample/Sample.ino
-
324 This example demonstrates the Sample class.
-
325 */
-
326 
-
327 #endif /* SAMPLE_H_ */
-
-
- - - diff --git a/extras/doc/html/_sample_huffman_8h_source.html b/extras/doc/html/_sample_huffman_8h_source.html deleted file mode 100644 index b3089af81..000000000 --- a/extras/doc/html/_sample_huffman_8h_source.html +++ /dev/null @@ -1,268 +0,0 @@ - - - - - - - -Mozzi: SampleHuffman.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
SampleHuffman.h
-
-
-
1 /*
-
2  * SampleHuffman.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2013-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 #ifndef SAMPLEHUFFMAN_H
-
13 #define SAMPLEHUFFMAN_H
-
14 
-
15 #include "mozzi_pgmspace.h"
-
16 
-
17 /** A sample player for samples encoded with Huffman compression.
-
18 
-
19 This class and the audio2huff.py script are adapted from "audioout",
-
20 an Arduino sketch by Thomas Grill, 2011 http//grrrr.org
-
21 
-
22 Huffman decoding is used on sample differentials,
-
23 saving 50-70% of space for 8 bit data, depending on the sample rate.
-
24 
-
25 This implementation just plays back one sample each time next() is called, with no
-
26 speed or other adjustments.
-
27 It's slow, so it's likely you will only be able to play one sound at a time.
-
28 
-
29 Audio data, Huffman decoder table, sample rate and bit depth are defined
-
30 in a sounddata.h header file. This file can be generated for a sound file with the
-
31 accompanying Python script audio2huff.py, in Mozzi/extras/python/
-
32 
-
33 Invoke with:
-
34 python audio2huff.py --sndfile=arduinosnd.wav --hdrfile=sounddata.h --bits=8 --name=soundtablename
-
35 
-
36 You can resample and dither your audio file with SOX,
-
37 e.g. to 8 bits depth @ Mozzi's 16384 Hz sample rate:
-
38 sox fullglory.wav -b 8 -r 16384 arduinosnd.wav
-
39 
-
40 Alternatively you can export a sound from Audacity, which seems to have less noticeable or no dithering,
-
41 using Project Rate 16384 Hz and these output options:
-
42 Other uncompressed files, Header: WAV(Microsoft), Encoding: Unsigned 8 bit PCM
-
43 
-
44 The header file contains two lengthy arrays:
-
45 One is "SOUNDDATA" which must fit into Flash RAM (available in total: 32k for ATMega328)
-
46 The other is "HUFFMAN" which must also fit into Flash RAM
-
47 
-
48 */
-
49 
- -
51 {
-
52 
-
53 public:
-
54 
-
55  /** Constructor
-
56  @param SOUNDDATA the name of the SOUNDDATA table in the huffman sample .h file
-
57  @param HUFFMAN_DATA the name of the HUFFMAN table in the huffman sample .h file
-
58  @param SOUNDDATA_BITS from the huffman sample .h file
-
59  */
-
60  SampleHuffman(uint8_t const * SOUNDDATA, int16_t const * HUFFMAN_DATA, uint32_t const SOUNDDATA_BITS):sounddata(SOUNDDATA),huffman(HUFFMAN_DATA),sounddata_bits(SOUNDDATA_BITS)
-
61  {
- -
63  }
-
64 
-
65 
-
66  /** Update and return the next audio sample. So far it just plays back one sample at a time without any variable tuning or speed.
-
67  @return the next audio sample
-
68  @note timing: about 5 to 40 us, varies continuously depending on data
-
69  */
-
70  inline
- -
72  {
-
73  if(datapos >= sounddata_bits){
-
74  if(looping){
-
75  // at end of sample, restart from zero, looping the sound
-
76  datapos = 0;
-
77  }else{
-
78  return 0;
-
79  }
-
80  }
-
81 
-
82  int16_t dif = decode();
-
83  current += dif; // add differential
-
84  return current;
-
85  }
-
86 
-
87 
-
88  /** Turns looping on, with the whole sample length as the loop range.
-
89  */
-
90  inline
-
91  void setLoopingOn()
-
92  {
-
93  looping=true;
-
94  }
-
95 
-
96 
-
97  /** Turns looping off.
-
98  */
-
99  inline
- -
101  {
-
102  looping=false;
-
103  }
-
104 
-
105  /** Sets the playhead to the beginning of the sample.
-
106  */
-
107  inline
-
108  void start()
-
109  {
-
110  current = 0;
-
111  datapos = 0;
-
112  bt = 0;
-
113  }
-
114 
-
115 private:
-
116  uint8_t const * sounddata;
-
117  int16_t const * huffman;
-
118  uint32_t const sounddata_bits;
-
119  uint32_t datapos; // current sample position
-
120  int16_t current; // current amplitude value
-
121  bool looping;
-
122  uint8_t bt;
-
123 
-
124  // Get one bit from sound data
-
125  inline
-
126  bool getbit()
-
127  {
-
128  const uint8_t b = datapos&7;
-
129  //static uint8_t bt;
-
130  if(!b) bt = FLASH_OR_RAM_READ<const uint8_t>(sounddata+((uint32_t)datapos>>3));
-
131  // extract the indexed bit
-
132  return ((uint8_t)bt>>(7-b))&1;
-
133  }
-
134 
-
135 
-
136  // Decode bit stream using Huffman codes
-
137  inline
-
138  int16_t decode()
-
139  {
-
140  int16_t const * huffcode = huffman;
-
141  do {
-
142  if(getbit()) {
-
143  const int16_t offs = FLASH_OR_RAM_READ<const int16_t>(huffcode);
-
144  huffcode += offs?offs+1:2;
-
145  }
-
146  datapos++;
-
147  }
-
148  while(FLASH_OR_RAM_READ<const int16_t>(huffcode++));
-
149  return FLASH_OR_RAM_READ<const int16_t>(huffcode);
-
150  }
-
151 
-
152 
-
153 };
-
154 
-
155 /**
-
156 @example 08.Samples/SampleHuffman_Umpah/SampleHuffman_Umpah.ino
-
157 This example demonstrates the Sample class.
-
158 */
-
159 
-
160 #endif // #ifndef SAMPLEHUFFMAN_H
-
-
- - - diff --git a/extras/doc/html/_skeleton___multi___unit2_8cpp_source.html b/extras/doc/html/_skeleton___multi___unit2_8cpp_source.html deleted file mode 100644 index 3883a2c75..000000000 --- a/extras/doc/html/_skeleton___multi___unit2_8cpp_source.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - -Mozzi: Skeleton_Multi_Unit2.cpp Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Skeleton_Multi_Unit2.cpp
-
-
-
1 #include <MozziHeadersOnly.h> // <Mozzi.h> should be included only once in the whole program. Sketches needing
-
2  // core Mozzi functions in more than one .cpp file, shall include MozziHeadersOnly.h
-
3  // in all but one.
-
4 
-
5 AudioOutput_t updateAudio() {
-
6  return MonoOutput::from8Bit(0); // just a dummy
-
7 }
-
-
- - - diff --git a/extras/doc/html/_smooth_8h_source.html b/extras/doc/html/_smooth_8h_source.html deleted file mode 100644 index 7be364497..000000000 --- a/extras/doc/html/_smooth_8h_source.html +++ /dev/null @@ -1,538 +0,0 @@ - - - - - - - -Mozzi: Smooth.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Smooth.h
-
-
-
1 /*
-
2  * Smooth.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 #ifndef SMOOTH_H_
-
13 #define SMOOTH_H_
-
14 
-
15 #include "Arduino.h"
-
16 #include "mozzi_fixmath.h"
-
17 
-
18 /** A simple infinite impulse response low pass filter for smoothing control or audio signals.
-
19 This algorithm comes from http://en.wikipedia.org/wiki/Low-pass_filter:
-
20 y[i] := y[i-1] + α * (x[i] - y[i-1]),
-
21 translated as
-
22 out = last_out + a * (in - last_out).
-
23 It's not calibrated to any real-world update rate, so if you use it at
-
24 MOZZI_CONTROL_RATE and you change MOZZI_CONTROL_RATE, you'll need to adjust the smoothness
-
25 value to suit.
-
26 @tparam T the type of numbers being smoothed. Watch out for numbers overflowing the
-
27 internal calculations. Some experimentation is recommended.
-
28 @note Timing: ~5us for 16 bit types, ~1us for 8 bit types.
-
29 @todo Check if 8 bit templates can work efficiently with a higher res smoothness -
-
30  as is they don't have enough resolution to work well at audio rate. See if Line might be
-
31  more useful in most cases.
-
32 */
-
33 
-
34 template <class T>
-
35 class Smooth
-
36 {
-
37 private:
-
38  long last_out;
-
39  Q0n16 a;
-
40 
-
41 public:
-
42  /** Constructor.
-
43  @param smoothness sets how much smoothing the filter will apply to
-
44  its input. Use a float in the range 0~1, where 0 is not very smooth and 0.99 is
-
45  very smooth.
-
46  */
-
47  Smooth(float smoothness)
-
48  {
-
49  setSmoothness(smoothness);
-
50  }
-
51 
-
52  /** Constructor.
-
53  This constructor which doesn't take a smoothness parameter is useful when you incorporate Smooth into another class definition.
-
54  You need to call setSmoothness(float) for your object before using Smooth.
-
55  @note there's probably a better way to do this...
-
56  */
- -
58  {}
-
59 
-
60 
-
61  /** Filters the input and returns the filtered value. You can also use the operator() function, eg. something like mySmoother(input-value).
-
62  @param in the signal to be smoothed.
-
63  @return the filtered signal.
-
64  */
-
65  inline
-
66  T next(T in)
-
67  {
-
68  long out = ((((((long)in - (last_out>>8)) * a))>>8) + last_out);
-
69  last_out = out;
-
70  return (T)(out>>8);
-
71  }
-
72 
-
73 
-
74  /** Filters the input and returns the filtered value. Same as next(input-value).
-
75  @param in the signal to be smoothed.
-
76  @return the filtered signal.
-
77  */
-
78  inline
-
79  T operator()(T n) {
-
80  return next(n);
-
81  }
-
82 
-
83 
-
84  /** Sets how much smoothing the filter will apply to its input.
-
85  @param smoothness sets how much smoothing the filter will apply to
-
86  its input. Use a float in the range 0~1, where 0 is not very smooth and 0.99 is
-
87  very smooth.
-
88  */
-
89  inline
-
90  void setSmoothness(float smoothness)
-
91  {
-
92  a=float_to_Q0n16(1.f-smoothness);
-
93  }
-
94 
-
95 };
-
96 
-
97 
-
98 /** @cond */ // doxygen can ignore the specialisations
-
99 
-
100 /** uint8_t specialisation of Smooth template*/
-
101 template <>
-
102 class Smooth <uint8_t>
-
103 {
-
104 private:
-
105  unsigned int last_out;
-
106  Q0n8 a;
-
107 
-
108 public:
-
109  /** Constructor.
-
110  @param smoothness sets how much smoothing the filter will apply to
-
111  its input. Use a float in the range 0~1, where 0 is not very smooth and 0.99 is
-
112  very smooth.
-
113  */
-
114  Smooth(float smoothness)
-
115  {
-
116  setSmoothness(smoothness);
-
117  }
-
118 
-
119  /** Filters the input and returns the filtered value. You can also use the operator() function, eg. something like mySmoother(input-value).
-
120  @param in the signal to be smoothed.
-
121  @return the filtered signal.
-
122  */
-
123  inline
-
124  uint8_t next(uint8_t in)
-
125  {
-
126  unsigned int out = (((((int)in - (last_out>>8)) * a)) + last_out);
-
127  last_out = out;
-
128  return (uint8_t)(out>>8);
-
129  }
-
130 
-
131 
-
132  /** Filters the input and returns the filtered value. Same as next(input-value).
-
133  @param in the signal to be smoothed.
-
134  @return the filtered signal.
-
135  */
-
136  inline
-
137  uint8_t operator()(uint8_t n) {
-
138  return next(n);
-
139  }
-
140 
-
141 
-
142  /** Sets how much smoothing the filter will apply to its input.
-
143  @param smoothness sets how much smoothing the filter will apply to
-
144  its input. Use a float in the range 0~1, where 0 is not very smooth and 0.99 is
-
145  very smooth.
-
146  */
-
147  inline
-
148  void setSmoothness(float smoothness)
-
149  {
-
150  a=float_to_Q0n8(1.f-smoothness);
-
151  }
-
152 
-
153 };
-
154 
-
155 
-
156 /** int8_t specialisation of Smooth template*/
-
157 template <>
-
158 class Smooth <int8_t>
-
159 {
-
160 private:
-
161  int last_out;
-
162  Q0n8 a;
-
163 
-
164 public:
-
165  /** Constructor.
-
166  @param smoothness sets how much smoothing the filter will apply to
-
167  its input. Use a float in the range 0~1, where 0 is not very smooth and 0.99 is
-
168  very smooth.
-
169  */
-
170  Smooth(float smoothness)
-
171  {
-
172  setSmoothness(smoothness);
-
173  }
-
174 
-
175 
-
176  /** Filters the input and returns the filtered value. You can also use the operator() function, eg. something like mySmoother(input-value).
-
177  @param in the signal to be smoothed.
-
178  @return the filtered signal.
-
179  */
-
180  inline
-
181  int8_t next(int8_t in)
-
182  {
-
183  int out = (((((int)in - (last_out>>8)) * a)) + last_out);
-
184  last_out = out;
-
185  return (int8_t)(out>>8);
-
186  }
-
187 
-
188 
-
189  /** Filters the input and returns the filtered value. Same as next(input-value).
-
190  @param in the signal to be smoothed.
-
191  @return the filtered signal.
-
192  */
-
193  inline
-
194  int8_t operator()(int8_t n) {
-
195  return next(n);
-
196  }
-
197 
-
198 
-
199  /** Sets how much smoothing the filter will apply to its input.
-
200  @param smoothness sets how much smoothing the filter will apply to
-
201  its input. Use a float in the range 0~1, where 0 is not very smooth and 0.99 is
-
202  very smooth.
-
203  */
-
204  inline
-
205  void setSmoothness(float smoothness)
-
206  {
-
207  a=float_to_Q0n8(1.f-smoothness);
-
208  }
-
209 
-
210 };
-
211 
-
212 /** float specialisation of Smooth template*/
-
213 template <>
-
214 class Smooth <float>
-
215 {
-
216 private:
-
217  float last_out;
-
218  float a;
-
219 
-
220 public:
-
221  /** Constructor.
-
222  @param smoothness sets how much smoothing the filter will apply to
-
223  its input. Use a float in the range 0~1, where 0 is not very smooth and 0.99 is
-
224  very smooth.
-
225  */
-
226  Smooth(float smoothness)
-
227  {
-
228  setSmoothness(smoothness);
-
229  }
-
230 
-
231  /** Filters the input and returns the filtered value. You can also use the operator() function, eg. something like mySmoother(input-value).
-
232  @param in the signal to be smoothed.
-
233  @return the filtered signal.
-
234  */
-
235  inline
-
236  float next(float in)
-
237  {
-
238  float out = last_out + a * (in - last_out);
-
239  //float out = (in - last_out * a) + last_out;
-
240  last_out = out;
-
241  return out;
-
242  }
-
243 
-
244 
-
245  /** Filters the input and returns the filtered value. Same as next(input-value).
-
246  @param in the signal to be smoothed.
-
247  @return the filtered signal.
-
248  */
-
249  inline
-
250  float operator()(float n) {
-
251  return next(n);
-
252  }
-
253 
-
254 
-
255  /** Sets how much smoothing the filter will apply to its input.
-
256  @param smoothness sets how much smoothing the filter will apply to
-
257  its input. Use a float in the range 0~1, where 0 is not very smooth and 0.99 is
-
258  very smooth.
-
259  */
-
260  inline
-
261  void setSmoothness(float smoothness)
-
262  {
-
263  a=1.f-smoothness;
-
264  }
-
265 
-
266 };
-
267 
-
268 
-
269 /** @endcond */
-
270 
-
271 
-
272 /* Specialization for UFix */
-
273 template<int8_t NI, int8_t NF>
-
274 class Smooth<UFix<NI,NF>>
-
275 {
-
276 private:
-
277  typedef UFix<NI, NF> internal_type;
-
278  internal_type last_out;
-
279  UFix<0,16> a;
-
280 
-
281 public:
-
282 
-
283 
-
284  /** Constructor.
-
285  @param smoothness sets how much smoothing the filter will apply to
-
286  its input. Use a float or a UFix<0,NF> in the range 0~1, where 0 is not very smooth and 0.99 is
-
287  very smooth.
-
288  */
-
289  template<typename T>
-
290  Smooth(T smoothness)
-
291  {
-
292  setSmoothness(smoothness);
-
293  }
-
294 
-
295  /** Constructor.
-
296  This constructor which doesn't take a smoothness parameter is useful when you incorporate Smooth into another class definition.
-
297  You need to call setSmoothness(float) for your object before using Smooth.
-
298  @note there's probably a better way to do this...
-
299  */
-
300  Smooth()
-
301  {}
-
302 
-
303 
-
304  /** Filters the input and returns the filtered value. You can also use the operator() function, eg. something like mySmoother(input-value).
-
305  @param in the signal to be smoothed.
-
306  @return the filtered signal.
-
307  */
-
308  inline
-
309  internal_type next(internal_type in)
-
310  {
-
311  internal_type out = last_out + a * (in - last_out); // With FixMath, the syntax is actually the same than with floats :)
-
312  last_out = out;
-
313  return out;
-
314  }
-
315 
-
316 
-
317 
-
318  inline
-
319  internal_type operator()(internal_type n) {
-
320  return next(n);
-
321  }
-
322 
-
323  /** Sets how much smoothing the filter will apply to its input.
-
324  @param smoothness sets how much smoothing the filter will apply to
-
325  its input. Use a float in the range 0~1, where 0 is not very smooth and 0.99 is
-
326  very smooth.
-
327  */
-
328  inline
-
329  void setSmoothness(float smoothness)
-
330  {
-
331  a=internal_type(1.f-smoothness);
-
332  }
-
333 
-
334  /** Sets how much smoothing the filter will apply to its input.
-
335  @param smoothness sets how much smoothing the filter will apply to
-
336  its input. Use a UFix<0,NF> in the range 0~1, where 0 is not very smooth and 0.99 is
-
337  very smooth.
-
338  */
-
339  template<int8_t _NF>
-
340  void setSmoothness(UFix<0,_NF> smoothness)
-
341  {
-
342  a = UFix<1,0>(1) - smoothness;
-
343  }
-
344 
-
345 };
-
346 
-
347 
-
348 
-
349 
-
350 /* Specialization for SFix */
-
351 template<int8_t NI, int8_t NF>
-
352 class Smooth<SFix<NI,NF>>
-
353 {
-
354 private:
-
355  typedef SFix<NI, NF> internal_type;
-
356  internal_type last_out;
-
357  UFix<0,16> a;
-
358 
-
359 public:
-
360 
-
361 
-
362  /** Constructor.
-
363  @param smoothness sets how much smoothing the filter will apply to
-
364  its input. Use a float or a UFix<0,NF> in the range 0~1, where 0 is not very smooth and 0.99 is
-
365  very smooth.
-
366  */
-
367  template<typename T>
-
368  Smooth(T smoothness)
-
369  {
-
370  setSmoothness(smoothness);
-
371  }
-
372 
-
373  /** Constructor.
-
374  This constructor which doesn't take a smoothness parameter is useful when you incorporate Smooth into another class definition.
-
375  You need to call setSmoothness(float) for your object before using Smooth.
-
376  @note there's probably a better way to do this...
-
377  */
-
378  Smooth()
-
379  {}
-
380 
-
381 
-
382  /** Filters the input and returns the filtered value. You can also use the operator() function, eg. something like mySmoother(input-value).
-
383  @param in the signal to be smoothed.
-
384  @return the filtered signal.
-
385  */
-
386  inline
-
387  internal_type next(internal_type in)
-
388  {
-
389  internal_type out = last_out + a * (in - last_out);
-
390  last_out = out;
-
391  return out;
-
392  }
-
393 
-
394 
-
395 
-
396  inline
-
397  internal_type operator()(internal_type n) {
-
398  return next(n);
-
399  }
-
400 
-
401  /** Sets how much smoothing the filter will apply to its input.
-
402  @param smoothness sets how much smoothing the filter will apply to
-
403  its input. Use a float in the range 0~1, where 0 is not very smooth and 0.99 is
-
404  very smooth.
-
405  */
-
406  inline
-
407  void setSmoothness(float smoothness)
-
408  {
-
409  a=internal_type(1.f-smoothness);
-
410  }
-
411 
-
412  /** Sets how much smoothing the filter will apply to its input.
-
413  @param smoothness sets how much smoothing the filter will apply to
-
414  its input. Use a UFix<0,NF> in the range 0~1, where 0 is not very smooth and 0.99 is
-
415  very smooth.
-
416  */
-
417  template<int8_t _NF>
-
418  void setSmoothness(UFix<0,_NF> smoothness)
-
419  {
-
420  a = UFix<1,0>(1) - smoothness;
-
421  }
-
422 
-
423 };
-
424 
-
425 /**
-
426 @example 05.Control_Filters/Smooth/Smooth.ino
-
427 This example demonstrates the Smooth class.
-
428 */
-
429 
-
430 #endif /* SMOOTH_H_ */
-
-
- - - diff --git a/extras/doc/html/_stack_8h_source.html b/extras/doc/html/_stack_8h_source.html deleted file mode 100644 index f6b9790dd..000000000 --- a/extras/doc/html/_stack_8h_source.html +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - - -Mozzi: Stack.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Stack.h
-
-
-
1 /*
-
2  * Stack.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2013-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12  /** A simple stack, used internally for keeping track of analog input channels as they are read.
-
13  This stack is really just an array with a pointer to the most recent item, and memory is allocated at compile time.
-
14 @tparam T the kind of numbers (or other things) to store.
-
15 @tparam NUM_ITEMS the maximum number of items the stack will need to hold.
-
16  */
-
17 template <class T, int NUM_ITEMS>
-
18 class Stack
-
19 {
-
20 private:
-
21  T _array[NUM_ITEMS];
-
22  int top;
-
23 
-
24 public:
-
25  /** Constructor
-
26  */
-
27  Stack(): top(-1)
-
28  {
-
29  }
-
30 
-
31 /** Put an item on the stack.
-
32 @param item the thing you want to put on the stack.
-
33 */
-
34  void push(T item)
-
35  {
-
36  if (top< (NUM_ITEMS-1)){
-
37  top++;
-
38  _array[top]=item;
-
39  }
-
40  }
-
41 
-
42 /** Get the item on top of the stack.
-
43 @return T the item
-
44 */
-
45  T pop()
-
46  {
-
47  if(top==-1) return -1;
-
48  T item =_array[top];
-
49  top--;
-
50  return item;
-
51  }
-
52 
-
53 };
-
-
- - - diff --git a/extras/doc/html/_state_variable_8h_source.html b/extras/doc/html/_state_variable_8h_source.html deleted file mode 100644 index acdba7afc..000000000 --- a/extras/doc/html/_state_variable_8h_source.html +++ /dev/null @@ -1,298 +0,0 @@ - - - - - - - -Mozzi: StateVariable.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
StateVariable.h
-
-
-
1 /*
-
2  * StateVariable.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 /**
-
13 State Variable Filter (approximation of Chamberlin version)
-
14 Informed by pseudocode at http://www.musicdsp.org/showone.php?id=23 and
-
15 http://www.musicdsp.org/showone.php?id=142. Here's the original:
-
16 ---------------------
-
17 cutoff = cutoff freq in Hz
-
18 fs = sampling frequency //(e.g. 44100Hz)
-
19 f = 2 sin (pi * cutoff / fs) //[approximately]
-
20 q = resonance/bandwidth [0 < q <= 1] most res: q=1, less: q=0
-
21 low = lowpass output
-
22 high = highpass output
-
23 band = bandpass output
-
24 notch = notch output
-
25 
-
26 scale = q
-
27 
-
28 low=high=band=0;
-
29 
-
30 //--beginloop
-
31 low = low + f * band;
-
32 high = scale * input - low - q*band;
-
33 band = f * high + band;
-
34 notch = high + low;
-
35 //--endloop
-
36 ----------------------
-
37 References :
-
38 Hal Chamberlin, Musical Applications of Microprocessors, 2nd Ed, Hayden Book
-
39 Company 1985. pp 490-492. Jon Dattorro, Effect Design Part 1, J. Audio Eng.
-
40 Soc., Vol 45, No. 9, 1997 September
-
41 */
-
42 
-
43 #ifndef STATEVARIABLE_H_
-
44 #define STATEVARIABLE_H_
-
45 
-
46 #include "Arduino.h"
-
47 #include "math.h"
-
48 #include "meta.h"
-
49 #include "mozzi_fixmath.h"
-
50 #include "mozzi_utils.h"
-
51 #include "ResonantFilter.h"
-
52 
-
53 //enum filter_types { LOWPASS, BANDPASS, HIGHPASS, NOTCH };
-
54 
-
55 /** A State Variable filter which offers 12db resonant low, high, bandpass and
-
56 notch modes.
-
57 @tparam FILTER_TYPE choose between LOWPASS, BANDPASS, HIGHPASS and NOTCH.
-
58 @note To save processing time, this version of the filter does not saturate
-
59 internally, so any resonant peaks are unceremoniously truncated. It may be
-
60 worth adding code to constrain the internal variables to enable resonant
-
61 saturating effects.
-
62 @todo Try adding code to constrain the internal variables to enable resonant
-
63 saturating effects.
-
64 */
-
65 template <int8_t FILTER_TYPE> class StateVariable {
-
66 
-
67 public:
-
68  /** Constructor.
-
69  */
- -
71 
-
72  /** Set how resonant the filter will be.
-
73  @param resonance a byte value between 1 and 255.
-
74  The lower this value is, the more resonant the filter.
-
75  At very low values, the filter can output loud peaks which can exceed
-
76  Mozzi's output range, so you may need to attenuate the output in your sketch.
-
77  @note Timing < 500 ns
-
78  */
-
79  void setResonance(Q0n8 resonance) {
-
80  // qvalue goes from 255 to 0, representing .999 to 0 in fixed point
-
81  // lower q, more resonance
-
82  q = resonance;
-
83  scale = (Q0n8)sqrt((unsigned int)resonance << 8);
-
84  }
-
85 
-
86  /** Set the centre or corner frequency of the filter.
-
87  @param centre_freq 20 - 4096 Hz (MOZZI_AUDIO_RATE/4).
-
88  This will be the cut-off frequency for LOWPASS and HIGHPASS, and the
-
89  centre frequency to pass or reduce for BANDPASS and NOTCH.
-
90  @note Timing 25-30us
-
91  @note The frequency calculation is VERY "approximate". This really needs to
-
92  be fixed.
-
93  */
-
94  void setCentreFreq(unsigned int centre_freq) {
-
95  // simple frequency tuning with error towards nyquist (reference? where did
-
96  // this come from?)
-
97  // f = (Q1n15)(((Q16n16_2PI*centre_freq)>>AUDIO_RATE_AS_LSHIFT)>>1);
-
98  f = (Q15n16)((Q16n16_2PI * centre_freq) >>
-
99  (AUDIO_RATE_AS_LSHIFT)); // this works best for now
-
100  // f = (Q15n16)(((Q16n16_2PI*centre_freq)<<(16-AUDIO_RATE_AS_LSHIFT))>>16);
-
101  // // a small shift left and a round 16 right is faster than big
-
102  // non-byte-aligned right in one go float ff =
-
103  // Q16n16_to_float(((Q16n16_PI*centre_freq))>>AUDIO_RATE_AS_LSHIFT); f =
-
104  // float_to_Q15n16(2.0f *sin(ff));
-
105  }
-
106 
-
107  /** Calculate the next sample, given an input signal.
-
108  @param input the signal input.
-
109  @return the signal output.
-
110  @note Timing: 16 - 20 us
-
111  */
-
112  inline int next(int input) {
-
113  // chooses a different next() function depending on whether the
-
114  // filter is declared as LOWPASS, BANDPASS, HIGHPASS or NOTCH.
-
115  // See meta.h.
-
116  return next(input, Int2Type<FILTER_TYPE>());
-
117  }
-
118 
-
119 private:
-
120  int low, band;
-
121  Q0n8 q, scale;
-
122  volatile Q15n16 f;
-
123 
-
124  /** Calculate the next sample, given an input signal.
-
125  @param in the signal input.
-
126  @return the signal output.
-
127  @note Timing: 16 - 20 us
-
128  */
-
129  inline int next(int input, Int2Type<LOWPASS>) {
-
130  // setPin13High();
-
131  low += ((f * band) >> 16);
-
132  int high = (((long)input - low - (((long)band * q) >> 8)) * scale) >> 8;
-
133  band += ((f * high) >> 16);
-
134  // int notch = high + low;
-
135  // setPin13Low();
-
136  return low;
-
137  }
-
138 
-
139  /** Calculate the next sample, given an input signal.
-
140  @param input the signal input.
-
141  @return the signal output.
-
142  @note Timing:
-
143  */
-
144  inline int next(int input, Int2Type<BANDPASS>) {
-
145  // setPin13High();
-
146  low += ((f * band) >> 16);
-
147  int high = (((long)input - low - (((long)band * q) >> 8)) * scale) >> 8;
-
148  band += ((f * high) >> 16);
-
149  // int notch = high + low;
-
150  // setPin13Low();
-
151  return band;
-
152  }
-
153 
-
154  /** Calculate the next sample, given an input signal.
-
155  @param input the signal input.
-
156  @return the signal output.
-
157  @note Timing:
-
158  */
-
159  inline int next(int input, Int2Type<HIGHPASS>) {
-
160  // setPin13High();
-
161  low += ((f * band) >> 16);
-
162  int high = (((long)input - low - (((long)band * q) >> 8)) * scale) >> 8;
-
163  band += ((f * high) >> 16);
-
164  // int notch = high + low;
-
165  // setPin13Low();
-
166  return high;
-
167  }
-
168 
-
169  /** Calculate the next sample, given an input signal.
-
170  @param input the signal input.
-
171  @return the signal output.
-
172  @note Timing: 16 - 20 us
-
173  */
-
174  inline int next(int input, Int2Type<NOTCH>) {
-
175  // setPin13High();
-
176  low += ((f * band) >> 16);
-
177  int high = (((long)input - low - (((long)band * q) >> 8)) * scale) >> 8;
-
178  band += ((f * high) >> 16);
-
179  int notch = high + low;
-
180  // setPin13Low();
-
181  return notch;
-
182  }
-
183 };
-
184 
-
185 /**
-
186 @example 11.Audio_Filters/StateVariableFilter/StateVariableFilter.ino
-
187 This example demonstrates the StateVariable class.
-
188 */
-
189 
-
190 #endif /* STATEVARIABLE_H_ */
-
-
- - - diff --git a/extras/doc/html/_wave_folder_8h_source.html b/extras/doc/html/_wave_folder_8h_source.html deleted file mode 100644 index be58d29e1..000000000 --- a/extras/doc/html/_wave_folder_8h_source.html +++ /dev/null @@ -1,238 +0,0 @@ - - - - - - - -Mozzi: WaveFolder.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
WaveFolder.h
-
-
-
1 /*
-
2  * WaveFolder.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2022-2024 Thomas Combriat and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 #ifndef WAVEFOLDER_H
-
13 #define WAVEFOLDER_H
-
14 
-
15 
-
16 #include "IntegerType.h"
-
17 #include "AudioOutput.h"
-
18 
-
19 
-
20 /*
-
21  A simple wavefolder which folds the waves once it reachs the up or
-
22  low limits. The wave can be folded several times. It constrains the wave
-
23  to be constrain between the LowLimit and the HighLimit.
-
24  By default, this class is working on data which not overflow the
-
25  AudioOutputStorage_t type, which is int by default.
-
26  Feeding samples which, before folding, are overflowing this container
-
27  will lead to unpredicted behavior.
-
28  It is possible to use a bigger type with the template formulation
-
29  if needed.
-
30 */
-
31 
-
32 
-
33 /** A simple wavefolder
-
34  */
-
35 
-
36 template<typename T=AudioOutputStorage_t>
- -
38 {
-
39 public:
-
40  /** Constructor
-
41  */
- -
43 
-
44 
-
45  /** Set the high limit where the wave will start to be folded back the other way.
-
46  @param highLimit the high limit used by the wavefolder.
-
47  */
-
48  void setHighLimit(T highLimit)
-
49  {
-
50  hl = highLimit;
-
51  R = hl-ll;
-
52  Ri = NUMERATOR / (hl-ll); // calculated here to speed up next()
-
53  }
-
54 
-
55 
-
56  /** Set the low limit where the wave will start to be folded back the other way.
-
57  @param lowLimit the low limit used by the wavefolder.
-
58  */
-
59  void setLowLimit(T lowLimit)
-
60  {
-
61  ll = lowLimit;
-
62  R = hl-ll;
-
63  Ri = NUMERATOR / (hl-ll); // calculated here to speed up next()
-
64  }
-
65 
-
66 
-
67  /** Set the low and the high limits at the same time.
-
68  @param lowLimit the low limit used by the wavefolder
-
69  @param highLimit the high limit used by the wavefolder
-
70  @note highLimit MUST be higher than lowLimit
-
71  */
-
72  void setLimits(T lowLimit, T highLimit)
-
73  {
-
74  hl = highLimit;
-
75  ll = lowLimit;
-
76  R = hl-ll;
-
77  Ri = NUMERATOR / (hl-ll); // calculated here to speed up next()
-
78  }
-
79 
-
80 
-
81  /** Return the next folded sample
-
82  @param in is the signal input.
-
83  @return the folded output.
-
84  */
-
85  T next(T in)
-
86  {
-
87  if (in > hl)
-
88  {
-
89  typename IntegerType<sizeof(T)>::unsigned_type sub = in-hl;
-
90  /* Instead of using a division, we multiply by the inverse.
-
91  As the inverse is necessary smaller than 1, in order to fit in an integer
-
92  we multiply it by NUMERATOR before computing the inverse.
-
93  The shift is equivalent to divide by the NUMERATOR:
-
94  q = sub / R = (sub * (NUMERATOR/R))/NUMERATOR with NUMERATOR/R = Ri
-
95  */
-
96  typename IntegerType<sizeof(T)>::unsigned_type q = ((typename IntegerType<sizeof(T)+sizeof(T)>::unsigned_type) sub*Ri) >> SHIFT;
-
97  typename IntegerType<sizeof(T)>::unsigned_type r = sub - q*R; // remainer
-
98  if (q&0b1) return ll+r; //odd
-
99  else return hl-r; // even
-
100 
-
101  }
-
102  else if (in < ll)
-
103  {
-
104  typename IntegerType<sizeof(T)>::unsigned_type sub = ll-in;
-
105  typename IntegerType<sizeof(T)>::unsigned_type q = ((typename IntegerType<sizeof(T)+sizeof(T)>::unsigned_type) sub*Ri) >> SHIFT;
-
106  typename IntegerType<sizeof(T)>::unsigned_type r = sub - q*R; // remainer
-
107  if (q&0b1) return hl-r;
-
108  else return ll+r;
-
109  }
-
110  else return in;
-
111  }
-
112 
-
113 private:
-
114  T hl;
-
115  T ll;
-
116  typename IntegerType<sizeof(T)>::unsigned_type R;
-
117  typename IntegerType<sizeof(T)>::unsigned_type Ri;
-
118  static const uint8_t SHIFT = (sizeof(T) << 3);
-
119  static const typename IntegerType<sizeof(T)>::unsigned_type NUMERATOR = ((typename IntegerType<sizeof(T)+sizeof(T)>::unsigned_type) 1<<(SHIFT))-1;
-
120 
-
121  // Slower (way slower, around 2.5 times) but more precise, kept in case we want to switch one day.
-
122  /* typename IntegerType<sizeof(T)+sizeof(T)>::unsigned_type Ri;
-
123  static const uint8_t SHIFT = 1+(sizeof(T) << 3);
-
124  static const typename IntegerType<sizeof(T)+sizeof(T)>::unsigned_type NUMERATOR = ((typename IntegerType<sizeof(T)+sizeof(T)>::unsigned_type) 1<<(SHIFT))-1;*/
-
125 
-
126 
-
127 };
-
128 
-
129 
-
130 #endif
-
-
- - - diff --git a/extras/doc/html/_wave_packet_8h_source.html b/extras/doc/html/_wave_packet_8h_source.html deleted file mode 100644 index 1a8045043..000000000 --- a/extras/doc/html/_wave_packet_8h_source.html +++ /dev/null @@ -1,302 +0,0 @@ - - - - - - - -Mozzi: WavePacket.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
WavePacket.h
-
-
-
1 /*
-
2  * WavePacket.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2013-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 
-
13 #ifndef WAVEPACKET_H
-
14 #define WAVEPACKET_H
-
15 
-
16 #include "MozziHeadersOnly.h"
-
17 #include "Oscil.h"
-
18 #include "tables/cos8192_int8.h"
-
19 #include "mozzi_fixmath.h"
-
20 #include "Phasor.h"
-
21 #include "Line.h"
-
22 #include "meta.h"
-
23 
-
24 
-
25 enum algorithms {SINGLE,DOUBLE};
-
26 
-
27 /**
-
28 Wavepacket synthesis, with two overlapping streams of wave packets. Draws on
-
29 Miller Puckette's Pure Data example, F14.wave.packet.pd. Each packet is an
-
30 enveloped grain of a sin (or cos) wave. The frequency of the wave, the width of
-
31 the envelopes and the rate of release of envelopes are the parameters which can
-
32 be changed.
-
33 @tparam ALGORITHM options are SINGLE or DOUBLE, for a single non-overlapping stream of packets or a double, overlapping stream.
-
34 */
-
35 template <int8_t ALGORITHM>
- -
37 {
-
38 public:
-
39 
-
40  /** Constructor.
-
41  */
- -
43  {
-
44  aCos.setTable(COS8192_DATA);
-
45  }
-
46 
-
47 
-
48  /** Set all the parameters for the synthesis.
-
49  The function is designed so that usable ranges for parameters can come from analog inputs, ie. 0-1023.
-
50  @param fundamental the rate at which packets are produced.
-
51  @param bandwidth the width of each packet. A lower value allows more
-
52  of the centre frequency to be audible, a rounder sound.
-
53  A higher value produces narrower packets, a more buzzing sound.
-
54  @param centrefreq the oscillation frequency within each packet.
-
55  */
-
56  inline
-
57  void set(int fundamental, int bandwidth, int centrefreq)
-
58  {
-
59  setFundamental(fundamental);
-
60  setBandwidth(bandwidth);
-
61  setCentreFreq(centrefreq);
-
62  }
-
63 
-
64 
-
65  /** Set the fundamental frequency.
-
66  The function is designed so that usable ranges for parameters can come from analog inputs, ie. 0-1023.
-
67  @param fundamental the rate at which packets are produced.
-
68  */
-
69  inline
-
70  void setFundamental(int fundamental)
-
71  {
-
72  aPhasor.setFreq(fundamental);
-
73  invFreq = Q8n24_FIX1 / fundamental;
-
74  }
-
75 
-
76 
-
77 
-
78  /** Set the bandwidth.
-
79  The function is designed so that usable ranges for parameters can come from analog inputs, ie. 0-1023.
-
80  @param bandwidth the width of each packet. A lower value allows more of the
-
81  centre frequency to be audible, a rounder sound.
-
82  A higher value produces narrower packets, a more buzzing sound.
-
83  */
-
84  inline
-
85  void setBandwidth(int bandwidth)
-
86  {
-
87  Q15n16 bw = invFreq*bandwidth;
-
88  bw >>= 9;
-
89  bw = max(bw, Q15n16_FIX1>>3);
-
90  aBandwidth.set(bw, AUDIO_STEPS_PER_CONTROL);
-
91  }
-
92 
-
93 
-
94 
-
95  /** Set the centre frequency.
-
96  The function is designed so that usable ranges for parameters can come from analog inputs, ie. 0-1023.
-
97  @param centrefreq the oscillation frequency within each packet.
-
98  */
-
99  inline
-
100  void setCentreFreq(int centrefreq)
-
101  {
-
102  Q15n16 cf = invFreq * centrefreq;
-
103  cf >>= 3;
-
104  aCentrefreq.set(cf, AUDIO_STEPS_PER_CONTROL);
-
105  }
-
106 
-
107 
-
108 /** Calculate the next synthesised sample.
-
109 @return a full-scale 16 bit value, which needs to be scaled to suit your sketch. If you're using it straight as the sketch output,
-
110 then that will be yourThing.next()>>2 for HIFI 14 bit output, or >>8 for STANDARD 8+ bit output.
-
111 */
-
112  inline
-
113  int next()
-
114  {
-
115  gcentrefreq = aCentrefreq.next();
-
116  gbandwidth = aBandwidth.next();
-
117  int phase1 = aPhasor.next()>>16; // -0.5 to 0.5, 0n15
-
118  if (ALGORITHM == DOUBLE) {
-
119  return (signalPath(params1, phase1)+signalPath(params2, phase1+32768))>>1;
-
120  } else {
-
121  return signalPath(params1, phase1);
-
122  }
-
123  }
-
124 
-
125 
-
126 
-
127 private:
-
128  //Q15n16 fundamental; // range 4 to 6271 in pd patch, 13 integer bits
-
129  Q8n24 invFreq;
-
130  Q15n16 gcentrefreq; // range 0 to 3068, 12 integer bits
-
131  Q15n16 gbandwidth; // range 1 to 3068, 12 integer bits
-
132 
-
133  // Lines to interpolate controls at audio rate
-
134  Line <Q15n16> aCentrefreq;
-
135  Line <Q16n16> aBandwidth;
-
136  Line <Q16n16> aFreq;
-
137 
-
138  // different sets of params for each audio phase stream
-
139  struct parameters
-
140  {
-
141  int previous_phase;
-
142  Q15n16 centrefreq;
-
143  Q23n8 bandwidth;
-
144  }
-
145  params1,params2;
-
146 
-
147  // the number of audio steps the line has to take to reach the next control value
-
148  const unsigned int AUDIO_STEPS_PER_CONTROL;
-
149 
-
150  Oscil <COS8192_NUM_CELLS, MOZZI_AUDIO_RATE> aCos;
-
151  Phasor <MOZZI_AUDIO_RATE> aPhasor;
-
152 
-
153 
-
154  inline
-
155  int signalPath(struct parameters &param, int phase) // 25us? * 2
-
156  {
-
157  //setPin13High();
-
158  int index;
-
159 
-
160  if(phase<param.previous_phase)
-
161  {
-
162  param.centrefreq = gcentrefreq>>8;
-
163  param.bandwidth = Q15n16_to_Q23n8(gbandwidth);
-
164  }
-
165  param.previous_phase = phase;
-
166 
-
167  // oscillation
-
168  index = (param.centrefreq * phase)>>16;
-
169  // hack to make peak in middle of packet, otherwise it centres around a zero-crossing..
-
170  index += COS8192_NUM_CELLS>>1;
-
171  index &= COS8192_NUM_CELLS-1;
-
172  int8_t sig1 = aCos.atIndex(index);
-
173 
-
174  // packet envelope
-
175  Q23n8 bwphase = (param.bandwidth * phase)>>8;
-
176  bwphase += COS8192_NUM_CELLS>>1;
-
177  index = constrain(bwphase, 0, (COS8192_NUM_CELLS-1));
-
178  uint8_t packet_width = 128 + aCos.atIndex(index);
-
179  // if (AUDIO_MODE == HIFI){
-
180  // return ((int) sig1 * packet_width)>>3; // scaled to fit HIFI updateAudio output
-
181  // }else{
-
182  // return ((int) sig1 * packet_width)>>8; // scaled to fit STANDARD updateAudio output
-
183  // }
-
184 
-
185  return ((int) sig1 * packet_width);
-
186  }
-
187 
-
188 };
-
189 
-
190 /** @example 06.Synthesis/WavePacket/WavePacket.ino
-
191 This is an example of how to use the WavePacket class.
-
192 */
-
193 
-
194 #endif // #ifndef WAVEPACKET_H
-
-
- - - diff --git a/extras/doc/html/_wave_packet_sample_8h_source.html b/extras/doc/html/_wave_packet_sample_8h_source.html deleted file mode 100644 index df44bf4e0..000000000 --- a/extras/doc/html/_wave_packet_sample_8h_source.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - - -Mozzi: WavePacketSample.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
WavePacketSample.h
-
-
-
1 /*
-
2  * WavePacketSample.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2013-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 
-
13 #ifndef WAVEPACKETSAMPLE_H
-
14 #define WAVEPACKETSAMPLE_H
-
15 
-
16 
-
17 #include "WavePacket.h"
-
18 /** A WavePacket which allows a custom table to be set as the audio source for the wavepackets (or grains).
-
19 @tparam ALGORITHM options are SINGLE or DOUBLE, for a single non-overlapping stream of packets or a double, overlapping stream.
-
20 
-
21 */
-
22 template <int8_t ALGORITHM>
-
23 class WavePacketSample: public WavePacket<ALGORITHM>
-
24 {
-
25 public:
-
26  /** Change the sound table which will be played. Needs to be 8192 cells long for now.
-
27  @param TABLE_NAME is the name of the array in the table ".h" file you're using.
-
28  */
-
29  inline
-
30  void setTable(const int8_t * TABLE_NAME)
-
31  {
-
32  aWav.setTable(TABLE_NAME);
-
33  }
-
34 
-
35 private:
-
36  Oscil <8192, MOZZI_AUDIO_RATE> aWav;
-
37 };
-
38 
-
39 /** @example 06.Synthesis/WavePacket_Sample/WavePacket_Sample.ino
-
40 This is an example of how to use the WavePacketSample class.
-
41 */
-
42 #endif // #ifndef WAVEPACKETSAMPLE_H
-
-
- - - diff --git a/extras/doc/html/_wave_shaper_8h_source.html b/extras/doc/html/_wave_shaper_8h_source.html deleted file mode 100644 index 241f7ded7..000000000 --- a/extras/doc/html/_wave_shaper_8h_source.html +++ /dev/null @@ -1,211 +0,0 @@ - - - - - - - -Mozzi: WaveShaper.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
WaveShaper.h
-
-
-
1 /*
-
2  * WaveShaper.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 #ifndef WAVESHAPER_H_
-
13 #define WAVESHAPER_H_
-
14 
-
15 #include "Arduino.h"
-
16 
-
17 /** WaveShaper maps values from its input to values in a table, which are returned as output.
-
18 @tparam T the type of numbers being input to be shaped, chosen to match the table.
-
19 */
-
20 
-
21 template <class T>
- -
23  {}
-
24 ;
-
25 
-
26 
-
27 /** int8_t specialisation of WaveShaper template*/
-
28 template <>
-
29 class WaveShaper <char>
-
30 {
-
31 
-
32 public:
-
33  /** Constructor. Use the template parameter to set type of numbers being mapped. For
-
34  example, WaveShaper <int> myWaveShaper; makes a WaveShaper which uses ints.
-
35  @tparam T the type of numbers being input to be shaped, chosen to match the table.
-
36  @param TABLE_NAME the name of the table being used, which can be found in the
-
37  ".h" file containing the table. */
-
38  WaveShaper(const int8_t * TABLE_NAME):table(TABLE_NAME)
-
39  {
-
40  ;
-
41  }
-
42 
-
43 
-
44  /** Maps input to output, transforming it according to the table being used.
-
45  @param in the input signal. For flexibility, it's up to you to give the correct offset
-
46  to your input signal. So if you're mapping a signed 8-bit signal (such as the output of
-
47  an Oscil) into a 256 cell table centred around cell 128, add 128 to offset the
-
48  input value.
-
49  @return the shaped signal.
-
50  */
-
51  inline
- -
53  {
-
54  return FLASH_OR_RAM_READ<const int8_t>(table + in);
-
55  }
-
56 
-
57 private:
-
58  const int8_t * table;
-
59 };
-
60 
-
61 
-
62 
-
63 /** int specialisation of WaveShaper template*/
-
64 template <>
-
65 class WaveShaper <int>
-
66 {
-
67 
-
68 public:
-
69  /** Constructor. Use the template parameter to set type of numbers being mapped. For
-
70  example, WaveShaper <int> myWaveShaper; makes a WaveShaper which uses ints.
-
71  @tparam T the type of numbers being input to be shaped, chosen to match the table.
-
72  @param TABLE_NAME the name of the table being used, which can be found in the
-
73  ".h" file containing the table. */
-
74  WaveShaper(const int16_t * TABLE_NAME):table(TABLE_NAME)
-
75  {
-
76  ;
-
77  }
-
78 
-
79 
-
80  /** Maps input to output, transforming it according to the table being used.
-
81  @param in the input signal. For flexibility, it's up to you to give the
-
82  correct offset to your input signal. So if you're mapping a signed 9-bit signal
-
83  (such as the sum of 2 8-bit Oscils) into a 512 cell table centred around
-
84  cell 256, add 256 to offset the input value. With a sigmoid table, this
-
85  may be useful for compressing a bigger signal into the -244 to 243
-
86  output range of Mozzi, rather than dividing the signal and returning a
-
87  int8_t from updateAudio().
-
88  @return the shaped signal.
-
89  */
-
90  inline
-
91  int next(int in)
-
92  {
-
93  return FLASH_OR_RAM_READ<const int16_t>(table + in);
-
94  }
-
95 
-
96 private:
-
97  const int16_t * table;
-
98 };
-
99 
-
100 /** @example 06.Synthesis/WaveShaper/WaveShaper.ino
-
101 This is an example of how to use the WaveShaper class.
-
102 */
-
103 #endif /* WAVESHAPER_H_ */
-
-
- - - diff --git a/extras/doc/html/annotated.html b/extras/doc/html/annotated.html deleted file mode 100644 index 4c90024cc..000000000 --- a/extras/doc/html/annotated.html +++ /dev/null @@ -1,167 +0,0 @@ - - - - - - - -Mozzi: Class List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Class List
-
-
-
Here are the classes, structs, unions and interfaces with brief descriptions:
-
[detail level 12]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 NMozziPrivateInternal
 CMozziRandPrivate
 CADSRA simple ADSR envelope generator
 CAudioDelayAudio delay line for comb filter, flange, chorus and short echo effects
 CAudioDelayFeedbackAudio delay line with feedback for comb filter, flange, chorus and short echo effects
 CAutoMapAutomatically map an input value to an output range without knowing the precise range of inputs beforehand
 CAutoRangeKeeps a running calculation of the range of the input values it receives
 CCapPollA class for reading voltage on a digital pin, derived from http://arduino.cc/en/Tutorial/RCtime
 CCircularBufferCircular buffer object
 CControlDelayControl-rate delay line for delaying control signals
 CDCfilterA DC-blocking filter useful for highlighting changes in control signals
 CEadExponential attack decay envelope
 CEventDelayA non-blocking replacement for Arduino's delay() function
 CInt2TypeEnables you to instantiate a template based on an integer value
 CIntegerTypeProvides appropriate integer types that can bit the given number of bytes on this platform (at most 64)
 CIntegerType< 1 >
 CIntegerType< 2 >
 CIntegerType< 4 >
 CIntegerType< 8 >
 CIntMapA faster version of Arduino's map() function
 CLineFor linear changes with a minimum of calculation at each step
 CLine< SFix< NI, NF > >
 CLine< UFix< NI, NF > >
 CLine< unsigned char >
 CLine< unsigned int >
 CLine< unsigned long >
 CMetaOscilMetaOscil is a wrapper for several Oscil
 CMetronomeA metronome class which is like an EventDelay which retriggers itself when the delay time is up, to produce a repeating beat
 CMidiToFreqPrivateInternal
 CMonoOutputThis struct encapsulates one frame of mono audio output
 CMultiResonantFilterA generic filter for audio signals that can produce lowpass, highpass, bandpass and notch outputs at runtime
 COscilOscil plays a wavetable, cycling through the table to generate an audio or control signal
 COverSampleEnables the resolution of analog inputs to be increased by oversampling and decimation
 CPDResonantPDResonant is a simple midi instrument using Phase distortion used to simulate resonant filter, based on https://en.wikipedia.org/wiki/Phase_distortion_synthesis
 CPhasorPhasor repeatedly generates a high resolution ramp at a variable frequency
 CPortamentoA simple portamento (pitch slide from one note to the next) effect, useful for note-based applications
 CRCpollA class for reading voltage on a digital pin, derived from http://arduino.cc/en/Tutorial/RCtime
 CResonantFilterA generic resonant filter for audio signals
 CReverbTankA reverb which sounds like the inside of a tin can
 CRollingAverageCalculates a running average over a specified number of the most recent readings
 CRollingStatWARNING: this class is work in progress, don't use it yet
 CSampleSample is like Oscil, it plays a wavetable
 CSampleHuffmanA sample player for samples encoded with Huffman compression
 CSmoothA simple infinite impulse response low pass filter for smoothing control or audio signals
 CSmooth< SFix< NI, NF > >
 CSmooth< UFix< NI, NF > >
 CStackA simple stack, used internally for keeping track of analog input channels as they are read
 CStateVariableState Variable Filter (approximation of Chamberlin version) Informed by pseudocode at http://www.musicdsp.org/showone.php?id=23 and
 CStereoOutputThis struct encapsulates one frame of mono audio output
 CWaveFolderA simple wavefolder
 CWavePacketWavepacket synthesis, with two overlapping streams of wave packets
 CWavePacketSampleA WavePacket which allows a custom table to be set as the audio source for the wavepackets (or grains)
 CWaveShaperWaveShaper maps values from its input to values in a table, which are returned as output
 CWaveShaper< char >Int8_t specialisation of WaveShaper template
 CWaveShaper< int >Int specialisation of WaveShaper template
-
-
-
- - - diff --git a/extras/doc/html/annotated_dup.js b/extras/doc/html/annotated_dup.js deleted file mode 100644 index 3f3e033bd..000000000 --- a/extras/doc/html/annotated_dup.js +++ /dev/null @@ -1,59 +0,0 @@ -var annotated_dup = -[ - [ "MozziPrivate", "namespace_mozzi_private.html", [ - [ "MozziRandPrivate", "class_mozzi_private_1_1_mozzi_rand_private.html", "class_mozzi_private_1_1_mozzi_rand_private" ] - ] ], - [ "ADSR", "class_a_d_s_r.html", "class_a_d_s_r" ], - [ "AudioDelay", "class_audio_delay.html", "class_audio_delay" ], - [ "AudioDelayFeedback", "class_audio_delay_feedback.html", "class_audio_delay_feedback" ], - [ "AutoMap", "group__sensortools.html#class_auto_map", "group__sensortools_class_auto_map" ], - [ "AutoRange", "group__sensortools.html#class_auto_range", "group__sensortools_class_auto_range" ], - [ "CapPoll", "class_cap_poll.html", "class_cap_poll" ], - [ "CircularBuffer", "class_circular_buffer.html", "class_circular_buffer" ], - [ "ControlDelay", "class_control_delay.html", "class_control_delay" ], - [ "DCfilter", "class_d_cfilter.html", "class_d_cfilter" ], - [ "Ead", "class_ead.html", "class_ead" ], - [ "EventDelay", "class_event_delay.html", "class_event_delay" ], - [ "Int2Type", "group__util.html#struct_int2_type", null ], - [ "IntegerType", "group__util.html#struct_integer_type", "group__util_struct_integer_type" ], - [ "IntegerType< 1 >", "struct_integer_type_3_011_01_4.html", "struct_integer_type_3_011_01_4" ], - [ "IntegerType< 2 >", "struct_integer_type_3_012_01_4.html", "struct_integer_type_3_012_01_4" ], - [ "IntegerType< 4 >", "struct_integer_type_3_014_01_4.html", "struct_integer_type_3_014_01_4" ], - [ "IntegerType< 8 >", "struct_integer_type_3_018_01_4.html", "struct_integer_type_3_018_01_4" ], - [ "IntMap", "class_int_map.html", "class_int_map" ], - [ "Line", "class_line.html", "class_line" ], - [ "Line< SFix< NI, NF > >", "class_line_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html", "class_line_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4" ], - [ "Line< UFix< NI, NF > >", "class_line_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html", "class_line_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4" ], - [ "Line< unsigned char >", "class_line_3_01unsigned_01char_01_4.html", "class_line_3_01unsigned_01char_01_4" ], - [ "Line< unsigned int >", "class_line_3_01unsigned_01int_01_4.html", "class_line_3_01unsigned_01int_01_4" ], - [ "Line< unsigned long >", "class_line_3_01unsigned_01long_01_4.html", "class_line_3_01unsigned_01long_01_4" ], - [ "MetaOscil", "class_meta_oscil.html", "class_meta_oscil" ], - [ "Metronome", "class_metronome.html", "class_metronome" ], - [ "MidiToFreqPrivate", "class_midi_to_freq_private.html", "class_midi_to_freq_private" ], - [ "MonoOutput", "struct_mono_output.html", "struct_mono_output" ], - [ "MultiResonantFilter", "class_multi_resonant_filter.html", "class_multi_resonant_filter" ], - [ "Oscil", "class_oscil.html", "class_oscil" ], - [ "OverSample", "group__sensortools.html#class_over_sample", "group__sensortools_class_over_sample" ], - [ "PDResonant", "class_p_d_resonant.html", "class_p_d_resonant" ], - [ "Phasor", "class_phasor.html", "class_phasor" ], - [ "Portamento", "class_portamento.html", "class_portamento" ], - [ "RCpoll", "class_r_cpoll.html", "class_r_cpoll" ], - [ "ResonantFilter", "class_resonant_filter.html", "class_resonant_filter" ], - [ "ReverbTank", "class_reverb_tank.html", "class_reverb_tank" ], - [ "RollingAverage", "group__sensortools.html#class_rolling_average", "group__sensortools_class_rolling_average" ], - [ "RollingStat", "group__sensortools.html#class_rolling_stat", "group__sensortools_class_rolling_stat" ], - [ "Sample", "class_sample.html", "class_sample" ], - [ "SampleHuffman", "class_sample_huffman.html", "class_sample_huffman" ], - [ "Smooth", "class_smooth.html", "class_smooth" ], - [ "Smooth< SFix< NI, NF > >", "class_smooth_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html", "class_smooth_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4" ], - [ "Smooth< UFix< NI, NF > >", "class_smooth_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html", "class_smooth_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4" ], - [ "Stack", "class_stack.html", "class_stack" ], - [ "StateVariable", "class_state_variable.html", "class_state_variable" ], - [ "StereoOutput", "struct_stereo_output.html", "struct_stereo_output" ], - [ "WaveFolder", "class_wave_folder.html", "class_wave_folder" ], - [ "WavePacket", "class_wave_packet.html", "class_wave_packet" ], - [ "WavePacketSample", "class_wave_packet_sample.html", "class_wave_packet_sample" ], - [ "WaveShaper", "class_wave_shaper.html", null ], - [ "WaveShaper< char >", "class_wave_shaper_3_01char_01_4.html", "class_wave_shaper_3_01char_01_4" ], - [ "WaveShaper< int >", "class_wave_shaper_3_01int_01_4.html", "class_wave_shaper_3_01int_01_4" ] -]; \ No newline at end of file diff --git a/extras/doc/html/audio2huff_8py_source.html b/extras/doc/html/audio2huff_8py_source.html deleted file mode 100644 index 606ed416c..000000000 --- a/extras/doc/html/audio2huff_8py_source.html +++ /dev/null @@ -1,245 +0,0 @@ - - - - - - - -Mozzi: audio2huff.py Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
audio2huff.py
-
-
-
1 #! /usr/bin/python
-
2 #
-
3 # Generator for compressed Arduino audio data
-
4 # Thomas Grill, 2011
-
5 # http://grrrr.org
-
6 #
-
7 # Modified by TIm Barrass 2013
-
8 # - changed PROGMEM to CONSTTABLE_STORAGE, to stop compiler warning
-
9 # - moved huffman table to progmem
-
10 # - added --name argument to give all constants specific names
-
11 # - changed all constant names to upper case
-
12 # - added include guards, Arduino and avr includes
-
13 #
-
14 # Dependencies:
-
15 # Numerical Python (numpy): http://numpy.scipy.org/
-
16 # scikits.audiolab: http://pypi.python.org/pypi/scikits.audiolab/
-
17 # purehuff: https://grrrr.org/data/dev/purehuff/
-
18 # pylab / matplotlib (only for plotting): http://matplotlib.sourceforge.net/
-
19 #
-
20 # NOTE: the scikits.audiolab dependency requires Python 2!
-
21 # see https://github.com/Roger-random/mozzi_wilhelm/issues/1#issuecomment-770141226
-
22 #
-
23 #For help on options invoke with:
-
24 # audio2huff --help
-
25 
-
26 import sys,os.path
-
27 from itertools import imap,chain,izip
-
28 
-
29 try:
-
30  import numpy as N
-
31 except ImportError:
-
32  print >>sys.stderr, "Error: Numerical Python not found"
-
33  exit(-1)
-
34 
-
35 try:
-
36  from scikits.audiolab import Sndfile
-
37 except ImportError:
-
38  print >>sys.stderr, "Error: scikits.audiolab not found"
-
39  exit(-1)
-
40 
-
41 try:
-
42  import purehuff
-
43 except ImportError:
-
44  print >>sys.stderr, "Error: purehuff module not found"
-
45  exit(-1)
-
46 
-
47 def grouper(n,seq):
-
48  """group list elements"""
-
49  it = iter(seq)
-
50  while True:
-
51  l = [v for _,v in izip(xrange(n),it)]
-
52  if l:
-
53  yield l
-
54  if len(l) < n:
-
55  break
-
56 
-
57 def arrayformatter(seq,perline=40):
-
58  """format list output linewise"""
-
59  return ",\n".join(",".join(imap(str,s)) for s in grouper(perline,seq))
-
60 
-
61 if __name__ == "__main__":
-
62  from optparse import OptionParser
-
63  parser = OptionParser()
-
64  parser.add_option("--bits", type="int", default=8, dest="bits",help="bit resolution")
-
65  parser.add_option("--sndfile", dest="sndfile",help="input sound file")
-
66  parser.add_option("--hdrfile", dest="hdrfile",help="output C header file")
-
67  parser.add_option("--name", dest="name",help="prefix for tables and constants in file")
-
68  parser.add_option("--plothist", type="int", default=0, dest="plothist",help="plot histogram")
-
69  (options, args) = parser.parse_args()
-
70 
-
71  if not options.sndfile:
-
72  print >>sys.stderr,"Error: --sndfile argument required"
-
73  exit(-1)
-
74 
-
75  sndf = Sndfile(options.sndfile,'r')
-
76  sound = sndf.read_frames(sndf.nframes)
-
77  fs = sndf.samplerate
-
78  del sndf
-
79 
-
80  # mix down multi-channel audio
-
81  if len(sound.shape) > 1:
-
82  sound = N.mean(sound,axis=1)
-
83 
-
84  # convert to n bits (no dithering, except it has already been done with the same bit resolution for the soundfile)
-
85  sound8 = N.clip((sound*(2**(options.bits-1))).astype(int),-2**(options.bits-1),2**(options.bits-1)-1)
-
86  # the following mapping with int is necessary as numpy.int32 types are not digested well by the HuffmanTree class
-
87  dsound8 = map(int,chain((sound8[0],),imap(lambda x: x[1]-x[0],izip(sound8[:-1],sound8[1:]))))
-
88 
-
89  print >>sys.stderr,"min/max: %i/%i"%(N.min(sound8),N.max(sound8))
-
90  print >>sys.stderr,"data bits: %i"%(len(sound8)*options.bits)
-
91 
-
92  hist = purehuff.histogram(dsound8)
-
93 
-
94  if options.plothist:
-
95  try:
-
96  import pylab as P
-
97  except ImportError:
-
98  print >>sys.stderr, "Plotting needs pylab"
-
99 
-
100  from collections import defaultdict
-
101  d = defaultdict(float)
-
102  for n,v in hist:
-
103  d[v] += n
-
104  x = range(min(d.iterkeys()),max(d.iterkeys())+1)
-
105  y = [d[xi] for xi in x]
-
106 
-
107  P.title("Histogram of sample differentials, file %s"%os.path.split(options.sndfile)[-1])
-
108  P.plot(x,y,marker='x')
-
109  P.show()
-
110 
-
111  hufftree = purehuff.HuffTree(hist)
-
112 
-
113  # get decoder instance
-
114  decoder = hufftree.decoder()
-
115  # get encoder instance
-
116  encoder = hufftree.encoder()
-
117  # encode data
-
118  enc = encoder(dsound8)
-
119 
-
120  print >>sys.stderr,"encoded bits: %i"%len(enc)
-
121  print >>sys.stderr,"ratio: %.0f%%"%((len(enc)*100.)/(len(sound8)*8))
-
122  print >>sys.stderr,"decoder length: %.0f words"%(len(decoder.huff))
-
123 
-
124  if options.hdrfile:
-
125  hdrf = file(options.hdrfile,'wt')
-
126  print >>hdrf,"// generated by Mozzi/extras/python/audio2huff.py \n"
-
127  print >>hdrf,"#ifndef " + options.name + "_H_"
-
128  print >>hdrf,"#define " + options.name + "_H_\n"
-
129  print >>hdrf,'#if ARDUINO >= 100'
-
130  print >>hdrf,'#include <Arduino.h>\n'
-
131  print >>hdrf,'#include "mozzi_pgmspace.h"\n \n'
-
132  print >>hdrf,"#define " + options.name + "_SAMPLERATE %i"%fs
-
133  print >>hdrf,"#define " + options.name + "_SAMPLE_BITS %i"%options.bits
-
134  print >>hdrf,'CONSTTABLE_STORAGE(int) ' + options.name + '_HUFFMAN[%i] = {\n%s\n};'%(len(decoder.huff),arrayformatter(decoder.huff))
-
135  print >>hdrf,'unsigned long const ' + options.name + '_SOUNDDATA_BITS = %iL;'%len(enc)
-
136  print >>hdrf,'CONSTTABLE_STORAGE(unsigned char) ' + options.name + '_SOUNDDATA[] = {\n%s\n};'%arrayformatter(enc.data)
-
137  print >>hdrf,"#endif /* " + options.name + "_H_ */"
-
-
- - - diff --git a/extras/doc/html/basic_info.html b/extras/doc/html/basic_info.html deleted file mode 100644 index b6dd2e744..000000000 --- a/extras/doc/html/basic_info.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - -Mozzi: Getting Started - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Getting Started
-
-
-

You are currently looking at the Mozzi API documentation.

-

It is the most comprehensive source of all functions and classes available in Mozzi, but not necesarrily the best starting point for learning about Mozzi. For getting started, it is recommended to browse through the tutorials at https://sensorium.github.io/Mozzi/learn/ .

-
-
-
- - - diff --git a/extras/doc/html/bc_s.png b/extras/doc/html/bc_s.png deleted file mode 100644 index f07b24e6f..000000000 Binary files a/extras/doc/html/bc_s.png and /dev/null differ diff --git a/extras/doc/html/bdwn.png b/extras/doc/html/bdwn.png deleted file mode 100644 index 5eed37053..000000000 Binary files a/extras/doc/html/bdwn.png and /dev/null differ diff --git a/extras/doc/html/blahblah4b__int8_8h_source.html b/extras/doc/html/blahblah4b__int8_8h_source.html deleted file mode 100644 index 2d1155d28..000000000 --- a/extras/doc/html/blahblah4b__int8_8h_source.html +++ /dev/null @@ -1,1318 +0,0 @@ - - - - - - - -Mozzi: blahblah4b_int8.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
blahblah4b_int8.h
-
-
-
1 #ifndef BLAHBLAH4B_H_
-
2 #define BLAHBLAH4B_H_
-
3 
-
4 #include <Arduino.h>
-
5 #include "mozzi_pgmspace.h"
-
6 
-
7 #define BLAHBLAH4B_NUM_CELLS 22569
-
8 #define BLAHBLAH4B_SAMPLERATE 16384
-
9 
-
10 CONSTTABLE_STORAGE(int8_t) BLAHBLAH4B_DATA [] = { -1, 2, 6, 9, 12, 15, 17, 20, 22, 25, 28, 30,
-
11 32, 34, 37, 38, 40, 42, 44, 46, 47, 49, 50, 52, 53, 53, 54, 55, 55, 55, 54, 54,
-
12 53, 51, 48, 46, 42, 38, 34, 29, 25, 20, 15, 10, 5, -1, -6, -11, -16, -21, -25,
-
13 -29, -33, -37, -40, -43, -47, -50, -52, -55, -57, -58, -59, -59, -59, -59, -58,
-
14 -57, -56, -55, -54, -53, -51, -50, -48, -45, -42, -39, -35, -32, -27, -23, -18,
-
15 -14, -9, -5, -1, 3, 7, 10, 13, 16, 19, 22, 25, 28, 30, 33, 36, 38, 40, 43, 45,
-
16 47, 49, 51, 53, 54, 56, 57, 57, 58, 58, 58, 58, 58, 57, 56, 55, 52, 49, 46, 41,
-
17 37, 33, 28, 23, 17, 12, 7, 1, -5, -10, -15, -20, -25, -30, -34, -38, -42, -46,
-
18 -49, -52, -55, -57, -59, -61, -62, -63, -62, -62, -61, -60, -59, -58, -57, -56,
-
19 -54, -52, -51, -48, -45, -42, -38, -34, -31, -26, -22, -18, -13, -9, -5, -1, 3,
-
20 6, 9, 12, 15, 18, 21, 24, 27, 29, 32, 34, 37, 39, 41, 43, 45, 47, 49, 51, 53,
-
21 55, 56, 57, 59, 59, 59, 59, 58, 58, 57, 55, 53, 50, 47, 43, 38, 34, 29, 24, 19,
-
22 15, 9, 4, -2, -8, -13, -18, -24, -28, -32, -37, -40, -44, -47, -50, -54, -56,
-
23 -59, -61, -62, -64, -64, -64, -63, -62, -61, -60, -58, -58, -57, -55, -53, -50,
-
24 -48, -45, -42, -39, -35, -31, -27, -22, -22, -17, -8, -2, 4, 8, 12, 14, 17, 21,
-
25 23, 25, 28, 30, 32, 36, 39, 42, 44, 45, 46, 48, 50, 51, 53, 54, 56, 58, 58, 60,
-
26 60, 59, 59, 57, 55, 53, 51, 49, 46, 42, 39, 35, 29, 24, 19, 13, 8, 2, -4, -10,
-
27 -15, -20, -27, -31, -33, -39, -41, -45, -49, -50, -55, -56, -59, -61, -62, -64,
-
28 -64, -63, -62, -61, -59, -58, -54, -52, -50, -47, -44, -42, -42, -41, -39, -37,
-
29 -35, -34, -33, -30, -23, -15, -8, -2, 4, 6, 8, 11, 13, 16, 22, 26, 27, 27, 27,
-
30 28, 29, 29, 30, 33, 36, 40, 44, 47, 49, 49, 48, 48, 47, 46, 47, 48, 51, 53, 55,
-
31 56, 57, 56, 53, 49, 43, 39, 34, 30, 26, 22, 19, 17, 14, 9, 3, -2, -8, -14, -22,
-
32 -28, -32, -36, -38, -39, -41, -41, -43, -46, -49, -52, -55, -58, -60, -61, -59,
-
33 -58, -57, -55, -52, -50, -51, -51, -50, -49, -48, -47, -46, -42, -37, -34, -29,
-
34 -24, -20, -16, -12, -10, -7, -3, 0, 3, 6, 10, 14, 17, 20, 23, 26, 28, 29, 31,
-
35 33, 35, 36, 39, 42, 44, 47, 48, 50, 52, 53, 53, 54, 54, 55, 56, 56, 56, 56, 56,
-
36 54, 51, 47, 42, 37, 33, 29, 24, 19, 15, 10, 6, 0, -5, -10, -15, -21, -27, -33,
-
37 -37, -40, -42, -45, -48, -48, -50, -53, -55, -56, -57, -59, -60, -60, -58, -57,
-
38 -56, -55, -53, -52, -54, -53, -49, -48, -46, -48, -48, -48, -52, -43, -28, -21,
-
39 -14, -17, -20, -9, 0, 7, 14, 14, 13, 15, 21, 29, 34, 33, 32, 32, 32, 37, 44, 46,
-
40 46, 46, 45, 46, 49, 55, 56, 55, 55, 51, 49, 52, 54, 57, 58, 56, 55, 54, 52, 50,
-
41 48, 44, 35, 28, 23, 17, 13, 10, 5, -2, -11, -20, -26, -27, -33, -41, -44, -51,
-
42 -59, -62, -64, -65, -65, -66, -68, -70, -68, -67, -66, -63, -65, -59, -54, -57,
-
43 -52, -41, -38, -41, -43, -38, -32, -32, -31, -27, -23, -20, -23, -24, -12, -3,
-
44 0, 7, 11, 11, 14, 13, 17, 22, 16, 15, 20, 23, 28, 34, 38, 43, 40, 37, 37, 38,
-
45 44, 47, 47, 48, 47, 48, 51, 53, 57, 56, 54, 55, 56, 55, 55, 54, 54, 50, 43, 40,
-
46 39, 36, 32, 26, 16, 7, 0, -7, -14, -19, -23, -29, -38, -47, -52, -60, -65, -72,
-
47 -80, -84, -86, -87, -85, -86, -83, -84, -86, -82, -79, -73, -64, -57, -41, -30,
-
48 -32, -27, -15, -5, -6, -10, 0, 12, 16, 15, 19, 30, 33, 28, 29, 31, 31, 31, 21,
-
49 17, 17, 15, 18, 19, 22, 20, 17, 19, 19, 17, 14, 8, 8, 11, 11, 10, 8, 15, 21, 16,
-
50 10, 15, 24, 23, 18, 24, 30, 29, 30, 35, 37, 36, 37, 38, 40, 40, 37, 40, 43, 40,
-
51 34, 30, 27, 26, 19, 13, 9, 4, -1, -9, -15, -18, -28, -34, -37, -48, -54, -58,
-
52 -61, -60, -67, -71, -72, -72, -70, -77, -76, -70, -69, -68, -66, -60, -52, -42,
-
53 -33, -35, -32, -20, -14, -14, -15, -6, 6, 8, 7, 13, 22, 28, 26, 29, 36, 32, 32,
-
54 37, 40, 41, 39, 42, 48, 46, 42, 36, 33, 34, 30, 26, 23, 22, 26, 25, 19, 14, 16,
-
55 21, 13, 9, 16, 19, 16, 13, 18, 21, 14, 17, 21, 20, 20, 21, 27, 31, 26, 26, 26,
-
56 25, 24, 20, 18, 16, 14, 11, 5, 3, 0, -7, -10, -16, -20, -28, -33, -33, -39, -43,
-
57 -50, -53, -51, -58, -61, -60, -61, -61, -62, -63, -60, -60, -58, -53, -53, -52,
-
58 -48, -37, -25, -25, -24, -11, -1, -1, -3, 2, 13, 17, 18, 19, 24, 33, 36, 37, 38,
-
59 38, 37, 38, 39, 39, 39, 41, 41, 39, 38, 33, 29, 28, 25, 23, 18, 16, 18, 18, 14,
-
60 8, 4, 9, 14, 6, 1, 10, 18, 14, 8, 11, 16, 15, 15, 18, 19, 21, 25, 28, 31, 28,
-
61 23, 25, 28, 23, 15, 12, 19, 20, 10, 3, 1, -2, -7, -16, -22, -27, -30, -31, -37,
-
62 -46, -51, -52, -53, -57, -63, -66, -64, -62, -63, -65, -65, -61, -57, -56, -57,
-
63 -54, -51, -46, -40, -35, -24, -17, -15, -5, 4, 7, 2, 5, 20, 27, 24, 25, 31, 43,
-
64 46, 39, 39, 44, 44, 41, 38, 40, 42, 42, 43, 39, 35, 31, 26, 24, 23, 18, 14, 12,
-
65 13, 13, 8, 2, 4, 11, 8, -2, 1, 10, 10, 6, 6, 11, 11, 10, 12, 14, 17, 18, 20, 26,
-
66 26, 21, 20, 24, 24, 15, 10, 13, 15, 9, 3, 3, 0, -7, -13, -18, -21, -29, -34,
-
67 -32, -37, -46, -49, -49, -50, -56, -59, -59, -61, -59, -58, -59, -57, -54, -51,
-
68 -50, -49, -47, -42, -38, -36, -34, -24, -10, -11, -9, 3, 12, 13, 7, 14, 28, 30,
-
69 29, 30, 39, 48, 44, 44, 50, 49, 45, 43, 43, 44, 41, 39, 41, 38, 35, 29, 23, 23,
-
70 20, 14, 8, 4, 4, 6, 1, -2, 0, 5, 1, -5, -2, 2, 2, 1, 4, 8, 8, 8, 13, 16, 18, 17,
-
71 20, 26, 25, 21, 21, 23, 22, 17, 13, 14, 12, 9, 6, 3, -1, -8, -13, -14, -20, -29,
-
72 -32, -30, -36, -47, -45, -46, -51, -52, -55, -54, -55, -56, -53, -54, -52, -49,
-
73 -49, -44, -43, -42, -35, -34, -32, -27, -25, -15, -1, -3, -3, 8, 18, 17, 10, 18,
-
74 30, 30, 31, 29, 35, 45, 42, 40, 44, 43, 39, 37, 38, 38, 33, 34, 33, 30, 29, 22,
-
75 17, 17, 15, 11, 4, 0, 1, 4, 3, -4, -4, 5, 4, -4, -3, 4, 6, 5, 5, 11, 13, 13, 16,
-
76 19, 22, 19, 19, 27, 26, 20, 18, 21, 22, 16, 11, 8, 8, 7, -1, -6, -9, -16, -19,
-
77 -21, -27, -36, -38, -35, -43, -50, -47, -50, -53, -51, -52, -54, -54, -51, -47,
-
78 -48, -48, -44, -41, -36, -36, -36, -29, -27, -23, -19, -19, -13, 1, 8, 2, 4, 16,
-
79 22, 17, 15, 24, 32, 32, 28, 30, 38, 39, 34, 36, 41, 35, 29, 31, 32, 30, 25, 22,
-
80 23, 22, 18, 12, 10, 11, 8, 3, -1, -4, -2, 3, 0, -2, 3, 6, 3, 2, 6, 8, 7, 8, 13,
-
81 17, 17, 16, 22, 25, 23, 19, 21, 24, 19, 15, 16, 17, 12, 6, 5, 5, 0, -10, -11,
-
82 -9, -17, -26, -29, -28, -32, -40, -41, -41, -45, -46, -47, -50, -50, -50, -49,
-
83 -48, -49, -45, -42, -41, -37, -36, -34, -32, -30, -25, -22, -20, -17, -14, -5,
-
84 9, 6, 0, 11, 21, 22, 12, 13, 28, 32, 28, 24, 26, 35, 34, 30, 33, 34, 30, 29, 30,
-
85 29, 25, 21, 23, 22, 20, 16, 10, 13, 14, 9, 3, -3, -2, 3, 2, -4, -4, 7, 9, 0, -1,
-
86 5, 7, 4, 5, 10, 13, 13, 14, 18, 21, 18, 15, 21, 24, 16, 13, 14, 18, 14, 6, 3, 6,
-
87 5, -6, -7, -4, -14, -20, -17, -21, -31, -35, -29, -33, -39, -37, -40, -43, -39,
-
88 -43, -46, -42, -42, -41, -36, -36, -35, -32, -28, -29, -31, -25, -22, -23, -18,
-
89 -16, -16, -4, 6, -1, -2, 8, 13, 11, 6, 10, 20, 22, 19, 14, 20, 27, 22, 21, 28,
-
90 26, 22, 25, 24, 22, 21, 16, 16, 17, 15, 11, 9, 12, 11, 7, 2, -2, -1, 4, 3, -2,
-
91 3, 9, 8, 6, 4, 8, 12, 11, 9, 14, 19, 18, 19, 24, 26, 22, 22, 28, 27, 21, 19, 21,
-
92 22, 17, 9, 9, 11, 5, -3, -2, -2, -11, -18, -15, -20, -32, -32, -30, -35, -38,
-
93 -38, -40, -42, -42, -43, -46, -44, -41, -41, -38, -37, -37, -33, -31, -31, -30,
-
94 -27, -25, -25, -20, -19, -20, -16, -3, 2, -6, -4, 5, 12, 7, 0, 9, 19, 18, 13,
-
95 11, 19, 22, 19, 20, 23, 22, 22, 23, 22, 23, 18, 16, 18, 16, 15, 12, 11, 14, 13,
-
96 11, 5, 2, 5, 9, 7, 8, 12, 13, 14, 14, 13, 14, 15, 19, 21, 23, 24, 23, 28, 31,
-
97 30, 27, 29, 32, 29, 24, 23, 24, 20, 14, 11, 8, 6, 1, 0, -2, -8, -13, -20, -21,
-
98 -28, -33, -33, -38, -37, -41, -45, -44, -48, -47, -48, -50, -50, -49, -46, -45,
-
99 -45, -41, -37, -38, -37, -35, -34, -29, -29, -27, -24, -25, -20, -6, -1, -10,
-
100 -7, 7, 12, 3, -2, 12, 22, 18, 14, 13, 23, 29, 23, 26, 31, 28, 28, 30, 29, 28,
-
101 26, 27, 27, 23, 24, 22, 21, 23, 21, 17, 13, 8, 11, 15, 12, 12, 20, 19, 16, 17,
-
102 19, 18, 16, 21, 23, 20, 23, 24, 25, 29, 27, 24, 26, 28, 22, 18, 18, 18, 15, 8,
-
103 3, 5, 4, -6, -8, -7, -13, -24, -28, -25, -36, -44, -39, -42, -44, -49, -51, -49,
-
104 -52, -56, -56, -57, -57, -54, -52, -50, -49, -46, -40, -43, -42, -35, -34, -32,
-
105 -30, -28, -24, -22, -22, -19, -3, 6, -3, -4, 10, 18, 10, 4, 15, 26, 29, 24, 22,
-
106 31, 39, 36, 32, 37, 36, 35, 39, 37, 36, 37, 37, 36, 32, 31, 29, 25, 25, 24, 18,
-
107 14, 9, 8, 14, 12, 9, 11, 11, 11, 10, 6, 5, 6, 11, 11, 8, 10, 14, 16, 19, 18, 14,
-
108 16, 20, 16, 11, 10, 12, 12, 6, 2, 1, -1, -6, -9, -12, -19, -24, -28, -31, -35,
-
109 -40, -41, -44, -45, -47, -53, -51, -52, -54, -53, -55, -56, -53, -48, -45, -44,
-
110 -41, -38, -35, -32, -30, -29, -24, -18, -18, -16, -12, -10, -7, -4, 1, 13, 14,
-
111 9, 14, 24, 29, 21, 20, 33, 39, 37, 33, 32, 41, 47, 40, 38, 40, 41, 43, 39, 36,
-
112 35, 33, 34, 28, 21, 23, 20, 16, 14, 8, 3, 0, -5, -6, -3, -3, -4, -7, -5, 0, -6,
-
113 -10, -7, -1, 2, -2, -1, 6, 11, 11, 12, 14, 16, 17, 19, 15, 12, 14, 16, 13, 9, 8,
-
114 7, 5, 2, -4, -8, -11, -19, -21, -22, -29, -33, -31, -32, -37, -41, -41, -44,
-
115 -45, -43, -47, -48, -43, -41, -41, -38, -35, -33, -31, -27, -25, -25, -19, -16,
-
116 -15, -11, -9, -7, -3, 0, 1, 1, 1, 9, 21, 17, 11, 19, 29, 30, 20, 21, 33, 36, 33,
-
117 28, 27, 33, 34, 29, 31, 31, 27, 27, 24, 20, 17, 13, 14, 10, 4, 4, 1, -3, -4, -8,
-
118 -11, -14, -17, -12, -7, -10, -12, -8, -4, -5, -8, -4, 3, 7, 9, 10, 13, 19, 24,
-
119 26, 29, 30, 31, 33, 32, 27, 26, 26, 27, 26, 20, 16, 17, 13, 6, 1, -4, -8, -14,
-
120 -20, -19, -26, -32, -29, -34, -38, -41, -45, -44, -46, -48, -48, -49, -46, -41,
-
121 -42, -41, -37, -35, -31, -31, -31, -25, -23, -22, -18, -16, -13, -12, -10, -6,
-
122 -6, -5, -6, 2, 13, 9, 6, 13, 22, 22, 13, 15, 23, 25, 25, 20, 18, 26, 28, 25, 26,
-
123 23, 22, 23, 18, 14, 11, 11, 14, 8, 4, 6, 2, 0, -2, -4, -2, -5, -9, -2, 4, 1, -1,
-
124 3, 10, 10, 7, 10, 14, 20, 23, 22, 25, 32, 37, 37, 37, 40, 40, 39, 36, 32, 31,
-
125 29, 27, 26, 23, 17, 13, 11, 5, -4, -8, -11, -20, -24, -25, -32, -38, -36, -38,
-
126 -47, -50, -49, -52, -55, -56, -57, -56, -54, -53, -52, -47, -45, -43, -39, -39,
-
127 -38, -33, -30, -27, -24, -18, -14, -14, -10, -8, -5, -2, -2, -1, 9, 17, 11, 13,
-
128 23, 29, 27, 20, 24, 30, 32, 30, 24, 28, 35, 34, 30, 30, 30, 29, 27, 21, 17, 17,
-
129 18, 16, 10, 10, 10, 7, 7, 3, 3, 5, 3, 3, 5, 7, 7, 7, 11, 13, 13, 14, 16, 19, 24,
-
130 25, 24, 30, 33, 35, 35, 35, 36, 34, 32, 27, 23, 23, 21, 17, 11, 8, 6, -2, -7,
-
131 -13, -17, -20, -27, -35, -38, -39, -45, -50, -50, -50, -57, -63, -58, -59, -64,
-
132 -61, -60, -56, -55, -54, -49, -47, -43, -40, -38, -34, -30, -26, -20, -16, -14,
-
133 -9, -5, -3, 1, 2, 6, 8, 8, 20, 25, 24, 26, 32, 39, 36, 29, 33, 39, 39, 36, 33,
-
134 36, 41, 38, 36, 35, 32, 31, 28, 23, 21, 17, 19, 19, 13, 10, 8, 6, 4, -1, -4, -6,
-
135 -9, -7, -5, -7, -6, -4, -2, 0, -3, -2, 0, 4, 7, 6, 8, 14, 18, 21, 22, 23, 25,
-
136 24, 22, 22, 20, 18, 17, 18, 17, 10, 8, 9, 4, -3, -8, -9, -14, -20, -24, -27,
-
137 -30, -33, -35, -37, -41, -44, -44, -46, -51, -50, -47, -46, -45, -44, -40, -39,
-
138 -37, -34, -32, -29, -27, -22, -17, -15, -12, -7, -3, 0, 0, 2, 5, 7, 7, 7, 9, 13,
-
139 16, 21, 22, 22, 25, 27, 26, 23, 23, 25, 26, 25, 23, 23, 25, 25, 23, 22, 21, 18,
-
140 16, 14, 11, 10, 9, 8, 5, 1, -2, -5, -7, -9, -12, -12, -10, -11, -11, -8, -6, -6,
-
141 -6, -3, -1, -1, 2, 5, 9, 13, 16, 21, 26, 29, 32, 34, 37, 38, 38, 39, 38, 37, 38,
-
142 36, 33, 31, 26, 24, 19, 13, 8, 3, 0, -9, -14, -16, -23, -28, -32, -35, -39, -44,
-
143 -46, -49, -51, -52, -53, -54, -54, -51, -51, -49, -46, -44, -38, -38, -36, -28,
-
144 -27, -24, -18, -15, -13, -10, -5, -1, -1, 2, 5, 5, 6, 7, 7, 8, 8, 7, 12, 13, 12,
-
145 12, 15, 17, 14, 9, 12, 11, 9, 8, 5, 6, 8, 7, 6, 5, 4, 5, 4, 1, 0, -2, 2, 4, 1,
-
146 5, 9, 10, 13, 13, 17, 22, 22, 24, 28, 30, 32, 32, 37, 42, 41, 43, 47, 49, 51,
-
147 51, 50, 52, 51, 49, 44, 40, 37, 32, 25, 20, 13, 8, 2, -6, -9, -17, -27, -29,
-
148 -32, -40, -50, -52, -54, -61, -65, -67, -71, -71, -67, -71, -73, -69, -66, -62,
-
149 -63, -58, -54, -51, -43, -42, -34, -27, -26, -18, -11, -8, -5, 0, 6, 8, 9, 9,
-
150 13, 14, 16, 14, 16, 26, 27, 24, 28, 30, 30, 27, 23, 23, 22, 21, 18, 14, 15, 18,
-
151 16, 15, 14, 10, 11, 10, 4, 2, 3, 5, 1, -1, 2, 2, 2, 2, 2, 4, 4, 4, 8, 13, 14,
-
152 17, 21, 25, 27, 28, 32, 34, 37, 39, 39, 41, 46, 47, 47, 48, 49, 48, 45, 42, 38,
-
153 31, 28, 22, 15, 9, 2, 0, -5, -15, -19, -22, -30, -37, -42, -47, -54, -61, -59,
-
154 -64, -70, -67, -69, -68, -69, -70, -64, -64, -62, -56, -55, -49, -45, -41, -31,
-
155 -30, -24, -14, -13, -6, -1, 1, 7, 9, 14, 16, 16, 21, 20, 20, 23, 20, 21, 26, 26,
-
156 24, 26, 28, 28, 24, 23, 22, 18, 19, 17, 12, 14, 14, 13, 14, 13, 11, 11, 10, 8,
-
157 5, 4, 4, 1, -1, 1, -3, -3, -3, -3, -2, -1, 3, 4, 5, 11, 13, 14, 16, 19, 23, 25,
-
158 27, 30, 34, 38, 40, 42, 47, 48, 48, 50, 50, 47, 45, 42, 38, 33, 28, 23, 17, 12,
-
159 6, -2, -8, -14, -21, -28, -34, -42, -47, -51, -58, -64, -64, -65, -71, -71, -68,
-
160 -70, -71, -67, -66, -64, -58, -57, -52, -45, -39, -36, -30, -20, -17, -13, -5,
-
161 -2, 2, 6, 9, 12, 15, 19, 19, 20, 24, 24, 21, 22, 20, 16, 16, 13, 13, 12, 10, 11,
-
162 10, 11, 8, 4, 4, 3, -2, -5, -5, -6, -6, -5, -5, -4, -2, 0, 0, -1, 4, 5, 6, 9,
-
163 11, 15, 19, 21, 26, 31, 36, 39, 40, 43, 46, 46, 47, 46, 48, 51, 50, 49, 51, 52,
-
164 52, 48, 46, 44, 38, 32, 26, 19, 12, 4, -4, -8, -16, -26, -28, -34, -42, -48,
-
165 -50, -57, -63, -65, -69, -71, -73, -76, -75, -71, -69, -76, -68, -60, -62, -61,
-
166 -52, -44, -43, -35, -27, -24, -18, -11, -5, 0, 5, 7, 12, 18, 18, 20, 23, 25, 23,
-
167 22, 22, 19, 17, 15, 12, 14, 16, 12, 9, 13, 15, 9, 3, 3, 2, -1, -5, -9, -9, -5,
-
168 -4, -5, -3, -1, 1, 2, 2, -2, -3, 1, 2, -1, -1, 3, 8, 14, 18, 21, 31, 38, 38, 39,
-
169 44, 46, 42, 44, 48, 48, 49, 53, 55, 59, 61, 59, 59, 60, 57, 51, 45, 42, 36, 29,
-
170 21, 11, 6, 1, -8, -16, -19, -25, -38, -47, -47, -55, -65, -67, -68, -73, -76,
-
171 -76, -77, -78, -77, -73, -71, -71, -68, -62, -57, -52, -49, -40, -32, -29, -20,
-
172 -12, -8, -3, 6, 13, 13, 16, 20, 24, 25, 26, 27, 29, 29, 29, 27, 25, 22, 19, 20,
-
173 20, 14, 13, 16, 16, 12, 9, 9, 9, 7, 5, 2, 0, 2, 3, 4, 4, 4, 6, 9, 9, 8, 8, 10,
-
174 10, 8, 8, 6, 5, 7, 8, 8, 8, 10, 15, 16, 16, 18, 20, 21, 20, 21, 22, 22, 24, 28,
-
175 29, 30, 33, 36, 38, 38, 38, 39, 37, 35, 33, 30, 25, 22, 20, 15, 11, 6, 3, -1,
-
176 -8, -14, -21, -27, -33, -40, -43, -50, -52, -53, -55, -57, -62, -59, -57, -62,
-
177 -61, -59, -58, -58, -52, -48, -46, -40, -31, -26, -24, -18, -13, -10, -5, -4, 1,
-
178 3, 5, 9, 11, 14, 15, 17, 18, 17, 14, 12, 9, 4, 2, 0, -1, -1, -3, 0, 3, 5, 3, 0,
-
179 2, 2, -2, -4, -5, -4, 0, 2, 3, 7, 12, 17, 18, 17, 19, 22, 25, 24, 23, 29, 35,
-
180 37, 40, 45, 50, 54, 54, 53, 53, 53, 50, 47, 47, 46, 45, 45, 46, 46, 46, 44, 40,
-
181 37, 32, 25, 17, 10, 2, -5, -12, -19, -22, -28, -34, -36, -43, -49, -52, -58,
-
182 -62, -68, -71, -70, -74, -75, -72, -69, -67, -67, -60, -56, -55, -51, -46, -39,
-
183 -36, -34, -25, -19, -15, -9, -2, 5, 10, 14, 17, 19, 19, 23, 23, 20, 21, 19, 18,
-
184 13, 8, 9, 4, 5, 8, 5, 5, 6, 6, 6, 2, -1, -1, -3, -5, -8, -10, -4, -2, -1, 5, 8,
-
185 10, 12, 13, 13, 10, 11, 12, 10, 11, 12, 13, 18, 24, 27, 29, 35, 42, 41, 39, 42,
-
186 43, 41, 40, 39, 42, 43, 44, 46, 48, 50, 50, 49, 48, 46, 41, 39, 33, 28, 23, 15,
-
187 7, 0, -3, -10, -22, -25, -28, -37, -45, -51, -53, -58, -64, -67, -70, -71, -74,
-
188 -74, -73, -73, -72, -69, -64, -62, -59, -52, -47, -42, -35, -28, -24, -19, -8,
-
189 -4, -3, 5, 11, 14, 17, 20, 25, 25, 27, 29, 26, 26, 25, 20, 18, 16, 11, 8, 10,
-
190 10, 8, 8, 10, 8, 5, 5, 3, -1, 0, -2, -4, -3, -2, 1, 4, 7, 9, 10, 13, 12, 10, 10,
-
191 8, 6, 6, 5, 4, 5, 8, 9, 9, 12, 14, 15, 17, 17, 16, 19, 19, 19, 21, 24, 27, 29,
-
192 33, 36, 37, 40, 42, 42, 43, 43, 43, 42, 40, 38, 34, 31, 26, 21, 16, 11, 3, -3,
-
193 -8, -16, -22, -29, -36, -40, -47, -51, -56, -59, -63, -68, -67, -69, -70, -68,
-
194 -67, -65, -63, -58, -55, -52, -45, -41, -35, -29, -25, -19, -12, -7, -3, 1, 7,
-
195 9, 10, 13, 15, 14, 16, 18, 15, 14, 13, 9, 6, 1, -2, -2, -1, -2, -4, 0, 2, 0, 0,
-
196 1, 0, -2, -3, -4, -5, -3, 0, 2, 6, 10, 13, 16, 19, 19, 21, 27, 26, 24, 28, 33,
-
197 35, 36, 42, 46, 49, 51, 50, 49, 51, 49, 46, 45, 45, 43, 42, 43, 43, 43, 44, 42,
-
198 38, 36, 32, 25, 21, 17, 9, 2, -4, -10, -17, -22, -26, -33, -35, -39, -48, -51,
-
199 -53, -57, -61, -63, -64, -67, -66, -65, -68, -62, -59, -56, -56, -53, -45, -44,
-
200 -40, -34, -28, -22, -20, -14, -6, -3, -1, 4, 11, 12, 13, 13, 16, 18, 18, 17, 13,
-
201 15, 14, 6, 2, 1, -2, -6, -7, -6, -7, -6, -4, -4, -3, -2, -4, -4, -3, -4, -5, -3,
-
202 1, 3, 7, 12, 14, 19, 23, 24, 25, 25, 25, 23, 23, 21, 19, 19, 22, 22, 20, 25, 31,
-
203 32, 33, 35, 38, 35, 32, 32, 30, 30, 29, 28, 30, 34, 36, 38, 40, 42, 42, 41, 39,
-
204 35, 31, 27, 20, 13, 9, 3, -4, -8, -13, -19, -24, -29, -37, -42, -48, -55, -60,
-
205 -65, -68, -70, -72, -74, -71, -69, -68, -67, -63, -59, -59, -55, -48, -46, -42,
-
206 -32, -28, -23, -14, -8, -3, 4, 8, 9, 13, 16, 15, 16, 20, 20, 16, 18, 19, 12, 10,
-
207 7, 2, -1, -1, -2, -2, 0, 1, 2, 5, 6, 4, 5, 8, 6, 4, 7, 10, 12, 18, 22, 24, 30,
-
208 36, 37, 38, 40, 39, 37, 37, 35, 31, 30, 31, 29, 27, 27, 24, 21, 20, 16, 12, 9,
-
209 6, 3, 1, 1, -1, -1, 3, 5, 4, 6, 8, 9, 10, 10, 12, 12, 13, 14, 12, 12, 10, 8, 8,
-
210 6, 1, 0, -2, -7, -10, -13, -17, -22, -25, -29, -34, -37, -41, -46, -44, -49,
-
211 -51, -48, -49, -48, -48, -45, -41, -40, -35, -33, -30, -24, -23, -20, -14, -10,
-
212 -7, -4, 2, 6, 6, 11, 10, 9, 13, 8, 4, 4, 1, -5, -7, -11, -14, -17, -19, -16,
-
213 -17, -15, -11, -10, -5, -5, -7, -2, 0, -1, 0, 4, 8, 11, 17, 23, 28, 35, 40, 43,
-
214 46, 47, 47, 47, 46, 44, 42, 42, 42, 40, 42, 42, 40, 39, 36, 33, 28, 21, 19, 13,
-
215 9, 7, 4, 4, 6, 6, 8, 9, 10, 11, 10, 9, 7, 4, 2, -1, -6, -9, -12, -13, -12, -17,
-
216 -20, -20, -19, -24, -30, -30, -31, -38, -40, -43, -47, -46, -45, -46, -48, -43,
-
217 -41, -45, -41, -40, -38, -37, -36, -30, -28, -23, -21, -17, -7, -6, -3, 1, 2, 2,
-
218 5, 4, 1, 2, 2, 0, -2, 0, -2, -7, -6, -5, -12, -15, -16, -17, -16, -14, -14, -14,
-
219 -7, -3, -3, -2, 1, 3, 4, 6, 5, 5, 10, 14, 17, 19, 22, 26, 30, 32, 30, 29, 29,
-
220 28, 24, 21, 24, 24, 27, 36, 37, 40, 46, 48, 48, 46, 46, 42, 37, 37, 34, 32, 35,
-
221 37, 40, 45, 47, 46, 46, 45, 38, 30, 23, 12, 1, -7, -15, -24, -28, -31, -35, -40,
-
222 -43, -47, -53, -57, -64, -71, -73, -77, -81, -78, -74, -74, -70, -61, -55, -54,
-
223 -47, -40, -39, -34, -29, -26, -21, -14, -8, -2, 5, 11, 15, 21, 24, 21, 23, 20,
-
224 14, 12, 11, 6, -1, -2, -2, -7, -10, -12, -12, -10, -8, -9, -11, -7, -4, -4, -2,
-
225 -1, 3, 9, 14, 15, 19, 28, 34, 38, 40, 44, 47, 49, 50, 48, 47, 47, 45, 43, 38,
-
226 35, 32, 29, 25, 20, 15, 11, 5, 1, -2, -6, -10, -11, -11, -11, -12, -11, -8, -4,
-
227 -2, 1, 2, 7, 11, 13, 17, 20, 22, 26, 27, 26, 24, 23, 22, 19, 15, 11, 5, 2, -2,
-
228 -7, -11, -17, -20, -25, -32, -38, -43, -45, -51, -55, -55, -57, -59, -56, -53,
-
229 -53, -50, -43, -42, -39, -33, -30, -27, -22, -17, -12, -7, -3, 1, 7, 11, 12, 12,
-
230 15, 15, 11, 8, 4, 2, -2, -8, -12, -14, -17, -21, -21, -17, -18, -18, -13, -8,
-
231 -9, -8, -4, -3, 0, 1, 2, 6, 13, 17, 22, 30, 37, 42, 48, 52, 52, 52, 53, 52, 49,
-
232 46, 44, 43, 42, 40, 38, 37, 35, 31, 27, 24, 18, 12, 7, 3, -2, -5, -5, -5, -4, 0,
-
233 1, 3, 7, 9, 9, 9, 9, 7, 6, 4, 1, -3, -5, -6, -8, -9, -10, -11, -14, -16, -16,
-
234 -21, -24, -28, -32, -34, -39, -45, -45, -44, -47, -48, -46, -46, -42, -37, -36,
-
235 -36, -30, -22, -23, -25, -16, -9, -11, -11, -2, 1, 0, 3, 7, 8, 8, 9, 6, 4, 4,
-
236 -3, -7, -7, -11, -16, -17, -18, -22, -21, -16, -12, -11, -9, -4, -3, -1, -1, -2,
-
237 2, 4, 4, 4, 6, 12, 18, 21, 25, 28, 31, 33, 31, 29, 28, 25, 22, 21, 16, 15, 20,
-
238 25, 27, 30, 38, 42, 40, 39, 41, 38, 34, 31, 28, 28, 28, 28, 33, 39, 43, 46, 48,
-
239 48, 45, 40, 35, 25, 14, 5, -7, -18, -23, -29, -34, -37, -40, -44, -47, -51, -55,
-
240 -60, -65, -70, -74, -76, -76, -77, -72, -65, -61, -53, -46, -38, -31, -26, -21,
-
241 -16, -10, -9, -5, 2, 3, 9, 15, 19, 22, 25, 27, 25, 23, 19, 13, 9, 3, -5, -13,
-
242 -17, -18, -23, -26, -25, -26, -23, -19, -18, -16, -11, -7, -6, -3, -1, 3, 9, 14,
-
243 18, 22, 31, 37, 41, 45, 48, 48, 47, 46, 42, 37, 32, 27, 23, 18, 13, 8, 6, 5, 0,
-
244 -4, -6, -8, -10, -12, -13, -13, -12, -8, -4, -1, 4, 11, 18, 25, 30, 34, 41, 45,
-
245 48, 50, 51, 52, 53, 50, 46, 40, 35, 28, 20, 11, 1, -7, -17, -26, -34, -43, -52,
-
246 -57, -60, -69, -74, -73, -77, -82, -79, -76, -78, -74, -66, -62, -58, -49, -39,
-
247 -33, -23, -12, -8, -1, 11, 16, 18, 24, 27, 28, 30, 30, 26, 25, 26, 19, 14, 11,
-
248 6, -1, -9, -14, -23, -30, -35, -39, -38, -37, -35, -30, -23, -18, -13, -6, 0, 3,
-
249 8, 12, 16, 20, 27, 35, 42, 51, 57, 63, 70, 72, 72, 70, 67, 61, 53, 45, 36, 30,
-
250 24, 17, 12, 6, 1, -4, -8, -14, -21, -26, -30, -33, -36, -36, -34, -30, -23, -16,
-
251 -8, 1, 9, 16, 23, 28, 32, 35, 37, 37, 35, 33, 31, 26, 21, 19, 17, 11, 4, 0, -6,
-
252 -18, -24, -29, -40, -48, -52, -62, -69, -68, -72, -73, -68, -69, -67, -59, -53,
-
253 -51, -46, -33, -28, -29, -15, -6, -6, 5, 15, 17, 23, 32, 31, 30, 35, 33, 27, 24,
-
254 21, 12, 7, 4, -8, -13, -11, -20, -26, -19, -16, -22, -20, -12, -12, -14, -12,
-
255 -11, -10, -5, -4, -5, 3, 12, 16, 23, 31, 36, 41, 47, 46, 42, 43, 42, 34, 28, 25,
-
256 20, 16, 16, 14, 11, 15, 16, 14, 13, 12, 11, 8, 6, 4, 1, 3, 4, 5, 12, 17, 20, 27,
-
257 33, 34, 36, 36, 32, 26, 20, 11, 2, -5, -10, -17, -23, -24, -28, -34, -35, -36,
-
258 -42, -48, -54, -57, -64, -71, -70, -68, -70, -64, -53, -48, -41, -30, -21, -13,
-
259 -10, -5, 0, 4, 6, 4, 10, 17, 18, 20, 25, 27, 27, 28, 23, 17, 11, 3, -5, -19,
-
260 -27, -32, -43, -44, -46, -48, -39, -33, -29, -19, -12, -6, 0, 3, 7, 12, 15, 20,
-
261 23, 29, 40, 45, 52, 61, 65, 68, 69, 65, 60, 52, 42, 32, 21, 11, 1, -8, -13, -17,
-
262 -21, -22, -23, -25, -24, -25, -26, -25, -24, -21, -18, -13, -5, 5, 15, 26, 37,
-
263 47, 56, 62, 67, 70, 70, 66, 61, 56, 45, 34, 25, 14, 3, -5, -16, -29, -35, -43,
-
264 -57, -64, -71, -81, -86, -86, -94, -100, -90, -83, -83, -75, -62, -52, -42, -27,
-
265 -19, -9, 5, 14, 19, 26, 35, 38, 44, 49, 49, 52, 53, 50, 46, 42, 33, 21, 12, 3,
-
266 -13, -26, -35, -45, -54, -62, -68, -66, -61, -58, -51, -41, -32, -23, -13, -4,
-
267 4, 12, 22, 29, 35, 43, 53, 62, 70, 76, 81, 84, 84, 82, 75, 67, 57, 45, 31, 17,
-
268 3, -9, -19, -29, -37, -42, -48, -51, -52, -53, -53, -51, -45, -40, -35, -24,
-
269 -13, -2, 11, 25, 38, 50, 60, 70, 79, 83, 84, 84, 81, 76, 67, 56, 43, 30, 17, 2,
-
270 -11, -26, -38, -51, -64, -71, -79, -93, -99, -96, -101, -108, -105, -95, -86,
-
271 -81, -70, -55, -39, -24, -15, -2, 16, 27, 32, 45, 52, 53, 59, 63, 63, 62, 60,
-
272 54, 47, 41, 31, 16, 5, -4, -21, -36, -47, -60, -68, -76, -87, -88, -79, -76,
-
273 -73, -58, -42, -31, -19, -4, 7, 19, 31, 38, 44, 55, 64, 70, 77, 83, 87, 92, 92,
-
274 86, 81, 75, 62, 46, 32, 16, -1, -14, -26, -39, -46, -49, -52, -53, -50, -48,
-
275 -43, -38, -35, -32, -24, -12, -1, 10, 18, 26, 41, 59, 72, 80, 82, 79, 79, 79,
-
276 73, 60, 42, 21, 5, -6, -22, -39, -45, -55, -70, -74, -73, -81, -91, -91, -92,
-
277 -97, -97, -92, -89, -81, -69, -55, -36, -18, -6, 13, 32, 43, 55, 64, 68, 68, 71,
-
278 69, 61, 57, 55, 47, 38, 32, 21, 10, 1, -13, -27, -41, -57, -72, -85, -95, -96,
-
279 -88, -83, -79, -63, -41, -25, -13, 4, 21, 33, 40, 43, 47, 56, 62, 64, 68, 74,
-
280 78, 83, 84, 81, 77, 71, 58, 41, 25, 9, -9, -23, -35, -45, -48, -46, -42, -36,
-
281 -28, -19, -10, -3, 3, 8, 11, 14, 19, 24, 30, 33, 40, 49, 52, 53, 53, 50, 42, 29,
-
282 15, 1, -14, -34, -48, -57, -68, -78, -83, -81, -80, -82, -83, -79, -71, -71,
-
283 -70, -61, -51, -44, -34, -20, -7, 10, 25, 37, 50, 62, 68, 69, 73, 72, 64, 57,
-
284 49, 40, 28, 17, 5, -5, -13, -26, -39, -47, -56, -64, -68, -69, -70, -68, -59,
-
285 -51, -44, -32, -17, -4, 7, 17, 28, 39, 48, 54, 58, 65, 67, 67, 68, 66, 61, 57,
-
286 52, 43, 33, 23, 12, 1, -8, -20, -29, -34, -37, -40, -38, -32, -26, -17, -6, 1,
-
287 10, 21, 28, 35, 40, 42, 44, 47, 47, 43, 38, 35, 30, 20, 9, 1, -5, -20, -32, -37,
-
288 -50, -62, -65, -72, -82, -84, -84, -86, -83, -79, -70, -61, -51, -40, -27, -13,
-
289 -3, 9, 24, 31, 36, 46, 51, 51, 55, 53, 51, 48, 42, 34, 24, 16, 4, -9, -21, -35,
-
290 -47, -55, -64, -68, -62, -61, -58, -45, -33, -24, -13, 0, 11, 19, 25, 32, 38,
-
291 44, 49, 52, 58, 60, 62, 66, 65, 61, 56, 51, 42, 29, 16, 4, -8, -18, -29, -37,
-
292 -41, -41, -41, -38, -32, -25, -16, -6, 3, 9, 18, 28, 34, 39, 43, 47, 50, 49, 43,
-
293 39, 35, 27, 16, 4, -7, -18, -29, -41, -53, -59, -67, -76, -77, -79, -83, -80,
-
294 -74, -71, -64, -55, -45, -32, -19, -8, 4, 19, 31, 40, 50, 56, 59, 63, 64, 58,
-
295 53, 48, 39, 28, 16, 3, -9, -20, -32, -45, -56, -64, -68, -69, -71, -70, -61,
-
296 -52, -45, -33, -18, -6, 8, 21, 31, 41, 52, 61, 67, 70, 72, 75, 76, 72, 65, 61,
-
297 56, 46, 35, 24, 13, 1, -10, -22, -32, -39, -43, -46, -47, -44, -39, -32, -22,
-
298 -12, -2, 9, 18, 28, 37, 41, 42, 45, 45, 42, 38, 30, 23, 18, 9, -5, -14, -20,
-
299 -29, -39, -47, -56, -60, -64, -71, -73, -69, -68, -66, -58, -49, -42, -30, -15,
-
300 -6, 3, 17, 27, 34, 42, 46, 47, 49, 48, 43, 37, 32, 24, 15, 6, -4, -13, -20, -27,
-
301 -34, -38, -41, -43, -42, -41, -42, -38, -31, -27, -23, -15, -6, 3, 12, 21, 30,
-
302 39, 47, 52, 55, 58, 58, 57, 53, 48, 42, 37, 31, 24, 18, 12, 7, 4, 1, -3, -6, -6,
-
303 -7, -8, -8, -8, -6, -6, -7, -8, -10, -11, -13, -18, -21, -25, -29, -33, -35,
-
304 -37, -37, -37, -37, -33, -30, -30, -26, -20, -18, -17, -12, -8, -4, 0, 3, 8, 13,
-
305 17, 21, 24, 26, 27, 25, 22, 17, 11, 4, -3, -11, -20, -23, -25, -28, -29, -27,
-
306 -25, -20, -15, -12, -9, -6, -4, -2, 1, 3, 6, 9, 11, 17, 24, 28, 30, 34, 35, 34,
-
307 33, 29, 23, 17, 10, 4, -1, -5, -9, -10, -11, -10, -7, -5, -2, 1, 2, 4, 5, 5, 5,
-
308 4, 1, 1, -1, -3, -6, -8, -11, -14, -17, -19, -24, -26, -27, -30, -34, -32, -30,
-
309 -30, -30, -27, -22, -18, -15, -9, -5, -1, 3, 7, 11, 15, 15, 16, 17, 16, 15, 12,
-
310 9, 7, 8, 6, 5, 6, 8, 8, 8, 9, 10, 8, 5, 3, 0, -3, -5, -7, -8, -8, -6, -3, -1, 1,
-
311 4, 6, 6, 6, 6, 4, 1, 0, -2, -4, -3, -3, -2, 1, 5, 8, 10, 13, 14, 16, 16, 15, 12,
-
312 8, 5, 2, -1, -5, -9, -14, -18, -22, -27, -31, -34, -39, -42, -43, -44, -44, -42,
-
313 -38, -32, -26, -21, -13, -6, 2, 8, 13, 18, 22, 23, 25, 25, 24, 22, 19, 15, 11,
-
314 6, 1, -4, -9, -14, -16, -17, -18, -19, -17, -15, -11, -8, -6, -2, 2, 4, 6, 10,
-
315 13, 15, 16, 19, 21, 21, 21, 20, 18, 16, 12, 8, 4, -1, -6, -10, -13, -14, -15,
-
316 -16, -15, -14, -11, -8, -5, -1, 2, 4, 7, 9, 10, 11, 10, 10, 8, 5, 2, -1, -8,
-
317 -13, -20, -28, -33, -39, -47, -50, -51, -54, -51, -45, -42, -36, -28, -18, -11,
-
318 -4, 4, 9, 14, 18, 20, 22, 23, 21, 20, 18, 15, 11, 6, -1, -7, -12, -17, -21, -25,
-
319 -28, -30, -29, -28, -26, -23, -19, -15, -10, -5, 1, 7, 12, 15, 21, 26, 29, 30,
-
320 31, 30, 29, 27, 23, 18, 14, 8, 2, -2, -6, -10, -14, -17, -19, -19, -19, -19,
-
321 -18, -16, -14, -11, -8, -4, -2, 0, 2, 5, 6, 5, 4, 5, 2, -4, -7, -9, -16, -23,
-
322 -27, -29, -33, -36, -35, -34, -32, -27, -24, -20, -14, -10, -7, -4, -1, 1, 1, 0,
-
323 0, 0, -1, -4, -6, -7, -10, -12, -13, -13, -13, -13, -12, -9, -7, -6, -4, -3, -1,
-
324 0, 0, 2, 3, 4, 4, 5, 7, 7, 7, 7, 7, 5, 3, 1, -1, -4, -8, -10, -12, -12, -12,
-
325 -12, -11, -8, -5, -1, 2, 6, 9, 12, 15, 17, 18, 19, 19, 17, 15, 14, 10, 5, -1,
-
326 -7, -13, -20, -28, -34, -39, -47, -52, -53, -52, -53, -51, -42, -34, -28, -18,
-
327 -5, 4, 12, 20, 27, 30, 32, 32, 30, 25, 21, 15, 7, 0, -6, -13, -18, -20, -22,
-
328 -25, -25, -24, -24, -22, -22, -21, -20, -20, -18, -16, -13, -11, -6, -2, 2, 6,
-
329 10, 13, 14, 14, 14, 12, 9, 5, 1, -3, -6, -9, -10, -11, -10, -9, -7, -5, -3, -1,
-
330 0, 1, 2, 3, 3, 4, 4, 4, 4, 4, 4, 1, -1, -4, -8, -13, -19, -23, -28, -35, -38,
-
331 -39, -42, -45, -41, -37, -35, -29, -19, -14, -7, 3, 9, 14, 21, 24, 24, 24, 23,
-
332 20, 14, 8, 2, -6, -13, -18, -22, -26, -29, -28, -25, -24, -21, -15, -13, -10,
-
333 -5, -2, 0, 3, 5, 5, 8, 10, 11, 12, 13, 13, 13, 12, 9, 7, 2, -3, -7, -11, -16,
-
334 -20, -23, -25, -25, -24, -22, -19, -15, -10, -6, -1, 3, 6, 9, 10, 12, 12, 12,
-
335 11, 10, 9, 6, 4, 1, -2, -6, -9, -13, -18, -22, -26, -32, -36, -37, -42, -46,
-
336 -44, -42, -41, -35, -28, -22, -14, -4, 4, 10, 16, 20, 19, 19, 17, 11, 4, -2, -9,
-
337 -15, -18, -21, -23, -19, -16, -14, -7, -1, 1, 3, 7, 7, 6, 7, 5, 3, 3, 4, 4, 4,
-
338 7, 9, 9, 10, 11, 9, 5, 2, -2, -7, -11, -16, -19, -20, -20, -19, -16, -12, -7,
-
339 -1, 4, 9, 13, 16, 17, 18, 17, 14, 11, 8, 4, 1, -2, -5, -8, -10, -11, -15, -16,
-
340 -18, -23, -24, -27, -31, -34, -36, -36, -37, -37, -33, -30, -25, -17, -10, -3,
-
341 4, 11, 15, 19, 21, 19, 17, 13, 6, -1, -7, -15, -20, -22, -26, -27, -24, -21,
-
342 -17, -12, -6, -3, 0, 4, 5, 5, 6, 4, 3, 4, 4, 4, 5, 7, 9, 10, 12, 12, 11, 9, 7,
-
343 3, 0, -5, -9, -12, -14, -14, -13, -11, -7, -3, 2, 7, 10, 14, 17, 17, 17, 16, 14,
-
344 11, 7, 5, 2, 0, -2, -4, -4, -5, -6, -7, -8, -11, -14, -16, -21, -26, -29, -34,
-
345 -35, -36, -38, -35, -30, -24, -17, -9, -2, 6, 14, 19, 20, 22, 21, 15, 11, 5, -3,
-
346 -9, -14, -19, -22, -21, -19, -17, -13, -8, -5, 0, 3, 4, 6, 5, 4, 4, 2, 1, 0, 0,
-
347 2, 3, 4, 6, 7, 8, 9, 8, 5, 3, 0, -4, -7, -10, -12, -13, -13, -11, -9, -5, -1, 4,
-
348 8, 12, 15, 17, 18, 18, 16, 14, 11, 7, 5, 2, 0, 0, 0, 0, 2, 4, 5, 6, 6, 5, 3, 2,
-
349 -2, -6, -11, -16, -21, -26, -27, -32, -35, -32, -33, -29, -23, -21, -14, -7, -1,
-
350 6, 10, 14, 17, 18, 18, 17, 14, 11, 7, 4, 2, 0, -2, -3, -3, -3, -2, -1, -2, -2,
-
351 -1, -3, -3, -4, -6, -7, -6, -6, -5, -3, -1, 2, 5, 9, 11, 12, 14, 13, 12, 11, 8,
-
352 5, 2, -1, -3, -4, -4, -4, -2, 0, 3, 6, 9, 11, 13, 14, 15, 14, 12, 10, 8, 5, 2,
-
353 1, 0, -1, 1, 1, 3, 5, 5, 6, 6, 5, 2, 0, -3, -6, -9, -13, -15, -18, -20, -21,
-
354 -24, -22, -22, -21, -18, -14, -11, -7, -2, 1, 5, 8, 10, 12, 12, 11, 10, 8, 6, 4,
-
355 2, -1, -1, -3, -4, -3, -4, -3, -2, -2, -1, 0, 0, 1, 3, 4, 6, 8, 10, 12, 13, 14,
-
356 14, 13, 12, 9, 7, 4, 0, -3, -7, -9, -11, -13, -13, -13, -11, -8, -5, -2, 2, 6,
-
357 10, 13, 15, 17, 18, 18, 17, 16, 14, 12, 10, 7, 5, 3, 2, 1, 1, 1, 2, 2, 3, 4, 4,
-
358 4, 4, 4, 3, 1, 0, -1, -3, -5, -6, -10, -12, -16, -21, -24, -29, -33, -36, -38,
-
359 -36, -34, -28, -20, -11, 1, 12, 24, 33, 41, 45, 45, 44, 36, 29, 19, 6, -4, -15,
-
360 -24, -30, -34, -35, -33, -28, -22, -15, -7, 1, 7, 13, 17, 20, 21, 21, 20, 18,
-
361 16, 15, 12, 11, 9, 7, 6, 4, 2, -1, -4, -7, -10, -13, -15, -16, -16, -14, -11,
-
362 -7, -2, 4, 9, 15, 19, 22, 24, 23, 21, 17, 12, 6, -1, -7, -13, -17, -20, -21,
-
363 -20, -18, -14, -9, -3, 2, 7, 12, 15, 17, 18, 17, 15, 13, 11, 9, 8, 8, 9, 11, 14,
-
364 17, 20, 23, 24, 23, 21, 18, 11, 4, -3, -12, -20, -27, -33, -37, -38, -38, -35,
-
365 -32, -28, -23, -18, -10, -3, 2, 11, 16, 22, 28, 31, 34, 34, 32, 28, 24, 17, 9,
-
366 1, -7, -14, -20, -25, -27, -28, -26, -22, -17, -10, -2, 5, 12, 19, 24, 28, 30,
-
367 30, 30, 27, 24, 19, 14, 9, 4, 0, -5, -8, -10, -12, -13, -13, -12, -10, -8, -5,
-
368 -3, 1, 4, 7, 10, 13, 15, 16, 17, 17, 17, 16, 14, 11, 8, 4, 1, -3, -5, -8, -10,
-
369 -11, -11, -11, -9, -7, -4, -1, 3, 6, 9, 12, 14, 16, 17, 17, 17, 15, 13, 12, 9,
-
370 7, 4, 2, 1, -1, 0, 1, 4, 8, 12, 18, 23, 27, 31, 32, 31, 27, 21, 13, 4, -6, -16,
-
371 -24, -31, -35, -37, -36, -32, -27, -19, -11, -4, 4, 10, 15, 18, 19, 19, 18, 15,
-
372 12, 9, 5, 2, -1, -3, -6, -7, -8, -11, -12, -13, -14, -15, -14, -13, -10, -6, -2,
-
373 4, 9, 16, 21, 26, 30, 31, 32, 30, 26, 20, 14, 7, -1, -7, -14, -19, -22, -24,
-
374 -23, -22, -18, -14, -9, -3, 2, 7, 12, 16, 19, 21, 22, 22, 21, 20, 19, 16, 14,
-
375 11, 8, 5, 2, -2, -5, -8, -11, -13, -15, -15, -15, -14, -11, -8, -3, 1, 7, 13,
-
376 21, 30, 34, 41, 43, 42, 42, 35, 26, 15, 3, -10, -22, -32, -40, -46, -48, -47,
-
377 -43, -37, -29, -20, -11, 0, 9, 17, 24, 28, 32, 33, 33, 31, 26, 23, 17, 12, 7, 1,
-
378 -3, -7, -9, -11, -11, -11, -9, -7, -4, -1, 3, 6, 8, 11, 11, 12, 12, 10, 9, 5, 2,
-
379 -2, -6, -8, -10, -12, -12, -12, -10, -7, -5, -2, 1, 3, 6, 7, 8, 8, 8, 7, 7, 6,
-
380 6, 6, 5, 6, 6, 6, 7, 6, 6, 6, 4, 3, 1, 0, -2, -4, -5, -6, -6, -6, -4, -3, 2, 5,
-
381 9, 16, 18, 23, 27, 28, 29, 27, 25, 20, 15, 8, 1, -6, -12, -16, -20, -20, -20,
-
382 -18, -14, -11, -6, -2, 1, 3, 4, 3, 3, 0, -3, -5, -7, -9, -8, -7, -5, -1, 2, 8,
-
383 12, 16, 18, 19, 19, 17, 13, 8, 2, -4, -10, -14, -17, -18, -18, -16, -11, -6, 1,
-
384 8, 14, 20, 24, 26, 27, 26, 22, 18, 13, 8, 3, -2, -5, -7, -9, -8, -7, -6, -4, -2,
-
385 0, 3, 3, 4, 4, 3, 2, 1, 1, 0, 1, 1, 2, 4, 6, 9, 11, 13, 14, 14, 14, 13, 11, 8,
-
386 5, 2, -2, -5, -8, -4, -4, 1, 7, 9, 18, 22, 26, 29, 28, 25, 20, 14, 6, -2, -11,
-
387 -19, -25, -30, -31, -31, -29, -23, -17, -10, -2, 5, 12, 17, 22, 24, 24, 23, 21,
-
388 18, 14, 11, 8, 5, 4, 3, 3, 4, 5, 6, 7, 8, 8, 7, 6, 4, 2, 0, -1, -3, -3, -4, -3,
-
389 -3, -2, -1, -1, -1, 0, 0, -1, -1, -3, -2, -2, -2, -2, -2, -1, 0, 1, 3, 4, 5, 7,
-
390 9, 9, 11, 11, 11, 12, 11, 11, 10, 9, 8, 7, 7, 7, 6, 6, 7, 8, 9, 10, 11, 12, 13,
-
391 13, 13, 13, 12, 11, 9, 8, 7, 5, 4, 3, 2, 1, 1, 1, 1, 0, 0, 0, 0, -1, -1, -3, -3,
-
392 -5, -6, -7, -9, -9, -10, -10, -10, -10, -10, -9, -8, -6, -5, -4, -2, 1, 4, 5, 8,
-
393 9, 11, 13, 13, 13, 12, 11, 9, 7, 6, 4, 2, 1, 1, 0, 0, 0, 0, 1, 1, 2, 2, 2, 3, 3,
-
394 3, 2, 2, 2, 2, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, 9, 8, 6, 5, 3, 2, 0,
-
395 -1, -1, -2, -2, -1, 0, 1, 3, 4, 6, 7, 8, 9, 9, 9, 9, 8, 7, 6, 4, 3, 2, 1, 0, 1,
-
396 2, 5, 9, 12, 17, 19, 21, 22, 20, 17, 12, 6, 0, -7, -13, -18, -22, -23, -23, -21,
-
397 -18, -13, -8, -2, 4, 9, 12, 14, 16, 16, 14, 12, 9, 6, 3, 1, 0, -1, 0, 1, 3, 6,
-
398 8, 11, 13, 13, 14, 13, 11, 8, 4, -1, -6, -11, -16, -22, -24, -26, -26, -24, -22,
-
399 -17, -12, -5, 2, 7, 12, 17, 20, 22, 23, 21, 20, 17, 14, 12, 8, 5, 3, 1, 1, 0, 0,
-
400 2, 2, 3, 4, 4, 4, 5, 4, 3, 3, 2, 2, 2, 2, 3, 4, 6, 8, 10, 12, 14, 15, 16, 15,
-
401 14, 13, 11, 8, 5, 2, -1, -4, -6, -8, -9, -10, -10, -10, -9, -8, -8, -7, -7, -7,
-
402 -6, -7, -6, -7, -8, -8, -8, -7, -6, -5, -4, -2, 0, 1, 4, 5, 6, 9, 9, 10, 10, 9,
-
403 10, 9, 8, 7, 5, 4, 3, 2, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4,
-
404 5, 6, 7, 8, 9, 9, 9, 10, 9, 8, 7, 6, 4, 2, 1, -1, -2, -3, -3, -3, -3, -2, -1, 1,
-
405 2, 4, 5, 6, 7, 7, 7, 7, 7, 6, 5, 5, 3, 7, 9, 10, 17, 15, 19, 22, 19, 20, 16, 10,
-
406 5, -3, -9, -15, -22, -25, -27, -28, -24, -21, -16, -9, -3, 4, 10, 15, 19, 21,
-
407 22, 22, 21, 18, 15, 12, 9, 7, 5, 4, 3, 4, 5, 6, 7, 9, 9, 9, 8, 6, 5, 0, -3, -8,
-
408 -13, -18, -24, -26, -28, -27, -24, -22, -16, -9, 0, 8, 16, 22, 28, 31, 33, 33,
-
409 30, 25, 19, 12, 5, -2, -9, -13, -17, -19, -19, -18, -15, -11, -7, -2, 3, 7, 11,
-
410 14, 16, 17, 18, 17, 17, 16, 14, 14, 12, 11, 10, 9, 9, 8, 7, 7, 5, 4, 2, 0, -2,
-
411 -4, -7, -9, -12, -14, -15, -17, -17, -17, -16, -14, -13, -9, -7, -5, 0, 2, 5, 8,
-
412 9, 10, 11, 10, 8, 6, 3, 0, -1, -5, -5, -6, -6, -3, -2, 0, 3, 5, 7, 8, 9, 8, 8,
-
413 5, 3, 2, -2, -3, -4, -5, -5, -4, -3, -1, 1, 3, 5, 6, 7, 8, 7, 7, 5, 3, 2, 0, -2,
-
414 -3, -4, -4, -3, -2, -1, 1, 2, 4, 6, 6, 7, 7, 6, 6, 4, 3, 1, -1, -1, -2, -2, -2,
-
415 1, 5, 6, 15, 17, 21, 29, 28, 31, 32, 25, 22, 16, 5, -1, -12, -22, -27, -35, -37,
-
416 -37, -38, -32, -27, -20, -11, -3, 5, 13, 18, 23, 25, 26, 26, 23, 20, 16, 12, 9,
-
417 5, 2, 1, -1, -1, 0, 0, 2, 3, 3, 4, 3, 1, -1, -5, -9, -15, -23, -29, -32, -34,
-
418 -35, -33, -30, -23, -12, -3, 9, 19, 27, 35, 41, 45, 44, 41, 34, 27, 18, 7, -2,
-
419 -12, -19, -24, -27, -27, -25, -21, -16, -9, -2, 4, 10, 14, 17, 19, 18, 17, 15,
-
420 13, 11, 9, 8, 7, 7, 8, 9, 10, 12, 12, 13, 12, 11, 8, 4, 0, -5, -10, -16, -20,
-
421 -24, -27, -28, -28, -26, -23, -17, -12, -6, 1, 6, 12, 16, 19, 21, 21, 20, 18,
-
422 15, 11, 7, 3, -1, -5, -10, -13, -16, -18, -17, -18, -18, -15, -13, -10, -5, -2,
-
423 1, 4, 6, 8, 10, 11, 11, 11, 10, 10, 9, 8, 7, 5, 5, 3, 2, 2, 0, -1, -1, -2, -3,
-
424 -3, -4, -4, -4, -4, -4, -4, -3, -2, -1, 0, 1, 3, 4, 5, 6, 6, 6, 6, 6, 5, 4, 2,
-
425 2, 1, 0, 1, 2, 3, 6, 8, 10, 13, 14, 16, 17, 16, 15, 12, 8, 4, -2, -7, -13, -18,
-
426 -22, -26, -28, -29, -29, -27, -23, -19, -14, -8, -2, 4, 9, 13, 17, 20, 21, 22,
-
427 21, 21, 19, 17, 15, 12, 10, 8, 6, 4, 3, 2, 1, -1, -2, -3, -4, -6, -8, -10, -13,
-
428 -16, -20, -26, -29, -28, -29, -28, -26, -23, -14, -5, 3, 13, 20, 27, 32, 37, 40,
-
429 38, 35, 30, 24, 17, 10, 2, -5, -11, -16, -19, -20, -20, -19, -17, -14, -10, -6,
-
430 -4, -1, 0, 1, 2, 2, 1, 0, 0, 1, 2, 4, 8, 10, 15, 21, 25, 29, 31, 32, 31, 28, 24,
-
431 18, 10, 1, -7, -16, -23, -30, -35, -38, -39, -37, -33, -29, -22, -16, -9, -1, 5,
-
432 10, 15, 17, 19, 20, 19, 19, 17, 16, 14, 13, 11, 10, 10, 9, 9, 8, 8, 7, 6, 4, 1,
-
433 -1, -5, -10, -14, -21, -28, -32, -34, -36, -37, -36, -31, -24, -15, -5, 5, 14,
-
434 23, 31, 38, 42, 42, 40, 36, 31, 24, 16, 7, -1, -9, -15, -20, -22, -24, -25, -23,
-
435 -20, -17, -13, -9, -6, -4, -1, 0, 2, 2, 1, 1, 1, 1, 2, 3, 4, 5, 8, 12, 14, 17,
-
436 20, 21, 24, 25, 25, 24, 20, 17, 12, 7, 1, -5, -11, -17, -21, -24, -27, -28, -27,
-
437 -26, -23, -19, -15, -10, -7, -3, 0, 3, 6, 8, 8, 9, 10, 11, 11, 11, 12, 12, 12,
-
438 13, 14, 14, 13, 12, 11, 9, 7, 5, 2, -1, -4, -7, -9, -11, -13, -15, -15, -16,
-
439 -18, -21, -23, -22, -21, -22, -20, -18, -13, -8, -3, 4, 8, 14, 19, 23, 27, 27,
-
440 26, 26, 22, 20, 15, 10, 6, -1, -5, -8, -12, -14, -16, -16, -16, -15, -12, -10,
-
441 -9, -7, -4, -2, 0, 1, 2, 4, 7, 8, 12, 14, 16, 20, 23, 26, 28, 27, 28, 25, 22,
-
442 19, 13, 7, 0, -7, -13, -20, -25, -29, -32, -33, -33, -30, -27, -23, -17, -11,
-
443 -5, 2, 7, 12, 15, 18, 20, 20, 20, 19, 17, 15, 13, 11, 9, 7, 6, 5, 4, 3, 2, 1,
-
444 -1, -3, -5, -10, -14, -18, -21, -24, -27, -28, -28, -25, -22, -16, -10, -4, 3,
-
445 11, 17, 23, 27, 30, 31, 31, 29, 26, 21, 16, 10, 5, 1, -4, -8, -11, -12, -13,
-
446 -12, -11, -9, -9, -7, -5, -4, -3, -3, -3, -3, -4, -4, -4, -4, -3, -1, 1, 4, 7,
-
447 9, 13, 17, 19, 22, 24, 25, 25, 25, 24, 21, 17, 13, 8, 2, -3, -8, -13, -17, -21,
-
448 -23, -24, -25, -24, -23, -21, -18, -15, -11, -9, -6, -2, 0, 2, 4, 5, 6, 7, 8, 9,
-
449 9, 10, 11, 12, 13, 13, 13, 13, 12, 12, 10, 9, 7, 4, 2, -1, -3, -5, -8, -9, -11,
-
450 -12, -12, -13, -14, -16, -18, -19, -19, -18, -19, -19, -18, -14, -11, -7, -3, 1,
-
451 6, 10, 15, 19, 21, 22, 23, 23, 22, 19, 16, 12, 7, 3, 0, -3, -7, -11, -13, -13,
-
452 -13, -13, -13, -11, -10, -9, -7, -4, -4, -4, -3, -2, 2, 4, 4, 8, 11, 14, 17, 20,
-
453 22, 19, 20, 20, 17, 15, 10, 5, 2, -5, -9, -12, -17, -20, -23, -22, -21, -21,
-
454 -19, -17, -14, -10, -7, -3, 0, 2, 4, 6, 8, 8, 7, 7, 7, 6, 7, 5, 5, 5, 4, 4, 4,
-
455 3, 2, -1, -3, -4, -6, -8, -12, -13, -14, -15, -14, -13, -12, -11, -8, -4, -1, 2,
-
456 5, 8, 11, 13, 14, 16, 15, 14, 12, 11, 10, 7, 4, 2, 0, -1, -3, -4, -4, -5, -5,
-
457 -4, -3, -3, -3, -2, -2, -2, -2, -2, -3, -3, -4, -3, -3, -3, -2, -1, 0, 2, 3, 5,
-
458 7, 8, 11, 14, 15, 17, 18, 20, 20, 20, 20, 17, 13, 12, 8, 4, 1, -5, -8, -11, -15,
-
459 -16, -18, -19, -20, -20, -18, -17, -16, -14, -13, -11, -8, -6, -4, -2, -1, 1, 3,
-
460 5, 7, 8, 10, 11, 13, 14, 15, 15, 16, 16, 16, 15, 14, 13, 11, 10, 8, 6, 3, 0, -3,
-
461 -6, -9, -12, -15, -17, -20, -23, -25, -27, -27, -26, -26, -25, -22, -18, -14,
-
462 -9, -3, 2, 6, 11, 16, 20, 22, 22, 23, 23, 23, 20, 17, 15, 12, 8, 5, 2, 0, -4,
-
463 -6, -8, -8, -10, -12, -12, -12, -13, -13, -12, -10, -8, -7, -4, 1, 5, 8, 11, 16,
-
464 18, 19, 20, 21, 20, 18, 15, 12, 9, 4, 0, -4, -7, -11, -13, -15, -17, -17, -17,
-
465 -17, -16, -15, -13, -12, -10, -9, -7, -5, -4, -4, -2, -2, -1, 0, 0, 1, 1, 1, 0,
-
466 -1, -2, -1, -2, -4, -5, -4, -4, -4, -3, -3, -3, -2, -1, 0, 1, 0, 0, 1, 1, 1, 0,
-
467 0, -1, -2, -2, -1, -1, -2, -2, -1, 0, 0, 1, 2, 2, 2, 2, 2, 2, 1, 0, 0, -1, -2,
-
468 -2, -3, -3, -4, -4, -3, -3, -3, -2, -1, 0, 0, 1, 2, 2, 2, 2, 2, 2, 1, 1, 2, 3,
-
469 3, 5, 7, 9, 11, 13, 15, 16, 16, 15, 14, 13, 10, 6, 2, -2, -7, -11, -14, -19,
-
470 -22, -24, -25, -26, -26, -25, -24, -21, -18, -15, -12, -9, -5, -2, 1, 4, 6, 8,
-
471 9, 11, 12, 13, 14, 14, 14, 15, 15, 15, 14, 14, 13, 12, 11, 9, 7, 5, 2, -1, -5,
-
472 -9, -13, -17, -22, -26, -30, -31, -32, -34, -34, -31, -28, -24, -19, -13, -6,
-
473 -1, 5, 12, 18, 21, 24, 27, 29, 29, 27, 25, 23, 19, 15, 11, 8, 4, 0, -4, -5, -7,
-
474 -9, -11, -11, -11, -11, -11, -11, -11, -11, -11, -9, -7, -6, -5, -2, 2, 4, 7,
-
475 11, 13, 15, 17, 19, 20, 19, 19, 17, 15, 12, 9, 5, 1, -4, -8, -11, -15, -19, -21,
-
476 -23, -24, -24, -23, -22, -21, -19, -16, -13, -10, -7, -5, -2, 0, 2, 3, 3, 3, 3,
-
477 2, 1, 1, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 7, 7, 7, 6, 4, 4, 2, -1, -3, -4, -6,
-
478 -8, -9, -9, -9, -9, -9, -7, -5, -4, -2, 0, 3, 4, 6, 7, 8, 9, 8, 8, 8, 6, 5, 3,
-
479 2, 0, -1, -2, -2, -3, -3, -2, -2, -1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2,
-
480 4, 6, 8, 10, 11, 13, 14, 15, 15, 14, 12, 10, 8, 4, 0, -4, -8, -12, -16, -20,
-
481 -22, -24, -26, -26, -25, -24, -22, -20, -16, -13, -9, -5, -1, 3, 6, 9, 11, 14,
-
482 16, 16, 17, 17, 17, 17, 16, 15, 14, 13, 12, 10, 9, 7, 4, 2, -1, -5, -9, -13,
-
483 -17, -20, -24, -28, -30, -31, -32, -32, -30, -27, -23, -19, -14, -7, -1, 5, 10,
-
484 15, 21, 24, 26, 28, 29, 28, 26, 24, 21, 18, 13, 9, 5, 2, -1, -4, -7, -8, -9,
-
485 -10, -11, -11, -11, -11, -11, -11, -11, -11, -11, -9, -7, -8, -5, 0, 1, 4, 10,
-
486 13, 14, 18, 22, 23, 23, 24, 22, 20, 19, 14, 9, 5, -2, -7, -11, -16, -21, -24,
-
487 -26, -29, -29, -28, -27, -26, -23, -21, -18, -14, -12, -9, -7, -6, -4, -2, -2,
-
488 -3, -2, 0, 0, 0, 2, 3, 5, 7, 8, 11, 13, 13, 13, 14, 15, 13, 11, 9, 7, 4, 1, -3,
-
489 -6, -9, -12, -15, -16, -17, -18, -18, -17, -16, -14, -12, -10, -7, -4, -2, 1, 3,
-
490 5, 7, 8, 8, 9, 9, 8, 7, 7, 6, 5, 3, 2, 1, 0, -1, -2, -2, -3, -4, -4, -4, -5, -5,
-
491 -5, -4, -4, -4, -2, -1, 0, 2, 4, 5, 6, 8, 9, 10, 10, 10, 9, 8, 7, 5, 2, -1, -4,
-
492 -7, -10, -14, -17, -19, -22, -24, -24, -24, -24, -23, -21, -19, -16, -13, -10,
-
493 -7, -3, 0, 3, 6, 8, 10, 12, 13, 14, 14, 14, 13, 13, 11, 9, 7, 4, 0, -3, -6, -9,
-
494 -12, -15, -17, -18, -19, -19, -20, -19, -17, -16, -13, -11, -8, -5, -3, 0, 3, 6,
-
495 7, 9, 11, 12, 12, 12, 12, 12, 11, 10, 9, 9, 7, 6, 4, 4, 2, 1, 0, -1, -2, -3, -4,
-
496 -5, -6, -7, -8, -9, -9, -10, -10, -10, -10, -9, -8, -7, -4, -1, 2, 4, 9, 13, 15,
-
497 19, 22, 24, 24, 25, 25, 23, 21, 17, 13, 10, 5, -1, -5, -10, -15, -19, -22, -25,
-
498 -27, -28, -29, -28, -26, -24, -22, -19, -15, -13, -9, -6, -4, -1, 1, 1, 3, 4, 3,
-
499 3, 3, 2, 3, 3, 2, 3, 4, 5, 6, 8, 10, 11, 11, 12, 13, 13, 12, 10, 9, 7, 4, 1, -2,
-
500 -5, -9, -11, -14, -15, -16, -17, -16, -15, -13, -11, -8, -5, -2, 1, 4, 7, 9, 11,
-
501 12, 12, 12, 12, 11, 9, 7, 5, 3, 1, -1, -2, -3, -5, -5, -6, -6, -6, -5, -5, -3,
-
502 -1, 0, 2, 4, 7, 7, 9, 11, 11, 11, 12, 12, 11, 10, 8, 6, 4, 2, -1, -4, -7, -10,
-
503 -12, -14, -16, -18, -19, -20, -20, -19, -19, -18, -17, -15, -13, -11, -9, -7,
-
504 -4, -2, 0, 3, 6, 7, 9, 11, 12, 13, 14, 14, 13, 13, 12, 10, 8, 5, 1, -2, -5, -8,
-
505 -12, -14, -17, -19, -19, -20, -21, -20, -19, -17, -15, -12, -10, -7, -4, -1, 2,
-
506 4, 6, 7, 9, 10, 11, 11, 11, 11, 10, 10, 9, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1, -3,
-
507 -4, -5, -6, -8, -8, -9, -10, -10, -9, -8, -7, -5, -3, 0, 2, 6, 9, 11, 14, 16,
-
508 18, 19, 19, 19, 18, 16, 14, 11, 8, 4, -1, -5, -9, -14, -18, -22, -25, -27, -29,
-
509 -30, -30, -30, -28, -26, -23, -20, -16, -12, -9, -5, -1, 1, 4, 6, 7, 8, 8, 9, 9,
-
510 8, 8, 8, 8, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9, 8, 8, 7, 5, 4, 2, -1, -3, -6, -8, -10,
-
511 -12, -14, -14, -15, -14, -14, -12, -10, -8, -6, -3, 0, 3, 5, 8, 10, 11, 13, 13,
-
512 13, 13, 13, 12, 10, 9, 7, 6, 4, 2, 0, -1, -2, -2, -2, -3, -1, 1, 2, 4, 7, 9, 10,
-
513 12, 14, 14, 15, 14, 13, 12, 10, 6, 3, 0, -6, -10, -14, -18, -22, -25, -27, -29,
-
514 -29, -29, -28, -26, -23, -20, -16, -11, -7, -2, 3, 6, 10, 14, 16, 18, 20, 20,
-
515 19, 19, 16, 14, 11, 7, 4, 1, -2, -6, -9, -11, -12, -13, -14, -14, -13, -11, -11,
-
516 -9, -7, -5, -4, -3, -1, 0, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 3, 3, 4, 5, 6, 7,
-
517 7, 8, 9, 9, 9, 8, 8, 6, 5, 3, 1, -1, -3, -5, -7, -9, -10, -11, -13, -13, -10,
-
518 -9, -9, -4, 0, 2, 6, 11, 14, 18, 20, 23, 25, 25, 25, 23, 21, 19, 13, 8, 5, -2,
-
519 -8, -13, -19, -25, -28, -32, -35, -36, -36, -36, -35, -31, -28, -24, -20, -15,
-
520 -10, -5, -2, 3, 7, 10, 11, 13, 14, 14, 13, 13, 12, 10, 10, 9, 7, 7, 7, 6, 6, 7,
-
521 7, 8, 8, 8, 8, 8, 7, 6, 5, 3, 0, -2, -4, -7, -10, -12, -15, -16, -17, -18, -19,
-
522 -18, -17, -15, -13, -9, -6, -3, 1, 5, 9, 12, 15, 17, 19, 20, 20, 20, 19, 18, 16,
-
523 13, 10, 8, 5, 2, 1, -2, -3, -2, -2, -2, 0, 2, 3, 5, 7, 9, 10, 11, 11, 10, 9, 8,
-
524 4, 1, -2, -7, -11, -14, -19, -22, -24, -28, -29, -29, -29, -28, -25, -23, -19,
-
525 -15, -10, -5, 0, 5, 9, 13, 16, 19, 20, 21, 21, 19, 18, 15, 12, 9, 6, 2, 0, -2,
-
526 -4, -6, -7, -7, -6, -6, -4, -3, -1, 0, 2, 3, 5, 5, 5, 5, 4, 3, 2, 0, -2, -3, -5,
-
527 -7, -8, -8, -9, -9, -8, -7, -5, -2, 0, 2, 5, 8, 10, 12, 14, 15, 15, 16, 15, 14,
-
528 13, 10, 8, 6, 3, 0, -2, -3, -3, -6, -6, -3, -3, -1, 3, 5, 8, 10, 13, 16, 17, 17,
-
529 18, 15, 15, 13, 8, 5, 1, -6, -9, -14, -21, -24, -27, -31, -33, -33, -33, -32,
-
530 -31, -28, -25, -21, -17, -12, -8, -3, 1, 4, 8, 10, 12, 14, 16, 15, 15, 15, 14,
-
531 13, 13, 11, 11, 10, 9, 9, 9, 9, 8, 7, 8, 7, 7, 6, 5, 4, 3, 1, -2, -3, -5, -8,
-
532 -11, -13, -14, -16, -17, -18, -18, -17, -16, -15, -12, -9, -7, -4, 0, 4, 7, 10,
-
533 13, 16, 18, 19, 20, 21, 21, 20, 19, 17, 15, 14, 12, 10, 8, 8, 7, 5, 6, 6, 6, 6,
-
534 6, 7, 7, 6, 5, 3, 1, 0, -4, -7, -9, -14, -17, -20, -24, -25, -27, -29, -30, -28,
-
535 -28, -26, -24, -21, -16, -13, -10, -5, -1, 3, 6, 9, 12, 15, 16, 17, 18, 18, 18,
-
536 18, 17, 16, 15, 13, 11, 10, 9, 8, 6, 5, 4, 3, 3, 3, 2, 1, 1, 0, -1, -1, -2, -3,
-
537 -4, -6, -6, -7, -8, -9, -10, -10, -10, -10, -10, -8, -7, -6, -4, -2, 1, 4, 6, 9,
-
538 11, 13, 15, 16, 17, 18, 18, 17, 17, 16, 14, 13, 14, 12, 9, 11, 11, 9, 11, 11,
-
539 10, 11, 10, 10, 11, 9, 8, 6, 2, 2, -2, -7, -9, -14, -18, -20, -26, -27, -28,
-
540 -32, -33, -32, -32, -30, -29, -27, -23, -19, -16, -11, -6, -1, 3, 7, 11, 16, 18,
-
541 20, 22, 24, 25, 25, 24, 24, 23, 20, 18, 16, 15, 12, 9, 7, 6, 4, 2, 0, -1, -2,
-
542 -3, -5, -5, -5, -7, -8, -9, -9, -10, -11, -12, -12, -12, -12, -12, -11, -10, -9,
-
543 -8, -6, -3, -1, 1, 3, 6, 8, 10, 12, 13, 15, 16, 16, 16, 16, 16, 15, 16, 16, 13,
-
544 14, 15, 13, 14, 14, 13, 13, 13, 12, 12, 10, 9, 6, 2, 1, -1, -7, -10, -13, -18,
-
545 -21, -26, -29, -30, -34, -36, -37, -37, -36, -36, -35, -31, -28, -26, -20, -15,
-
546 -10, -5, -1, 5, 10, 15, 18, 23, 26, 28, 29, 31, 32, 31, 30, 29, 27, 25, 22, 18,
-
547 15, 13, 8, 5, 2, -1, -4, -7, -9, -11, -13, -15, -16, -17, -17, -18, -18, -18,
-
548 -17, -17, -16, -15, -14, -12, -11, -9, -7, -5, -3, 0, 2, 5, 7, 9, 12, 14, 16,
-
549 17, 18, 20, 21, 21, 21, 22, 23, 22, 22, 22, 22, 22, 21, 19, 18, 17, 15, 12, 10,
-
550 6, 3, -1, -5, -9, -14, -18, -23, -27, -31, -34, -38, -40, -41, -42, -42, -42,
-
551 -40, -37, -35, -31, -26, -21, -16, -10, -4, 2, 7, 12, 18, 23, 27, 30, 33, 36,
-
552 38, 39, 39, 40, 39, 37, 35, 33, 30, 27, 22, 19, 15, 10, 6, 1, -3, -7, -11, -14,
-
553 -17, -19, -22, -24, -25, -25, -26, -26, -25, -24, -23, -21, -19, -16, -14, -11,
-
554 -8, -4, -1, 3, 6, 10, 13, 16, 19, 22, 25, 27, 29, 31, 33, 34, 36, 36, 36, 36,
-
555 35, 34, 32, 29, 26, 22, 18, 13, 8, 3, -3, -9, -14, -20, -26, -30, -35, -39, -43,
-
556 -45, -47, -48, -49, -48, -46, -44, -41, -37, -32, -27, -22, -16, -9, -3, 2, 7,
-
557 14, 18, 22, 26, 30, 34, 36, 37, 39, 40, 40, 39, 38, 37, 35, 33, 30, 27, 24, 20,
-
558 16, 12, 9, 4, 0, -4, -7, -11, -15, -18, -21, -23, -25, -27, -28, -28, -29, -29,
-
559 -28, -26, -25, -23, -20, -17, -14, -11, -7, -3, 1, 4, 9, 13, 17, 21, 26, 30, 34,
-
560 37, 41, 44, 45, 46, 47, 46, 45, 42, 39, 34, 29, 22, 15, 8, 1, -7, -15, -22, -29,
-
561 -35, -41, -46, -50, -53, -55, -55, -55, -54, -51, -47, -43, -38, -32, -26, -20,
-
562 -14, -9, -2, 4, 9, 13, 18, 22, 25, 28, 31, 33, 35, 35, 36, 37, 38, 37, 37, 36,
-
563 35, 33, 31, 29, 27, 24, 20, 17, 13, 9, 5, 0, -4, -8, -12, -16, -19, -22, -25,
-
564 -28, -29, -30, -30, -30, -29, -28, -26, -23, -20, -17, -13, -9, -6, -2, 4, 8,
-
565 11, 17, 21, 24, 29, 32, 35, 37, 38, 38, 38, 37, 35, 32, 27, 25, 19, 13, 8, 2,
-
566 -3, -10, -16, -20, -24, -29, -33, -36, -38, -40, -41, -40, -39, -38, -36, -33,
-
567 -29, -26, -23, -19, -14, -11, -8, -3, 0, 3, 6, 9, 13, 16, 18, 21, 23, 26, 27,
-
568 29, 31, 32, 33, 33, 34, 33, 32, 31, 29, 27, 24, 20, 17, 13, 9, 4, 0, -4, -8,
-
569 -12, -15, -18, -21, -23, -24, -25, -25, -25, -24, -23, -21, -19, -17, -15, -10,
-
570 -7, -3, 2, 7, 11, 16, 20, 24, 27, 29, 30, 31, 30, 29, 27, 23, 20, 16, 10, 5, 0,
-
571 -5, -10, -16, -20, -23, -26, -29, -31, -31, -30, -30, -29, -26, -24, -22, -20,
-
572 -17, -13, -10, -8, -6, -4, -2, 0, 1, 3, 5, 6, 7, 8, 10, 12, 13, 14, 16, 18, 19,
-
573 20, 21, 22, 22, 21, 21, 21, 20, 18, 15, 13, 11, 9, 6, 4, 1, -1, -4, -6, -7, -8,
-
574 -9, -11, -11, -11, -11, -11, -10, -10, -9, -7, -6, -3, 0, 2, 5, 8, 11, 14, 15,
-
575 17, 18, 19, 18, 17, 16, 14, 12, 9, 5, 2, -2, -6, -10, -13, -17, -19, -22, -23,
-
576 -25, -26, -26, -26, -25, -24, -23, -21, -19, -18, -16, -14, -11, -10, -8, -6,
-
577 -4, -2, 0, 3, 5, 7, 9, 11, 14, 16, 17, 18, 21, 22, 22, 23, 23, 23, 22, 21, 20,
-
578 19, 17, 14, 12, 9, 7, 4, 2, 0, -2, -4, -6, -7, -8, -8, -8, -9, -8, -8, -7, -6,
-
579 -5, -3, 0, 1, 3, 7, 10, 12, 14, 17, 18, 19, 18, 18, 18, 17, 13, 10, 8, 5, 1, -3,
-
580 -7, -10, -14, -18, -20, -23, -24, -26, -28, -28, -28, -28, -27, -26, -24, -23,
-
581 -22, -20, -17, -15, -13, -12, -9, -6, -5, -2, 0, 3, 5, 6, 9, 11, 13, 15, 17, 18,
-
582 19, 20, 21, 21, 21, 21, 20, 18, 17, 16, 14, 11, 9, 7, 5, 3, 1, -1, -2, -3, -4,
-
583 -5, -5, -5, -5, -5, -4, -3, -2, -1, 2, 4, 5, 8, 10, 11, 13, 13, 13, 13, 12, 10,
-
584 9, 7, 4, 1, -2, -4, -7, -10, -13, -15, -17, -20, -22, -22, -23, -24, -24, -24,
-
585 -24, -23, -22, -21, -20, -19, -18, -16, -14, -12, -11, -10, -8, -7, -6, -4, -3,
-
586 -1, -1, 0, 2, 3, 5, 7, 8, 9, 10, 10, 12, 12, 12, 11, 11, 10, 10, 9, 9, 8, 8, 7,
-
587 7, 7, 7, 7, 7, 6, 6, 7, 7, 7, 8, 8, 8, 9, 10, 10, 11, 11, 11, 11, 11, 9, 8, 7,
-
588 5, 2, 0, -2, -5, -7, -10, -13, -15, -18, -20, -21, -22, -24, -25, -24, -25, -25,
-
589 -24, -24, -23, -21, -21, -19, -17, -15, -13, -12, -9, -7, -6, -4, -2, -1, 0, 0,
-
590 1, 1, 2, 2, 3, 4, 4, 4, 5, 5, 5, 5, 4, 4, 3, 3, 3, 3, 3, 2, 3, 3, 3, 4, 5, 6, 6,
-
591 7, 8, 9, 10, 11, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 16, 16, 15, 12, 10,
-
592 8, 5, 2, -1, -4, -7, -10, -13, -16, -18, -21, -23, -25, -26, -27, -29, -29, -29,
-
593 -29, -29, -29, -28, -26, -25, -24, -22, -19, -16, -14, -11, -9, -6, -4, -3, -2,
-
594 0, 1, 2, 4, 6, 7, 8, 9, 10, 11, 11, 11, 11, 10, 10, 9, 9, 8, 8, 8, 7, 7, 7, 7,
-
595 6, 7, 7, 7, 7, 8, 8, 8, 9, 10, 11, 12, 13, 14, 15, 16, 16, 16, 16, 15, 14, 12,
-
596 11, 9, 6, 4, 1, -1, -3, -6, -8, -11, -13, -15, -17, -19, -20, -22, -23, -24,
-
597 -25, -26, -27, -27, -27, -26, -26, -25, -22, -20, -18, -16, -14, -12, -10, -10,
-
598 -10, -9, -8, -7, -6, -4, -3, -2, -1, -1, 0, 0, 1, 1, 1, 2, 3, 4, 4, 5, 7, 8, 9,
-
599 10, 12, 13, 13, 14, 15, 16, 17, 17, 18, 19, 19, 19, 20, 20, 21, 20, 20, 19, 18,
-
600 17, 15, 13, 11, 8, 5, 2, -1, -3, -7, -10, -12, -15, -17, -20, -22, -24, -25,
-
601 -27, -28, -29, -29, -30, -30, -29, -28, -27, -25, -23, -20, -16, -14, -11, -9,
-
602 -8, -8, -7, -7, -7, -5, -4, -4, -4, -3, -3, -3, -3, -4, -4, -4, -5, -5, -4, -4,
-
603 -4, -3, -2, -1, 1, 2, 3, 5, 7, 8, 10, 11, 13, 14, 15, 17, 19, 20, 21, 22, 24,
-
604 24, 25, 25, 24, 24, 22, 21, 19, 17, 15, 13, 10, 8, 5, 2, 0, -2, -5, -8, -11,
-
605 -14, -16, -18, -20, -23, -25, -27, -29, -30, -30, -31, -30, -29, -28, -26, -23,
-
606 -21, -18, -16, -17, -16, -18, -16, -11, -11, -12, -13, -10, -6, -5, -5, -7, -6,
-
607 -4, -2, -2, -2, -2, 0, 2, 3, 4, 5, 7, 8, 10, 10, 11, 12, 13, 14, 15, 16, 16, 17,
-
608 19, 20, 20, 21, 21, 21, 21, 20, 20, 19, 17, 16, 14, 12, 11, 9, 7, 5, 3, 1, -1,
-
609 -3, -5, -7, -9, -11, -13, -15, -17, -19, -21, -22, -23, -24, -25, -25, -24, -23,
-
610 -22, -20, -19, -17, -16, -16, -16, -16, -16, -16, -15, -14, -13, -13, -13, -12,
-
611 -11, -10, -10, -9, -8, -7, -6, -5, -4, -2, -1, 0, 2, 4, 5, 6, 8, 10, 11, 13, 14,
-
612 16, 18, 20, 21, 23, 24, 25, 26, 26, 26, 26, 25, 24, 23, 22, 20, 17, 15, 13, 11,
-
613 8, 6, 4, 1, -1, -4, -6, -9, -11, -13, -16, -18, -20, -22, -24, -25, -26, -27,
-
614 -26, -26, -24, -23, -21, -20, -19, -19, -19, -19, -18, -18, -18, -17, -16, -15,
-
615 -14, -13, -12, -11, -10, -9, -7, -6, -5, -3, -1, 0, 2, 4, 5, 7, 8, 10, 11, 12,
-
616 13, 14, 15, 16, 17, 18, 19, 20, 21, 21, 22, 22, 22, 21, 20, 20, 19, 17, 16, 15,
-
617 13, 12, 10, 8, 6, 4, 2, 0, -2, -4, -5, -8, -10, -12, -14, -16, -18, -19, -21,
-
618 -22, -23, -23, -22, -21, -21, -20, -19, -18, -18, -19, -20, -21, -21, -21, -20,
-
619 -19, -18, -18, -17, -16, -14, -12, -11, -10, -8, -6, -4, -2, 0, 2, 4, 6, 8, 10,
-
620 12, 14, 15, 17, 19, 20, 22, 23, 25, 26, 26, 27, 28, 28, 27, 27, 26, 25, 23, 21,
-
621 19, 17, 15, 12, 10, 8, 5, 2, 0, -3, -5, -8, -11, -13, -16, -18, -20, -22, -24,
-
622 -26, -27, -27, -28, -28, -27, -25, -23, -21, -20, -19, -18, -18, -20, -19, -18,
-
623 -18, -17, -16, -15, -14, -13, -11, -9, -8, -6, -5, -3, -1, 0, 2, 4, 6, 8, 9, 11,
-
624 13, 14, 15, 16, 18, 19, 20, 21, 21, 22, 22, 23, 23, 22, 22, 22, 21, 19, 18, 17,
-
625 16, 14, 12, 11, 9, 7, 5, 3, 1, -2, -5, -7, -10, -13, -15, -18, -20, -23, -25,
-
626 -26, -27, -28, -27, -26, -25, -23, -22, -20, -20, -21, -22, -24, -24, -24, -24,
-
627 -23, -22, -21, -20, -18, -15, -13, -11, -9, -7, -5, -3, -1, 2, 4, 6, 8, 10, 12,
-
628 14, 16, 18, 19, 20, 22, 23, 25, 26, 26, 27, 27, 27, 27, 27, 25, 24, 23, 21, 19,
-
629 17, 14, 12, 10, 7, 4, 2, 0, -3, -5, -8, -10, -13, -16, -18, -20, -23, -25, -27,
-
630 -28, -30, -31, -31, -30, -29, -27, -25, -23, -21, -21, -21, -22, -22, -22, -22,
-
631 -21, -20, -18, -17, -15, -13, -10, -9, -7, -5, -3, -1, 1, 3, 5, 7, 9, 11, 13,
-
632 15, 17, 18, 20, 21, 22, 24, 25, 26, 27, 27, 27, 27, 27, 26, 25, 23, 22, 20, 18,
-
633 16, 14, 12, 9, 6, 4, 1, -1, -4, -7, -9, -13, -15, -18, -20, -22, -26, -27, -29,
-
634 -30, -31, -31, -30, -29, -27, -25, -23, -20, -19, -19, -18, -18, -18, -19, -20,
-
635 -19, -19, -18, -17, -15, -13, -11, -9, -7, -5, -3, -1, 1, 4, 5, 7, 9, 11, 13,
-
636 16, 17, 19, 21, 23, 25, 26, 28, 29, 30, 30, 30, 30, 30, 28, 27, 26, 23, 22, 19,
-
637 16, 15, 12, 8, 5, 3, 0, -3, -6, -9, -12, -15, -19, -22, -24, -27, -30, -32, -33,
-
638 -34, -35, -35, -34, -33, -31, -29, -26, -23, -21, -20, -20, -19, -19, -19, -18,
-
639 -17, -17, -16, -15, -12, -10, -7, -5, -3, 0, 2, 4, 7, 9, 10, 12, 14, 15, 17, 19,
-
640 21, 22, 24, 25, 26, 28, 28, 29, 29, 28, 28, 27, 26, 25, 22, 20, 18, 16, 13, 10,
-
641 8, 5, 3, -1, -3, -5, -7, -10, -12, -15, -17, -20, -22, -24, -26, -29, -31, -33,
-
642 -34, -35, -35, -34, -33, -32, -30, -27, -23, -21, -20, -20, -19, -19, -19, -19,
-
643 -18, -17, -16, -15, -13, -10, -8, -5, -4, -1, 1, 3, 5, 7, 9, 11, 12, 14, 16, 18,
-
644 20, 21, 23, 24, 26, 28, 29, 30, 30, 30, 30, 29, 29, 27, 26, 23, 21, 18, 15, 12,
-
645 9, 5, 2, -1, -4, -7, -10, -13, -16, -19, -22, -25, -26, -28, -31, -33, -35, -36,
-
646 -37, -38, -37, -37, -36, -34, -32, -28, -25, -23, -21, -20, -19, -18, -17, -17,
-
647 -16, -16, -15, -14, -11, -9, -6, -4, -2, 1, 3, 5, 8, 10, 12, 14, 15, 17, 19, 21,
-
648 23, 25, 26, 27, 29, 30, 31, 32, 32, 32, 31, 30, 29, 28, 25, 22, 19, 16, 13, 10,
-
649 7, 4, 0, -3, -6, -8, -11, -14, -16, -19, -21, -23, -26, -27, -29, -31, -34, -35,
-
650 -35, -36, -36, -36, -36, -34, -32, -29, -26, -23, -22, -20, -19, -18, -17, -17,
-
651 -16, -16, -15, -14, -13, -11, -8, -6, -3, -1, 1, 4, 6, 9, 11, 12, 14, 15, 17,
-
652 19, 21, 23, 24, 26, 27, 29, 31, 32, 33, 33, 34, 32, 32, 30, 28, 27, 24, 20, 18,
-
653 15, 11, 9, 4, 1, -2, -6, -9, -11, -15, -18, -20, -23, -26, -28, -31, -33, -35,
-
654 -38, -39, -39, -40, -40, -40, -40, -37, -34, -32, -28, -25, -23, -21, -21, -19,
-
655 -18, -17, -17, -16, -14, -14, -12, -9, -7, -4, -2, 1, 4, 6, 9, 11, 12, 14, 15,
-
656 17, 19, 20, 22, 23, 24, 26, 27, 29, 30, 31, 32, 32, 32, 31, 30, 29, 27, 24, 21,
-
657 18, 15, 12, 9, 6, 2, -1, -4, -6, -9, -12, -13, -16, -19, -21, -23, -25, -28,
-
658 -30, -33, -35, -36, -38, -39, -39, -38, -38, -37, -35, -32, -29, -27, -24, -23,
-
659 -21, -20, -20, -19, -18, -18, -17, -16, -15, -12, -10, -8, -5, -2, 1, 3, 6, 8,
-
660 10, 12, 14, 15, 17, 19, 21, 22, 24, 26, 27, 29, 31, 32, 32, 33, 33, 32, 32, 30,
-
661 28, 27, 23, 20, 17, 13, 10, 7, 3, 0, -4, -6, -8, -11, -13, -15, -17, -19, -22,
-
662 -24, -27, -29, -32, -34, -36, -37, -38, -39, -39, -39, -38, -37, -34, -32, -29,
-
663 -26, -25, -22, -21, -20, -19, -19, -18, -17, -16, -14, -12, -9, -7, -4, -1, 2,
-
664 4, 7, 9, 11, 13, 14, 16, 18, 20, 22, 24, 25, 27, 28, 29, 31, 32, 33, 33, 34, 32,
-
665 31, 30, 28, 25, 23, 20, 16, 14, 10, 6, 4, 0, -3, -5, -8, -10, -12, -14, -16,
-
666 -19, -21, -23, -25, -27, -30, -32, -34, -35, -36, -37, -37, -37, -36, -35, -34,
-
667 -31, -28, -27, -25, -23, -22, -20, -20, -19, -18, -17, -16, -15, -12, -9, -6,
-
668 -3, 0, 3, 6, 7, 10, 12, 14, 16, 17, 19, 21, 23, 24, 26, 28, 29, 31, 32, 32, 33,
-
669 33, 32, 32, 30, 29, 26, 23, 22, 17, 14, 12, 8, 6, 3, -1, -2, -6, -9, -10, -13,
-
670 -15, -17, -20, -22, -24, -26, -28, -30, -32, -33, -34, -35, -36, -36, -36, -35,
-
671 -34, -32, -30, -28, -27, -25, -24, -23, -22, -22, -22, -20, -19, -17, -15, -12,
-
672 -9, -7, -4, -1, 2, 5, 7, 9, 12, 14, 16, 18, 21, 23, 25, 27, 29, 31, 32, 34, 35,
-
673 36, 36, 35, 34, 33, 32, 30, 26, 24, 20, 16, 14, 11, 7, 6, 3, -1, -2, -5, -8, -9,
-
674 -12, -15, -16, -20, -22, -23, -26, -28, -28, -31, -32, -33, -35, -34, -34, -35,
-
675 -34, -33, -32, -30, -28, -27, -25, -23, -22, -21, -20, -20, -19, -18, -17, -15,
-
676 -12, -10, -6, -4, -1, 2, 4, 7, 9, 11, 14, 15, 17, 19, 22, 23, 26, 28, 30, 31,
-
677 33, 34, 35, 35, 35, 35, 34, 32, 31, 28, 25, 23, 19, 17, 15, 12, 9, 8, 5, 3, 1,
-
678 -2, -5, -7, -11, -14, -15, -19, -21, -22, -25, -27, -28, -31, -31, -32, -34,
-
679 -34, -34, -35, -34, -33, -32, -30, -29, -28, -27, -25, -25, -24, -23, -23, -21,
-
680 -20, -18, -15, -13, -11, -7, -5, -2, 1, 3, 6, 8, 10, 13, 15, 17, 20, 23, 24, 27,
-
681 30, 32, 34, 35, 36, 38, 38, 37, 37, 35, 35, 32, 29, 27, 24, 20, 19, 16, 13, 13,
-
682 10, 7, 6, 2, -1, -3, -7, -10, -12, -16, -18, -19, -22, -24, -25, -28, -29, -30,
-
683 -31, -32, -33, -34, -34, -34, -34, -33, -32, -31, -29, -28, -28, -26, -26, -26,
-
684 -24, -24, -22, -20, -18, -16, -13, -11, -8, -5, -3, 0, 2, 4, 6, 9, 10, 13, 15,
-
685 18, 21, 23, 26, 29, 31, 33, 35, 36, 37, 37, 37, 37, 35, 33, 31, 28, 25, 23, 19,
-
686 18, 17, 14, 13, 12, 8, 7, 4, 0, -3, -6, -9, -11, -14, -17, -19, -21, -24, -25,
-
687 -27, -29, -30, -31, -33, -34, -35, -36, -36, -36, -36, -35, -34, -34, -33, -32,
-
688 -31, -30, -29, -29, -27, -25, -23, -20, -18, -15, -12, -10, -7, -4, -2, 0, 3, 4,
-
689 7, 9, 11, 14, 17, 19, 22, 25, 26, 31, 32, 35, 36, 36, 37, 37, 36, 35, 34, 32,
-
690 29, 26, 23, 22, 20, 18, 17, 16, 14, 12, 10, 7, 4, 1, -3, -5, -8, -11, -14, -16,
-
691 -18, -20, -22, -23, -25, -26, -27, -28, -30, -31, -32, -33, -34, -34, -34, -34,
-
692 -34, -33, -32, -31, -30, -29, -28, -27, -25, -23, -21, -18, -16, -13, -10, -8,
-
693 -6, -3, -1, 1, 3, 5, 8, 10, 12, 15, 17, 20, 23, 26, 29, 31, 33, 35, 37, 37, 38,
-
694 38, 37, 36, 35, 33, 30, 28, 26, 23, 22, 21, 20, 19, 17, 15, 14, 10, 7, 4, 0, -3,
-
695 -6, -9, -12, -14, -17, -19, -20, -22, -24, -25, -26, -27, -28, -30, -31, -32,
-
696 -34, -35, -35, -35, -35, -34, -34, -32, -30, -29, -27, -25, -24, -22, -20, -18,
-
697 -16, -13, -11, -9, -7, -5, -3, -1, 1, 3, 5, 7, 10, 12, 14, 17, 20, 23, 25, 28,
-
698 31, 33, 35, 36, 37, 38, 37, 37, 35, 34, 32, 30, 27, 25, 24, 22, 21, 20, 20, 17,
-
699 16, 14, 10, 7, 3, -2, -5, -7, -11, -13, -15, -18, -20, -22, -24, -24, -26, -27,
-
700 -28, -29, -30, -31, -33, -34, -35, -36, -36, -36, -36, -35, -34, -32, -30, -28,
-
701 -26, -23, -21, -20, -18, -16, -14, -12, -11, -9, -7, -5, -3, -1, 1, 3, 5, 7, 10,
-
702 12, 15, 18, 21, 23, 26, 29, 31, 34, 35, 36, 37, 38, 36, 36, 35, 32, 30, 29, 26,
-
703 23, 22, 20, 20, 19, 18, 16, 14, 11, 8, 4, 0, -5, -8, -12, -16, -17, -20, -22,
-
704 -23, -25, -26, -27, -27, -28, -29, -29, -31, -31, -33, -34, -35, -37, -37, -38,
-
705 -38, -37, -35, -34, -31, -28, -25, -22, -19, -17, -15, -14, -13, -12, -10, -9,
-
706 -7, -6, -4, -1, 0, 3, 5, 7, 10, 12, 15, 18, 22, 25, 27, 31, 33, 34, 36, 37, 38,
-
707 38, 37, 36, 36, 33, 30, 29, 26, 23, 22, 21, 19, 19, 18, 16, 14, 11, 8, 3, -1,
-
708 -6, -10, -13, -16, -19, -20, -21, -23, -23, -24, -24, -24, -25, -26, -26, -27,
-
709 -29, -30, -32, -34, -35, -37, -37, -37, -37, -36, -34, -32, -29, -25, -21, -17,
-
710 -14, -13, -11, -10, -10, -10, -9, -8, -7, -5, -3, 0, 3, 6, 8, 11, 14, 17, 19,
-
711 23, 26, 28, 31, 34, 35, 37, 38, 38, 39, 39, 38, 37, 36, 34, 31, 29, 26, 24, 21,
-
712 19, 17, 16, 14, 12, 10, 7, 3, -1, -5, -9, -12, -16, -18, -19, -20, -20, -21,
-
713 -21, -21, -22, -22, -23, -24, -25, -26, -28, -29, -30, -33, -34, -35, -36, -36,
-
714 -36, -35, -34, -32, -30, -27, -24, -20, -17, -15, -12, -10, -10, -9, -8, -8, -7,
-
715 -6, -5, -2, 1, 4, 8, 12, 15, 18, 20, 23, 26, 28, 30, 32, 34, 36, 37, 38, 39, 40,
-
716 40, 39, 38, 37, 35, 33, 30, 28, 24, 20, 17, 14, 12, 10, 8, 7, 5, 2, -1, -5, -9,
-
717 -12, -16, -19, -19, -21, -21, -21, -22, -21, -23, -24, -24, -26, -26, -28, -29,
-
718 -31, -32, -34, -35, -36, -38, -38, -37, -37, -35, -32, -30, -28, -25, -23, -19,
-
719 -17, -14, -11, -10, -7, -6, -5, -3, -2, -1, 1, 4, 7, 11, 14, 18, 21, 23, 26, 28,
-
720 30, 32, 34, 36, 37, 38, 39, 41, 40, 41, 40, 39, 39, 37, 36, 33, 30, 27, 22, 17,
-
721 14, 9, 6, 4, 3, 2, 1, -2, -5, -7, -11, -16, -19, -22, -23, -25, -25, -25, -25,
-
722 -26, -27, -27, -28, -29, -31, -32, -32, -34, -35, -35, -37, -38, -39, -40, -39,
-
723 -37, -35, -33, -29, -27, -24, -21, -18, -16, -13, -11, -8, -5, -3, 0, 2, 4, 6,
-
724 8, 10, 14, 17, 20, 24, 27, 29, 32, 34, 36, 38, 39, 40, 42, 43, 44, 45, 45, 45,
-
725 44, 43, 42, 38, 39, 36, 28, 29, 21, 16, 14, 5, 0, -2, -6, -9, -7, -10, -12, -11,
-
726 -15, -19, -21, -26, -30, -30, -32, -33, -30, -30, -30, -29, -30, -32, -32, -34,
-
727 -35, -35, -36, -36, -35, -37, -38, -37, -38, -37, -35, -33, -29, -25, -22, -18,
-
728 -15, -13, -10, -8, -6, -3, -1, 2, 6, 8, 10, 13, 15, 18, 22, 24, 27, 31, 33, 37,
-
729 40, 41, 43, 45, 45, 46, 48, 49, 49, 50, 50, 49, 48, 46, 43, 40, 36, 32, 27, 22,
-
730 17, 11, 5, -1, -7, -11, -16, -19, -19, -21, -21, -22, -24, -27, -28, -32, -36,
-
731 -36, -38, -38, -36, -35, -34, -33, -34, -35, -35, -36, -38, -38, -38, -37, -37,
-
732 -37, -36, -36, -34, -34, -33, -29, -25, -22, -18, -14, -11, -7, -5, -3, 0, 2, 4,
-
733 7, 10, 13, 17, 21, 24, 27, 30, 32, 35, 38, 40, 43, 45, 47, 49, 50, 50, 51, 52,
-
734 52, 52, 52, 51, 50, 48, 44, 40, 37, 31, 26, 21, 14, 8, 2, -5, -11, -15, -23,
-
735 -25, -26, -28, -29, -29, -30, -31, -32, -38, -39, -41, -46, -45, -44, -43, -40,
-
736 -38, -39, -37, -37, -40, -38, -40, -40, -37, -38, -36, -34, -33, -33, -30, -29,
-
737 -27, -22, -20, -15, -10, -5, -1, 2, 4, 7, 9, 11, 14, 17, 20, 24, 27, 30, 34, 36,
-
738 38, 41, 43, 45, 48, 50, 51, 54, 55, 55, 55, 55, 54, 53, 52, 50, 49, 47, 43, 39,
-
739 36, 30, 24, 21, 14, 7, 3, -4, -11, -14, -21, -28, -29, -35, -41, -41, -44, -47,
-
740 -45, -48, -48, -46, -48, -48, -47, -47, -47, -46, -46, -44, -43, -43, -41, -39,
-
741 -39, -37, -36, -34, -32, -30, -28, -25, -23, -19, -15, -12, -7, -4, 0, 4, 8, 10,
-
742 14, 17, 19, 22, 25, 27, 31, 34, 35, 38, 41, 42, 45, 47, 48, 50, 51, 52, 52, 53,
-
743 54, 52, 52, 52, 50, 49, 48, 44, 42, 40, 34, 31, 27, 20, 15, 10, 4, -3, -8, -16,
-
744 -21, -27, -35, -39, -44, -48, -51, -54, -56, -56, -58, -59, -58, -57, -56, -54,
-
745 -54, -54, -51, -50, -48, -44, -42, -39, -36, -35, -32, -30, -29, -27, -24, -22,
-
746 -17, -14, -11, -4, 0, 2, 7, 9, 12, 16, 18, 20, 25, 27, 29, 33, 35, 36, 38, 40,
-
747 41, 43, 45, 47, 49, 50, 51, 52, 51, 51, 51, 50, 48, 47, 47, 45, 44, 42, 39, 37,
-
748 33, 27, 23, 19, 12, 7, 3, -5, -11, -15, -24, -28, -33, -43, -46, -49, -56, -58,
-
749 -59, -64, -62, -62, -66, -63, -61, -62, -59, -55, -55, -51, -47, -47, -41, -39,
-
750 -38, -33, -30, -29, -25, -21, -19, -14, -11, -8, -3, 1, 5, 8, 13, 17, 19, 23,
-
751 26, 28, 32, 33, 35, 38, 40, 41, 44, 46, 47, 49, 51, 51, 53, 53, 52, 53, 53, 51,
-
752 51, 50, 48, 46, 45, 43, 41, 39, 36, 33, 29, 25, 20, 15, 11, 4, -2, -7, -13, -22,
-
753 -26, -32, -40, -44, -50, -55, -56, -60, -65, -64, -66, -70, -68, -67, -68, -65,
-
754 -63, -61, -57, -53, -51, -47, -42, -40, -35, -32, -27, -23, -20, -16, -12, -8,
-
755 -4, 1, 6, 12, 17, 21, 26, 29, 32, 35, 37, 40, 42, 43, 46, 49, 49, 52, 54, 54,
-
756 55, 56, 55, 56, 56, 54, 54, 54, 51, 50, 49, 45, 43, 42, 38, 35, 34, 30, 26, 25,
-
757 19, 14, 10, 4, -2, -7, -14, -20, -24, -31, -37, -41, -47, -52, -58, -60, -64,
-
758 -68, -69, -71, -71, -73, -72, -72, -71, -69, -68, -64, -61, -57, -53, -48, -43,
-
759 -38, -33, -29, -23, -18, -15, -9, -4, 2, 6, 13, 19, 24, 29, 33, 38, 41, 44, 47,
-
760 49, 51, 53, 55, 56, 58, 59, 60, 60, 60, 60, 59, 59, 58, 56, 55, 53, 51, 49, 46,
-
761 43, 40, 37, 33, 30, 26, 22, 18, 14, 9, 4, -2, -8, -12, -19, -25, -30, -36, -43,
-
762 -46, -53, -57, -59, -66, -70, -70, -74, -78, -76, -77, -77, -75, -74, -73, -68,
-
763 -66, -65, -59, -54, -51, -46, -40, -36, -30, -25, -20, -13, -8, -2, 4, 10, 17,
-
764 23, 28, 34, 40, 43, 46, 51, 53, 54, 57, 59, 59, 62, 63, 63, 66, 65, 64, 65, 65,
-
765 62, 61, 60, 57, 54, 52, 49, 46, 43, 39, 35, 32, 28, 23, 19, 16, 10, 4, 0, -7,
-
766 -14, -19, -26, -33, -37, -44, -50, -54, -58, -63, -68, -70, -74, -77, -79, -80,
-
767 -81, -81, -80, -80, -78, -75, -72, -69, -64, -59, -56, -50, -44, -39, -34, -29,
-
768 -21, -15, -9, -2, 4, 11, 19, 25, 30, 37, 43, 47, 52, 56, 59, 62, 64, 65, 67, 68,
-
769 69, 70, 71, 71, 70, 71, 70, 68, 66, 64, 61, 58, 55, 51, 48, 45, 40, 36, 33, 28,
-
770 23, 18, 13, 9, 2, -3, -9, -16, -21, -29, -37, -41, -45, -55, -60, -62, -67, -73,
-
771 -76, -77, -80, -81, -84, -85, -83, -82, -84, -82, -76, -75, -73, -67, -62, -58,
-
772 -52, -47, -42, -34, -29, -23, -15, -8, 0, 6, 14, 23, 29, 35, 44, 49, 52, 59, 62,
-
773 65, 69, 71, 72, 75, 78, 77, 78, 81, 79, 78, 78, 77, 74, 72, 69, 64, 62, 57, 52,
-
774 49, 44, 38, 34, 30, 24, 19, 14, 9, 3, -4, -10, -17, -24, -30, -37, -46, -50,
-
775 -55, -66, -66, -72, -78, -80, -84, -88, -89, -89, -91, -91, -90, -88, -88, -86,
-
776 -78, -78, -73, -66, -64, -55, -50, -44, -38, -29, -23, -17, -9, -2, 7, 15, 22,
-
777 31, 37, 44, 52, 57, 61, 68, 70, 73, 77, 77, 79, 82, 82, 82, 82, 83, 82, 80, 79,
-
778 77, 73, 70, 67, 61, 58, 53, 47, 44, 38, 32, 28, 23, 17, 11, 5, -1, -8, -15, -21,
-
779 -27, -35, -39, -48, -54, -56, -65, -69, -72, -77, -81, -85, -88, -89, -90, -91,
-
780 -91, -93, -87, -87, -87, -79, -76, -73, -66, -62, -55, -48, -42, -36, -29, -21,
-
781 -15, -9, 1, 9, 16, 25, 32, 41, 47, 54, 61, 65, 70, 72, 74, 78, 79, 80, 82, 82,
-
782 82, 83, 82, 82, 80, 78, 76, 72, 69, 65, 59, 56, 51, 45, 41, 36, 32, 26, 22, 18,
-
783 12, 6, 0, -5, -11, -19, -24, -31, -38, -42, -49, -56, -58, -62, -70, -72, -73,
-
784 -80, -81, -83, -87, -86, -86, -88, -87, -84, -82, -80, -78, -69, -67, -65, -54,
-
785 -51, -46, -35, -33, -27, -18, -13, -6, 1, 10, 18, 24, 34, 41, 47, 56, 61, 65,
-
786 69, 72, 74, 75, 78, 78, 77, 80, 78, 77, 79, 77, 76, 74, 71, 68, 65, 61, 57, 52,
-
787 48, 42, 37, 34, 29, 24, 21, 17, 13, 7, 2, -2, -9, -15, -21, -28, -34, -39, -47,
-
788 -52, -54, -61, -66, -68, -72, -75, -79, -80, -82, -85, -83, -86, -87, -83, -82,
-
789 -82, -76, -72, -68, -63, -57, -51, -46, -38, -32, -29, -20, -15, -10, -1, 4, 12,
-
790 19, 27, 35, 41, 51, 57, 60, 67, 70, 72, 75, 76, 76, 76, 76, 76, 74, 75, 75, 72,
-
791 72, 70, 66, 65, 60, 56, 53, 47, 42, 37, 33, 30, 25, 21, 18, 14, 10, 5, 1, -3,
-
792 -9, -15, -21, -26, -32, -38, -43, -50, -53, -56, -64, -65, -69, -72, -74, -79,
-
793 -81, -79, -83, -85, -81, -83, -79, -79, -76, -70, -68, -62, -58, -51, -44, -40,
-
794 -33, -28, -20, -17, -11, -2, 3, 8, 17, 24, 30, 40, 45, 52, 59, 62, 66, 68, 72,
-
795 73, 71, 73, 73, 72, 71, 71, 70, 69, 67, 65, 62, 61, 58, 53, 51, 46, 41, 38, 33,
-
796 30, 27, 23, 21, 18, 15, 12, 8, 4, -2, -7, -12, -18, -24, -29, -33, -39, -44,
-
797 -48, -52, -56, -60, -65, -66, -72, -75, -77, -80, -80, -83, -83, -80, -79, -78,
-
798 -72, -69, -63, -58, -56, -47, -43, -38, -32, -27, -20, -16, -11, -4, 3, 10, 16,
-
799 24, 33, 39, 46, 53, 58, 65, 66, 68, 71, 70, 71, 70, 69, 70, 68, 67, 67, 66, 65,
-
800 64, 61, 58, 55, 51, 46, 42, 38, 32, 30, 26, 24, 21, 20, 19, 17, 16, 13, 10, 7,
-
801 1, -5, -9, -15, -21, -26, -30, -33, -39, -42, -42, -51, -53, -53, -62, -65, -67,
-
802 -72, -76, -78, -78, -80, -79, -77, -74, -71, -66, -61, -58, -51, -45, -43, -39,
-
803 -30, -27, -24, -17, -14, -8, 0, 3, 11, 20, 27, 35, 41, 49, 55, 58, 62, 64, 64,
-
804 64, 65, 64, 62, 63, 62, 61, 63, 61, 60, 61, 59, 55, 52, 48, 45, 39, 33, 30, 25,
-
805 22, 20, 18, 18, 19, 18, 16, 15, 13, 9, 5, -1, -8, -11, -18, -24, -27, -31, -35,
-
806 -38, -41, -43, -45, -51, -54, -56, -64, -68, -72, -77, -77, -82, -81, -79, -77,
-
807 -73, -70, -64, -58, -53, -49, -44, -38, -34, -30, -26, -21, -18, -12, -9, -2, 5,
-
808 11, 20, 25, 34, 42, 47, 53, 57, 59, 61, 61, 59, 59, 59, 58, 56, 56, 56, 56, 57,
-
809 56, 56, 55, 52, 49, 44, 40, 35, 29, 24, 20, 18, 17, 17, 17, 18, 19, 19, 18, 16,
-
810 14, 9, 3, -4, -8, -15, -21, -24, -28, -31, -33, -36, -38, -40, -41, -47, -53,
-
811 -55, -63, -70, -71, -77, -81, -79, -79, -79, -75, -67, -64, -59, -50, -48, -43,
-
812 -37, -35, -32, -28, -24, -22, -18, -13, -7, 0, 8, 15, 24, 33, 40, 47, 52, 57,
-
813 58, 58, 58, 56, 57, 56, 54, 54, 55, 55, 56, 57, 57, 57, 56, 53, 48, 44, 38, 31,
-
814 26, 20, 16, 14, 13, 14, 16, 17, 19, 21, 20, 19, 16, 13, 7, 0, -7, -12, -17, -22,
-
815 -24, -27, -28, -28, -29, -33, -33, -36, -44, -49, -57, -62, -68, -74, -77, -80,
-
816 -78, -76, -74, -69, -61, -56, -52, -47, -42, -38, -36, -33, -32, -29, -25, -22,
-
817 -19, -12, -4, 2, 10, 19, 27, 34, 41, 46, 49, 52, 53, 52, 50, 51, 50, 49, 50, 50,
-
818 51, 53, 55, 55, 55, 55, 52, 49, 44, 39, 33, 28, 24, 19, 17, 19, 20, 21, 24, 26,
-
819 28, 28, 28, 25, 20, 16, 9, 0, -5, -10, -15, -17, -19, -21, -22, -22, -26, -31,
-
820 -30, -38, -46, -53, -62, -66, -75, -81, -80, -81, -81, -76, -74, -67, -59, -58,
-
821 -52, -47, -44, -42, -41, -37, -34, -31, -29, -23, -15, -10, -2, 6, 15, 24, 29,
-
822 35, 42, 46, 48, 49, 50, 51, 50, 50, 49, 52, 54, 53, 55, 56, 57, 56, 54, 52, 49,
-
823 44, 39, 33, 28, 24, 20, 19, 18, 19, 21, 22, 25, 26, 26, 27, 24, 21, 16, 11, 6,
-
824 -1, -6, -9, -12, -15, -16, -16, -18, -20, -25, -28, -31, -40, -47, -54, -62,
-
825 -68, -74, -79, -78, -79, -78, -74, -70, -65, -61, -56, -53, -49, -46, -45, -41,
-
826 -38, -35, -31, -27, -20, -13, -8, 0, 9, 16, 22, 28, 34, 38, 42, 44, 45, 48, 48,
-
827 48, 49, 50, 52, 52, 53, 54, 54, 54, 53, 50, 48, 44, 41, 36, 32, 29, 23, 21, 20,
-
828 19, 19, 20, 22, 23, 24, 25, 24, 23, 21, 18, 14, 10, 6, 0, -4, -5, -9, -10, -11,
-
829 -13, -15, -19, -24, -27, -33, -41, -48, -56, -60, -67, -73, -73, -74, -75, -72,
-
830 -70, -67, -61, -59, -56, -52, -48, -46, -44, -40, -37, -33, -28, -23, -15, -10,
-
831 -3, 3, 9, 17, 20, 25, 32, 34, 37, 40, 42, 45, 46, 48, 50, 51, 52, 52, 53, 53,
-
832 52, 51, 49, 47, 44, 40, 38, 34, 31, 29, 25, 24, 22, 21, 21, 21, 23, 23, 23, 25,
-
833 23, 22, 21, 18, 15, 11, 8, 3, 0, -2, -6, -8, -10, -14, -17, -20, -25, -31, -36,
-
834 -42, -49, -56, -62, -65, -70, -74, -73, -74, -72, -70, -68, -63, -60, -56, -53,
-
835 -50, -45, -43, -39, -35, -30, -24, -20, -13, -7, -2, 5, 9, 15, 20, 25, 30, 32,
-
836 37, 40, 41, 46, 46, 48, 50, 49, 51, 50, 50, 50, 48, 48, 45, 42, 40, 37, 36, 33,
-
837 30, 28, 25, 24, 22, 20, 21, 20, 22, 22, 23, 23, 23, 23, 23, 21, 19, 16, 13, 8,
-
838 5, 2, -2, -4, -7, -10, -13, -16, -21, -28, -30, -36, -45, -48, -56, -62, -64,
-
839 -71, -71, -72, -73, -70, -70, -66, -61, -59, -55, -51, -47, -44, -39, -35, -32,
-
840 -25, -21, -17, -8, -5, 2, 8, 12, 18, 22, 28, 31, 34, 39, 40, 44, 46, 46, 49, 48,
-
841 49, 50, 47, 49, 47, 45, 44, 42, 40, 37, 35, 33, 30, 29, 26, 23, 21, 19, 19, 18,
-
842 18, 19, 19, 21, 22, 23, 24, 23, 23, 21, 19, 17, 13, 10, 6, 4, 0, -3, -4, -8,
-
843 -12, -15, -21, -25, -30, -38, -44, -50, -56, -60, -65, -68, -69, -70, -70, -67,
-
844 -65, -62, -59, -57, -53, -49, -46, -42, -38, -33, -28, -22, -17, -12, -6, -1, 4,
-
845 8, 13, 18, 21, 26, 29, 32, 36, 39, 42, 45, 46, 48, 48, 49, 48, 46, 46, 45, 43,
-
846 41, 39, 37, 35, 34, 32, 29, 28, 26, 23, 21, 20, 19, 18, 18, 19, 20, 21, 22, 23,
-
847 24, 25, 25, 24, 23, 20, 17, 14, 10, 7, 3, 0, -3, -8, -10, -14, -21, -24, -29,
-
848 -36, -42, -47, -55, -60, -63, -69, -71, -72, -72, -72, -69, -66, -63, -60, -54,
-
849 -52, -48, -43, -39, -35, -30, -24, -20, -15, -9, -4, 1, 6, 11, 15, 19, 25, 28,
-
850 32, 36, 38, 41, 44, 46, 47, 47, 47, 47, 45, 45, 44, 43, 40, 40, 37, 34, 33, 31,
-
851 28, 27, 24, 22, 20, 18, 17, 16, 17, 17, 19, 21, 22, 24, 25, 26, 27, 26, 25, 24,
-
852 21, 18, 14, 11, 9, 5, 2, -1, -5, -8, -14, -18, -24, -30, -35, -45, -50, -55,
-
853 -64, -68, -72, -75, -75, -76, -74, -72, -69, -65, -63, -57, -54, -49, -45, -42,
-
854 -36, -33, -27, -21, -17, -8, -3, 2, 10, 13, 19, 24, 28, 33, 35, 39, 42, 43, 48,
-
855 48, 50, 51, 52, 52, 50, 49, 48, 45, 44, 40, 38, 35, 31, 29, 25, 24, 21, 18, 18,
-
856 15, 14, 13, 13, 14, 14, 17, 19, 20, 23, 24, 25, 26, 26, 27, 25, 25, 22, 18, 17,
-
857 13, 11, 7, 4, 1, -5, -9, -14, -21, -28, -34, -43, -50, -55, -61, -68, -71, -73,
-
858 -76, -76, -74, -74, -71, -68, -65, -63, -59, -54, -52, -46, -40, -34, -28, -20,
-
859 -13, -7, 0, 7, 11, 17, 23, 26, 29, 34, 36, 38, 41, 45, 48, 50, 53, 53, 54, 53,
-
860 51, 48, 46, 43, 39, 35, 32, 29, 25, 23, 21, 20, 19, 18, 16, 14, 14, 11, 10, 11,
-
861 11, 12, 14, 17, 19, 21, 25, 27, 29, 31, 32, 31, 29, 27, 23, 19, 17, 13, 11, 7,
-
862 3, -1, -6, -11, -19, -25, -30, -41, -48, -56, -64, -70, -77, -78, -80, -82, -79,
-
863 -79, -77, -73, -69, -66, -62, -55, -51, -47, -40, -36, -28, -21, -14, -5, 1, 9,
-
864 14, 20, 27, 29, 34, 37, 39, 41, 41, 43, 44, 46, 48, 48, 49, 48, 47, 45, 42, 40,
-
865 36, 31, 28, 23, 20, 15, 12, 10, 8, 8, 6, 6, 5, 4, 3, 3, 3, 6, 8, 11, 14, 17, 20,
-
866 24, 28, 31, 34, 37, 38, 38, 36, 34, 32, 28, 26, 23, 19, 15, 9, 5, -3, -10, -16,
-
867 -25, -33, -41, -51, -59, -66, -74, -79, -81, -83, -84, -82, -81, -79, -75, -73,
-
868 -68, -64, -58, -53, -50, -42, -35, -30, -22, -13, -4, 4, 11, 17, 22, 27, 29, 32,
-
869 35, 35, 36, 37, 37, 40, 41, 44, 47, 48, 49, 47, 45, 41, 38, 33, 27, 23, 17, 12,
-
870 9, 5, 4, 3, 4, 4, 4, 5, 3, 2, 1, 0, 2, 4, 7, 11, 15, 20, 25, 31, 38, 44, 48, 51,
-
871 53, 52, 49, 47, 43, 39, 36, 32, 29, 24, 20, 14, 6, 2, -5, -16, -22, -34, -46,
-
872 -55, -66, -74, -80, -85, -88, -89, -88, -89, -86, -82, -79, -74, -70, -65, -61,
-
873 -58, -52, -47, -41, -32, -25, -15, -6, 2, 10, 15, 22, 28, 31, 36, 37, 37, 36,
-
874 36, 37, 38, 42, 45, 47, 50, 49, 48, 46, 43, 40, 35, 30, 24, 17, 12, 6, 2, 2, 1,
-
875 2, 4, 4, 5, 4, 3, 2, 2, 5, 8, 10, 14, 19, 23, 28, 35, 42, 48, 54, 57, 59, 59,
-
876 57, 54, 51, 50, 47, 42, 38, 33, 28, 21, 15, 7, -1, -9, -20, -32, -43, -54, -65,
-
877 -75, -82, -87, -91, -95, -97, -97, -97, -96, -93, -89, -85, -81, -76, -72, -66,
-
878 -60, -53, -44, -35, -25, -15, -6, 3, 11, 19, 24, 30, 36, 38, 41, 42, 41, 42, 41,
-
879 41, 44, 47, 50, 51, 52, 51, 49, 46, 41, 38, 32, 25, 18, 11, 6, 1, -3, -4, -3,
-
880 -3, -3, -3, -5, -7, -8, -8, -8, -6, -2, 4, 9, 16, 25, 31, 38, 46, 53, 59, 62,
-
881 61, 62, 63, 61, 59, 58, 59, 58, 54, 52, 48, 42, 35, 26, 15, 5, -8, -24, -38,
-
882 -49, -62, -73, -80, -87, -91, -96, -99, -100, -102, -102, -103, -102, -98, -99,
-
883 -96, -91, -86, -78, -71, -59, -49, -37, -24, -16, -4, 6, 14, 22, 28, 35, 39, 41,
-
884 44, 46, 48, 49, 51, 52, 52, 57, 56, 56, 58, 54, 52, 48, 43, 37, 30, 24, 16, 11,
-
885 6, 2, -1, -4, -4, -4, -5, -4, -6, -6, -6, -8, -9, -9, -9, -8, -5, 1, 7, 14, 22,
-
886 29, 36, 42, 47, 50, 52, 54, 54, 54, 54, 52, 52, 52, 51, 51, 48, 43, 37, 30, 19,
-
887 10, 1, -14, -23, -33, -47, -52, -60, -69, -72, -77, -81, -84, -88, -92, -94,
-
888 -95, -97, -97, -93, -89, -83, -78, -70, -60, -53, -43, -33, -24, -14, -7, 0, 7,
-
889 13, 20, 24, 30, 35, 38, 42, 45, 47, 48, 49, 50, 48, 48, 48, 46, 45, 43, 40, 38,
-
890 34, 30, 25, 21, 18, 12, 8, 5, 1, -2, -4, -6, -7, -8, -9, -11, -10, -10, -12,
-
891 -12, -11, -9, -7, -1, 4, 9, 16, 20, 24, 30, 33, 37, 39, 41, 43, 45, 46, 47, 49,
-
892 52, 53, 54, 53, 51, 46, 38, 31, 22, 14, 6, -4, -12, -20, -30, -37, -42, -50,
-
893 -56, -57, -65, -72, -75, -83, -89, -90, -92, -92, -88, -87, -84, -75, -70, -64,
-
894 -55, -49, -40, -34, -28, -21, -18, -12, -8, -2, 4, 11, 17, 20, 26, 30, 32, 35,
-
895 35, 35, 32, 28, 27, 24, 25, 25, 25, 27, 27, 25, 24, 22, 20, 16, 13, 9, 4, 1, -5,
-
896 -7, -8, -9, -6, -5, -1, 3, 5, 8, 10, 12, 14, 16, 17, 21, 24, 27, 31, 37, 41, 46,
-
897 52, 57, 61, 64, 66, 67, 68, 68, 66, 64, 62, 58, 54, 48, 40, 31, 24, 14, 4, -4,
-
898 -14, -26, -36, -45, -54, -62, -68, -75, -80, -83, -90, -95, -96, -100, -100,
-
899 -100, -99, -94, -91, -86, -80, -72, -63, -58, -49, -40, -33, -26, -20, -14, -8,
-
900 -2, 4, 8, 16, 19, 20, 23, 24, 26, 25, 24, 24, 29, 35, 36, 41, 44, 43, 43, 39,
-
901 38, 35, 30, 26, 21, 17, 12, 7, 5, 5, 7, 6, 6, 6, 1, -1, -5, -10, -14, -18, -22,
-
902 -24, -23, -20, -16, -5, 6, 17, 29, 39, 45, 48, 51, 53, 54, 57, 57, 60, 66, 69,
-
903 72, 78, 87, 93, 96, 98, 94, 86, 73, 54, 37, 22, 6, -9, -20, -27, -37, -44, -51,
-
904 -57, -61, -65, -72, -80, -89, -100, -110, -121, -125, -127, -128, -121, -115,
-
905 -106, -94, -87, -75, -64, -56, -46, -40, -36, -33, -31, -28, -22, -15, -8, 4,
-
906 15, 23, 33, 37, 41, 45, 41, 42, 48, 47, 48, 49, 47, 46, 46, 44, 46, 49, 48, 46,
-
907 43, 38, 32, 24, 17, 14, 9, 4, 0, -7, -11, -14, -20, -22, -23, -24, -27, -28,
-
908 -30, -33, -33, -32, -28, -21, -11, -2, 6, 16, 24, 31, 40, 47, 53, 61, 67, 70,
-
909 73, 77, 81, 85, 91, 96, 100, 101, 99, 92, 84, 73, 59, 46, 35, 21, 8, -6, -19,
-
910 -31, -42, -51, -58, -65, -73, -81, -90, -100, -107, -116, -122, -122, -124,
-
911 -123, -119, -116, -108, -101, -98, -84, -74, -69, -58, -50, -45, -38, -34, -31,
-
912 -22, -14, -9, 0, 7, 12, 18, 20, 24, 28, 28, 34, 39, 43, 48, 49, 49, 49, 49, 47,
-
913 45, 45, 41, 38, 34, 28, 25, 19, 17, 16, 13, 12, 7, 4, 1, -6, -9, -13, -13, -13,
-
914 -13, -9, -6, -2, 2, 7, 14, 20, 27, 30, 35, 40, 41, 45, 49, 52, 59, 64, 70, 75,
-
915 79, 82, 83, 84, 82, 79, 75, 67, 58, 47, 36, 24, 12, 2, -7, -14, -23, -32, -40,
-
916 -49, -57, -65, -74, -81, -88, -96, -103, -107, -112, -114, -112, -110, -103,
-
917 -97, -91, -83, -77, -69, -61, -53, -43, -37, -30, -23, -18, -12, -7, 0, 8, 15,
-
918 22, 23, 28, 31, 29, 29, 27, 25, 20, 13, 10, 10, 13, 15, 17, 23, 26, 26, 25, 23,
-
919 23, 19, 14, 11, 8, 4, 0, -2, 0, 3, 7, 9, 14, 16, 16, 15, 9, 5, 2, -4, -7, -8,
-
920 -8, -8, -5, 1, 9, 18, 27, 35, 41, 44, 46, 46, 44, 44, 43, 45, 49, 51, 55, 60,
-
921 65, 70, 73, 76, 76, 72, 64, 54, 42, 28, 14, 3, -5, -12, -20, -25, -30, -35, -41,
-
922 -47, -53, -60, -68, -75, -84, -92, -100, -105, -106, -104, -102, -96, -86, -80,
-
923 -73, -67, -61, -53, -50, -44, -37, -35, -31, -29, -27, -20, -15, -10, -1, 7, 11,
-
924 15, 16, 15, 16, 12, 6, 3, -2, -3, 0, 3, 8, 14, 19, 24, 28, 29, 31, 30, 26, 23,
-
925 19, 14, 13, 11, 12, 16, 20, 25, 30, 34, 37, 38, 35, 31, 27, 22, 17, 12, 9, 8, 7,
-
926 8, 12, 17, 23, 28, 30, 33, 34, 33, 31, 28, 27, 27, 27, 28, 32, 36, 41, 46, 50,
-
927 54, 55, 53, 48, 41, 33, 23, 13, 5, -1, -5, -8, -12, -15, -16, -20, -24, -28,
-
928 -35, -42, -50, -59, -68, -74, -80, -85, -83, -82, -79, -72, -68, -64, -58, -56,
-
929 -53, -51, -47, -47, -45, -41, -41, -37, -33, -29, -21, -17, -11, -7, -2, 2, -1,
-
930 0, -2, -5, -9, -17, -19, -19, -17, -7, 0, 10, 20, 24, 27, 29, 30, 27, 25, 22,
-
931 17, 16, 11, 8, 11, 15, 22, 29, 35, 41, 43, 41, 38, 31, 23, 16, 11, 7, 6, 7, 8,
-
932 14, 20, 28, 39, 46, 51, 52, 51, 49, 45, 40, 37, 37, 41, 43, 47, 54, 60, 65, 68,
-
933 71, 71, 67, 58, 45, 33, 19, 5, -7, -15, -18, -21, -23, -26, -29, -32, -38, -44,
-
934 -52, -60, -69, -79, -86, -94, -99, -101, -100, -93, -89, -82, -73, -70, -64,
-
935 -58, -56, -50, -47, -45, -39, -36, -35, -31, -25, -23, -16, -8, -4, 3, 6, 8, 9,
-
936 6, 5, 1, -3, -6, -14, -17, -15, -14, -6, 3, 11, 19, 23, 25, 24, 24, 20, 16, 12,
-
937 8, 7, 3, 3, 9, 13, 21, 30, 36, 44, 47, 46, 43, 38, 32, 26, 23, 21, 22, 24, 27,
-
938 34, 40, 48, 57, 61, 64, 64, 60, 56, 50, 44, 40, 40, 41, 42, 45, 49, 53, 55, 56,
-
939 54, 50, 43, 31, 18, 5, -9, -21, -30, -35, -37, -38, -39, -40, -42, -45, -49,
-
940 -55, -63, -69, -77, -85, -90, -96, -98, -96, -93, -88, -79, -70, -63, -55, -50,
-
941 -48, -42, -39, -37, -33, -31, -28, -23, -20, -13, -6, 1, 7, 14, 17, 19, 21, 16,
-
942 15, 13, 6, 2, -3, -10, -13, -14, -9, 0, 8, 18, 26, 28, 28, 25, 20, 19, 16, 9, 7,
-
943 8, 4, 4, 8, 14, 23, 32, 38, 43, 44, 41, 34, 25, 20, 14, 10, 11, 14, 17, 23, 30,
-
944 37, 47, 56, 60, 62, 60, 54, 47, 41, 36, 33, 36, 41, 46, 53, 59, 64, 67, 68, 66,
-
945 61, 52, 39, 23, 8, -6, -20, -29, -32, -33, -33, -33, -35, -40, -43, -48, -57,
-
946 -62, -70, -80, -86, -93, -97, -97, -95, -89, -81, -70, -64, -58, -50, -47, -42,
-
947 -39, -34, -29, -29, -25, -23, -19, -13, -8, 0, 9, 18, 19, 21, 24, 18, 16, 13, 7,
-
948 5, -2, -10, -18, -22, -21, -18, -8, 4, 13, 19, 20, 20, 16, 12, 10, 6, 4, 2, -1,
-
949 -2, 0, 5, 13, 24, 36, 44, 50, 51, 47, 41, 33, 26, 22, 19, 19, 19, 22, 27, 32,
-
950 41, 51, 60, 65, 65, 61, 53, 46, 38, 32, 31, 32, 36, 40, 46, 51, 56, 61, 63, 63,
-
951 60, 51, 39, 23, 9, -5, -17, -22, -26, -26, -25, -26, -28, -31, -34, -39, -47,
-
952 -55, -64, -75, -84, -90, -95, -95, -91, -86, -78, -71, -65, -58, -54, -50, -46,
-
953 -43, -40, -39, -37, -34, -31, -23, -16, -7, 4, 11, 15, 18, 18, 17, 14, 11, 7, 3,
-
954 -1, -5, -9, -13, -15, -18, -23, -22, -18, -17, -11, -4, -3, 0, 2, 0, 2, 6, 6, 8,
-
955 11, 14, 16, 20, 26, 35, 42, 48, 55, 56, 58, 58, 53, 49, 47, 42, 39, 40, 40, 40,
-
956 43, 44, 46, 50, 51, 51, 47, 42, 35, 28, 24, 20, 18, 20, 24, 27, 30, 35, 39, 41,
-
957 44, 42, 40, 36, 27, 17, 7, -2, -12, -18, -21, -24, -24, -26, -28, -31, -35, -39,
-
958 -44, -51, -57, -65, -74, -78, -84, -88, -85, -84, -81, -75, -69, -64, -58, -52,
-
959 -48, -40, -34, -31, -24, -21, -14, -11, -9, -1, 4, 7, 14, 18, 21, 25, 26, 25,
-
960 28, 27, 21, 20, 15, 12, 9, 3, -2, -7, -11, -16, -16, -11, -10, -8, -4, -4, -3,
-
961 -1, 3, 12, 19, 22, 24, 21, 19, 18, 17, 24, 34, 37, 40, 46, 47, 49, 51, 50, 56,
-
962 60, 57, 54, 49, 45, 40, 36, 37, 41, 41, 40, 36, 32, 28, 24, 20, 21, 23, 22, 19,
-
963 16, 14, 15, 17, 20, 23, 25, 21, 14, 5, -4, -13, -20, -24, -25, -27, -30, -31,
-
964 -34, -35, -34, -32, -31, -32, -39, -46, -54, -65, -71, -73, -73, -68, -64, -60,
-
965 -54, -50, -43, -32, -25, -19, -10, -8, -10, -9, -8, -9, -7, -4, 0, 6, 8, 11, 13,
-
966 13, 17, 15, 9, 8, 2, -12, -20, -30, -43, -46, -47, -46, -35, -26, -16, -4, 4,
-
967 12, 17, 18, 20, 19, 13, 13, 13, 11, 17, 28, 37, 51, 63, 70, 76, 78, 75, 69, 62,
-
968 54, 45, 36, 29, 25, 23, 24, 29, 34, 40, 43, 40, 37, 32, 23, 15, 10, 5, 3, 5, 7,
-
969 13, 21, 29, 35, 42, 45, 42, 35, 28, 15, 3, -6, -16, -22, -22, -22, -20, -13, -9,
-
970 -3, 1, 0, -5, -16, -30, -43, -56, -64, -65, -68, -66, -59, -53, -40, -35, -33,
-
971 -22, -22, -30, -36, -30, -25, -39, -40, -29, -26, -26, -21, -7, 1, 2, -5, -3, 3,
-
972 -5, -8, -15, -14, -12, -32, -35, -30, -36, -37, -42, -43, -31, -25, -20, -2, 15,
-
973 21, 28, 32, 41, 51, 44, 45, 52, 50, 51, 52, 56, 63, 66, 69, 72, 74, 69, 58, 49,
-
974 39, 27, 13, 1, -2, -4, -5, -3, 3, 11, 18, 22, 26, 29, 28, 23, 22, 23, 25, 29,
-
975 32, 41, 55, 67, 78, 87, 95, 98, 95, 90, 80, 66, 50, 35, 21, 9, -1, -11, -17,
-
976 -20, -25, -29, -33, -38, -43, -49, -57, -63, -68, -71, -71, -70, -68, -63, -58,
-
977 -52, -42, -35, -33, -28, -27, -23, -16, -9, -1, 5, 1, 8, 15, 4, 0, 2, -2, -8,
-
978 -13, -12, -17, -28, -31, -33, -34, -35, -41, -46, -45, -51, -65, -66, -72, -76,
-
979 -65, -58, -39, -13, 5, 27, 47, 60, 73, 78, 79, 84, 82, 70, 65, 60, 54, 61, 67,
-
980 70, 76, 72, 61, 55, 43, 25, 6, -14, -35, -52, -67, -75, -73, -67, -55, -38, -24,
-
981 -7, 3, 9, 18, 22, 23, 26, 29, 35, 43, 53, 65, 82, 98, 112, 120, 121, 115, 102,
-
982 84, 67, 47, 25, 3, -17, -32, -43, -51, -55, -57, -59, -63, -67, -73, -81, -88,
-
983 -93, -94, -94, -90, -82, -73, -60, -46, -33, -24, -16, -10, -12, -12, -13, -13,
-
984 -14, -16, -13, -16, -20, -16, -15, -12, -8, -15, -26, -34, -48, -61, -65, -68,
-
985 -69, -71, -73, -67, -64, -60, -49, -44, -43, -41, -50, -61, -59, -54, -41, -16,
-
986 11, 36, 54, 69, 83, 91, 99, 102, 95, 82, 66, 44, 27, 23, 24, 27, 32, 32, 27, 18,
-
987 9, -1, -14, -28, -47, -68, -85, -95, -96, -84, -62, -38, -12, 13, 31, 42, 54,
-
988 62, 66, 67, 65, 61, 58, 59, 65, 77, 93, 106, 113, 114, 107, 93, 74, 54, 30, 3,
-
989 -23, -49, -68, -80, -84, -81, -76, -70, -67, -68, -69, -73, -76, -77, -79, -78,
-
990 -73, -70, -64, -50, -34, -15, 6, 19, 22, 19, 8, 1, -4, -10, -12, -17, -26, -35,
-
991 -37, -37, -36, -30, -30, -33, -43, -56, -64, -70, -71, -72, -73, -71, -68, -67,
-
992 -60, -44, -27, -17, -16, -16, -29, -39, -37, -38, -22, 7, 23, 38, 56, 67, 75,
-
993 88, 95, 93, 82, 57, 33, 11, 1, 3, 0, 5, 10, 4, 3, 4, -1, -5, -13, -26, -47, -66,
-
994 -78, -86, -82, -67, -43, -16, 9, 37, 60, 77, 91, 97, 97, 94, 84, 71, 66, 65, 66,
-
995 78, 90, 99, 103, 100, 95, 85, 71, 52, 26, -1, -28, -52, -67, -71, -71, -68, -61,
-
996 -55, -50, -45, -43, -43, -45, -48, -52, -56, -54, -47, -35, -21, -8, 3, 9, 11,
-
997 8, 3, -3, -15, -24, -36, -48, -52, -56, -59, -55, -50, -49, -46, -46, -53, -55,
-
998 -56, -59, -62, -61, -58, -57, -51, -40, -32, -24, -15, -12, -10, -8, -12, -18,
-
999 -21, -27, -36, -37, -27, -12, 11, 35, 47, 56, 62, 61, 60, 59, 52, 40, 25, 11, 6,
-
1000 6, 12, 23, 30, 35, 36, 28, 22, 17, 5, -10, -25, -41, -52, -53, -39, -16, 1, 19,
-
1001 34, 42, 49, 54, 54, 54, 49, 39, 36, 41, 45, 55, 72, 89, 101, 106, 106, 102, 93,
-
1002 80, 63, 44, 26, 7, -9, -14, -14, -14, -11, -8, -9, -12, -18, -27, -35, -41, -47,
-
1003 -52, -52, -49, -41, -29, -15, -1, 5, 7, 6, 1, -8, -16, -25, -38, -44, -44, -42,
-
1004 -36, -26, -19, -14, -11, -14, -21, -29, -40, -53, -63, -68, -71, -70, -59, -44,
-
1005 -32, -21, -8, -1, 1, 1, -8, -19, -26, -37, -44, -44, -43, -43, -40, -30, -16, 3,
-
1006 23, 42, 54, 53, 52, 46, 39, 40, 35, 27, 22, 18, 17, 26, 41, 50, 57, 56, 47, 38,
-
1007 26, 15, 4, -10, -21, -31, -37, -31, -21, -6, 11, 25, 34, 41, 47, 49, 50, 49, 46,
-
1008 46, 47, 52, 59, 68, 80, 89, 94, 97, 93, 85, 74, 62, 47, 34, 21, 9, -1, -7, -10,
-
1009 -9, -9, -10, -15, -20, -27, -34, -38, -40, -42, -41, -38, -31, -22, -11, 1, 9,
-
1010 14, 16, 10, 4, -4, -16, -26, -36, -46, -48, -46, -43, -35, -28, -26, -27, -32,
-
1011 -37, -40, -48, -56, -65, -72, -76, -74, -63, -48, -33, -23, -13, -9, -7, -7,
-
1012 -12, -17, -26, -37, -46, -52, -50, -47, -45, -43, -43, -34, -19, -3, 17, 29, 30,
-
1013 28, 28, 29, 33, 37, 36, 32, 30, 29, 35, 43, 51, 55, 49, 41, 30, 18, 10, 1, -10,
-
1014 -23, -36, -44, -46, -40, -30, -11, 4, 14, 27, 36, 41, 47, 49, 51, 53, 50, 48,
-
1015 54, 61, 69, 79, 86, 91, 89, 81, 76, 68, 56, 43, 25, 7, -9, -22, -29, -31, -33,
-
1016 -37, -40, -43, -45, -46, -47, -47, -49, -48, -45, -40, -31, -21, -11, -3, 0, 1,
-
1017 0, -5, -13, -21, -33, -42, -48, -52, -47, -41, -36, -33, -35, -35, -38, -47,
-
1018 -53, -62, -72, -78, -81, -79, -67, -55, -45, -27, -9, 1, 9, 16, 16, 9, 2, -6,
-
1019 -16, -17, -16, -22, -16, -7, -11, -12, -13, -7, 2, 6, 11, 8, 1, -2, 1, 4, 12,
-
1020 21, 14, 13, 18, 17, 25, 32, 34, 34, 30, 23, 15, 17, 19, 16, 12, 3, -2, -5, -1,
-
1021 9, 11, 16, 19, 17, 23, 33, 38, 39, 42, 43, 43, 47, 51, 54, 59, 62, 64, 64, 67,
-
1022 68, 65, 65, 63, 56, 49, 43, 34, 27, 22, 13, 5, 0, -6, -11, -15, -18, -20, -22,
-
1023 -22, -25, -26, -25, -26, -24, -21, -21, -24, -25, -25, -27, -27, -27, -31, -33,
-
1024 -34, -36, -40, -42, -44, -47, -46, -44, -43, -41, -36, -34, -31, -27, -28, -33,
-
1025 -35, -34, -35, -36, -35, -37, -33, -30, -27, -21, -16, -14, -17, -18, -18, -22,
-
1026 -30, -36, -41, -49, -55, -61, -58, -36, -14, 7, 24, 33, 40, 43, 47, 52, 50, 42,
-
1027 30, 22, 21, 25, 34, 42, 52, 55, 52, 47, 39, 33, 20, 3, -15, -37, -51, -55, -52,
-
1028 -42, -29, -14, -1, 14, 29, 38, 44, 44, 39, 36, 35, 35, 40, 48, 60, 72, 83, 91,
-
1029 97, 97, 94, 87, 74, 59, 41, 23, 9, 0, -7, -11, -13, -15, -16, -17, -20, -23,
-
1030 -29, -37, -46, -52, -53, -51, -45, -35, -24, -16, -9, -2, 2, 3, -1, -9, -17,
-
1031 -25, -35, -41, -41, -41, -39, -35, -29, -24, -24, -24, -30, -37, -44, -57, -65,
-
1032 -64, -65, -62, -52, -41, -29, -16, -7, 0, 6, 0, -6, -11, -21, -25, -30, -32,
-
1033 -28, -26, -22, -17, -15, -13, -18, -21, -13, -7, 0, 4, 7, 12, 20, 31, 41, 49,
-
1034 51, 48, 46, 44, 46, 46, 42, 41, 37, 33, 29, 24, 23, 19, 11, 1, -12, -19, -24,
-
1035 -27, -25, -19, -13, -7, 3, 14, 24, 31, 35, 40, 45, 47, 50, 56, 62, 68, 76, 83,
-
1036 88, 90, 89, 88, 84, 75, 63, 47, 31, 17, 4, -5, -12, -19, -25, -28, -30, -33,
-
1037 -34, -36, -40, -44, -47, -49, -47, -40, -33, -25, -17, -9, -4, 3, 7, 7, 4, -4,
-
1038 -10, -18, -25, -29, -32, -36, -40, -40, -36, -34, -32, -30, -33, -40, -48, -52,
-
1039 -54, -53, -54, -54, -48, -45, -39, -27, -15, -6, -4, -3, -2, -7, -9, -11, -12,
-
1040 -16, -19, -22, -27, -24, -24, -30, -24, -18, -10, 5, 12, 14, 21, 24, 26, 31, 35,
-
1041 34, 31, 27, 28, 33, 36, 41, 46, 43, 42, 37, 29, 27, 21, 8, -2, -14, -24, -26,
-
1042 -25, -22, -13, -4, 3, 11, 20, 26, 29, 31, 33, 35, 36, 39, 45, 53, 63, 71, 77,
-
1043 82, 85, 81, 78, 72, 61, 50, 36, 23, 12, 3, -2, -7, -9, -13, -16, -19, -22, -25,
-
1044 -29, -33, -38, -42, -41, -38, -31, -21, -14, -6, 0, 3, 7, 7, 4, -1, -9, -17,
-
1045 -23, -30, -34, -37, -40, -40, -41, -43, -41, -41, -41, -40, -40, -43, -46, -45,
-
1046 -46, -42, -37, -35, -31, -25, -22, -18, -9, -2, -1, 2, 1, -3, -7, -9, -10, -13,
-
1047 -14, -19, -28, -31, -34, -41, -42, -31, -23, -13, 3, 8, 13, 25, 28, 34, 41, 39,
-
1048 32, 29, 28, 30, 36, 40, 44, 45, 43, 43, 39, 34, 31, 19, 4, -7, -20, -27, -26,
-
1049 -23, -15, -7, -1, 7, 16, 24, 29, 32, 32, 31, 30, 32, 39, 46, 54, 63, 69, 74, 77,
-
1050 76, 74, 70, 60, 48, 36, 22, 12, 5, 0, -2, -5, -8, -10, -12, -14, -16, -19, -24,
-
1051 -29, -32, -34, -31, -27, -22, -15, -10, -6, -2, -1, -1, -2, -9, -15, -19, -25,
-
1052 -28, -29, -31, -32, -34, -33, -31, -31, -33, -36, -37, -37, -41, -42, -42, -41,
-
1053 -42, -35, -30, -29, -22, -16, -14, -8, -7, -8, -11, -13, -15, -17, -18, -19,
-
1054 -19, -20, -20, -23, -26, -27, -32, -39, -42, -38, -32, -20, -1, 9, 17, 26, 32,
-
1055 40, 48, 49, 44, 37, 30, 26, 28, 32, 36, 36, 35, 35, 32, 28, 26, 17, 4, -9, -23,
-
1056 -33, -35, -31, -23, -15, -8, -1, 7, 16, 24, 29, 29, 27, 25, 26, 32, 40, 47, 57,
-
1057 65, 70, 74, 76, 75, 72, 65, 54, 42, 29, 19, 12, 8, 6, 2, -2, -4, -8, -11, -14,
-
1058 -18, -25, -31, -35, -37, -35, -29, -25, -18, -11, -6, -1, 3, 3, 0, -5, -12, -21,
-
1059 -26, -29, -28, -28, -26, -26, -30, -28, -26, -26, -27, -29, -36, -45, -50, -52,
-
1060 -50, -48, -48, -42, -36, -31, -25, -17, -8, -5, -8, -7, -8, -12, -15, -13, -12,
-
1061 -13, -16, -18, -18, -19, -22, -24, -29, -39, -44, -40, -32, -18, -4, 2, 11, 19,
-
1062 25, 33, 39, 39, 33, 28, 22, 20, 24, 27, 33, 37, 35, 35, 31, 30, 28, 18, 8, -5,
-
1063 -19, -25, -23, -16, -10, -3, 3, 8, 16, 22, 28, 31, 30, 27, 26, 30, 35, 43, 53,
-
1064 64, 70, 73, 77, 78, 76, 72, 62, 50, 37, 24, 15, 9, 6, 2, -3, -7, -10, -14, -17,
-
1065 -19, -24, -30, -35, -38, -38, -33, -27, -22, -17, -11, -6, -3, 0, 0, -4, -10,
-
1066 -17, -21, -24, -26, -27, -28, -28, -29, -30, -31, -30, -29, -33, -37, -40, -44,
-
1067 -46, -46, -43, -41, -38, -33, -29, -22, -16, -12, -7, -4, -3, -5, -7, -10, -11,
-
1068 -12, -15, -15, -18, -21, -24, -27, -29, -34, -44, -47, -41, -35, -24, -7, 0, 7,
-
1069 16, 22, 31, 38, 37, 34, 31, 26, 24, 28, 32, 36, 38, 35, 34, 31, 26, 24, 15, 2,
-
1070 -12, -26, -32, -32, -27, -19, -12, -5, 2, 11, 19, 27, 31, 30, 30, 29, 32, 41,
-
1071 49, 60, 70, 77, 81, 85, 86, 84, 79, 69, 55, 41, 27, 18, 10, 6, 3, -2, -5, -7,
-
1072 -9, -11, -13, -18, -25, -30, -34, -35, -31, -27, -20, -13, -8, -3, 2, 5, 5, 3,
-
1073 -2, -9, -16, -23, -27, -31, -33, -34, -36, -36, -36, -38, -41, -41, -43, -48,
-
1074 -50, -51, -50, -48, -44, -35, -30, -27, -21, -15, -10, -8, -4, -3, -4, -4, -6,
-
1075 -7, -7, -8, -8, -10, -13, -17, -24, -29, -34, -40, -51, -61, -56, -46, -35, -16,
-
1076 0, 7, 16, 26, 34, 42, 42, 34, 30, 25, 21, 26, 33, 41, 47, 48, 49, 49, 45, 40,
-
1077 32, 17, 1, -16, -29, -32, -27, -23, -16, -7, 0, 8, 16, 23, 27, 26, 23, 21, 22,
-
1078 27, 35, 45, 57, 68, 73, 79, 84, 82, 79, 72, 59, 45, 32, 21, 15, 12, 10, 8, 6, 4,
-
1079 1, -3, -6, -12, -22, -30, -37, -41, -40, -36, -30, -23, -17, -12, -7, -3, -2,
-
1080 -3, -7, -12, -20, -28, -29, -29, -29, -28, -28, -28, -27, -23, -20, -19, -22,
-
1081 -30, -35, -39, -40, -40, -39, -38, -37, -34, -30, -23, -18, -13, -10, -13, -15,
-
1082 -15, -16, -16, -16, -17, -19, -22, -22, -22, -21, -20, -25, -29, -33, -42, -50,
-
1083 -47, -34, -23, -6, 9, 16, 28, 38, 47, 57, 57, 51, 42, 34, 31, 30, 33, 38, 41,
-
1084 39, 37, 38, 36, 35, 28, 13, -1, -16, -27, -29, -26, -24, -22, -17, -11, -4, 6,
-
1085 13, 17, 17, 16, 17, 18, 26, 34, 43, 53, 61, 68, 73, 79, 80, 77, 71, 60, 48, 37,
-
1086 28, 22, 16, 13, 9, 5, 3, 1, -1, -4, -9, -17, -24, -30, -34, -34, -32, -29, -26,
-
1087 -22, -16, -11, -7, -5, -7, -11, -15, -19, -21, -22, -24, -25, -24, -23, -21,
-
1088 -19, -22, -25, -28, -32, -33, -38, -41, -40, -42, -41, -38, -32, -27, -22, -18,
-
1089 -15, -11, -14, -14, -11, -12, -12, -13, -12, -11, -14, -14, -12, -13, -16, -21,
-
1090 -25, -31, -37, -48, -56, -58, -52, -42, -27, -4, 12, 22, 37, 47, 54, 57, 56, 51,
-
1091 44, 38, 34, 38, 45, 49, 54, 56, 57, 56, 51, 45, 34, 19, 4, -11, -21, -25, -25,
-
1092 -23, -17, -11, -7, 0, 5, 8, 9, 9, 9, 9, 13, 20, 31, 44, 56, 67, 74, 80, 82, 79,
-
1093 76, 68, 56, 45, 33, 24, 17, 13, 9, 5, 1, -4, -8, -12, -18, -25, -32, -38, -43,
-
1094 -45, -44, -39, -34, -28, -22, -18, -14, -10, -8, -7, -7, -8, -10, -11, -10, -9,
-
1095 -8, -9, -10, -12, -16, -19, -23, -27, -32, -35, -36, -36, -35, -33, -30, -25,
-
1096 -20, -16, -17, -19, -21, -20, -20, -20, -18, -17, -15, -12, -7, -3, -1, 1, -1,
-
1097 -5, -8, -14, -23, -28, -30, -37, -43, -45, -47, -46, -37, -23, -9, 9, 18, 24,
-
1098 33, 38, 40, 44, 43, 39, 34, 32, 34, 40, 46, 50, 53, 50, 47, 43, 36, 32, 21, 7,
-
1099 -5, -15, -21, -21, -18, -15, -11, -7, -4, 2, 6, 10, 12, 13, 14, 17, 22, 31, 41,
-
1100 52, 60, 67, 70, 72, 71, 67, 63, 54, 43, 33, 22, 16, 11, 7, 4, -2, -6, -10, -15,
-
1101 -19, -23, -29, -36, -40, -42, -43, -38, -34, -29, -23, -19, -15, -12, -9, -9,
-
1102 -12, -15, -16, -15, -14, -10, -8, -8, -9, -12, -13, -16, -22, -25, -30, -38,
-
1103 -42, -41, -41, -42, -38, -35, -33, -30, -25, -19, -16, -13, -12, -12, -11, -10,
-
1104 -9, -7, -8, -8, -8, -7, -5, -3, -2, -5, -8, -11, -18, -23, -27, -32, -41, -48,
-
1105 -48, -43, -35, -25, -7, 7, 15, 24, 31, 35, 37, 36, 34, 31, 28, 26, 31, 40, 45,
-
1106 50, 54, 54, 52, 47, 42, 36, 24, 13, 2, -4, -6, -6, -2, 3, 8, 9, 11, 14, 14, 14,
-
1107 14, 13, 13, 15, 21, 30, 41, 50, 58, 62, 63, 63, 59, 54, 47, 37, 28, 20, 13, 10,
-
1108 7, 5, 2, -2, -7, -14, -19, -25, -32, -38, -44, -46, -48, -46, -41, -35, -29,
-
1109 -21, -17, -13, -10, -9, -11, -13, -15, -15, -11, -9, -7, -3, -2, -5, -4, -2, -5,
-
1110 -10, -14, -19, -21, -22, -24, -25, -25, -27, -29, -24, -19, -19, -18, -17, -19,
-
1111 -18, -16, -13, -9, -7, -8, -8, -4, -1, 1, -1, -2, -7, -15, -18, -17, -19, -23,
-
1112 -25, -25, -29, -30, -27, -24, -23, -25, -23, -22, -22, -13, 0, 10, 17, 23, 29,
-
1113 34, 40, 45, 49, 48, 42, 40, 37, 35, 38, 40, 39, 38, 36, 33, 32, 31, 26, 21, 14,
-
1114 6, 1, -3, -2, 1, 2, 5, 8, 11, 15, 21, 26, 31, 35, 35, 36, 39, 41, 45, 47, 47,
-
1115 45, 42, 39, 36, 32, 26, 18, 10, 2, -6, -12, -16, -21, -26, -31, -35, -38, -39,
-
1116 -40, -41, -41, -41, -42, -37, -32, -29, -24, -17, -14, -11, -6, 0, 1, 0, 1, 0,
-
1117 -3, -6, -6, -5, -7, -11, -12, -11, -12, -14, -13, -14, -17, -22, -27, -29, -30,
-
1118 -33, -33, -29, -29, -29, -24, -20, -17, -14, -12, -12, -12, -12, -16, -15, -11,
-
1119 -15, -17, -17, -17, -20, -22, -23, -26, -27, -31, -34, -31, -30, -27, -25, -20,
-
1120 -15, -12, -1, 12, 20, 26, 33, 38, 38, 42, 46, 45, 46, 42, 39, 40, 39, 39, 40,
-
1121 40, 36, 31, 29, 25, 22, 17, 13, 7, 1, -1, -3, -2, 1, 3, 5, 9, 13, 17, 22, 28,
-
1122 32, 35, 37, 39, 43, 46, 48, 49, 48, 47, 43, 39, 35, 29, 22, 15, 6, -2, -8, -14,
-
1123 -19, -23, -27, -32, -35, -37, -39, -40, -40, -40, -39, -38, -34, -29, -24, -18,
-
1124 -13, -9, -6, -4, -3, -3, -4, -2, -3, -4, -5, -5, -3, -2, -3, -4, -6, -11, -17,
-
1125 -19, -23, -28, -31, -34, -33, -32, -31, -24, -21, -19, -18, -16, -16, -14, -13,
-
1126 -15, -12, -10, -12, -6, -1, 1, 2, 2, -2, -7, -10, -14, -18, -20, -22, -25, -26,
-
1127 -25, -22, -21, -20, -21, -27, -30, -32, -30, -25, -17, -9, -4, 6, 14, 21, 31,
-
1128 34, 33, 31, 28, 24, 21, 27, 31, 30, 37, 41, 44, 47, 50, 52, 47, 40, 30, 21, 18,
-
1129 13, 13, 17, 19, 21, 26, 33, 35, 38, 38, 34, 29, 25, 24, 22, 25, 28, 28, 32, 34,
-
1130 35, 35, 33, 28, 18, 9, 0, -10, -15, -20, -23, -24, -24, -22, -21, -19, -18, -19,
-
1131 -22, -29, -34, -38, -39, -41, -40, -34, -30, -24, -17, -11, -7, -8, -11, -14,
-
1132 -17, -19, -20, -20, -22, -22, -18, -16, -11, -10, -12, -13, -17, -21, -24, -24,
-
1133 -26, -29, -27, -26, -22, -17, -13, -9, -9, -11, -11, -13, -14, -15, -14, -14,
-
1134 -15, -14, -15, -12, -13, -15, -13, -17, -22, -23, -25, -26, -25, -22, -21, -22,
-
1135 -22, -21, -16, -13, -7, 0, 4, 7, 10, 15, 20, 23, 25, 26, 27, 26, 26, 27, 28, 31,
-
1136 31, 32, 34, 34, 36, 37, 37, 36, 31, 28, 25, 23, 21, 21, 23, 23, 25, 27, 30, 33,
-
1137 35, 36, 34, 32, 32, 30, 29, 29, 29, 29, 28, 27, 26, 25, 23, 18, 14, 7, 0, -5,
-
1138 -10, -14, -17, -20, -21, -21, -21, -22, -21, -22, -24, -27, -29, -31, -32, -32,
-
1139 -32, -33, -31, -29, -27, -23, -20, -18, -20, -21, -21, -20, -19, -20, -17, -16,
-
1140 -16, -15, -14, -11, -12, -13, -13, -14, -16, -17, -16, -15, -16, -15, -15, -15,
-
1141 -16, -17, -15, -13, -15, -16, -16, -15, -15, -13, -12, -13, -14, -16, -16, -17,
-
1142 -18, -17, -18, -19, -21, -20, -19, -19, -18, -18, -17, -18, -19, -16, -14, -12,
-
1143 -8, -4, 2, 5, 10, 16, 20, 22, 23, 25, 25, 24, 25, 28, 32, 33, 36, 40, 41, 42,
-
1144 44, 44, 43, 39, 36, 33, 30, 28, 27, 27, 26, 28, 27, 26, 27, 25, 24, 22, 19, 17,
-
1145 16, 15, 16, 18, 19, 19, 21, 21, 19, 18, 15, 11, 6, 1, -3, -7, -10, -12, -13,
-
1146 -14, -15, -16, -17, -18, -23, -27, -28, -31, -35, -37, -38, -37, -38, -37, -35,
-
1147 -31, -30, -30, -27, -24, -23, -22, -20, -18, -15, -15, -15, -10, -8, -9, -8, -4,
-
1148 -3, -6, -8, -7, -10, -13, -13, -14, -16, -19, -18, -16, -15, -15, -14, -13, -17,
-
1149 -18, -18, -21, -21, -21, -22, -22, -24, -22, -22, -24, -22, -22, -22, -23, -23,
-
1150 -20, -20, -20, -18, -20, -20, -15, -12, -11, -4, 1, 6, 10, 12, 18, 22, 23, 26,
-
1151 27, 27, 28, 30, 32, 33, 37, 39, 40, 42, 42, 43, 43, 41, 40, 36, 32, 30, 28, 26,
-
1152 26, 26, 26, 26, 25, 26, 26, 24, 24, 22, 21, 22, 20, 22, 23, 23, 24, 24, 24, 23,
-
1153 20, 18, 15, 10, 6, 3, -1, -5, -7, -8, -9, -11, -13, -16, -17, -20, -23, -26,
-
1154 -29, -32, -34, -37, -37, -36, -37, -36, -34, -32, -30, -27, -25, -22, -21, -20,
-
1155 -18, -17, -15, -15, -15, -12, -12, -13, -10, -9, -10, -8, -5, -5, -5, -5, -5,
-
1156 -7, -12, -11, -10, -14, -14, -13, -16, -17, -16, -18, -19, -19, -21, -22, -23,
-
1157 -25, -25, -26, -25, -24, -27, -27, -26, -29, -30, -29, -27, -24, -24, -19, -12,
-
1158 -8, -3, 7, 14, 15, 19, 26, 27, 26, 29, 35, 37, 39, 43, 46, 48, 49, 50, 52, 51,
-
1159 48, 45, 42, 38, 34, 32, 30, 28, 25, 23, 22, 21, 19, 18, 17, 15, 11, 9, 9, 9, 10,
-
1160 12, 15, 16, 18, 20, 22, 24, 25, 25, 24, 22, 20, 17, 15, 13, 10, 7, 4, 1, -3, -5,
-
1161 -8, -10, -14, -19, -23, -28, -33, -36, -39, -41, -44, -46, -46, -46, -44, -43,
-
1162 -41, -40, -38, -37, -36, -31, -26, -23, -20, -17, -13, -12, -12, -8, -4, -4, -3,
-
1163 -1, 0, -2, -2, 0, 3, 0, -2, -2, -3, -7, -11, -12, -13, -19, -24, -24, -28, -33,
-
1164 -33, -33, -36, -38, -39, -41, -44, -46, -46, -46, -45, -44, -44, -39, -33, -28,
-
1165 -20, -11, -2, 4, 10, 17, 22, 25, 31, 35, 37, 39, 42, 46, 50, 54, 57, 61, 63, 62,
-
1166 61, 60, 58, 53, 48, 44, 39, 34, 29, 27, 24, 22, 20, 17, 14, 10, 7, 6, 5, 3, 2,
-
1167 2, 2, 3, 5, 8, 10, 12, 13, 15, 15, 15, 15, 15, 14, 13, 12, 11, 9, 9, 8, 6, 4, 1,
-
1168 -3, -6, -10, -13, -16, -19, -22, -26, -28, -29, -31, -32, -32, -32, -33, -34,
-
1169 -34, -34, -33, -33, -31, -30, -28, -27, -24, -21, -20, -17, -15, -13, -11, -9,
-
1170 -10, -9, -6, -7, -7, -5, -4, -6, -6, -4, -4, -7, -7, -7, -10, -12, -14, -15,
-
1171 -18, -20, -22, -23, -25, -27, -28, -29, -31, -34, -33, -31, -33, -34, -30, -27,
-
1172 -25, -21, -17, -13, -9, -6, -3, 0, 2, 4, 7, 11, 13, 15, 20, 23, 25, 29, 34, 35,
-
1173 37, 40, 41, 41, 43, 44, 42, 42, 43, 42, 41, 41, 40, 38, 37, 35, 32, 30, 29, 27,
-
1174 25, 25, 23, 23, 22, 22, 21, 22, 21, 19, 19, 18, 17, 16, 15, 13, 12, 11, 10, 8,
-
1175 7, 5, 3, 2, 0, -3, -4, -5, -8, -11, -12, -14, -17, -20, -22, -25, -29, -32, -33,
-
1176 -35, -37, -38, -38, -38, -39, -40, -38, -37, -38, -37, -36, -36, -36, -35, -33,
-
1177 -31, -31, -28, -25, -23, -22, -20, -16, -14, -13, -11, -8, -9, -10, -8, -7, -7,
-
1178 -8, -7, -6, -7, -8, -7, -7, -9, -10, -11, -12, -15, -17, -16, -15, -17, -16,
-
1179 -10, -7, -8, -5, 1, 2, 2, 3, 6, 6, 6, 8, 11, 14, 17, 21, 25, 29, 31, 34, 37, 39,
-
1180 38, 40, 41, 41, 40, 40, 41, 42, 42, 42, 42, 40, 38, 35, 32, 31, 27, 24, 23, 22,
-
1181 22, 23, 23, 24, 24, 24, 23, 21, 19, 18, 16, 16, 14, 13, 13, 13, 12, 13, 13, 12,
-
1182 10, 7, 4, 1, -2, -5, -8, -11, -13, -15, -17, -19, -20, -22, -26, -30, -33, -36,
-
1183 -40, -43, -44, -44, -45, -43, -40, -38, -37, -34, -30, -29, -28, -27, -26, -25,
-
1184 -23, -20, -18, -15, -13, -12, -9, -7, -7, -4, -3, -3, -4, -4, -5, -7, -7, -8,
-
1185 -9, -12, -16, -19, -24, -27, -31, -36, -39, -41, -41, -39, -35, -30, -24, -13,
-
1186 -4, 1, 8, 14, 19, 25, 29, 33, 36, 40, 45, 49, 55, 60, 64, 67, 67, 66, 63, 60,
-
1187 55, 47, 42, 35, 27, 20, 15, 12, 8, 5, 2, -2, -5, -8, -10, -12, -11, -9, -6, -1,
-
1188 5, 12, 21, 29, 38, 44, 49, 52, 53, 54, 54, 54, 53, 51, 48, 44, 40, 35, 28, 22,
-
1189 13, 5, -5, -16, -25, -33, -40, -47, -51, -54, -57, -59, -58, -55, -52, -49, -48,
-
1190 -47, -44, -42, -37, -30, -24, -19, -13, -9, -5, 1, 4, 8, 12, 10, 9, 6, 1, -4,
-
1191 -9, -14, -18, -25, -31, -36, -39, -41, -41, -42, -42, -42, -44, -44, -44, -42,
-
1192 -37, -37, -35, -34, -34, -31, -28, -24, -19, -19, -22, -22, -14, -7, 1, 15, 31,
-
1193 39, 42, 52, 54, 50, 53, 49, 43, 37, 29, 27, 24, 27, 29, 28, 29, 24, 19, 14, 11,
-
1194 6, 0, -3, -8, -9, -7, -6, 2, 10, 16, 17, 17, 19, 17, 19, 24, 28, 35, 37, 43, 51,
-
1195 57, 64, 67, 67, 61, 54, 45, 37, 32, 27, 23, 20, 14, 10, 5, 1, -3, -8, -14, -20,
-
1196 -26, -30, -32, -29, -25, -21, -19, -17, -14, -14, -15, -14, -15, -18, -21, -22,
-
1197 -23, -21, -18, -16, -14, -17, -20, -23, -27, -30, -32, -34, -37, -37, -37, -36,
-
1198 -33, -29, -28, -30, -29, -29, -28, -26, -27, -23, -21, -24, -18, -11, -10, -6,
-
1199 -1, -3, -8, -13, -17, -20, -27, -27, -26, -33, -35, -35, -38, -42, -43, -35,
-
1200 -30, -26, -14, -1, 14, 27, 40, 54, 55, 56, 58, 55, 54, 51, 50, 50, 47, 47, 46,
-
1201 44, 41, 36, 32, 22, 12, 1, -8, -16, -19, -18, -21, -18, -14, -11, -4, -1, 4, 9,
-
1202 11, 16, 22, 28, 36, 45, 55, 62, 68, 72, 72, 70, 66, 60, 52, 43, 34, 27, 20, 14,
-
1203 9, 3, -4, -9, -16, -21, -25, -28, -29, -30, -29, -27, -23, -21, -16, -10, -8,
-
1204 -7, -7, -8, -10, -12, -11, -10, -11, -10, -11, -16, -18, -21, -26, -30, -33,
-
1205 -37, -40, -43, -47, -47, -47, -48, -39, -34, -36, -30, -27, -31, -27, -22, -16,
-
1206 -14, -11, -2, -3, -1, 6, 2, 1, 1, -8, -16, -18, -22, -26, -25, -26, -28, -36,
-
1207 -38, -40, -52, -49, -48, -55, -45, -36, -26, -5, 16, 28, 40, 51, 50, 51, 51, 50,
-
1208 48, 46, 46, 46, 47, 51, 50, 50, 46, 38, 30, 19, 8, 0 };
-
1209 
-
1210 #endif /* BLAHBLAH4B_H_ */
-
-
- - - diff --git a/extras/doc/html/char2mozzi_8py.html b/extras/doc/html/char2mozzi_8py.html deleted file mode 100644 index c64f331ac..000000000 --- a/extras/doc/html/char2mozzi_8py.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - -Mozzi: char2mozzi.py File Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
char2mozzi.py File Reference
-
-
- -

A script for converting raw 8 bit sound data files to wavetables for Mozzi. -More...

- -

Go to the source code of this file.

-

Detailed Description

-

A script for converting raw 8 bit sound data files to wavetables for Mozzi.

-

Usage: >>>char2mozzi.py <infile outfile tablename samplerate>

-
Parameters
- - - - - -
infileThe file to convert, RAW(headerless) Signed 8 bit PCM.
outfileThe file to save as output, a .h file containing a table for Mozzi.
tablenameThe name to give the table of converted data in the new file.
samplerateThe samplerate the sound was recorded at. Choose what make sense for you, if it's not a normal recorded sample.
-
-
-
Note
Using Audacity to prepare raw sound files for converting:
-

For generated waveforms like sine or sawtooth, set the project rate to the size of the wavetable you wish to create, which must be a power of two (eg. 8192), and set the selection format (beneath the editing window) to samples. Then you can generate and save 1 second of a waveform and it will fit your table length.

-

For a recorded audio sample, set the project rate to the MOZZI_AUDIO_RATE (16384 in the current version). Samples can be any length, as long as they fit in your Arduino.

-

Save by exporting with the format set to "Other uncompressed formats", "Header: RAW(headerless)" and "Encoding: Signed 8 bit PCM".

-

Now use the file you just exported, as the "infile" to convert.

-
Author
Tim Barrass 2010-12
- -

Definition in file char2mozzi.py.

-
- - - -

-Functions

-def char2mozzi.char2mozzi (infile, outfile, tablename, samplerate)
 
-
-
- - - diff --git a/extras/doc/html/char2mozzi_8py.js b/extras/doc/html/char2mozzi_8py.js deleted file mode 100644 index 2f4fa7ea0..000000000 --- a/extras/doc/html/char2mozzi_8py.js +++ /dev/null @@ -1,4 +0,0 @@ -var char2mozzi_8py = -[ - [ "char2mozzi", "char2mozzi_8py.html#aabd66d57c9b80e218d455346db80d587", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/char2mozzi_8py_source.html b/extras/doc/html/char2mozzi_8py_source.html deleted file mode 100644 index 3f8367f3b..000000000 --- a/extras/doc/html/char2mozzi_8py_source.html +++ /dev/null @@ -1,156 +0,0 @@ - - - - - - - -Mozzi: char2mozzi.py Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
char2mozzi.py
-
-
-Go to the documentation of this file.
1 #!/usr/bin/env python
-
2 
-
3 
-
35 
-
36 import sys, array, os, textwrap, random
-
37 
-
38 if len(sys.argv) != 5:
-
39  print ('Usage: char2mozzi.py <infile outfile tablename samplerate>')
-
40  sys.exit(1)
-
41 
-
42 [infile, outfile, tablename, samplerate] = sys.argv[1:]
-
43 
-
44 def char2mozzi(infile, outfile, tablename, samplerate):
-
45  fin = open(os.path.expanduser(infile), "rb")
-
46  print ("opened " + infile)
-
47  uint8_tstoread = os.path.getsize(os.path.expanduser(infile))
-
48 
-
49  valuesfromfile = array.array('b') # array of signed int8_t ints
-
50  try:
-
51  valuesfromfile.fromfile(fin, uint8_tstoread)
-
52  finally:
-
53  fin.close()
-
54 
-
55  values=valuesfromfile.tolist()
-
56  fout = open(os.path.expanduser(outfile), "w")
-
57  fout.write('#ifndef ' + tablename + '_H_' + '\n')
-
58  fout.write('#define ' + tablename + '_H_' + '\n \n')
-
59  fout.write('#include <Arduino.h>'+'\n')
-
60  fout.write('#include "mozzi_pgmspace.h"'+'\n \n')
-
61  fout.write('#define ' + tablename + '_NUM_CELLS '+ str(len(values))+'\n')
-
62  fout.write('#define ' + tablename + '_SAMPLERATE '+ str(samplerate)+'\n \n')
-
63  outstring = 'CONSTTABLE_STORAGE(int8_t) ' + tablename + '_DATA [] = {'
-
64  try:
-
65  for i in range(len(values)):
-
66 
-
67  if (values[i] == 33) and (values[i+1] == 33) and (values[i+2] == 33):
-
68  values[i+2] = random.choice([32, 34])
-
69  outstring += str(values[i]) + ", "
-
70  finally:
-
71  outstring += "};"
-
72  outstring = textwrap.fill(outstring, 80)
-
73  fout.write(outstring)
-
74  fout.write('\n\n#endif /* ' + tablename + '_H_ */\n')
-
75  fout.close()
-
76  print ("wrote " + outfile)
-
77 
-
78 char2mozzi(infile, outfile, tablename, samplerate)
- -
-
- - - diff --git a/extras/doc/html/chebyshev__int8_8py_source.html b/extras/doc/html/chebyshev__int8_8py_source.html deleted file mode 100644 index 554b34922..000000000 --- a/extras/doc/html/chebyshev__int8_8py_source.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - -Mozzi: chebyshev_int8.py Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
chebyshev_int8.py
-
-
-
1 
-
2 
-
3 import array,os,textwrap,math
-
4 
-
5 
-
6 def chebyTable(outfile, tablename, tablelength, curvenum):
-
7 
-
8  """
-
9  Generates chebyshev polynomial curve tables for WaveShaper.
-
10 
-
11  Args:
-
12  outfile: The file to save as output.
-
13  tablename: The name to give the table of converted data in the new file.
-
14  tablelength: Use a power of two.
-
15  curvenum: The chebyshev polynomial curve number to chebyTable.
-
16 
-
17  Examples:
-
18  chebyTable("~/Desktop/waveshaper_chebyshev_3rd_256_int8.h", "CHEBYSHEV_3RD_256", 256, 3)
-
19  chebyTable("~/Desktop/waveshaper_chebyshev_4th_256_int8.h", "CHEBYSHEV_4TH_256", 256, 4)
-
20  chebyTable("~/Desktop/waveshaper_chebyshev_5th_256_int8.h", "CHEBYSHEV_5TH_256", 256, 5)
-
21  chebyTable("~/Desktop/waveshaper_chebyshev_6th_256_int8.h", "CHEBYSHEV_6TH_256", 256, 6)
-
22 
-
23  Resources:
-
24  http://www.obiwannabe.co.uk/html/music/6SS/six-waveshaper.html
-
25  http://mathworld.wolfram.com/ChebyshevPolynomialoftheFirstKind.html
-
26  The first few Chebyshev polynomials of the first kind are
-
27  T_0(x) = 1
-
28  T_1(x) = x
-
29  T_2(x) = 2x^2-1
-
30  T_3(x) = 4x^3-3x
-
31  T_4(x) = 8x^4-8x^2+1
-
32  T_5(x) = 16x^5-20x^3+5x
-
33  T_6(x) = 32x^6-48x^4+18x^2-1
-
34 
-
35  """
-
36 
-
37  fout = open(os.path.expanduser(outfile), "w")
-
38  fout.write('#ifndef ' + tablename + '_H_' + '\n')
-
39  fout.write('#define ' + tablename + '_H_' + '\n \n')
-
40  fout.write('#include <Arduino.h>'+'\n')
-
41  fout.write('#include "mozzi_pgmspace.h"'+'\n \n')
-
42  fout.write('#define ' + tablename + '_NUM_CELLS '+ str(tablelength) +'\n')
-
43  outstring = 'CONSTTABLE_STORAGE(int8_t) ' + tablename + '_DATA [] = {'
-
44  try:
-
45  for num in range(tablelength):
-
46 
-
47  x = 2*(float(num-(tablelength/2)))/tablelength
-
48 
-
49  if curvenum == 3:
-
50  t_x = 4*pow(x,3)-3*x
-
51  elif curvenum == 4:
-
52  t_x = 8*pow(x,4)-8*pow(x,2)+1
-
53  elif curvenum == 5:
-
54  t_x = 16*pow(x,5)-20*pow(x,3)+5*x
-
55  elif curvenum == 6:
-
56  t_x = 32*pow(x,6)-48*pow(x,4)+18*pow(x,2)-1
-
57 
-
58  scaled = int16_t(math.floor(t_x*127.999))
-
59 
-
60  outstring += str(scaled) + ", "
-
61  finally:
-
62  outstring += "};"
-
63  outstring = textwrap.fill(outstring, 80)
-
64  fout.write(outstring)
-
65  fout.write('\n \n #endif /* ' + tablename + '_H_ */\n')
-
66  fout.close()
-
67  print "wrote " + outfile
-
68 
-
-
- - - diff --git a/extras/doc/html/class_a_d_s_r-members.html b/extras/doc/html/class_a_d_s_r-members.html deleted file mode 100644 index c3102d484..000000000 --- a/extras/doc/html/class_a_d_s_r-members.html +++ /dev/null @@ -1,137 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T > Member List
-
-
- -

This is the complete list of members for ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >, including all inherited members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - -
ADSR()ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >inline
adsr_playing (defined in ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >)ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >
next()ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >inline
noteOff()ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >inline
noteOn(bool reset=false)ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >inline
playing()ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >inline
setADLevels(byte attack, byte decay)ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >inline
setAllUpdateSteps(unsigned int attack_steps, unsigned int decay_steps, unsigned int sustain_steps, unsigned int release_steps)ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >inline
setAttackLevel(byte value)ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >inline
setAttackTime(unsigned int msec)ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >inline
setAttackUpdateSteps(unsigned int steps)ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >inline
setDecayLevel(byte value)ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >inline
setDecayTime(unsigned int msec)ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >inline
setDecayUpdateSteps(unsigned int steps)ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >inline
setIdleLevel(byte value) (defined in ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >)ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >inline
setIdleTime(unsigned int msec) (defined in ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >)ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >inline
setIdleUpdateSteps(unsigned int steps) (defined in ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >)ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >inline
setLevels(byte attack, byte decay, byte sustain, byte release)ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >inline
setReleaseLevel(byte value)ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >inline
setReleaseTime(unsigned int msec)ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >inline
setReleaseUpdateSteps(unsigned int steps)ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >inline
setSustainLevel(byte value)ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >inline
setSustainTime(unsigned int msec)ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >inline
setSustainUpdateSteps(unsigned int steps)ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >inline
setTimes(unsigned int attack_ms, unsigned int decay_ms, unsigned int sustain_ms, unsigned int release_ms)ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >inline
update()ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >inline
-
- - - diff --git a/extras/doc/html/class_a_d_s_r.html b/extras/doc/html/class_a_d_s_r.html deleted file mode 100644 index e978827a1..000000000 --- a/extras/doc/html/class_a_d_s_r.html +++ /dev/null @@ -1,1083 +0,0 @@ - - - - - - - -Mozzi: ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T > Class Template Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T > Class Template Reference
-
-
- -

A simple ADSR envelope generator. - More...

- -

#include <ADSR.h>

-

Detailed Description

-

template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE, typename T = unsigned int>
-class ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >

- -

A simple ADSR envelope generator.

-

This implementation has separate update() and next() methods, where next() interpolates values between each update(). The "normal" way to use this would be with update() in updateControl(), where it calculates a new internal state each control step, and then next() is in updateAudio(), called much more often, where it interpolates between the control values. This also allows the ADSR updates to be made even more sparsely if desired, eg. every 3rd control update.

Template Parameters
- - - -
CONTROL_UPDATE_RATEThe frequency of control updates. Ordinarily this will be MOZZI_CONTROL_RATE, but an alternative (amongst others) is to set this as well as the LERP_RATE parameter to MOZZI_AUDIO_RATE, and call both update() and next() in updateAudio(). Such a use would allow accurate envelopes with finer resolution of the control points than MOZZI_CONTROL_RATE.
LERP_RATESets how often next() will be called, to interpolate between updates set by CONTROL_UPDATE_RATE. This will produce the smoothest results if it's set to MOZZI_AUDIO_RATE, but if you need to save processor time and your envelope changes slowly or controls something like a filter where there may not be problems with glitchy or clicking transitions, LERP_RATE could be set to MOZZI_CONTROL_RATE (for instance). Then update() and next() could both be called in updateControl(), greatly reducing the amount of processing required compared to calling next() in updateAudio().
-
-
- -

Definition at line 41 of file ADSR.h.

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

ADSR ()
 Constructor.
 
void update ()
 Updates the internal controls of the ADSR. More...
 
unsigned char next ()
 Advances one audio step along the ADSR and returns the level. More...
 
void noteOn (bool reset=false)
 Start the attack phase of the ADSR. More...
 
void noteOff ()
 Start the release phase of the ADSR. More...
 
void setAttackLevel (byte value)
 Set the attack level of the ADSR. More...
 
void setDecayLevel (byte value)
 Set the decay level of the ADSR. More...
 
void setSustainLevel (byte value)
 Set the sustain level of the ADSR. More...
 
void setReleaseLevel (byte value)
 Set the release level of the ADSR. More...
 
-void setIdleLevel (byte value)
 
void setADLevels (byte attack, byte decay)
 Set the attack and decay levels of the ADSR. More...
 
void setLevels (byte attack, byte decay, byte sustain, byte release)
 Set the attack, decay, sustain and release levels. More...
 
void setAttackTime (unsigned int msec)
 Set the attack time of the ADSR in milliseconds. More...
 
void setDecayTime (unsigned int msec)
 Set the decay time of the ADSR in milliseconds. More...
 
void setSustainTime (unsigned int msec)
 Set the sustain time of the ADSR in milliseconds. More...
 
void setReleaseTime (unsigned int msec)
 Set the release time of the ADSR in milliseconds. More...
 
-void setIdleTime (unsigned int msec)
 
void setTimes (unsigned int attack_ms, unsigned int decay_ms, unsigned int sustain_ms, unsigned int release_ms)
 Set the attack, decay and release times of the ADSR in milliseconds. More...
 
void setAttackUpdateSteps (unsigned int steps)
 Set the attack time of the ADSR, expressed as the number of update steps (not ADSR::next() interpolation steps) in the attack phase. More...
 
void setDecayUpdateSteps (unsigned int steps)
 Set the decay time of the ADSR, expressed as the number of update steps (not ADSR::next() interpolation steps) in the decay phase. More...
 
void setSustainUpdateSteps (unsigned int steps)
 Set the sustain time of the ADSR, expressed as the number of update steps (not ADSR::next() interpolation steps) in the sustain phase. More...
 
void setReleaseUpdateSteps (unsigned int steps)
 Set the release time of the ADSR, expressed as the number of update steps (not ADSR::next() interpolation steps) in the release phase. More...
 
-void setIdleUpdateSteps (unsigned int steps)
 
void setAllUpdateSteps (unsigned int attack_steps, unsigned int decay_steps, unsigned int sustain_steps, unsigned int release_steps)
 Set the attack, decay and release times of the ADSR, expressed in update steps (not ADSR::next() interpolation steps). More...
 
bool playing ()
 Tells if the envelope is currently playing. More...
 
- - - -

-Public Attributes

-bool adsr_playing
 
-

Member Function Documentation

- -

◆ next()

- -
-
-
-template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE, typename T = unsigned int>
- - - - - -
- - - - - - - -
unsigned char ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >::next ()
-
-inline
-
- -

Advances one audio step along the ADSR and returns the level.

-

Call this in updateAudio().

Returns
the next value, as an unsigned char.
- -

Definition at line 161 of file ADSR.h.

- -
-
- -

◆ noteOff()

- -
-
-
-template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE, typename T = unsigned int>
- - - - - -
- - - - - - - -
void ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >::noteOff ()
-
-inline
-
- -

Start the release phase of the ADSR.

- -

Definition at line 188 of file ADSR.h.

- -
-
- -

◆ noteOn()

- -
-
-
-template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE, typename T = unsigned int>
- - - - - -
- - - - - - - - -
void ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >::noteOn (bool reset = false)
-
-inline
-
- -

Start the attack phase of the ADSR.

-

This will restart the ADSR no matter what phase it is up to.

Parameters
- - -
resetIf true, the envelope will start from 0, even if it is still playing (often useful for effect envelopes). If false (default if omitted), the envelope will start rising from the current level, which could be non-zero, if it is still playing (most useful for note envelopes).
-
-
- -

Definition at line 176 of file ADSR.h.

- -
-
- -

◆ playing()

- -
-
-
-template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE, typename T = unsigned int>
- - - - - -
- - - - - - - -
bool ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >::playing ()
-
-inline
-
- -

Tells if the envelope is currently playing.

-
Returns
true if playing, false if in IDLE state
- -

Definition at line 427 of file ADSR.h.

- -
-
- -

◆ setADLevels()

- -
-
-
-template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE, typename T = unsigned int>
- - - - - -
- - - - - - - - - - - - - - - - - - -
void ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >::setADLevels (byte attack,
byte decay 
)
-
-inline
-
- -

Set the attack and decay levels of the ADSR.

-

This assumes a conventional ADSR where the sustain continues at the same level as the decay, till the release ramps to 0.

Parameters
- - - -
attackthe new attack level.
decaythe new decay level.
-
-
- -

Definition at line 249 of file ADSR.h.

- -
-
- -

◆ setAllUpdateSteps()

- -
-
-
-template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE, typename T = unsigned int>
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >::setAllUpdateSteps (unsigned int attack_steps,
unsigned int decay_steps,
unsigned int sustain_steps,
unsigned int release_steps 
)
-
-inline
-
- -

Set the attack, decay and release times of the ADSR, expressed in update steps (not ADSR::next() interpolation steps).

-
Parameters
- - - - - -
attack_stepsthe number of update steps in the attack phase
decay_stepsthe number of update steps in the decay phase
sustain_stepsthe number of update steps in the sustain phase
release_stepsthe number of update steps in the release phase
-
-
- -

Definition at line 411 of file ADSR.h.

- -
-
- -

◆ setAttackLevel()

- -
-
-
-template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE, typename T = unsigned int>
- - - - - -
- - - - - - - - -
void ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >::setAttackLevel (byte value)
-
-inline
-
- -

Set the attack level of the ADSR.

-
Parameters
- - -
valuethe attack level.
-
-
- -

Definition at line 198 of file ADSR.h.

- -
-
- -

◆ setAttackTime()

- -
-
-
-template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE, typename T = unsigned int>
- - - - - -
- - - - - - - - -
void ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >::setAttackTime (unsigned int msec)
-
-inline
-
- -

Set the attack time of the ADSR in milliseconds.

-

The actual time taken will be resolved within the resolution of MOZZI_CONTROL_RATE.

Parameters
- - -
msecthe unsigned int attack time in milliseconds.
-
-
-
Note
Beware of low values (less than 20 or so, depending on how many steps are being taken), in case internal step size gets calculated as 0, which would mean nothing happens.
- -

Definition at line 283 of file ADSR.h.

- -
-
- -

◆ setAttackUpdateSteps()

- -
-
-
-template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE, typename T = unsigned int>
- - - - - -
- - - - - - - - -
void ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >::setAttackUpdateSteps (unsigned int steps)
-
-inline
-
- -

Set the attack time of the ADSR, expressed as the number of update steps (not ADSR::next() interpolation steps) in the attack phase.

-
Parameters
- - -
stepsthe number of times ADSR::update() will be called in the attack phase.
-
-
- -

Definition at line 362 of file ADSR.h.

- -
-
- -

◆ setDecayLevel()

- -
-
-
-template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE, typename T = unsigned int>
- - - - - -
- - - - - - - - -
void ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >::setDecayLevel (byte value)
-
-inline
-
- -

Set the decay level of the ADSR.

-
Parameters
- - -
valuethe decay level.
-
-
- -

Definition at line 209 of file ADSR.h.

- -
-
- -

◆ setDecayTime()

- -
-
-
-template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE, typename T = unsigned int>
- - - - - -
- - - - - - - - -
void ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >::setDecayTime (unsigned int msec)
-
-inline
-
- -

Set the decay time of the ADSR in milliseconds.

-

The actual time taken will be resolved within the resolution of MOZZI_CONTROL_RATE.

Parameters
- - -
msecthe unsigned int decay time in milliseconds.
-
-
-
Note
Beware of low values (less than 20 or so, depending on how many steps are being taken), in case internal step size gets calculated as 0, which would mean nothing happens.
- -

Definition at line 296 of file ADSR.h.

- -
-
- -

◆ setDecayUpdateSteps()

- -
-
-
-template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE, typename T = unsigned int>
- - - - - -
- - - - - - - - -
void ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >::setDecayUpdateSteps (unsigned int steps)
-
-inline
-
- -

Set the decay time of the ADSR, expressed as the number of update steps (not ADSR::next() interpolation steps) in the decay phase.

-
Parameters
- - -
stepsthe number of times ADSR::update() will be called in the decay phase.
-
-
- -

Definition at line 372 of file ADSR.h.

- -
-
- -

◆ setLevels()

- -
-
-
-template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE, typename T = unsigned int>
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >::setLevels (byte attack,
byte decay,
byte sustain,
byte release 
)
-
-inline
-
- -

Set the attack, decay, sustain and release levels.

-
Parameters
- - - - - -
attackthe new attack level.
decaythe new sustain level.
attackthe new sustain level.
decaythe new release level.
-
-
- -

Definition at line 266 of file ADSR.h.

- -
-
- -

◆ setReleaseLevel()

- -
-
-
-template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE, typename T = unsigned int>
- - - - - -
- - - - - - - - -
void ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >::setReleaseLevel (byte value)
-
-inline
-
- -

Set the release level of the ADSR.

-

Normally you'd make this 0, but you have the option of some other value.

Parameters
- - -
valuethe release level (usually 0).
-
-
- -

Definition at line 230 of file ADSR.h.

- -
-
- -

◆ setReleaseTime()

- -
-
-
-template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE, typename T = unsigned int>
- - - - - -
- - - - - - - - -
void ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >::setReleaseTime (unsigned int msec)
-
-inline
-
- -

Set the release time of the ADSR in milliseconds.

-

The actual time taken will be resolved within the resolution of MOZZI_CONTROL_RATE.

Parameters
- - -
msecthe unsigned int release time in milliseconds.
-
-
-
Note
Beware of low values (less than 20 or so, depending on how many steps are being taken), in case internal step size gets calculated as 0, which would mean nothing happens.
- -

Definition at line 324 of file ADSR.h.

- -
-
- -

◆ setReleaseUpdateSteps()

- -
-
-
-template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE, typename T = unsigned int>
- - - - - -
- - - - - - - - -
void ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >::setReleaseUpdateSteps (unsigned int steps)
-
-inline
-
- -

Set the release time of the ADSR, expressed as the number of update steps (not ADSR::next() interpolation steps) in the release phase.

-
Parameters
- - -
stepsthe number of times ADSR::update() will be called in the release phase.
-
-
- -

Definition at line 392 of file ADSR.h.

- -
-
- -

◆ setSustainLevel()

- -
-
-
-template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE, typename T = unsigned int>
- - - - - -
- - - - - - - - -
void ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >::setSustainLevel (byte value)
-
-inline
-
- -

Set the sustain level of the ADSR.

-
Parameters
- - -
valuethe sustain level. Usually the same as the decay level, for a steady sustained note.
-
-
- -

Definition at line 220 of file ADSR.h.

- -
-
- -

◆ setSustainTime()

- -
-
-
-template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE, typename T = unsigned int>
- - - - - -
- - - - - - - - -
void ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >::setSustainTime (unsigned int msec)
-
-inline
-
- -

Set the sustain time of the ADSR in milliseconds.

-

The actual time taken will be resolved within the resolution of MOZZI_CONTROL_RATE. The sustain phase will finish if the ADSR recieves a noteOff().

Parameters
- - -
msecthe unsigned int sustain time in milliseconds.
-
-
-
Note
Beware of low values (less than 20 or so, depending on how many steps are being taken), in case internal step size gets calculated as 0, which would mean nothing happens.
- -

Definition at line 310 of file ADSR.h.

- -
-
- -

◆ setSustainUpdateSteps()

- -
-
-
-template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE, typename T = unsigned int>
- - - - - -
- - - - - - - - -
void ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >::setSustainUpdateSteps (unsigned int steps)
-
-inline
-
- -

Set the sustain time of the ADSR, expressed as the number of update steps (not ADSR::next() interpolation steps) in the sustain phase.

-
Parameters
- - -
stepsthe number of times ADSR::update() will be called in the sustain phase.
-
-
- -

Definition at line 382 of file ADSR.h.

- -
-
- -

◆ setTimes()

- -
-
-
-template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE, typename T = unsigned int>
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >::setTimes (unsigned int attack_ms,
unsigned int decay_ms,
unsigned int sustain_ms,
unsigned int release_ms 
)
-
-inline
-
- -

Set the attack, decay and release times of the ADSR in milliseconds.

-

The actual times will be resolved within the resolution of MOZZI_CONTROL_RATE.

Parameters
- - - - - -
attack_msthe new attack time in milliseconds.
decay_msthe new decay time in milliseconds.
sustain_msthe new sustain time in milliseconds.
release_msthe new release time in milliseconds.
-
-
-
Note
Beware of low values (less than 20 or so, depending on how many steps are being taken), in case internal step size gets calculated as 0, which would mean nothing happens.
- -

Definition at line 347 of file ADSR.h.

- -
-
- -

◆ update()

- -
-
-
-template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE, typename T = unsigned int>
- - - - - -
- - - - - - - -
void ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >::update ()
-
-inline
-
- -

Updates the internal controls of the ADSR.

-

Call this in updateControl().

- -

Definition at line 128 of file ADSR.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/class_a_d_s_r.js b/extras/doc/html/class_a_d_s_r.js deleted file mode 100644 index 983815ae1..000000000 --- a/extras/doc/html/class_a_d_s_r.js +++ /dev/null @@ -1,29 +0,0 @@ -var class_a_d_s_r = -[ - [ "ADSR", "class_a_d_s_r.html#a4bd943baa8c5b68d3ee7b3d385e77221", null ], - [ "next", "class_a_d_s_r.html#aa032d8689ff618dbfa974ec6803803ef", null ], - [ "noteOff", "class_a_d_s_r.html#a3c7362c1c91486e09a306b5109ad498c", null ], - [ "noteOn", "class_a_d_s_r.html#aef8d9c2799485fcd5a854228503f9f2f", null ], - [ "playing", "class_a_d_s_r.html#ab2723ed7ab315967afa81786c8d7621d", null ], - [ "setADLevels", "class_a_d_s_r.html#a48aa75585d0ff96c87b4b232ee3df753", null ], - [ "setAllUpdateSteps", "class_a_d_s_r.html#a9cd0d4d6fefdd58d81acb2a76b9fc4c0", null ], - [ "setAttackLevel", "class_a_d_s_r.html#a8a54760cfc0fee1b02983aa4c0331aa1", null ], - [ "setAttackTime", "class_a_d_s_r.html#aaf4131de0c02e4f154a97e3e9d95c199", null ], - [ "setAttackUpdateSteps", "class_a_d_s_r.html#a01cf549d19416288d604a02d95c31f21", null ], - [ "setDecayLevel", "class_a_d_s_r.html#a0ad21cb6ed8fa44bb24134f2b5b4f296", null ], - [ "setDecayTime", "class_a_d_s_r.html#a1a0cb7fbf47f65dc81df7b5eb21ae4ec", null ], - [ "setDecayUpdateSteps", "class_a_d_s_r.html#ae9a0d338581d3aaf6c4a89c4cfe19f5b", null ], - [ "setIdleLevel", "class_a_d_s_r.html#ae5913d28627495858854419dc2b41753", null ], - [ "setIdleTime", "class_a_d_s_r.html#a77daa5e20e49338f92a10b4c53593504", null ], - [ "setIdleUpdateSteps", "class_a_d_s_r.html#ad8668f42712c817f7d43fe9dfe9c364c", null ], - [ "setLevels", "class_a_d_s_r.html#a4ef5dfa5c71809737c3e614b09775203", null ], - [ "setReleaseLevel", "class_a_d_s_r.html#a8f67baf632be737cbae5a1d62edc4e23", null ], - [ "setReleaseTime", "class_a_d_s_r.html#aabd0af40f4676bde840f6c83bbe302b2", null ], - [ "setReleaseUpdateSteps", "class_a_d_s_r.html#a0de6df796f56e97a4c6c44a9692251eb", null ], - [ "setSustainLevel", "class_a_d_s_r.html#aec7ac1290688214a934c3b9f78ca43e9", null ], - [ "setSustainTime", "class_a_d_s_r.html#ad0c7bd5b53f4b5c2d4ff3b5116d5c40f", null ], - [ "setSustainUpdateSteps", "class_a_d_s_r.html#aec9c57671f1dfae7aa529dcc51b98e40", null ], - [ "setTimes", "class_a_d_s_r.html#a5e16aa54a82fc6f907a7560e035adf2b", null ], - [ "update", "class_a_d_s_r.html#a1bef7104c263fc1f0df28809a788ee23", null ], - [ "adsr_playing", "class_a_d_s_r.html#aff42b7b93bb272371a90af7d8a935695", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/class_audio_delay-members.html b/extras/doc/html/class_audio_delay-members.html deleted file mode 100644 index 0e696df31..000000000 --- a/extras/doc/html/class_audio_delay-members.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
AudioDelay< NUM_BUFFER_SAMPLES, T > Member List
-
-
- -

This is the complete list of members for AudioDelay< NUM_BUFFER_SAMPLES, T >, including all inherited members.

- - - - - - - -
AudioDelay()AudioDelay< NUM_BUFFER_SAMPLES, T >inline
AudioDelay(unsigned int delaytime_cells)AudioDelay< NUM_BUFFER_SAMPLES, T >inline
next(T in_value, unsigned int delaytime_cells)AudioDelay< NUM_BUFFER_SAMPLES, T >inline
next(T in_value)AudioDelay< NUM_BUFFER_SAMPLES, T >inline
read(unsigned int delaytime_cells)AudioDelay< NUM_BUFFER_SAMPLES, T >inline
set(unsigned int delaytime_cells)AudioDelay< NUM_BUFFER_SAMPLES, T >inline
-
- - - diff --git a/extras/doc/html/class_audio_delay.html b/extras/doc/html/class_audio_delay.html deleted file mode 100644 index 2bb08953f..000000000 --- a/extras/doc/html/class_audio_delay.html +++ /dev/null @@ -1,357 +0,0 @@ - - - - - - - -Mozzi: AudioDelay< NUM_BUFFER_SAMPLES, T > Class Template Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
AudioDelay< NUM_BUFFER_SAMPLES, T > Class Template Reference
-
-
- -

Audio delay line for comb filter, flange, chorus and short echo effects. - More...

- -

#include <AudioDelay.h>

-

Detailed Description

-

template<unsigned int NUM_BUFFER_SAMPLES, class T = int8_t>
-class AudioDelay< NUM_BUFFER_SAMPLES, T >

- -

Audio delay line for comb filter, flange, chorus and short echo effects.

-
Template Parameters
- - - -
NUM_BUFFER_SAMPLESis the length of the delay buffer in samples. This should be a power of two. The largest delay you'll fit in an atmega328 will be 512 cells, which at 16384 Hz sample rate is 31 milliseconds. More of a flanger or a doubler than an echo. The amount of memory available for delays on other chips will vary. AudioDelay() doesn't have feedback. If you want feedback, use AudioDelayFeedback().
thetype of numbers to use for the signal in the delay. The default is int8_t, but int could be useful when adding manual feedback. When using int, the input should be limited to 15 bits width, ie. -16384 to 16383.
-
-
- -

Definition at line 27 of file AudioDelay.h.

-
- - - - - - - - - - - - - - - - - - - -

-Public Member Functions

AudioDelay ()
 Constructor.
 
 AudioDelay (unsigned int delaytime_cells)
 Constructor. More...
 
next (T in_value, unsigned int delaytime_cells)
 Input a value to the delay and retrieve the signal in the delay line at the position delaytime_cells. More...
 
next (T in_value)
 Input a value to the delay and retrieve the signal in the delay line at the position delaytime_cells. More...
 
void set (unsigned int delaytime_cells)
 Set the delay time, measured in cells. More...
 
read (unsigned int delaytime_cells)
 Retrieve the signal in the delay line at the position delaytime_cells. More...
 
-

Constructor & Destructor Documentation

- -

◆ AudioDelay()

- -
-
-
-template<unsigned int NUM_BUFFER_SAMPLES, class T = int8_t>
- - - - - -
- - - - - - - - -
AudioDelay< NUM_BUFFER_SAMPLES, T >::AudioDelay (unsigned int delaytime_cells)
-
-inline
-
- -

Constructor.

-
Parameters
- - -
delaytime_cellsdelay time expressed in cells.
- For example, 128 cells delay at MOZZI_AUDIO_RATE would produce a time delay of 128/16384 = 0.0078125 s = 7.8 ms Put another way, num_cells = delay_seconds * MOZZI_AUDIO_RATE.
-
-
- -

Definition at line 49 of file AudioDelay.h.

- -
-
-

Member Function Documentation

- -

◆ next() [1/2]

- -
-
-
-template<unsigned int NUM_BUFFER_SAMPLES, class T = int8_t>
- - - - - -
- - - - - - - - -
T AudioDelay< NUM_BUFFER_SAMPLES, T >::next (in_value)
-
-inline
-
- -

Input a value to the delay and retrieve the signal in the delay line at the position delaytime_cells.

-
Parameters
- - -
in_valuethe signal input.
-
-
- -

Definition at line 77 of file AudioDelay.h.

- -
-
- -

◆ next() [2/2]

- -
-
-
-template<unsigned int NUM_BUFFER_SAMPLES, class T = int8_t>
- - - - - -
- - - - - - - - - - - - - - - - - - -
T AudioDelay< NUM_BUFFER_SAMPLES, T >::next (in_value,
unsigned int delaytime_cells 
)
-
-inline
-
- -

Input a value to the delay and retrieve the signal in the delay line at the position delaytime_cells.

-
Parameters
- - - -
in_valuethe signal input.
delaytime_cellssets the delay time in terms of cells in the delay buffer.
-
-
- -

Definition at line 59 of file AudioDelay.h.

- -
-
- -

◆ read()

- -
-
-
-template<unsigned int NUM_BUFFER_SAMPLES, class T = int8_t>
- - - - - -
- - - - - - - - -
T AudioDelay< NUM_BUFFER_SAMPLES, T >::read (unsigned int delaytime_cells)
-
-inline
-
- -

Retrieve the signal in the delay line at the position delaytime_cells.

-

It doesn't change the stored internal value of _delaytime_cells.

Parameters
- - -
delaytime_cellsindicates the delay time in terms of cells in the delay buffer.
-
-
- -

Definition at line 104 of file AudioDelay.h.

- -
-
- -

◆ set()

- -
-
-
-template<unsigned int NUM_BUFFER_SAMPLES, class T = int8_t>
- - - - - -
- - - - - - - - -
void AudioDelay< NUM_BUFFER_SAMPLES, T >::set (unsigned int delaytime_cells)
-
-inline
-
- -

Set the delay time, measured in cells.

-
Parameters
- - -
delaytime_cellshow many cells to delay the input signal by.
-
-
- -

Definition at line 94 of file AudioDelay.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/class_audio_delay.js b/extras/doc/html/class_audio_delay.js deleted file mode 100644 index 2c5c69c12..000000000 --- a/extras/doc/html/class_audio_delay.js +++ /dev/null @@ -1,9 +0,0 @@ -var class_audio_delay = -[ - [ "AudioDelay", "class_audio_delay.html#a688f69088f96bf3976a8555d3026365f", null ], - [ "AudioDelay", "class_audio_delay.html#a79be253fcb5709624c8fb708e54f069f", null ], - [ "next", "class_audio_delay.html#a41c09b5cc9e817d8eaf111b0f74c9a0b", null ], - [ "next", "class_audio_delay.html#a19258636609d83a2bab11849e17b5294", null ], - [ "read", "class_audio_delay.html#a26b409fbfc322ae527ba23680c56e3a9", null ], - [ "set", "class_audio_delay.html#a7bd0a07f7803afda1a71b50e3f66827b", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/class_audio_delay_feedback-members.html b/extras/doc/html/class_audio_delay_feedback-members.html deleted file mode 100644 index f04572e96..000000000 --- a/extras/doc/html/class_audio_delay_feedback-members.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE, su > Member List
-
-
- -

This is the complete list of members for AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE, su >, including all inherited members.

- - - - - - - - - - - - - - - - -
AudioDelayFeedback()AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE, su >inline
AudioDelayFeedback(uint16_t delaytime_cells)AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE, su >inline
AudioDelayFeedback(uint16_t delaytime_cells, int8_t feedback_level)AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE, su >inline
next(su input)AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE, su >inline
next(su input, uint16_t delaytime_cells)AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE, su >inline
next(su input, Q16n16 delaytime_cells)AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE, su >inline
read(Q16n16 delaytime_cells)AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE, su >inline
read()AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE, su >inline
setDelayTimeCells(uint16_t delaytime_cells)AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE, su >inline
setDelayTimeCells(Q16n16 delaytime_cells)AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE, su >inline
setDelayTimeCells(float delaytime_cells)AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE, su >inline
setFeedbackLevel(int8_t feedback_level)AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE, su >inline
write(su input)AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE, su >inline
write(su input, uint16_t offset)AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE, su >inline
writeFeedback(su input)AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE, su >inline
-
- - - diff --git a/extras/doc/html/class_audio_delay_feedback.html b/extras/doc/html/class_audio_delay_feedback.html deleted file mode 100644 index 269f12411..000000000 --- a/extras/doc/html/class_audio_delay_feedback.html +++ /dev/null @@ -1,755 +0,0 @@ - - - - - - - -Mozzi: AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE, su > Class Template Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE, su > Class Template Reference
-
-
- -

Audio delay line with feedback for comb filter, flange, chorus and short echo effects. - More...

- -

#include <AudioDelayFeedback.h>

-

Detailed Description

-

template<uint16_t NUM_BUFFER_SAMPLES, int8_t INTERP_TYPE = LINEAR, typename su = int8_t>
-class AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE, su >

- -

Audio delay line with feedback for comb filter, flange, chorus and short echo effects.

-
Template Parameters
- - - - -
NUM_BUFFER_SAMPLESis the length of the delay buffer in samples, and should be a power of two. The maximum delay length which will fit in an atmega328 is half that of a plain AudioDelay object, in this case 256 cells, or about 15 milliseconds. AudioDelayFeedback uses int16_t sized cells to accomodate the higher amplitude of direct input to the delay as well as the feedback, without losing precision. Output is only the delay line signal. If you want to mix the delay with the input, do it in your sketch. AudioDelayFeedback uses more processing and memory than a plain AudioDelay, but allows for more dramatic effects with feedback.
INTERP_TYPEa choice of LINEAR (default) or ALLPASS interpolation. LINEAR is better for sweeping delay times, ALLPASS may be better for reverb-like effects.
suthe type of numbers to use for the signal in the delay. The default is int8_t, but int16_t could be useful. Larger types (int32_t) might produce overflows as of v2.0.2.
-
-
- -

Definition at line 38 of file AudioDelayFeedback.h.

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

AudioDelayFeedback ()
 Constructor.
 
 AudioDelayFeedback (uint16_t delaytime_cells)
 Constructor. More...
 
 AudioDelayFeedback (uint16_t delaytime_cells, int8_t feedback_level)
 Constructor. More...
 
return_type next (su input)
 Input a value to the delay and retrieve the signal in the delay line at the position delaytime_cells. More...
 
return_type next (su input, uint16_t delaytime_cells)
 Input a value to the delay, retrieve the signal in the delay line at the position delaytime_cells, and add feedback from the output to the input. More...
 
return_type next (su input, Q16n16 delaytime_cells)
 Input a value to the delay, retrieve the signal in the delay line at the interpolated fractional position delaytime_cells, and add feedback from the output to the input. More...
 
void write (su input)
 Input a value to the delay but don't change the delay time or retrieve the output signal. More...
 
void writeFeedback (su input)
 Input a value to the delay but don't advance the write position, change the delay time or retrieve the output signal. More...
 
void write (su input, uint16_t offset)
 Input a value to the delay at an offset from the current write position. More...
 
return_type read (Q16n16 delaytime_cells)
 Retrieve the signal in the delay line at the interpolated fractional position delaytime_cells. More...
 
return_type read ()
 Retrieve the signal in the delay line at the current stored delaytime_cells. More...
 
void setDelayTimeCells (uint16_t delaytime_cells)
 Set delay time expressed in samples. More...
 
void setDelayTimeCells (Q16n16 delaytime_cells)
 Set delay time expressed in samples, fractional Q16n16 for an interpolating delay. More...
 
void setDelayTimeCells (float delaytime_cells)
 Set delay time expressed in samples, fractional float for an interpolating delay. More...
 
void setFeedbackLevel (int8_t feedback_level)
 Set the feedback gain. More...
 
-

Constructor & Destructor Documentation

- -

◆ AudioDelayFeedback() [1/2]

- -
-
-
-template<uint16_t NUM_BUFFER_SAMPLES, int8_t INTERP_TYPE = LINEAR, typename su = int8_t>
- - - - - -
- - - - - - - - -
AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE, su >::AudioDelayFeedback (uint16_t delaytime_cells)
-
-inline
-
- -

Constructor.

-
Parameters
- - -
delaytime_cellsdelay time expressed in cells. For example, 128 cells delay at MOZZI_AUDIO_RATE 16384 would produce a time delay of 128/16384 = 0.0078125 s = 7.8 ms Put another way, num_cells = delay_seconds * MOZZI_AUDIO_RATE.
-
-
- -

Definition at line 55 of file AudioDelayFeedback.h.

- -
-
- -

◆ AudioDelayFeedback() [2/2]

- -
-
-
-template<uint16_t NUM_BUFFER_SAMPLES, int8_t INTERP_TYPE = LINEAR, typename su = int8_t>
- - - - - -
- - - - - - - - - - - - - - - - - - -
AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE, su >::AudioDelayFeedback (uint16_t delaytime_cells,
int8_t feedback_level 
)
-
-inline
-
- -

Constructor.

-
Parameters
- - - -
delaytime_cellsdelay time expressed in cells. For example, 128 cells delay at MOZZI_AUDIO_RATE 16384 would produce a time delay of 128/16384 = 0.0078125 s = 7.8 ms Put another way, num_cells = delay_seconds * MOZZI_AUDIO_RATE.
feedback_levelis the feedback level from -128 to 127 (representing -1 to 1).
-
-
- -

Definition at line 65 of file AudioDelayFeedback.h.

- -
-
-

Member Function Documentation

- -

◆ next() [1/3]

- -
-
-
-template<uint16_t NUM_BUFFER_SAMPLES, int8_t INTERP_TYPE = LINEAR, typename su = int8_t>
- - - - - -
- - - - - - - - -
return_type AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE, su >::next (su input)
-
-inline
-
- -

Input a value to the delay and retrieve the signal in the delay line at the position delaytime_cells.

-
Parameters
- - -
inputthe signal input.
-
-
-
Note
slower than next(int8_t input, uint16_t delaytime_cells)
- -

Definition at line 75 of file AudioDelayFeedback.h.

- -
-
- -

◆ next() [2/3]

- -
-
-
-template<uint16_t NUM_BUFFER_SAMPLES, int8_t INTERP_TYPE = LINEAR, typename su = int8_t>
- - - - - -
- - - - - - - - - - - - - - - - - - -
return_type AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE, su >::next (su input,
Q16n16 delaytime_cells 
)
-
-inline
-
- -

Input a value to the delay, retrieve the signal in the delay line at the interpolated fractional position delaytime_cells, and add feedback from the output to the input.

-
Parameters
- - - -
inputthe signal input.
delaytime_cellsis a fractional number to set the delay time in terms of cells or partial cells in the delay buffer. It doesn't change the stored internal value of _delaytime_cells.
-
-
- -

Definition at line 118 of file AudioDelayFeedback.h.

- -
-
- -

◆ next() [3/3]

- -
-
-
-template<uint16_t NUM_BUFFER_SAMPLES, int8_t INTERP_TYPE = LINEAR, typename su = int8_t>
- - - - - -
- - - - - - - - - - - - - - - - - - -
return_type AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE, su >::next (su input,
uint16_t delaytime_cells 
)
-
-inline
-
- -

Input a value to the delay, retrieve the signal in the delay line at the position delaytime_cells, and add feedback from the output to the input.

-
Parameters
- - - -
inputthe signal input.
delaytime_cellsindicates the delay time in terms of cells in the delay buffer. It doesn't change the stored internal value of _delaytime_cells.
-
-
-
Note
Timing: 4us
- -

Definition at line 92 of file AudioDelayFeedback.h.

- -
-
- -

◆ read() [1/2]

- -
-
-
-template<uint16_t NUM_BUFFER_SAMPLES, int8_t INTERP_TYPE = LINEAR, typename su = int8_t>
- - - - - -
- - - - - - - -
return_type AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE, su >::read ()
-
-inline
-
- -

Retrieve the signal in the delay line at the current stored delaytime_cells.

-

It doesn't change the stored internal value of _delaytime_cells or feedback the output to the input.

- -

Definition at line 199 of file AudioDelayFeedback.h.

- -
-
- -

◆ read() [2/2]

- -
-
-
-template<uint16_t NUM_BUFFER_SAMPLES, int8_t INTERP_TYPE = LINEAR, typename su = int8_t>
- - - - - -
- - - - - - - - -
return_type AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE, su >::read (Q16n16 delaytime_cells)
-
-inline
-
- -

Retrieve the signal in the delay line at the interpolated fractional position delaytime_cells.

-

It doesn't change the stored internal value of _delaytime_cells or feedback the output to the input.

Parameters
- - -
delaytime_cellsindicates the delay time in terms of cells in the delay buffer.
-
-
- -

Definition at line 189 of file AudioDelayFeedback.h.

- -
-
- -

◆ setDelayTimeCells() [1/3]

- -
-
-
-template<uint16_t NUM_BUFFER_SAMPLES, int8_t INTERP_TYPE = LINEAR, typename su = int8_t>
- - - - - -
- - - - - - - - -
void AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE, su >::setDelayTimeCells (float delaytime_cells)
-
-inline
-
- -

Set delay time expressed in samples, fractional float for an interpolating delay.

-
Parameters
- - -
delaytime_cellsdelay time expressed in cells, with each cell played per tick of MOZZI_AUDIO_RATE. For example, 128 cells delay at MOZZI_AUDIO_RATE would produce a time delay of 128/16384 = 0.0078125 s = 7.8 ms Put another way, num_cells = delay_seconds * MOZZI_AUDIO_RATE.
-
-
- -

Definition at line 235 of file AudioDelayFeedback.h.

- -
-
- -

◆ setDelayTimeCells() [2/3]

- -
-
-
-template<uint16_t NUM_BUFFER_SAMPLES, int8_t INTERP_TYPE = LINEAR, typename su = int8_t>
- - - - - -
- - - - - - - - -
void AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE, su >::setDelayTimeCells (Q16n16 delaytime_cells)
-
-inline
-
- -

Set delay time expressed in samples, fractional Q16n16 for an interpolating delay.

-
Parameters
- - -
delaytime_cellsdelay time expressed in cells, with each cell played per tick of MOZZI_AUDIO_RATE. For example, 128 cells delay at MOZZI_AUDIO_RATE would produce a time delay of 128/16384 = 0.0078125 s = 7.8 ms Put another way, num_cells = delay_seconds * MOZZI_AUDIO_RATE.
-
-
- -

Definition at line 223 of file AudioDelayFeedback.h.

- -
-
- -

◆ setDelayTimeCells() [3/3]

- -
-
-
-template<uint16_t NUM_BUFFER_SAMPLES, int8_t INTERP_TYPE = LINEAR, typename su = int8_t>
- - - - - -
- - - - - - - - -
void AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE, su >::setDelayTimeCells (uint16_t delaytime_cells)
-
-inline
-
- -

Set delay time expressed in samples.

-
Parameters
- - -
delaytime_cellsdelay time expressed in cells, with each cell played per tick of MOZZI_AUDIO_RATE. For example, 128 cells delay at MOZZI_AUDIO_RATE would produce a time delay of 128/16384 = 0.0078125 s = 7.8 ms Put another way, num_cells = delay_seconds * MOZZI_AUDIO_RATE.
-
-
- -

Definition at line 211 of file AudioDelayFeedback.h.

- -
-
- -

◆ setFeedbackLevel()

- -
-
-
-template<uint16_t NUM_BUFFER_SAMPLES, int8_t INTERP_TYPE = LINEAR, typename su = int8_t>
- - - - - -
- - - - - - - - -
void AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE, su >::setFeedbackLevel (int8_t feedback_level)
-
-inline
-
- -

Set the feedback gain.

-
Parameters
- - -
feedback_levelis the feedback level from -128 to 127 (representing -1 to 1).
-
-
- -

Definition at line 245 of file AudioDelayFeedback.h.

- -
-
- -

◆ write() [1/2]

- -
-
-
-template<uint16_t NUM_BUFFER_SAMPLES, int8_t INTERP_TYPE = LINEAR, typename su = int8_t>
- - - - - -
- - - - - - - - -
void AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE, su >::write (su input)
-
-inline
-
- -

Input a value to the delay but don't change the delay time or retrieve the output signal.

-
Parameters
- - -
inputthe signal input.
-
-
- -

Definition at line 153 of file AudioDelayFeedback.h.

- -
-
- -

◆ write() [2/2]

- -
-
-
-template<uint16_t NUM_BUFFER_SAMPLES, int8_t INTERP_TYPE = LINEAR, typename su = int8_t>
- - - - - -
- - - - - - - - - - - - - - - - - - -
void AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE, su >::write (su input,
uint16_t offset 
)
-
-inline
-
- -

Input a value to the delay at an offset from the current write position.

-

Don't advance the main write position or change the stored delay time or retrieve the output signal.

Parameters
- - - -
inputthe signal input.
offsetthe number of cells behind the ordinary write position where the input will be written.
-
-
- -

Definition at line 177 of file AudioDelayFeedback.h.

- -
-
- -

◆ writeFeedback()

- -
-
-
-template<uint16_t NUM_BUFFER_SAMPLES, int8_t INTERP_TYPE = LINEAR, typename su = int8_t>
- - - - - -
- - - - - - - - -
void AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE, su >::writeFeedback (su input)
-
-inline
-
- -

Input a value to the delay but don't advance the write position, change the delay time or retrieve the output signal.

-

This can be useful for manually adding feedback to the delay line, "behind" the advancing write head.

Parameters
- - -
inputthe signal input.
-
-
- -

Definition at line 165 of file AudioDelayFeedback.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/class_audio_delay_feedback.js b/extras/doc/html/class_audio_delay_feedback.js deleted file mode 100644 index f622fab7c..000000000 --- a/extras/doc/html/class_audio_delay_feedback.js +++ /dev/null @@ -1,18 +0,0 @@ -var class_audio_delay_feedback = -[ - [ "AudioDelayFeedback", "class_audio_delay_feedback.html#adbc1ecd0dffe273cac87b8fc888e28f0", null ], - [ "AudioDelayFeedback", "class_audio_delay_feedback.html#a0412c5d62f72a881d95504d9d0018245", null ], - [ "AudioDelayFeedback", "class_audio_delay_feedback.html#a61f3c90f752d8b15c0f7a19e03bc4f03", null ], - [ "next", "class_audio_delay_feedback.html#a566593f5ea6d2d8bac9c45aa592f40fb", null ], - [ "next", "class_audio_delay_feedback.html#af94a6f68bc932e4e2ce99b3a43713825", null ], - [ "next", "class_audio_delay_feedback.html#a335ce266a8b40173f3279b96f9c6c050", null ], - [ "read", "class_audio_delay_feedback.html#aabcade306904f5f6ac43d12bb00606e6", null ], - [ "read", "class_audio_delay_feedback.html#adb77aac1acba3b0a31428345342a5205", null ], - [ "setDelayTimeCells", "class_audio_delay_feedback.html#ab6fb7260a540416018ebfac7aeac32f1", null ], - [ "setDelayTimeCells", "class_audio_delay_feedback.html#a2c5c805eb4d62e4650b08400409863a9", null ], - [ "setDelayTimeCells", "class_audio_delay_feedback.html#a3f49d5e601799487237266621245c7a4", null ], - [ "setFeedbackLevel", "class_audio_delay_feedback.html#a1408da9125a0d6c38ce89b11d7d93113", null ], - [ "write", "class_audio_delay_feedback.html#a5197399a986922eee160a455069dc93e", null ], - [ "write", "class_audio_delay_feedback.html#a93231df73010a40da2d4092b94a99f9d", null ], - [ "writeFeedback", "class_audio_delay_feedback.html#ae83d67ec86483bae489a6a17e8d0e5e3", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/class_cap_poll-members.html b/extras/doc/html/class_cap_poll-members.html deleted file mode 100644 index 902309cc1..000000000 --- a/extras/doc/html/class_cap_poll-members.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
CapPoll< SENSOR_PIN, SEND_PIN > Member List
-
-
- -

This is the complete list of members for CapPoll< SENSOR_PIN, SEND_PIN >, including all inherited members.

- - - -
CapPoll()CapPoll< SENSOR_PIN, SEND_PIN >inline
next()CapPoll< SENSOR_PIN, SEND_PIN >inline
-
- - - diff --git a/extras/doc/html/class_cap_poll.html b/extras/doc/html/class_cap_poll.html deleted file mode 100644 index 1fc7187f7..000000000 --- a/extras/doc/html/class_cap_poll.html +++ /dev/null @@ -1,168 +0,0 @@ - - - - - - - -Mozzi: CapPoll< SENSOR_PIN, SEND_PIN > Class Template Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
CapPoll< SENSOR_PIN, SEND_PIN > Class Template Reference
-
-
- -

A class for reading voltage on a digital pin, derived from http://arduino.cc/en/Tutorial/RCtime. - More...

- -

#include <CapPoll.h>

-

Detailed Description

-

template<unsigned char SENSOR_PIN, unsigned char SEND_PIN>
-class CapPoll< SENSOR_PIN, SEND_PIN >

- -

A class for reading voltage on a digital pin, derived from http://arduino.cc/en/Tutorial/RCtime.

-

This is designed to be used in updateControl(). Each time it is called, it checks if a capacitor has charged, and returns an output reflecting how long it took for the most recent charge.

- -

Definition at line 23 of file CapPoll.h.

-
- - - - - - - -

-Public Member Functions

CapPoll ()
 Constructor.
 
unsigned int next ()
 Checks whether the capacitor has charged, and returns how long it took for the most recent charge. More...
 
-

Member Function Documentation

- -

◆ next()

- -
-
-
-template<unsigned char SENSOR_PIN, unsigned char SEND_PIN>
- - - - - -
- - - - - - - -
unsigned int CapPoll< SENSOR_PIN, SEND_PIN >::next ()
-
-inline
-
- -

Checks whether the capacitor has charged, and returns how long it took for the most recent charge.

-

This would preferably be called in updateControl(), but if the resolution isn't fine enough or the pin charges too fast for updateControl() to catch, try it in updateAudio().

Returns
the sensor value, reflected in how many checking cycles it took to charge the capacitor.
- -

Definition at line 40 of file CapPoll.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/class_cap_poll.js b/extras/doc/html/class_cap_poll.js deleted file mode 100644 index d99340056..000000000 --- a/extras/doc/html/class_cap_poll.js +++ /dev/null @@ -1,5 +0,0 @@ -var class_cap_poll = -[ - [ "CapPoll", "class_cap_poll.html#a4f691e78391a306d9ee89cdb1026096f", null ], - [ "next", "class_cap_poll.html#a894e8abbabff197f4d17106455fef718", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/class_circular_buffer-members.html b/extras/doc/html/class_circular_buffer-members.html deleted file mode 100644 index a83bc6563..000000000 --- a/extras/doc/html/class_circular_buffer-members.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
CircularBuffer< ITEM_TYPE > Member List
-
-
- -

This is the complete list of members for CircularBuffer< ITEM_TYPE >, including all inherited members.

- - - - - - - - -
address() (defined in CircularBuffer< ITEM_TYPE >)CircularBuffer< ITEM_TYPE >inline
CircularBuffer()CircularBuffer< ITEM_TYPE >inline
count() (defined in CircularBuffer< ITEM_TYPE >)CircularBuffer< ITEM_TYPE >inline
isEmpty() (defined in CircularBuffer< ITEM_TYPE >)CircularBuffer< ITEM_TYPE >inline
isFull() (defined in CircularBuffer< ITEM_TYPE >)CircularBuffer< ITEM_TYPE >inline
read() (defined in CircularBuffer< ITEM_TYPE >)CircularBuffer< ITEM_TYPE >inline
write(ITEM_TYPE in) (defined in CircularBuffer< ITEM_TYPE >)CircularBuffer< ITEM_TYPE >inline
-
- - - diff --git a/extras/doc/html/class_circular_buffer.html b/extras/doc/html/class_circular_buffer.html deleted file mode 100644 index 7cc43737f..000000000 --- a/extras/doc/html/class_circular_buffer.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - - -Mozzi: CircularBuffer< ITEM_TYPE > Class Template Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
CircularBuffer< ITEM_TYPE > Class Template Reference
-
-
- -

Circular buffer object. - More...

- -

#include <CircularBuffer.h>

-

Detailed Description

-

template<class ITEM_TYPE>
-class CircularBuffer< ITEM_TYPE >

- -

Circular buffer object.

-

Has a fixed number of cells, set to 256.

Template Parameters
- - -
ITEM_TYPEthe kind of data to store, eg. int, int8_t etc.
-
-
- -

Definition at line 27 of file CircularBuffer.h.

-
- - - - - - - - - - - - - - - - -

-Public Member Functions

CircularBuffer ()
 Constructor.
 
-bool isFull ()
 
-bool isEmpty ()
 
-void write (ITEM_TYPE in)
 
-ITEM_TYPE read ()
 
-unsigned long count ()
 
-ITEM_TYPE * address ()
 
-
-
- - - diff --git a/extras/doc/html/class_circular_buffer.js b/extras/doc/html/class_circular_buffer.js deleted file mode 100644 index 5361889eb..000000000 --- a/extras/doc/html/class_circular_buffer.js +++ /dev/null @@ -1,10 +0,0 @@ -var class_circular_buffer = -[ - [ "CircularBuffer", "class_circular_buffer.html#a6789c0d6d73594fdd412a39445b5cd67", null ], - [ "address", "class_circular_buffer.html#a508cea340f76cea1dc993f0b5124a522", null ], - [ "count", "class_circular_buffer.html#a04c3ee378688439c72760034e314eed3", null ], - [ "isEmpty", "class_circular_buffer.html#ad0fa3e6277c9ab56d8bfc190b4271d41", null ], - [ "isFull", "class_circular_buffer.html#a023321c0416562f30532d5c4848c383b", null ], - [ "read", "class_circular_buffer.html#aa82ce86703d85248bfb037dc49d75dd3", null ], - [ "write", "class_circular_buffer.html#a7f033a265c893ad6d949347fa797e9ab", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/class_control_delay-members.html b/extras/doc/html/class_control_delay-members.html deleted file mode 100644 index e78230ecb..000000000 --- a/extras/doc/html/class_control_delay-members.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
ControlDelay< NUM_BUFFER_SAMPLES, T > Member List
-
-
- -

This is the complete list of members for ControlDelay< NUM_BUFFER_SAMPLES, T >, including all inherited members.

- - - - - - - -
AudioDelay()AudioDelay< NUM_BUFFER_SAMPLES, int >inline
AudioDelay(unsigned int delaytime_cells)AudioDelay< NUM_BUFFER_SAMPLES, int >inline
next(int in_value, unsigned int delaytime_cells)AudioDelay< NUM_BUFFER_SAMPLES, int >inline
next(int in_value)AudioDelay< NUM_BUFFER_SAMPLES, int >inline
read(unsigned int delaytime_cells)AudioDelay< NUM_BUFFER_SAMPLES, int >inline
set(unsigned int delaytime_cells)AudioDelay< NUM_BUFFER_SAMPLES, int >inline
-
- - - diff --git a/extras/doc/html/class_control_delay.html b/extras/doc/html/class_control_delay.html deleted file mode 100644 index 7b003f7f0..000000000 --- a/extras/doc/html/class_control_delay.html +++ /dev/null @@ -1,313 +0,0 @@ - - - - - - - -Mozzi: ControlDelay< NUM_BUFFER_SAMPLES, T > Class Template Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
ControlDelay< NUM_BUFFER_SAMPLES, T > Class Template Reference
-
-
- -

Control-rate delay line for delaying control signals. - More...

- -

#include <ControlDelay.h>

-
- + Inheritance diagram for ControlDelay< NUM_BUFFER_SAMPLES, T >:
-
-
- -

Detailed Description

-

template<unsigned int NUM_BUFFER_SAMPLES, class T = int>
-class ControlDelay< NUM_BUFFER_SAMPLES, T >

- -

Control-rate delay line for delaying control signals.

-

For example, this could be used to produce echo-like effects using multiple instances of the same voice, when AudioDelay would be too short for an actual audio echo. This is in fact just a wrapper of the AudioDelay code.

Template Parameters
- - - -
NUM_BUFFER_SAMPLESis the length of the delay buffer in samples. This should be a power of two.
thetype of numbers to use for the signal in the delay. The default is int8_t, but int could be useful when adding manual feedback. When using int, the input should be limited to 15 bits width, ie. -16384 to 16383.
-
-
- -

Definition at line 29 of file ControlDelay.h.

-
- - - - - - - - - - - - - -

-Public Member Functions

int next (int in_value, unsigned int delaytime_cells)
 Input a value to the delay and retrieve the signal in the delay line at the position delaytime_cells. More...
 
int next (int in_value)
 Input a value to the delay and retrieve the signal in the delay line at the position delaytime_cells. More...
 
void set (unsigned int delaytime_cells)
 Set the delay time, measured in cells. More...
 
int read (unsigned int delaytime_cells)
 Retrieve the signal in the delay line at the position delaytime_cells. More...
 
-

Member Function Documentation

- -

◆ next() [1/2]

- -
-
- - - - - -
- - - - - - - - -
int AudioDelay< NUM_BUFFER_SAMPLES, int >::next (int in_value)
-
-inlineinherited
-
- -

Input a value to the delay and retrieve the signal in the delay line at the position delaytime_cells.

-
Parameters
- - -
in_valuethe signal input.
-
-
- -

Definition at line 77 of file AudioDelay.h.

- -
-
- -

◆ next() [2/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
int AudioDelay< NUM_BUFFER_SAMPLES, int >::next (int in_value,
unsigned int delaytime_cells 
)
-
-inlineinherited
-
- -

Input a value to the delay and retrieve the signal in the delay line at the position delaytime_cells.

-
Parameters
- - - -
in_valuethe signal input.
delaytime_cellssets the delay time in terms of cells in the delay buffer.
-
-
- -

Definition at line 59 of file AudioDelay.h.

- -
-
- -

◆ read()

- -
-
- - - - - -
- - - - - - - - -
int AudioDelay< NUM_BUFFER_SAMPLES, int >::read (unsigned int delaytime_cells)
-
-inlineinherited
-
- -

Retrieve the signal in the delay line at the position delaytime_cells.

-

It doesn't change the stored internal value of _delaytime_cells.

Parameters
- - -
delaytime_cellsindicates the delay time in terms of cells in the delay buffer.
-
-
- -

Definition at line 104 of file AudioDelay.h.

- -
-
- -

◆ set()

- -
-
- - - - - -
- - - - - - - - -
void AudioDelay< NUM_BUFFER_SAMPLES, int >::set (unsigned int delaytime_cells)
-
-inlineinherited
-
- -

Set the delay time, measured in cells.

-
Parameters
- - -
delaytime_cellshow many cells to delay the input signal by.
-
-
- -

Definition at line 94 of file AudioDelay.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/class_control_delay.js b/extras/doc/html/class_control_delay.js deleted file mode 100644 index 0cbad6b7a..000000000 --- a/extras/doc/html/class_control_delay.js +++ /dev/null @@ -1,7 +0,0 @@ -var class_control_delay = -[ - [ "next", "class_control_delay.html#a41c09b5cc9e817d8eaf111b0f74c9a0b", null ], - [ "next", "class_control_delay.html#a19258636609d83a2bab11849e17b5294", null ], - [ "read", "class_control_delay.html#a26b409fbfc322ae527ba23680c56e3a9", null ], - [ "set", "class_control_delay.html#a7bd0a07f7803afda1a71b50e3f66827b", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/class_control_delay.png b/extras/doc/html/class_control_delay.png deleted file mode 100644 index 277da8db7..000000000 Binary files a/extras/doc/html/class_control_delay.png and /dev/null differ diff --git a/extras/doc/html/class_d_cfilter-members.html b/extras/doc/html/class_d_cfilter-members.html deleted file mode 100644 index ff801230c..000000000 --- a/extras/doc/html/class_d_cfilter-members.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
DCfilter Member List
-
-
- -

This is the complete list of members for DCfilter, including all inherited members.

- - - -
DCfilter(float pole)DCfilterinline
next(int x)DCfilterinline
-
- - - diff --git a/extras/doc/html/class_d_cfilter.html b/extras/doc/html/class_d_cfilter.html deleted file mode 100644 index 85a66672d..000000000 --- a/extras/doc/html/class_d_cfilter.html +++ /dev/null @@ -1,206 +0,0 @@ - - - - - - - -Mozzi: DCfilter Class Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
DCfilter Class Reference
-
-
- -

A DC-blocking filter useful for highlighting changes in control signals. - More...

- -

#include <DCfilter.h>

-

Detailed Description

-

A DC-blocking filter useful for highlighting changes in control signals.

-

The output of the filter settles to 0 if the incoming signal stays constant. If the input changes, the filter output swings to track the change and eventually settles back to 0.

- -

Definition at line 32 of file DCfilter.h.

-
- - - - - - - -

-Public Member Functions

 DCfilter (float pole)
 Instantiate a DC-blocking filter. More...
 
int next (int x)
 Filter the incoming value and return the result. More...
 
-

Constructor & Destructor Documentation

- -

◆ DCfilter()

- -
-
- - - - - -
- - - - - - - - -
DCfilter::DCfilter (float pole)
-
-inline
-
- -

Instantiate a DC-blocking filter.

-
Parameters
- - -
polesets the responsiveness of the filter, how long it takes to settle to 0 if the input signal levels out at a constant value.
-
-
- -

Definition at line 40 of file DCfilter.h.

- -
-
-

Member Function Documentation

- -

◆ next()

- -
-
- - - - - -
- - - - - - - - -
int DCfilter::next (int x)
-
-inline
-
- -

Filter the incoming value and return the result.

-
Parameters
- - -
xthe value to filter
-
-
-
Returns
filtered signal
- -

Definition at line 69 of file DCfilter.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/class_d_cfilter.js b/extras/doc/html/class_d_cfilter.js deleted file mode 100644 index ad30a46ee..000000000 --- a/extras/doc/html/class_d_cfilter.js +++ /dev/null @@ -1,5 +0,0 @@ -var class_d_cfilter = -[ - [ "DCfilter", "class_d_cfilter.html#ab55e871fc9d11dfb9231e44627181c2c", null ], - [ "next", "class_d_cfilter.html#ae900f943d9520fbf3a522508231d82b0", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/class_ead-members.html b/extras/doc/html/class_ead-members.html deleted file mode 100644 index 1bf1aedcf..000000000 --- a/extras/doc/html/class_ead-members.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Ead Member List
-
-
- -

This is the complete list of members for Ead, including all inherited members.

- - - - - - - - -
Ead(unsigned int update_rate)Eadinline
next()Eadinline
set(unsigned int attack_ms, unsigned int decay_ms)Eadinline
setAttack(unsigned int attack_ms)Eadinline
setDecay(unsigned int decay_ms)Eadinline
start()Eadinline
start(unsigned int attack_ms, unsigned int decay_ms)Eadinline
-
- - - diff --git a/extras/doc/html/class_ead.html b/extras/doc/html/class_ead.html deleted file mode 100644 index 66744a46d..000000000 --- a/extras/doc/html/class_ead.html +++ /dev/null @@ -1,410 +0,0 @@ - - - - - - - -Mozzi: Ead Class Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
Ead Class Reference
-
-
- -

Exponential attack decay envelope. - More...

- -

#include <Ead.h>

-

Detailed Description

-

Exponential attack decay envelope.

-

This produces a natural sounding envelope. It calculates a new value each time next() is called, which can be mapped to other parameters to change the amplitude or timbre of a sound.

Note
Currently doesn't work at audio rate... may need larger number types for Q8n8attack and Q8n8decay ?
- -

Definition at line 30 of file Ead.h.

-
- - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 Ead (unsigned int update_rate)
 Constructor. More...
 
void setAttack (unsigned int attack_ms)
 Set the attack time in milliseconds. More...
 
void setDecay (unsigned int decay_ms)
 Set the decay time in milliseconds. More...
 
void set (unsigned int attack_ms, unsigned int decay_ms)
 Set attack and decay times in milliseconds. More...
 
void start ()
 Start the envelope from the beginning. More...
 
void start (unsigned int attack_ms, unsigned int decay_ms)
 Set attack and decay times in milliseconds, and start the envelope from the beginning. More...
 
uint8_t next ()
 Calculate and return the next envelope value, in the range -128 to 127. More...
 
-

Constructor & Destructor Documentation

- -

◆ Ead()

- -
-
- - - - - -
- - - - - - - - -
Ead::Ead (unsigned int update_rate)
-
-inline
-
- -

Constructor.

-
Parameters
- - -
update_rateUsually this will be MOZZI_CONTROL_RATE or MOZZI_AUDIO_RATE, unless you design another scheme for updating. One such alternative scheme could take turns for various control changes in a rotating schedule to spread out calculations made in successive updateControl() routines.
-
-
- -

Definition at line 42 of file Ead.h.

- -
-
-

Member Function Documentation

- -

◆ next()

- -
-
- - - - - -
- - - - - - - -
uint8_t Ead::next ()
-
-inline
-
- -

Calculate and return the next envelope value, in the range -128 to 127.

-
Note
Timing: 5us
- -

Definition at line 115 of file Ead.h.

- -
-
- -

◆ set()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void Ead::set (unsigned int attack_ms,
unsigned int decay_ms 
)
-
-inline
-
- -

Set attack and decay times in milliseconds.

-
Parameters
- - - -
attack_msThe time taken for values returned by successive calls of the next() method to change from 0 to 255.
decay_msThe time taken for values returned by successive calls of the next() method to change from 255 to 0.
-
-
- -

Definition at line 76 of file Ead.h.

- -
-
- -

◆ setAttack()

- -
-
- - - - - -
- - - - - - - - -
void Ead::setAttack (unsigned int attack_ms)
-
-inline
-
- -

Set the attack time in milliseconds.

-
Parameters
- - -
attack_msThe time taken for values returned by successive calls of the next() method to change from 0 to 255.
-
-
- -

Definition at line 52 of file Ead.h.

- -
-
- -

◆ setDecay()

- -
-
- - - - - -
- - - - - - - - -
void Ead::setDecay (unsigned int decay_ms)
-
-inline
-
- -

Set the decay time in milliseconds.

-
Parameters
- - -
decay_msThe time taken for values returned by successive calls of the next() method to change from 255 to 0.
-
-
- -

Definition at line 63 of file Ead.h.

- -
-
- -

◆ start() [1/2]

- -
-
- - - - - -
- - - - - - - -
void Ead::start ()
-
-inline
-
- -

Start the envelope from the beginning.

-

This can be used at any time, even if the previous envelope is not finished.

- -

Definition at line 87 of file Ead.h.

- -
-
- -

◆ start() [2/2]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void Ead::start (unsigned int attack_ms,
unsigned int decay_ms 
)
-
-inline
-
- -

Set attack and decay times in milliseconds, and start the envelope from the beginning.

-

This can be used at any time, even if the previous envelope is not finished.

Parameters
- - - -
attack_msThe time taken for values returned by successive calls of the next() method to change from 0 to 255.
decay_msThe time taken for values returned by successive calls of the next() method to change from 255 to 0.
-
-
- -

Definition at line 102 of file Ead.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/class_ead.js b/extras/doc/html/class_ead.js deleted file mode 100644 index 86a11034f..000000000 --- a/extras/doc/html/class_ead.js +++ /dev/null @@ -1,10 +0,0 @@ -var class_ead = -[ - [ "Ead", "class_ead.html#a4862282805c2ac3255a34a99a31564d5", null ], - [ "next", "class_ead.html#a57e6f7b304c2bd7dd8cedf7f4fba66c9", null ], - [ "set", "class_ead.html#af203c82721ab832c653a23ff219c040e", null ], - [ "setAttack", "class_ead.html#a6bae0e92e6709c3fcd31fccd41212bac", null ], - [ "setDecay", "class_ead.html#aa99e6dc2d5448b4de0764c6208e5c2fc", null ], - [ "start", "class_ead.html#ac385679b58e2f9755029b7da7405b233", null ], - [ "start", "class_ead.html#a146b205e70f4b2293e643ea063f2b38f", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/class_event_delay-members.html b/extras/doc/html/class_event_delay-members.html deleted file mode 100644 index 23260ab18..000000000 --- a/extras/doc/html/class_event_delay-members.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
EventDelay Member List
-
-
- -

This is the complete list of members for EventDelay, including all inherited members.

- - - - - - - - -
deadline (defined in EventDelay)EventDelayprotected
EventDelay(unsigned int delay_milliseconds=0)EventDelayinline
ready()EventDelayinline
set(unsigned int delay_milliseconds)EventDelayinline
start()EventDelayinline
start(unsigned int delay_milliseconds)EventDelayinline
ticks (defined in EventDelay)EventDelayprotected
-
- - - diff --git a/extras/doc/html/class_event_delay.html b/extras/doc/html/class_event_delay.html deleted file mode 100644 index f776ef3f1..000000000 --- a/extras/doc/html/class_event_delay.html +++ /dev/null @@ -1,333 +0,0 @@ - - - - - - - -Mozzi: EventDelay Class Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
EventDelay Class Reference
-
-
- -

A non-blocking replacement for Arduino's delay() function. - More...

- -

#include <EventDelay.h>

-
- + Inheritance diagram for EventDelay:
-
-
- -

Detailed Description

-

A non-blocking replacement for Arduino's delay() function.

-

EventDelay can be set() to a number of milliseconds, then after calling start(), ready() will return true when the time is up.
- Alternatively, start(milliseconds) will call set() and start() together.

- -

Definition at line 20 of file EventDelay.h.

-
- - - - - - - - - - - - - - - - -

-Public Member Functions

 EventDelay (unsigned int delay_milliseconds=0)
 Constructor. More...
 
void set (unsigned int delay_milliseconds)
 Set the delay time. More...
 
void start ()
 Start the delay. More...
 
void start (unsigned int delay_milliseconds)
 Set the delay time and start the delay. More...
 
bool ready ()
 Call this in updateControl() or updateAudio() to check if the delay time is up. More...
 
- - - - - -

-Protected Attributes

-unsigned long deadline
 
-unsigned long ticks
 
-

Constructor & Destructor Documentation

- -

◆ EventDelay()

- -
-
- - - - - -
- - - - - - - - -
EventDelay::EventDelay (unsigned int delay_milliseconds = 0)
-
-inline
-
- -

Constructor.

-

Declare an EventDelay object.

Parameters
- - -
delay_millisecondshow long until ready() returns true, after calling start(). Defaults to 0 if no parameter is supplied.
-
-
- -

Definition at line 29 of file EventDelay.h.

- -
-
-

Member Function Documentation

- -

◆ ready()

- -
-
- - - - - -
- - - - - - - -
bool EventDelay::ready ()
-
-inline
-
- -

Call this in updateControl() or updateAudio() to check if the delay time is up.

-
Returns
true if the time is up.
-
Note
timing: 1us.
- -

Definition at line 73 of file EventDelay.h.

- -
-
- -

◆ set()

- -
-
- - - - - -
- - - - - - - - -
void EventDelay::set (unsigned int delay_milliseconds)
-
-inline
-
- -

Set the delay time.

-

This setting is persistent, until you change it by using set() again.

Parameters
- - -
delay_millisecondsdelay time in milliseconds.
-
-
-
Note
timing: 12us
- -

Definition at line 40 of file EventDelay.h.

- -
-
- -

◆ start() [1/2]

- -
-
- - - - - -
- - - - - - - -
void EventDelay::start ()
-
-inline
-
- -

Start the delay.

- -

Definition at line 51 of file EventDelay.h.

- -
-
- -

◆ start() [2/2]

- -
-
- - - - - -
- - - - - - - - -
void EventDelay::start (unsigned int delay_milliseconds)
-
-inline
-
- -

Set the delay time and start the delay.

-
Parameters
- - -
delay_millisecondsdelay time in milliseconds.
-
-
- -

Definition at line 61 of file EventDelay.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/class_event_delay.js b/extras/doc/html/class_event_delay.js deleted file mode 100644 index 3585498cd..000000000 --- a/extras/doc/html/class_event_delay.js +++ /dev/null @@ -1,10 +0,0 @@ -var class_event_delay = -[ - [ "EventDelay", "class_event_delay.html#acd7b63341732ac4c23bce04d81316017", null ], - [ "ready", "class_event_delay.html#a2267889678fb75df2f6bdcbd0be0ea8a", null ], - [ "set", "class_event_delay.html#a937c86f3b05ccb6138ff7927713820da", null ], - [ "start", "class_event_delay.html#a97a07c9371040d6388b8369352b08d83", null ], - [ "start", "class_event_delay.html#a0943cb52a1ee36fda1156f8dd762a105", null ], - [ "deadline", "class_event_delay.html#aa0b0ae903260675eded72ad071b5d564", null ], - [ "ticks", "class_event_delay.html#a6e8230d6e291a8c23ebdb1704caabb5d", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/class_event_delay.png b/extras/doc/html/class_event_delay.png deleted file mode 100644 index 4b75f02fe..000000000 Binary files a/extras/doc/html/class_event_delay.png and /dev/null differ diff --git a/extras/doc/html/class_int_map-members.html b/extras/doc/html/class_int_map-members.html deleted file mode 100644 index b0dee6753..000000000 --- a/extras/doc/html/class_int_map-members.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
IntMap Member List
-
-
- -

This is the complete list of members for IntMap, including all inherited members.

- - - -
IntMap(int in_min, int in_max, int out_min, int out_max)IntMapinline
operator()(int n) constIntMapinline
-
- - - diff --git a/extras/doc/html/class_int_map.html b/extras/doc/html/class_int_map.html deleted file mode 100644 index 554c3dcf2..000000000 --- a/extras/doc/html/class_int_map.html +++ /dev/null @@ -1,231 +0,0 @@ - - - - - - - -Mozzi: IntMap Class Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
IntMap Class Reference
-
-
- -

A faster version of Arduino's map() function. - More...

- -

#include <IntMap.h>

-

Detailed Description

-

A faster version of Arduino's map() function.

-

This uses ints instead of longs internally and does some of the maths at compile time.

- -

Definition at line 19 of file IntMap.h.

-
- - - - - - - -

-Public Member Functions

 IntMap (int in_min, int in_max, int out_min, int out_max)
 Constructor. More...
 
int operator() (int n) const
 Process the next input value. More...
 
-

Constructor & Destructor Documentation

- -

◆ IntMap()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IntMap::IntMap (int in_min,
int in_max,
int out_min,
int out_max 
)
-
-inline
-
- -

Constructor.

-
Parameters
- - - - - -
in_minthe minimum of the input range.
in_maxthe maximum of the input range.
out_minthe minimum of the output range.
out_maxthe maximum of the output range.
-
-
- -

Definition at line 28 of file IntMap.h.

- -
-
-

Member Function Documentation

- -

◆ operator()()

- -
-
- - - - - -
- - - - - - - - -
int IntMap::operator() (int n) const
-
-inline
-
- -

Process the next input value.

-
Parameters
- - -
nthe next integer to process.
-
-
-
Returns
the input integer mapped to the output range.
- -

Definition at line 39 of file IntMap.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/class_int_map.js b/extras/doc/html/class_int_map.js deleted file mode 100644 index a066e87a0..000000000 --- a/extras/doc/html/class_int_map.js +++ /dev/null @@ -1,5 +0,0 @@ -var class_int_map = -[ - [ "IntMap", "class_int_map.html#a36ab6e0137254909f44ae909dfe44a8a", null ], - [ "operator()", "class_int_map.html#ae3bf8b61f2ab79ac6626245213e7cb2a", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/class_line-members.html b/extras/doc/html/class_line-members.html deleted file mode 100644 index 1cd538591..000000000 --- a/extras/doc/html/class_line-members.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Line< T > Member List
-
-
- -

This is the complete list of members for Line< T >, including all inherited members.

- - - - - - -
Line()Line< T >inline
next()Line< T >inline
set(T value)Line< T >inline
set(T targetvalue, T num_steps)Line< T >inline
set(T startvalue, T targetvalue, T num_steps)Line< T >inline
-
- - - diff --git a/extras/doc/html/class_line.html b/extras/doc/html/class_line.html deleted file mode 100644 index 770aec507..000000000 --- a/extras/doc/html/class_line.html +++ /dev/null @@ -1,358 +0,0 @@ - - - - - - - -Mozzi: Line< T > Class Template Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
Line< T > Class Template Reference
-
-
- -

For linear changes with a minimum of calculation at each step. - More...

- -

#include <Line.h>

-

Detailed Description

-

template<class T>
-class Line< T >

- -

For linear changes with a minimum of calculation at each step.

-

For instance, you can use Line to make an oscillator glide from one frequency to another, pre-calculating the required phase increments for each end and then letting your Line change the phase increment with only a simple addition at each step.

Template Parameters
- - -
Tthe type of numbers to use. For example, Line <int> myline; makes a Line which uses ints.
-
-
-
Note
Watch out for underflows in the internal calcualtion of Line() if you're not using floats (but on the other hand try to avoid lots of floats, they're too slow!). If it seems like the Line() is not working, there's a good chance you need to scale up the numbers you're using, so internal calculations don't get truncated away. Use Mozzi's fixed-point number types in mozzi_fixmath.h, which enable you to represent fractional numbers. Google "fixed point arithmetic" if this is new to you.
- -

Definition at line 39 of file Line.h.

-
- - - - - - - - - - - - - - - - -

-Public Member Functions

 Line ()
 Constructor. More...
 
next ()
 Increments one step along the line. More...
 
void set (T value)
 Set the current value of the line. More...
 
void set (T targetvalue, T num_steps)
 Given a target value and the number of steps to take on the way, this calculates the step size needed to get there from the current value. More...
 
void set (T startvalue, T targetvalue, T num_steps)
 Given a new starting value, target value and the number of steps to take on the way, this sets the step size needed to get there. More...
 
-

Constructor & Destructor Documentation

- -

◆ Line()

- -
-
-
-template<class T >
- - - - - -
- - - - - - - -
Line< T >::Line ()
-
-inline
-
- -

Constructor.

-

Use the template parameter to set the type of numbers you want to use. For example, Line <int> myline; makes a Line which uses ints.

- -

Definition at line 49 of file Line.h.

- -
-
-

Member Function Documentation

- -

◆ next()

- -
-
-
-template<class T >
- - - - - -
- - - - - - - -
T Line< T >::next ()
-
-inline
-
- -

Increments one step along the line.

-
Returns
the next value.
- -

Definition at line 60 of file Line.h.

- -
-
- -

◆ set() [1/3]

- -
-
-
-template<class T >
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void Line< T >::set (startvalue,
targetvalue,
num_steps 
)
-
-inline
-
- -

Given a new starting value, target value and the number of steps to take on the way, this sets the step size needed to get there.

-
Parameters
- - - - -
startvaluethe number to set the Line's current_value to.
targetvaluethe value to move towards.
num_stepshow many steps to take to reach the target.
-
-
- -

Definition at line 104 of file Line.h.

- -
-
- -

◆ set() [2/3]

- -
-
-
-template<class T >
- - - - - -
- - - - - - - - - - - - - - - - - - -
void Line< T >::set (targetvalue,
num_steps 
)
-
-inline
-
- -

Given a target value and the number of steps to take on the way, this calculates the step size needed to get there from the current value.

-
Parameters
- - - -
targetvaluethe value to move towards.
num_stepshow many steps to take to reach the target.
-
-
- -

Definition at line 87 of file Line.h.

- -
-
- -

◆ set() [3/3]

- -
-
-
-template<class T >
- - - - - -
- - - - - - - - -
void Line< T >::set (value)
-
-inline
-
- -

Set the current value of the line.

-

The Line will continue incrementing from this value using any previously calculated step size.

Parameters
- - -
valuethe number to set the Line's current_value to.
-
-
- -

Definition at line 75 of file Line.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/class_line.js b/extras/doc/html/class_line.js deleted file mode 100644 index b94afce48..000000000 --- a/extras/doc/html/class_line.js +++ /dev/null @@ -1,8 +0,0 @@ -var class_line = -[ - [ "Line", "class_line.html#aa6a80df90da15782ca88889ef9c8dd51", null ], - [ "next", "class_line.html#a413f620b2824c6996b3346ee54351849", null ], - [ "set", "class_line.html#a24ad85c17562e97b6823a010a5ba04c6", null ], - [ "set", "class_line.html#a7378d526cf07c42c0792868c749dee6e", null ], - [ "set", "class_line.html#a6bad32d527e0d931c99e9b72c2a75c80", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/class_line_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4-members.html b/extras/doc/html/class_line_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4-members.html deleted file mode 100644 index a36579169..000000000 --- a/extras/doc/html/class_line_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4-members.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Line< SFix< NI, NF > > Member List
-
-
- -

This is the complete list of members for Line< SFix< NI, NF > >, including all inherited members.

- - - - - - - -
Line()Line< SFix< NI, NF > >inline
next()Line< SFix< NI, NF > >inline
set(internal_type value)Line< SFix< NI, NF > >inline
set(internal_type targetvalue, UFix< _NI, 0 > num_steps)Line< SFix< NI, NF > >inline
set(internal_type targetvalue, T num_steps)Line< SFix< NI, NF > >inline
set(internal_type startvalue, internal_type targetvalue, T num_steps)Line< SFix< NI, NF > >inline
-
- - - diff --git a/extras/doc/html/class_line_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html b/extras/doc/html/class_line_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html deleted file mode 100644 index 084823bcc..000000000 --- a/extras/doc/html/class_line_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html +++ /dev/null @@ -1,406 +0,0 @@ - - - - - - - -Mozzi: Line< SFix< NI, NF > > Class Template Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
Line< SFix< NI, NF > > Class Template Reference
-
-
-

Detailed Description

-

template<int8_t NI, int8_t NF>
-class Line< SFix< NI, NF > >

- - -

Definition at line 406 of file Line.h.

-
- - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 Line ()
 Constructor. More...
 
internal_type next ()
 Increments one step along the line. More...
 
void set (internal_type value)
 Set the current value of the line. More...
 
template<int8_t _NI>
void set (internal_type targetvalue, UFix< _NI, 0 > num_steps)
 Given a target value and the number of steps to take on the way, this calculates the step size needed to get there from the current value. More...
 
template<typename T >
void set (internal_type targetvalue, T num_steps)
 Given a target value and the number of steps to take on the way, this calculates the step size needed to get there from the current value. More...
 
template<typename T >
void set (internal_type startvalue, internal_type targetvalue, T num_steps)
 Given a new starting value, target value and the number of steps to take on the way, this sets the step size needed to get there. More...
 
-

Constructor & Destructor Documentation

- -

◆ Line()

- -
-
-
-template<int8_t NI, int8_t NF>
- - - - - -
- - - - - - - -
Line< SFix< NI, NF > >::Line ()
-
-inline
-
- -

Constructor.

-

Use the template parameter to set the type of numbers you want to use. For example, Line <int> myline; makes a Line which uses ints.

- -

Definition at line 417 of file Line.h.

- -
-
-

Member Function Documentation

- -

◆ next()

- -
-
-
-template<int8_t NI, int8_t NF>
- - - - - -
- - - - - - - -
internal_type Line< SFix< NI, NF > >::next ()
-
-inline
-
- -

Increments one step along the line.

-
Returns
the next value.
- -

Definition at line 423 of file Line.h.

- -
-
- -

◆ set() [1/4]

- -
-
-
-template<int8_t NI, int8_t NF>
-
-template<typename T >
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void Line< SFix< NI, NF > >::set (internal_type startvalue,
internal_type targetvalue,
num_steps 
)
-
-inline
-
- -

Given a new starting value, target value and the number of steps to take on the way, this sets the step size needed to get there.

-
Parameters
- - - - -
startvaluethe number to set the Line's current_value to.
targetvaluethe value to move towards.
num_stepshow many steps to take to reach the target.
-
-
- -

Definition at line 479 of file Line.h.

- -
-
- -

◆ set() [2/4]

- -
-
-
-template<int8_t NI, int8_t NF>
-
-template<typename T >
- - - - - -
- - - - - - - - - - - - - - - - - - -
void Line< SFix< NI, NF > >::set (internal_type targetvalue,
num_steps 
)
-
-inline
-
- -

Given a target value and the number of steps to take on the way, this calculates the step size needed to get there from the current value.

-
Parameters
- - - -
targetvaluethe value to move towards.
num_stepshow many steps to take to reach the target.
-
-
- -

Definition at line 462 of file Line.h.

- -
-
- -

◆ set() [3/4]

- -
-
-
-template<int8_t NI, int8_t NF>
-
-template<int8_t _NI>
- - - - - -
- - - - - - - - - - - - - - - - - - -
void Line< SFix< NI, NF > >::set (internal_type targetvalue,
UFix< _NI, 0 > num_steps 
)
-
-inline
-
- -

Given a target value and the number of steps to take on the way, this calculates the step size needed to get there from the current value.

-
Parameters
- - - -
targetvaluethe value to move towards.
num_stepshow many steps to take to reach the target as a UFix<_NI,0>
-
-
- -

Definition at line 445 of file Line.h.

- -
-
- -

◆ set() [4/4]

- -
-
-
-template<int8_t NI, int8_t NF>
- - - - - -
- - - - - - - - -
void Line< SFix< NI, NF > >::set (internal_type value)
-
-inline
-
- -

Set the current value of the line.

-

The Line will continue incrementing from this value using any previously calculated step size.

Parameters
- - -
valuethe number to set the Line's current_value to.
-
-
- -

Definition at line 435 of file Line.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/class_line_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.js b/extras/doc/html/class_line_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.js deleted file mode 100644 index db54a00ee..000000000 --- a/extras/doc/html/class_line_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.js +++ /dev/null @@ -1,9 +0,0 @@ -var class_line_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4 = -[ - [ "Line", "class_line_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#ada015ad9ad9b115b19c65efbb47d8bb4", null ], - [ "next", "class_line_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#a1a9036422d9a7893b4d9dce8ceabeb65", null ], - [ "set", "class_line_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#af1f74c0f6b411ff356b4594ee22e3379", null ], - [ "set", "class_line_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#a659f6a1cfbb9f49c16442dd7690baf53", null ], - [ "set", "class_line_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#ab8668f3e9062c89262b48c12ed03e686", null ], - [ "set", "class_line_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#a654ccdab0a5d269f5959ae08f9c6ede8", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/class_line_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4-members.html b/extras/doc/html/class_line_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4-members.html deleted file mode 100644 index 1dfd970b1..000000000 --- a/extras/doc/html/class_line_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4-members.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Line< UFix< NI, NF > > Member List
-
-
- -

This is the complete list of members for Line< UFix< NI, NF > >, including all inherited members.

- - - - - - - -
Line()Line< UFix< NI, NF > >inline
next()Line< UFix< NI, NF > >inline
set(internal_type value)Line< UFix< NI, NF > >inline
set(internal_type targetvalue, UFix< _NI, 0 > num_steps)Line< UFix< NI, NF > >inline
set(internal_type targetvalue, T num_steps)Line< UFix< NI, NF > >inline
set(internal_type startvalue, internal_type targetvalue, T num_steps)Line< UFix< NI, NF > >inline
-
- - - diff --git a/extras/doc/html/class_line_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html b/extras/doc/html/class_line_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html deleted file mode 100644 index 79e6bfe8c..000000000 --- a/extras/doc/html/class_line_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html +++ /dev/null @@ -1,406 +0,0 @@ - - - - - - - -Mozzi: Line< UFix< NI, NF > > Class Template Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
Line< UFix< NI, NF > > Class Template Reference
-
-
-

Detailed Description

-

template<int8_t NI, int8_t NF>
-class Line< UFix< NI, NF > >

- - -

Definition at line 323 of file Line.h.

-
- - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 Line ()
 Constructor. More...
 
internal_type next ()
 Increments one step along the line. More...
 
void set (internal_type value)
 Set the current value of the line. More...
 
template<int8_t _NI>
void set (internal_type targetvalue, UFix< _NI, 0 > num_steps)
 Given a target value and the number of steps to take on the way, this calculates the step size needed to get there from the current value. More...
 
template<typename T >
void set (internal_type targetvalue, T num_steps)
 Given a target value and the number of steps to take on the way, this calculates the step size needed to get there from the current value. More...
 
template<typename T >
void set (internal_type startvalue, internal_type targetvalue, T num_steps)
 Given a new starting value, target value and the number of steps to take on the way, this sets the step size needed to get there. More...
 
-

Constructor & Destructor Documentation

- -

◆ Line()

- -
-
-
-template<int8_t NI, int8_t NF>
- - - - - -
- - - - - - - -
Line< UFix< NI, NF > >::Line ()
-
-inline
-
- -

Constructor.

-

Use the template parameter to set the type of numbers you want to use. For example, Line <int> myline; makes a Line which uses ints.

- -

Definition at line 334 of file Line.h.

- -
-
-

Member Function Documentation

- -

◆ next()

- -
-
-
-template<int8_t NI, int8_t NF>
- - - - - -
- - - - - - - -
internal_type Line< UFix< NI, NF > >::next ()
-
-inline
-
- -

Increments one step along the line.

-
Returns
the next value.
- -

Definition at line 340 of file Line.h.

- -
-
- -

◆ set() [1/4]

- -
-
-
-template<int8_t NI, int8_t NF>
-
-template<typename T >
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void Line< UFix< NI, NF > >::set (internal_type startvalue,
internal_type targetvalue,
num_steps 
)
-
-inline
-
- -

Given a new starting value, target value and the number of steps to take on the way, this sets the step size needed to get there.

-
Parameters
- - - - -
startvaluethe number to set the Line's current_value to.
targetvaluethe value to move towards.
num_stepshow many steps to take to reach the target.
-
-
- -

Definition at line 396 of file Line.h.

- -
-
- -

◆ set() [2/4]

- -
-
-
-template<int8_t NI, int8_t NF>
-
-template<typename T >
- - - - - -
- - - - - - - - - - - - - - - - - - -
void Line< UFix< NI, NF > >::set (internal_type targetvalue,
num_steps 
)
-
-inline
-
- -

Given a target value and the number of steps to take on the way, this calculates the step size needed to get there from the current value.

-
Parameters
- - - -
targetvaluethe value to move towards.
num_stepshow many steps to take to reach the target.
-
-
- -

Definition at line 379 of file Line.h.

- -
-
- -

◆ set() [3/4]

- -
-
-
-template<int8_t NI, int8_t NF>
-
-template<int8_t _NI>
- - - - - -
- - - - - - - - - - - - - - - - - - -
void Line< UFix< NI, NF > >::set (internal_type targetvalue,
UFix< _NI, 0 > num_steps 
)
-
-inline
-
- -

Given a target value and the number of steps to take on the way, this calculates the step size needed to get there from the current value.

-
Parameters
- - - -
targetvaluethe value to move towards.
num_stepshow many steps to take to reach the target as a UFix<_NI,0>
-
-
- -

Definition at line 362 of file Line.h.

- -
-
- -

◆ set() [4/4]

- -
-
-
-template<int8_t NI, int8_t NF>
- - - - - -
- - - - - - - - -
void Line< UFix< NI, NF > >::set (internal_type value)
-
-inline
-
- -

Set the current value of the line.

-

The Line will continue incrementing from this value using any previously calculated step size.

Parameters
- - -
valuethe number to set the Line's current_value to.
-
-
- -

Definition at line 352 of file Line.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/class_line_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.js b/extras/doc/html/class_line_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.js deleted file mode 100644 index a0e658bf1..000000000 --- a/extras/doc/html/class_line_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.js +++ /dev/null @@ -1,9 +0,0 @@ -var class_line_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4 = -[ - [ "Line", "class_line_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#af6ca947ea977211411a5bf5e36245ca7", null ], - [ "next", "class_line_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#a3c87f0c7c649a0eaf8ad2dcde7374e68", null ], - [ "set", "class_line_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#aa541b9351288682cfc84b771c9c8c4d4", null ], - [ "set", "class_line_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#a4509fd68271cdc459d59f80144ca4fe0", null ], - [ "set", "class_line_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#a7b5f07b204b41abd4750c4ddb5b64872", null ], - [ "set", "class_line_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#a8fc856bd02be694d54a1f0d459e9f578", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/class_line_3_01unsigned_01char_01_4-members.html b/extras/doc/html/class_line_3_01unsigned_01char_01_4-members.html deleted file mode 100644 index e8751204f..000000000 --- a/extras/doc/html/class_line_3_01unsigned_01char_01_4-members.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Line< unsigned char > Member List
-
-
- -

This is the complete list of members for Line< unsigned char >, including all inherited members.

- - - - - - -
Line()Line< unsigned char >inline
next()Line< unsigned char >inline
set(unsigned char value)Line< unsigned char >inline
set(unsigned char targetvalue, unsigned char num_steps)Line< unsigned char >inline
set(unsigned char startvalue, unsigned char targetvalue, unsigned char num_steps)Line< unsigned char >inline
-
- - - diff --git a/extras/doc/html/class_line_3_01unsigned_01char_01_4.html b/extras/doc/html/class_line_3_01unsigned_01char_01_4.html deleted file mode 100644 index d9147aea9..000000000 --- a/extras/doc/html/class_line_3_01unsigned_01char_01_4.html +++ /dev/null @@ -1,332 +0,0 @@ - - - - - - - -Mozzi: Line< unsigned char > Class Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
Line< unsigned char > Class Reference
-
-
-

Detailed Description

-
-

Definition at line 114 of file Line.h.

-
- - - - - - - - - - - - - - - - -

-Public Member Functions

 Line ()
 Constructor. More...
 
unsigned char next ()
 Increments one step along the line. More...
 
void set (unsigned char value)
 Set the current value of the line. More...
 
void set (unsigned char targetvalue, unsigned char num_steps)
 Given a target value and the number of steps to take on the way, this calculates the step size needed to get there from the current value. More...
 
void set (unsigned char startvalue, unsigned char targetvalue, unsigned char num_steps)
 Given a new starting value, target value and the number of steps to take on the way, this sets the step size needed to get there. More...
 
-

Constructor & Destructor Documentation

- -

◆ Line()

- -
-
- - - - - -
- - - - - - - -
Line< unsigned char >::Line ()
-
-inline
-
- -

Constructor.

-

Use the template parameter to set the type of numbers you want to use. For example, Line <int> myline; makes a Line which uses ints.

- -

Definition at line 124 of file Line.h.

- -
-
-

Member Function Documentation

- -

◆ next()

- -
-
- - - - - -
- - - - - - - -
unsigned char Line< unsigned char >::next ()
-
-inline
-
- -

Increments one step along the line.

-
Returns
the next value.
- -

Definition at line 135 of file Line.h.

- -
-
- -

◆ set() [1/3]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void Line< unsigned char >::set (unsigned char startvalue,
unsigned char targetvalue,
unsigned char num_steps 
)
-
-inline
-
- -

Given a new starting value, target value and the number of steps to take on the way, this sets the step size needed to get there.

-
Parameters
- - - - -
startvaluethe number to set the Line's current_value to.
targetvaluethe value to move towards.
num_stepshow many steps to take to reach the target.
-
-
- -

Definition at line 172 of file Line.h.

- -
-
- -

◆ set() [2/3]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void Line< unsigned char >::set (unsigned char targetvalue,
unsigned char num_steps 
)
-
-inline
-
- -

Given a target value and the number of steps to take on the way, this calculates the step size needed to get there from the current value.

-
Parameters
- - - -
targetvaluethe value to move towards.
num_stepshow many steps to take to reach the target.
-
-
- -

Definition at line 161 of file Line.h.

- -
-
- -

◆ set() [3/3]

- -
-
- - - - - -
- - - - - - - - -
void Line< unsigned char >::set (unsigned char value)
-
-inline
-
- -

Set the current value of the line.

-

The Line will continue incrementing from this value using any previously calculated step size.

Parameters
- - -
valuethe number to set the Line's current_value to.
-
-
- -

Definition at line 149 of file Line.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/class_line_3_01unsigned_01char_01_4.js b/extras/doc/html/class_line_3_01unsigned_01char_01_4.js deleted file mode 100644 index 87e6204a4..000000000 --- a/extras/doc/html/class_line_3_01unsigned_01char_01_4.js +++ /dev/null @@ -1,8 +0,0 @@ -var class_line_3_01unsigned_01char_01_4 = -[ - [ "Line", "class_line_3_01unsigned_01char_01_4.html#a151189139ee6ed39bacec86ea2364124", null ], - [ "next", "class_line_3_01unsigned_01char_01_4.html#ad33f421ca975cb6b175a1c1f3ba0b68a", null ], - [ "set", "class_line_3_01unsigned_01char_01_4.html#ad14e98651035d75c89270c6f0d5e5c46", null ], - [ "set", "class_line_3_01unsigned_01char_01_4.html#a2b90896c1357a45daca74498f17b4909", null ], - [ "set", "class_line_3_01unsigned_01char_01_4.html#a6129febcfd57d32a5c771c8f730b6b7a", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/class_line_3_01unsigned_01int_01_4-members.html b/extras/doc/html/class_line_3_01unsigned_01int_01_4-members.html deleted file mode 100644 index 3148d8ce7..000000000 --- a/extras/doc/html/class_line_3_01unsigned_01int_01_4-members.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Line< unsigned int > Member List
-
-
- -

This is the complete list of members for Line< unsigned int >, including all inherited members.

- - - - - - -
Line()Line< unsigned int >inline
next()Line< unsigned int >inline
set(unsigned int value)Line< unsigned int >inline
set(unsigned int targetvalue, unsigned int num_steps)Line< unsigned int >inline
set(unsigned int startvalue, unsigned int targetvalue, unsigned int num_steps)Line< unsigned int >inline
-
- - - diff --git a/extras/doc/html/class_line_3_01unsigned_01int_01_4.html b/extras/doc/html/class_line_3_01unsigned_01int_01_4.html deleted file mode 100644 index 4b7622a58..000000000 --- a/extras/doc/html/class_line_3_01unsigned_01int_01_4.html +++ /dev/null @@ -1,332 +0,0 @@ - - - - - - - -Mozzi: Line< unsigned int > Class Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
Line< unsigned int > Class Reference
-
-
-

Detailed Description

-
-

Definition at line 183 of file Line.h.

-
- - - - - - - - - - - - - - - - -

-Public Member Functions

 Line ()
 Constructor. More...
 
unsigned int next ()
 Increments one step along the line. More...
 
void set (unsigned int value)
 Set the current value of the line. More...
 
void set (unsigned int targetvalue, unsigned int num_steps)
 Given a target value and the number of steps to take on the way, this calculates the step size needed to get there from the current value. More...
 
void set (unsigned int startvalue, unsigned int targetvalue, unsigned int num_steps)
 Given a new starting value, target value and the number of steps to take on the way, this sets the step size needed to get there. More...
 
-

Constructor & Destructor Documentation

- -

◆ Line()

- -
-
- - - - - -
- - - - - - - -
Line< unsigned int >::Line ()
-
-inline
-
- -

Constructor.

-

Use the template parameter to set the type of numbers you want to use. For example, Line <int> myline; makes a Line which uses ints.

- -

Definition at line 193 of file Line.h.

- -
-
-

Member Function Documentation

- -

◆ next()

- -
-
- - - - - -
- - - - - - - -
unsigned int Line< unsigned int >::next ()
-
-inline
-
- -

Increments one step along the line.

-
Returns
the next value.
- -

Definition at line 204 of file Line.h.

- -
-
- -

◆ set() [1/3]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void Line< unsigned int >::set (unsigned int startvalue,
unsigned int targetvalue,
unsigned int num_steps 
)
-
-inline
-
- -

Given a new starting value, target value and the number of steps to take on the way, this sets the step size needed to get there.

-
Parameters
- - - - -
startvaluethe number to set the Line's current_value to.
targetvaluethe value to move towards.
num_stepshow many steps to take to reach the target.
-
-
- -

Definition at line 242 of file Line.h.

- -
-
- -

◆ set() [2/3]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void Line< unsigned int >::set (unsigned int targetvalue,
unsigned int num_steps 
)
-
-inline
-
- -

Given a target value and the number of steps to take on the way, this calculates the step size needed to get there from the current value.

-
Parameters
- - - -
targetvaluethe value to move towards.
num_stepshow many steps to take to reach the target.
-
-
- -

Definition at line 230 of file Line.h.

- -
-
- -

◆ set() [3/3]

- -
-
- - - - - -
- - - - - - - - -
void Line< unsigned int >::set (unsigned int value)
-
-inline
-
- -

Set the current value of the line.

-

The Line will continue incrementing from this value using any previously calculated step size.

Parameters
- - -
valuethe number to set the Line's current_value to.
-
-
- -

Definition at line 218 of file Line.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/class_line_3_01unsigned_01int_01_4.js b/extras/doc/html/class_line_3_01unsigned_01int_01_4.js deleted file mode 100644 index eb135fa69..000000000 --- a/extras/doc/html/class_line_3_01unsigned_01int_01_4.js +++ /dev/null @@ -1,8 +0,0 @@ -var class_line_3_01unsigned_01int_01_4 = -[ - [ "Line", "class_line_3_01unsigned_01int_01_4.html#a32c77e9442a640df179ec4573e8fea6d", null ], - [ "next", "class_line_3_01unsigned_01int_01_4.html#a4bf1b56d036097ecc3e28d52ef129ade", null ], - [ "set", "class_line_3_01unsigned_01int_01_4.html#a1677277eb5f3eb56e47a6e7dde0c1558", null ], - [ "set", "class_line_3_01unsigned_01int_01_4.html#a002bf2ae8e48467fd2d45072b8328e65", null ], - [ "set", "class_line_3_01unsigned_01int_01_4.html#a157b1887464b81ed8388a8f73173338d", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/class_line_3_01unsigned_01long_01_4-members.html b/extras/doc/html/class_line_3_01unsigned_01long_01_4-members.html deleted file mode 100644 index da74c7bc0..000000000 --- a/extras/doc/html/class_line_3_01unsigned_01long_01_4-members.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Line< unsigned long > Member List
-
-
- -

This is the complete list of members for Line< unsigned long >, including all inherited members.

- - - - - - -
Line()Line< unsigned long >inline
next()Line< unsigned long >inline
set(unsigned long value)Line< unsigned long >inline
set(unsigned long targetvalue, unsigned long num_steps)Line< unsigned long >inline
set(unsigned long startvalue, unsigned long targetvalue, unsigned long num_steps)Line< unsigned long >inline
-
- - - diff --git a/extras/doc/html/class_line_3_01unsigned_01long_01_4.html b/extras/doc/html/class_line_3_01unsigned_01long_01_4.html deleted file mode 100644 index 77acfab47..000000000 --- a/extras/doc/html/class_line_3_01unsigned_01long_01_4.html +++ /dev/null @@ -1,332 +0,0 @@ - - - - - - - -Mozzi: Line< unsigned long > Class Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
Line< unsigned long > Class Reference
-
-
-

Detailed Description

-
-

Definition at line 255 of file Line.h.

-
- - - - - - - - - - - - - - - - -

-Public Member Functions

 Line ()
 Constructor. More...
 
unsigned long next ()
 Increments one step along the line. More...
 
void set (unsigned long value)
 Set the current value of the line. More...
 
void set (unsigned long targetvalue, unsigned long num_steps)
 Given a target value and the number of steps to take on the way, this calculates the step size needed to get there from the current value. More...
 
void set (unsigned long startvalue, unsigned long targetvalue, unsigned long num_steps)
 Given a new starting value, target value and the number of steps to take on the way, this sets the step size needed to get there. More...
 
-

Constructor & Destructor Documentation

- -

◆ Line()

- -
-
- - - - - -
- - - - - - - -
Line< unsigned long >::Line ()
-
-inline
-
- -

Constructor.

-

Use the template parameter to set the type of numbers you want to use. For example, Line <int> myline; makes a Line which uses ints.

- -

Definition at line 265 of file Line.h.

- -
-
-

Member Function Documentation

- -

◆ next()

- -
-
- - - - - -
- - - - - - - -
unsigned long Line< unsigned long >::next ()
-
-inline
-
- -

Increments one step along the line.

-
Returns
the next value.
- -

Definition at line 276 of file Line.h.

- -
-
- -

◆ set() [1/3]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void Line< unsigned long >::set (unsigned long startvalue,
unsigned long targetvalue,
unsigned long num_steps 
)
-
-inline
-
- -

Given a new starting value, target value and the number of steps to take on the way, this sets the step size needed to get there.

-
Parameters
- - - - -
startvaluethe number to set the Line's current_value to.
targetvaluethe value to move towards.
num_stepshow many steps to take to reach the target.
-
-
- -

Definition at line 313 of file Line.h.

- -
-
- -

◆ set() [2/3]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void Line< unsigned long >::set (unsigned long targetvalue,
unsigned long num_steps 
)
-
-inline
-
- -

Given a target value and the number of steps to take on the way, this calculates the step size needed to get there from the current value.

-
Parameters
- - - -
targetvaluethe value to move towards.
num_stepshow many steps to take to reach the target.
-
-
- -

Definition at line 302 of file Line.h.

- -
-
- -

◆ set() [3/3]

- -
-
- - - - - -
- - - - - - - - -
void Line< unsigned long >::set (unsigned long value)
-
-inline
-
- -

Set the current value of the line.

-

The Line will continue incrementing from this value using any previously calculated step size.

Parameters
- - -
valuethe number to set the Line's current_value to.
-
-
- -

Definition at line 290 of file Line.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/class_line_3_01unsigned_01long_01_4.js b/extras/doc/html/class_line_3_01unsigned_01long_01_4.js deleted file mode 100644 index a8e98ed7c..000000000 --- a/extras/doc/html/class_line_3_01unsigned_01long_01_4.js +++ /dev/null @@ -1,8 +0,0 @@ -var class_line_3_01unsigned_01long_01_4 = -[ - [ "Line", "class_line_3_01unsigned_01long_01_4.html#a797b2ebfe450971b6e75c26b1e6c88da", null ], - [ "next", "class_line_3_01unsigned_01long_01_4.html#a69f39cf62a30d001d50daf82f45f191b", null ], - [ "set", "class_line_3_01unsigned_01long_01_4.html#a199dd187d87c9941515b21aea0c52a0f", null ], - [ "set", "class_line_3_01unsigned_01long_01_4.html#abb89855ea745a453262cd2aeb31e2ec7", null ], - [ "set", "class_line_3_01unsigned_01long_01_4.html#abb246fabacbefbd6d88ddce719f74b0e", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/class_meta_oscil-members.html b/extras/doc/html/class_meta_oscil-members.html deleted file mode 100644 index ddc9ebfd4..000000000 --- a/extras/doc/html/class_meta_oscil-members.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL > Member List
-
-
- -

This is the complete list of members for MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >, including all inherited members.

- - - - - - - - - - - - - - - - - - - - - - -
atIndex(unsigned int index)MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >inline
getPhaseFractional()MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >inline
MetaOscil(Oscil< NUM_TABLE_CELLS, UPDATE_RATE > *first, T *... elements)MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >inline
MetaOscil() (defined in MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >)MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >inline
next()MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >inline
phaseIncFromFreq(int frequency)MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >inline
phMod(Q15n16 phmod_proportion)MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >inline
setCutoffFreq(int freq, byte rank)MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >inline
setCutoffFreqs(int first, T... elements)MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >inline
setCutoffFreqs() (defined in MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >)MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >inline
setFreq(int frequency, bool apply=true)MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >inline
setFreq(float frequency)MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >inline
setFreq(UFix< NI, NF, RANGE > frequency)MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >inline
setFreq_Q16n16(Q16n16 frequency)MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >inline
setFreq_Q24n8(Q24n8 frequency)MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >inline
setOscils(Oscil< NUM_TABLE_CELLS, UPDATE_RATE > *first, T... elements)MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >inline
setOscils() (defined in MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >)MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >inline
setPhase(unsigned int phase)MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >inline
setPhaseFractional(unsigned long phase)MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >inline
setPhaseInc(unsigned long phaseinc_fractional)MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >inline
setTable(const int8_t *TABLE_NAME, byte rank)MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >inline
-
- - - diff --git a/extras/doc/html/class_meta_oscil.html b/extras/doc/html/class_meta_oscil.html deleted file mode 100644 index 44acb6fb7..000000000 --- a/extras/doc/html/class_meta_oscil.html +++ /dev/null @@ -1,939 +0,0 @@ - - - - - - - -Mozzi: MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL > Class Template Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL > Class Template Reference
-
-
- -

MetaOscil is a wrapper for several Oscil. - More...

- -

#include <MetaOscil.h>

-

Detailed Description

-

template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE, byte N_OSCIL>
-class MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >

- -

MetaOscil is a wrapper for several Oscil.

-

Once constructed it will behave exactly as an Oscil except that it will automatically switch between Oscil depending on the asked frequency. This allows to produce non-aliased sounds by switching between tables with less and less harmonics as the frequency increases.

- -

Definition at line 32 of file MetaOscil.h.

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

template<class... T>
 MetaOscil (Oscil< NUM_TABLE_CELLS, UPDATE_RATE > *first, T *... elements)
 Constructor Declare a MetaOscil containing any number of Oscil pointers. More...
 
template<typename ... T>
void setOscils (Oscil< NUM_TABLE_CELLS, UPDATE_RATE > *first, T... elements)
 Set all Oscil of a MetaOscil. More...
 
-void setOscils ()
 
template<typename ... T>
void setCutoffFreqs (int first, T... elements)
 Set all the cutoff frequencies for changing between Oscil. More...
 
-void setCutoffFreqs ()
 
void setCutoffFreq (int freq, byte rank)
 Set or change the cutoff frequency of one Oscil. More...
 
int8_t next ()
 Updates the phase according to the current frequency and returns the sample at the new phase position. More...
 
void setTable (const int8_t *TABLE_NAME, byte rank)
 Change the sound table which will be played by the Oscil of rank. More...
 
void setPhase (unsigned int phase)
 Set the phase of the currently playing Oscil. More...
 
void setPhaseFractional (unsigned long phase)
 Set the phase of the currently playing Oscil in fractional format. More...
 
unsigned long getPhaseFractional ()
 Get the phase of the currently playin Oscil in fractional format. More...
 
int8_t phMod (Q15n16 phmod_proportion)
 Returns the next sample given a phase modulation value. More...
 
void setFreq (int frequency, bool apply=true)
 Set the MetaOsc frequency with an unsigned int. More...
 
void setFreq (float frequency)
 Set the MetaOsc frequency with a float. More...
 
template<int8_t NI, int8_t NF, uint64_t RANGE>
void setFreq (UFix< NI, NF, RANGE > frequency)
 Set the MetaOsc frequency with a UFix<NI,NF> fixed-point number format. More...
 
void setFreq_Q24n8 (Q24n8 frequency)
 Set the MetaOsc frequency with a Q24n8 fixed-point number format. More...
 
void setFreq_Q16n16 (Q16n16 frequency)
 Set the MetaOsc frequency with a Q16n16 fixed-point number format. More...
 
int8_t atIndex (unsigned int index)
 Returns the sample at the given table index of the current Oscil. More...
 
unsigned long phaseIncFromFreq (int frequency)
 phaseIncFromFreq() and setPhaseInc() are for saving processor time when sliding between frequencies. More...
 
void setPhaseInc (unsigned long phaseinc_fractional)
 Set a specific phase increment. More...
 
-

Constructor & Destructor Documentation

- -

◆ MetaOscil()

- -
-
-
-template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE, byte N_OSCIL>
-
-template<class... T>
- - - - - -
- - - - - - - - - - - - - - - - - - -
MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >::MetaOscil (Oscil< NUM_TABLE_CELLS, UPDATE_RATE > * first,
T *... elements 
)
-
-inline
-
- -

Constructor Declare a MetaOscil containing any number of Oscil pointers.

-

Every Oscil should have the same TABLE_NUM_CELLS and UPDATE_RATE which are also passed in the MetaOscil constructor.

Parameters
- - -
N_OSCILis the number of Oscil contained in the MetaOscil. This cannot be changed after construction.
-
-
- -

Definition at line 39 of file MetaOscil.h.

- -
-
-

Member Function Documentation

- -

◆ atIndex()

- -
-
-
-template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE, byte N_OSCIL>
- - - - - -
- - - - - - - - -
int8_t MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >::atIndex (unsigned int index)
-
-inline
-
- -

Returns the sample at the given table index of the current Oscil.

-
Parameters
- - -
indexbetween 0 and the table size.The index rolls back around to 0 if it's larger than the table size.
-
-
-
Returns
the sample at the given table index.
- -

Definition at line 218 of file MetaOscil.h.

- -
-
- -

◆ getPhaseFractional()

- -
-
-
-template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE, byte N_OSCIL>
- - - - - -
- - - - - - - -
unsigned long MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >::getPhaseFractional ()
-
-inline
-
- -

Get the phase of the currently playin Oscil in fractional format.

-
Returns
position in the wavetable, shifted left by OSCIL_F_BITS (which is 16 when this was written).
- -

Definition at line 115 of file MetaOscil.h.

- -
-
- -

◆ next()

- -
-
-
-template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE, byte N_OSCIL>
- - - - - -
- - - - - - - -
int8_t MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >::next ()
-
-inline
-
- -

Updates the phase according to the current frequency and returns the sample at the new phase position.

-
Returns
the next sample.
- -

Definition at line 94 of file MetaOscil.h.

- -
-
- -

◆ phaseIncFromFreq()

- -
-
-
-template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE, byte N_OSCIL>
- - - - - -
- - - - - - - - -
unsigned long MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >::phaseIncFromFreq (int frequency)
-
-inline
-
- -

phaseIncFromFreq() and setPhaseInc() are for saving processor time when sliding between frequencies.

-
Parameters
- - -
frequencyfor which you want to calculate a phase increment value.
-
-
-
Returns
the phase increment value which will produce a given frequency.
- -

Definition at line 225 of file MetaOscil.h.

- -
-
- -

◆ phMod()

- -
-
-
-template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE, byte N_OSCIL>
- - - - - -
- - - - - - - - -
int8_t MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >::phMod (Q15n16 phmod_proportion)
-
-inline
-
- -

Returns the next sample given a phase modulation value.

-
Parameters
- - -
phmod_proportiona phase modulation value given as a proportion of the wave. The phmod_proportion parameter is a Q15n16 fixed-point number where the fractional n16 part represents almost -1 to almost 1, modulating the phase by one whole table length in each direction.
-
-
-
Returns
a sample from the table.
- -

Definition at line 126 of file MetaOscil.h.

- -
-
- -

◆ setCutoffFreq()

- -
-
-
-template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE, byte N_OSCIL>
- - - - - -
- - - - - - - - - - - - - - - - - - -
void MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >::setCutoffFreq (int freq,
byte rank 
)
-
-inline
-
- -

Set or change the cutoff frequency of one Oscil.

-
Parameters
- - - -
rankis the rank of the Oscil.
freqis the cutoff frequency.
-
-
- -

Definition at line 85 of file MetaOscil.h.

- -
-
- -

◆ setCutoffFreqs()

- -
-
-
-template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE, byte N_OSCIL>
-
-template<typename ... T>
- - - - - -
- - - - - - - - - - - - - - - - - - -
void MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >::setCutoffFreqs (int first,
T... elements 
)
-
-inline
-
- -

Set all the cutoff frequencies for changing between Oscil.

-

They have to be sorted in increasing values and contain at least N_OSCIL-1 values. Note that the last Oscil will be used by default for frequencies higher than the higher cutoff, hence the last value can be discarded.

Parameters
- - -
first,elements...a set of int cutoff frequencies.
-
-
- -

Definition at line 72 of file MetaOscil.h.

- -
-
- -

◆ setFreq() [1/3]

- -
-
-
-template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE, byte N_OSCIL>
- - - - - -
- - - - - - - - -
void MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >::setFreq (float frequency)
-
-inline
-
- -

Set the MetaOsc frequency with a float.

-
Parameters
- - -
frequencyto play the wave table.
-
-
- -

Definition at line 171 of file MetaOscil.h.

- -
-
- -

◆ setFreq() [2/3]

- -
-
-
-template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE, byte N_OSCIL>
- - - - - -
- - - - - - - - - - - - - - - - - - -
void MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >::setFreq (int frequency,
bool apply = true 
)
-
-inline
-
- -

Set the MetaOsc frequency with an unsigned int.

-
Parameters
- - -
frequencyto play the wave table.
-
-
- -

Definition at line 132 of file MetaOscil.h.

- -
-
- -

◆ setFreq() [3/3]

- -
-
-
-template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE, byte N_OSCIL>
-
-template<int8_t NI, int8_t NF, uint64_t RANGE>
- - - - - -
- - - - - - - - -
void MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >::setFreq (UFix< NI, NF, RANGE > frequency)
-
-inline
-
- -

Set the MetaOsc frequency with a UFix<NI,NF> fixed-point number format.

-

This falls back to using UFix<16,16> internally and is provided as a fallout for other UFix types..

Parameters
- - -
frequencyto play the wave table.
-
-
- -

Definition at line 183 of file MetaOscil.h.

- -
-
- -

◆ setFreq_Q16n16()

- -
-
-
-template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE, byte N_OSCIL>
- - - - - -
- - - - - - - - -
void MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >::setFreq_Q16n16 (Q16n16 frequency)
-
-inline
-
- -

Set the MetaOsc frequency with a Q16n16 fixed-point number format.

-
Parameters
- - -
frequencyto play the wave table.
-
-
- -

Definition at line 205 of file MetaOscil.h.

- -
-
- -

◆ setFreq_Q24n8()

- -
-
-
-template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE, byte N_OSCIL>
- - - - - -
- - - - - - - - -
void MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >::setFreq_Q24n8 (Q24n8 frequency)
-
-inline
-
- -

Set the MetaOsc frequency with a Q24n8 fixed-point number format.

-
Parameters
- - -
frequencyto play the wave table.
-
-
- -

Definition at line 194 of file MetaOscil.h.

- -
-
- -

◆ setOscils()

- -
-
-
-template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE, byte N_OSCIL>
-
-template<typename ... T>
- - - - - -
- - - - - - - - - - - - - - - - - - -
void MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >::setOscils (Oscil< NUM_TABLE_CELLS, UPDATE_RATE > * first,
T... elements 
)
-
-inline
-
- -

Set all Oscil of a MetaOscil.

-
Parameters
- - -
first...is a list of pointers towards several Oscil
-
-
- -

Definition at line 58 of file MetaOscil.h.

- -
-
- -

◆ setPhase()

- -
-
-
-template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE, byte N_OSCIL>
- - - - - -
- - - - - - - - -
void MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >::setPhase (unsigned int phase)
-
-inline
-
- -

Set the phase of the currently playing Oscil.

-
Parameters
- - -
phasea position in the wavetable.
-
-
- -

Definition at line 104 of file MetaOscil.h.

- -
-
- -

◆ setPhaseFractional()

- -
-
-
-template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE, byte N_OSCIL>
- - - - - -
- - - - - - - - -
void MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >::setPhaseFractional (unsigned long phase)
-
-inline
-
- -

Set the phase of the currently playing Oscil in fractional format.

-
Parameters
- - -
phasea position in the wavetable.
-
-
- -

Definition at line 109 of file MetaOscil.h.

- -
-
- -

◆ setPhaseInc()

- -
-
-
-template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE, byte N_OSCIL>
- - - - - -
- - - - - - - - -
void MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >::setPhaseInc (unsigned long phaseinc_fractional)
-
-inline
-
- -

Set a specific phase increment.

-
Parameters
- - -
phaseinc_fractionala phase increment value as calculated by phaseIncFromFreq().
-
-
- -

Definition at line 231 of file MetaOscil.h.

- -
-
- -

◆ setTable()

- -
-
-
-template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE, byte N_OSCIL>
- - - - - -
- - - - - - - - - - - - - - - - - - -
void MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >::setTable (const int8_t * TABLE_NAME,
byte rank 
)
-
-inline
-
- -

Change the sound table which will be played by the Oscil of rank.

-
Parameters
- - - -
TABLE_NAMEis the name of the array in the table ".h" file you're using.
rankis the Oscil.
-
-
- -

Definition at line 99 of file MetaOscil.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/class_meta_oscil.js b/extras/doc/html/class_meta_oscil.js deleted file mode 100644 index 22903ba57..000000000 --- a/extras/doc/html/class_meta_oscil.js +++ /dev/null @@ -1,24 +0,0 @@ -var class_meta_oscil = -[ - [ "MetaOscil", "class_meta_oscil.html#a019b888e600142805c4bc5c71a6ddf17", null ], - [ "MetaOscil", "class_meta_oscil.html#a4216906e9233b737d50848bf268e55a2", null ], - [ "atIndex", "class_meta_oscil.html#ab74ebc6bde8fa15288df547c41e9206b", null ], - [ "getPhaseFractional", "class_meta_oscil.html#a20f0dcb30669eee21bfaa237f038c35d", null ], - [ "next", "class_meta_oscil.html#aab97eb27e23213506c608ce459d00f3d", null ], - [ "phaseIncFromFreq", "class_meta_oscil.html#af5f9994295116d5684e2ab4980f14511", null ], - [ "phMod", "class_meta_oscil.html#abb81b942124212b2f7a99b9ce2bd2a39", null ], - [ "setCutoffFreq", "class_meta_oscil.html#aceb617c02ea3a693a8ec48b32247a355", null ], - [ "setCutoffFreqs", "class_meta_oscil.html#a9309def78e90d419d569b0acd9a80bf3", null ], - [ "setCutoffFreqs", "class_meta_oscil.html#a7567da1ff25347c8d44fad66efe28af1", null ], - [ "setFreq", "class_meta_oscil.html#a3a1bf4af017c5c39d736f78d3c3e1bee", null ], - [ "setFreq", "class_meta_oscil.html#a1960b7c4012424058876085c76d1dfd9", null ], - [ "setFreq", "class_meta_oscil.html#aafb4c01a8ce6b4d880fd1ecf59bd3bfd", null ], - [ "setFreq_Q16n16", "class_meta_oscil.html#a98794f84684b257079e79bd9f92d0892", null ], - [ "setFreq_Q24n8", "class_meta_oscil.html#adcadf4935c390cd8d2eea9623365bf70", null ], - [ "setOscils", "class_meta_oscil.html#afb893462be24c907f87bc6ee05595475", null ], - [ "setOscils", "class_meta_oscil.html#a3390f39fbaa06276398624bd14a639ad", null ], - [ "setPhase", "class_meta_oscil.html#a889ea6de8595838ef735f8237a0abc51", null ], - [ "setPhaseFractional", "class_meta_oscil.html#ab3c61548e9b48714d1e0900532e99408", null ], - [ "setPhaseInc", "class_meta_oscil.html#a3bed37fc800a93ff95af445d25eaf57d", null ], - [ "setTable", "class_meta_oscil.html#afa39a5e42b7f82619ca1b898bdafced5", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/class_metronome-members.html b/extras/doc/html/class_metronome-members.html deleted file mode 100644 index 7d6bae025..000000000 --- a/extras/doc/html/class_metronome-members.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Metronome Member List
-
-
- -

This is the complete list of members for Metronome, including all inherited members.

- - - - - - - - - - - -
deadline (defined in EventDelay)EventDelayprotected
EventDelay(unsigned int delay_milliseconds=0)EventDelayinline
Metronome(unsigned int delay_milliseconds=0)Metronomeinline
ready()Metronomeinline
set(unsigned int delay_milliseconds)EventDelayinline
setBPM(float bpm)Metronomeinline
start()Metronomeinline
start(unsigned int delay_milliseconds)Metronomeinline
stop() (defined in Metronome)Metronomeinline
ticks (defined in EventDelay)EventDelayprotected
-
- - - diff --git a/extras/doc/html/class_metronome.html b/extras/doc/html/class_metronome.html deleted file mode 100644 index a5426eb49..000000000 --- a/extras/doc/html/class_metronome.html +++ /dev/null @@ -1,374 +0,0 @@ - - - - - - - -Mozzi: Metronome Class Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
Metronome Class Reference
-
-
- -

A metronome class which is like an EventDelay which retriggers itself when the delay time is up, to produce a repeating beat. - More...

- -

#include <Metronome.h>

-
- + Inheritance diagram for Metronome:
-
-
- -

Detailed Description

-

A metronome class which is like an EventDelay which retriggers itself when the delay time is up, to produce a repeating beat.

-

Metronome can be set() to a number of milliseconds, then after calling start(), ready() will return true when the time is up.
- Alternatively, start(milliseconds) will call set() and start() together. This is called Metronome to avoid conflict with the Arduino Metro library.

- -

Definition at line 23 of file Metronome.h.

-
- - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 Metronome (unsigned int delay_milliseconds=0)
 Constructor. More...
 
void start ()
 Start the metronome. More...
 
void start (unsigned int delay_milliseconds)
 Set the time between beats and start the metronome. More...
 
void setBPM (float bpm)
 Set the beats per minute. More...
 
bool ready ()
 Call this in updateControl() or updateAudio() to check if it is time for a beat. More...
 
-void stop ()
 
void set (unsigned int delay_milliseconds)
 Set the delay time. More...
 
- - - - - -

-Protected Attributes

-unsigned long deadline
 
-unsigned long ticks
 
-

Constructor & Destructor Documentation

- -

◆ Metronome()

- -
-
- - - - - -
- - - - - - - - -
Metronome::Metronome (unsigned int delay_milliseconds = 0)
-
-inline
-
- -

Constructor.

-

Declare a Metronome object.

Parameters
- - -
delay_millisecondshow long between each occasion when ready() returns true.
-
-
- -

Definition at line 32 of file Metronome.h.

- -
-
-

Member Function Documentation

- -

◆ ready()

- -
-
- - - - - -
- - - - - - - -
bool Metronome::ready ()
-
-inline
-
- -

Call this in updateControl() or updateAudio() to check if it is time for a beat.

-
Returns
true if the time for one is up.
- -

Definition at line 76 of file Metronome.h.

- -
-
- -

◆ set()

- -
-
- - - - - -
- - - - - - - - -
void EventDelay::set (unsigned int delay_milliseconds)
-
-inlineinherited
-
- -

Set the delay time.

-

This setting is persistent, until you change it by using set() again.

Parameters
- - -
delay_millisecondsdelay time in milliseconds.
-
-
-
Note
timing: 12us
- -

Definition at line 40 of file EventDelay.h.

- -
-
- -

◆ setBPM()

- -
-
- - - - - -
- - - - - - - - -
void Metronome::setBPM (float bpm)
-
-inline
-
- -

Set the beats per minute.

-
Parameters
- - -
bpmbeats per minute
-
-
- -

Definition at line 64 of file Metronome.h.

- -
-
- -

◆ start() [1/2]

- -
-
- - - - - -
- - - - - - - -
void Metronome::start ()
-
-inline
-
- -

Start the metronome.

- -

Definition at line 41 of file Metronome.h.

- -
-
- -

◆ start() [2/2]

- -
-
- - - - - -
- - - - - - - - -
void Metronome::start (unsigned int delay_milliseconds)
-
-inline
-
- -

Set the time between beats and start the metronome.

-
Parameters
- - -
delay_millisecondsdelay time in milliseconds.
-
-
- -

Definition at line 52 of file Metronome.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/class_metronome.js b/extras/doc/html/class_metronome.js deleted file mode 100644 index 44049dbad..000000000 --- a/extras/doc/html/class_metronome.js +++ /dev/null @@ -1,12 +0,0 @@ -var class_metronome = -[ - [ "Metronome", "class_metronome.html#a37e8b0aa5a9aa8fa0f33212360cc0928", null ], - [ "ready", "class_metronome.html#adc67bd96eac9f9b9260f8b070b7db75f", null ], - [ "set", "class_metronome.html#a937c86f3b05ccb6138ff7927713820da", null ], - [ "setBPM", "class_metronome.html#aab384673719ebd552dd72d474ed58556", null ], - [ "start", "class_metronome.html#ab85d2f5bdc5cb00d5056b0c2c6eed987", null ], - [ "start", "class_metronome.html#ad5670c748042846b02cb33c613c50422", null ], - [ "stop", "class_metronome.html#a6d77db8aafda48abf3f2a91b9d898ad7", null ], - [ "deadline", "class_metronome.html#aa0b0ae903260675eded72ad071b5d564", null ], - [ "ticks", "class_metronome.html#a6e8230d6e291a8c23ebdb1704caabb5d", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/class_metronome.png b/extras/doc/html/class_metronome.png deleted file mode 100644 index 2be16d827..000000000 Binary files a/extras/doc/html/class_metronome.png and /dev/null differ diff --git a/extras/doc/html/class_midi_to_freq_private-members.html b/extras/doc/html/class_midi_to_freq_private-members.html deleted file mode 100644 index d149d2879..000000000 --- a/extras/doc/html/class_midi_to_freq_private-members.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
MidiToFreqPrivate Member List
-
-
- -

This is the complete list of members for MidiToFreqPrivate, including all inherited members.

- - - - - - -
mtof(uint8_t)MidiToFreqPrivatefriend
mtof(int)MidiToFreqPrivatefriend
mtof(UFix< NI, 0, RANGE >)MidiToFreqPrivatefriend
mtof(SFix< NI, 0, RANGE >)MidiToFreqPrivatefriend
Q16n16_mtof(Q16n16)MidiToFreqPrivatefriend
-
- - - diff --git a/extras/doc/html/class_midi_to_freq_private.html b/extras/doc/html/class_midi_to_freq_private.html deleted file mode 100644 index 1345b57f2..000000000 --- a/extras/doc/html/class_midi_to_freq_private.html +++ /dev/null @@ -1,258 +0,0 @@ - - - - - - - -Mozzi: MidiToFreqPrivate Class Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
MidiToFreqPrivate Class Reference
-
-
- -

Internal. - More...

- -

#include <mozzi_midi.h>

-

Detailed Description

-

Internal.

-

Do not use in your sketches.

-

Internal helper class. Not intended for use in your sketches, and details may change without notic.

- -

Definition at line 23 of file mozzi_midi.h.

-
- - - - - - - - - - - - - - - - - - -

-Friends

int mtof (uint8_t)
 A good choice if you're using whole note values, want speed and simplicity, and accuracy isn't important. More...
 
int mtof (int)
 A good choice if you're using whole note values, want speed and simplicity, and accuracy isn't important. More...
 
Q16n16 Q16n16_mtof (Q16n16)
 Converts midi note number to frequency with speed and accuracy. More...
 
-template<int8_t NI, uint64_t RANGE>
UFix< 16, 16 > mtof (UFix< NI, 0, RANGE >)
 Converts whole midi note number with speed and accuracy (more accurate that mtof(uint8_t))
 
-template<int8_t NI, uint64_t RANGE>
UFix< 16, 16 > mtof (SFix< NI, 0, RANGE >)
 Converts whole midi note number with speed and accuracy (more accurate that mtof(uint8_t))
 
-

Friends And Related Function Documentation

- -

◆ mtof [1/2]

- -
-
- - - - - -
- - - - - - - - -
int mtof (int midi_note)
-
-friend
-
- -

A good choice if you're using whole note values, want speed and simplicity, and accuracy isn't important.

-
Parameters
- - -
midi_notea midi note number.
-
-
-
Returns
an integer approximation of the midi note's frequency.
- -

Definition at line 102 of file mozzi_midi.h.

- -
-
- -

◆ mtof [2/2]

- -
-
- - - - - -
- - - - - - - - -
int mtof (uint8_t midi_note)
-
-friend
-
- -

A good choice if you're using whole note values, want speed and simplicity, and accuracy isn't important.

-
Parameters
- - -
midi_notea midi note number.
-
-
-
Returns
an integer approximation of the midi note's frequency.
- -

Definition at line 93 of file mozzi_midi.h.

- -
-
- -

◆ Q16n16_mtof

- -
-
- - - - - -
- - - - - - - - -
Q16n16 Q16n16_mtof (Q16n16 midival_fractional)
-
-friend
-
- -

Converts midi note number to frequency with speed and accuracy.

-

Q16n16_mtofLookup() is a fast alternative to (float) mtof(), and more accurate than (uint8_t) mtof(), using Q16n16 fixed-point format instead of floats or uint8_t values. Q16n16_mtof() uses cheap linear interpolation between whole midi-note frequency equivalents stored in a lookup table, so is less accurate than the float version, mtof(), for non-whole midi values.

Note
Timing: ~8 us.
-
Parameters
- - -
midival_fractionala midi note number in Q16n16 format, for fractional values.
-
-
-
Returns
the frequency represented by the input midi note number, in Q16n16 fixed point fractional integer format, where the lower word is a fractional value.
- -

Definition at line 119 of file mozzi_midi.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/class_midi_to_freq_private.js b/extras/doc/html/class_midi_to_freq_private.js deleted file mode 100644 index 105d5a0f6..000000000 --- a/extras/doc/html/class_midi_to_freq_private.js +++ /dev/null @@ -1,8 +0,0 @@ -var class_midi_to_freq_private = -[ - [ "mtof", "class_midi_to_freq_private.html#a96a4f95a5703e79f79ddd23161eaa7a3", null ], - [ "mtof", "class_midi_to_freq_private.html#afa91fff6f63c1482d811b5a52d4009ec", null ], - [ "mtof", "class_midi_to_freq_private.html#ad7f7fa97f0b39d844758172d2e9d657b", null ], - [ "mtof", "class_midi_to_freq_private.html#ac8580918bc8c8e2ae9600668291dda41", null ], - [ "Q16n16_mtof", "class_midi_to_freq_private.html#a84543eb6614218d9fee74b960b8a7644", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/class_mozzi_private_1_1_midi_to_freq-members.html b/extras/doc/html/class_mozzi_private_1_1_midi_to_freq-members.html deleted file mode 100644 index 446303c63..000000000 --- a/extras/doc/html/class_mozzi_private_1_1_midi_to_freq-members.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
MozziPrivate::MidiToFreq Member List
-
-
- -

This is the complete list of members for MozziPrivate::MidiToFreq, including all inherited members.

- - - - - - -
mtof(uint8_t)MozziPrivate::MidiToFreqfriend
mtof(int)MozziPrivate::MidiToFreqfriend
mtof(UFix< NI, 0, RANGE >)MozziPrivate::MidiToFreqfriend
mtof(SFix< NI, 0, RANGE >)MozziPrivate::MidiToFreqfriend
Q16n16_mtof(Q16n16)MozziPrivate::MidiToFreqfriend
-
- - - diff --git a/extras/doc/html/class_mozzi_private_1_1_midi_to_freq.html b/extras/doc/html/class_mozzi_private_1_1_midi_to_freq.html deleted file mode 100644 index 4c0a3b1a9..000000000 --- a/extras/doc/html/class_mozzi_private_1_1_midi_to_freq.html +++ /dev/null @@ -1,258 +0,0 @@ - - - - - - - -Mozzi: MozziPrivate::MidiToFreq Class Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
MozziPrivate::MidiToFreq Class Reference
-
-
- -

Internal. - More...

- -

#include <mozzi_midi.h>

-

Detailed Description

-

Internal.

-

Do not use in your sketches.

-

Internal helper class. Not intended for use in your sketches, and details may change without notic.

- -

Definition at line 25 of file mozzi_midi.h.

-
- - - - - - - - - - - - - - - - - - -

-Friends

int mtof (uint8_t)
 A good choice if you're using whole note values, want speed and simplicity, and accuracy isn't important. More...
 
int mtof (int)
 A good choice if you're using whole note values, want speed and simplicity, and accuracy isn't important. More...
 
Q16n16 Q16n16_mtof (Q16n16)
 Converts midi note number to frequency with speed and accuracy. More...
 
-template<int8_t NI, uint64_t RANGE>
UFix< 16, 16 > mtof (UFix< NI, 0, RANGE >)
 Converts whole midi note number with speed and accuracy (more accurate that mtof(uint8_t))
 
-template<int8_t NI, uint64_t RANGE>
UFix< 16, 16 > mtof (SFix< NI, 0, RANGE >)
 Converts whole midi note number with speed and accuracy (more accurate that mtof(uint8_t))
 
-

Friends And Related Function Documentation

- -

◆ mtof [1/2]

- -
-
- - - - - -
- - - - - - - - -
int mtof (int midi_note)
-
-friend
-
- -

A good choice if you're using whole note values, want speed and simplicity, and accuracy isn't important.

-
Parameters
- - -
midi_notea midi note number.
-
-
-
Returns
an integer approximation of the midi note's frequency.
- -

Definition at line 105 of file mozzi_midi.h.

- -
-
- -

◆ mtof [2/2]

- -
-
- - - - - -
- - - - - - - - -
int mtof (uint8_t midi_note)
-
-friend
-
- -

A good choice if you're using whole note values, want speed and simplicity, and accuracy isn't important.

-
Parameters
- - -
midi_notea midi note number.
-
-
-
Returns
an integer approximation of the midi note's frequency.
- -

Definition at line 96 of file mozzi_midi.h.

- -
-
- -

◆ Q16n16_mtof

- -
-
- - - - - -
- - - - - - - - -
Q16n16 Q16n16_mtof (Q16n16 midival_fractional)
-
-friend
-
- -

Converts midi note number to frequency with speed and accuracy.

-

Q16n16_mtofLookup() is a fast alternative to (float) mtof(), and more accurate than (uint8_t) mtof(), using Q16n16 fixed-point format instead of floats or uint8_t values. Q16n16_mtof() uses cheap linear interpolation between whole midi-note frequency equivalents stored in a lookup table, so is less accurate than the float version, mtof(), for non-whole midi values.

Note
Timing: ~8 us.
-
Parameters
- - -
midival_fractionala midi note number in Q16n16 format, for fractional values.
-
-
-
Returns
the frequency represented by the input midi note number, in Q16n16 fixed point fractional integer format, where the lower word is a fractional value.
- -

Definition at line 122 of file mozzi_midi.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/class_mozzi_private_1_1_midi_to_freq.js b/extras/doc/html/class_mozzi_private_1_1_midi_to_freq.js deleted file mode 100644 index fbfb68f87..000000000 --- a/extras/doc/html/class_mozzi_private_1_1_midi_to_freq.js +++ /dev/null @@ -1,8 +0,0 @@ -var class_mozzi_private_1_1_midi_to_freq = -[ - [ "mtof", "class_mozzi_private_1_1_midi_to_freq.html#a96a4f95a5703e79f79ddd23161eaa7a3", null ], - [ "mtof", "class_mozzi_private_1_1_midi_to_freq.html#afa91fff6f63c1482d811b5a52d4009ec", null ], - [ "mtof", "class_mozzi_private_1_1_midi_to_freq.html#ad7f7fa97f0b39d844758172d2e9d657b", null ], - [ "mtof", "class_mozzi_private_1_1_midi_to_freq.html#ac8580918bc8c8e2ae9600668291dda41", null ], - [ "Q16n16_mtof", "class_mozzi_private_1_1_midi_to_freq.html#a84543eb6614218d9fee74b960b8a7644", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/class_mozzi_private_1_1_mozzi_rand_private-members.html b/extras/doc/html/class_mozzi_private_1_1_mozzi_rand_private-members.html deleted file mode 100644 index 88485562f..000000000 --- a/extras/doc/html/class_mozzi_private_1_1_mozzi_rand_private-members.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
MozziPrivate::MozziRandPrivate Member List
-
-
- -

This is the complete list of members for MozziPrivate::MozziRandPrivate, including all inherited members.

- - - - - - -
autoSeed() (defined in MozziPrivate::MozziRandPrivate)MozziPrivate::MozziRandPrivatestatic
randSeed()MozziPrivate::MozziRandPrivatefriend
randSeed(uint32_t)MozziPrivate::MozziRandPrivatefriend
xorshift96()MozziPrivate::MozziRandPrivatefriend
xorshift96() (defined in MozziPrivate::MozziRandPrivate)MozziPrivate::MozziRandPrivateinlinestatic
-
- - - diff --git a/extras/doc/html/class_mozzi_private_1_1_mozzi_rand_private.html b/extras/doc/html/class_mozzi_private_1_1_mozzi_rand_private.html deleted file mode 100644 index 5279b89ef..000000000 --- a/extras/doc/html/class_mozzi_private_1_1_mozzi_rand_private.html +++ /dev/null @@ -1,235 +0,0 @@ - - - - - - - -Mozzi: MozziPrivate::MozziRandPrivate Class Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
MozziPrivate::MozziRandPrivate Class Reference
-
-
-

Detailed Description

-
-

Definition at line 17 of file mozzi_rand_p.h.

-
- - - - - -

-Static Public Member Functions

-static uint32_t xorshift96 ()
 
-static void autoSeed ()
 
- - - - - - - - - - -

-Friends

void randSeed ()
 Initialises Mozzi's (pseudo)random number generator xorshift96(), which is used in Mozzi's rand() function. More...
 
void randSeed (uint32_t)
 Initialises Mozzi's (pseudo)random number generator xorshift96(), which is used in Mozzi's rand() function. More...
 
uint32_t xorshift96 ()
 Random number generator. More...
 
-

Friends And Related Function Documentation

- -

◆ randSeed [1/2]

- -
-
- - - - - -
- - - - - - - -
void randSeed ()
-
-friend
-
- -

Initialises Mozzi's (pseudo)random number generator xorshift96(), which is used in Mozzi's rand() function.

-

This can be useful if you want random sequences to be different on each run of a sketch, by seeding with a fairly random input. randSeed() called without a parameter uses noise from reading the Arduino's internal temperature as the seed, a technique discussed at http://arduino.cc/forum/index.php/topic,38091.0.html, borrowing code put there by Rob Tillaart.

-
Note
Intialization of the random seed is done differently on different MCUs, but is nowhere near perfect for most (and for some it is not even implemented at all). Many implementations (e.g. on AVR, STM32) simply rely on reading a (hopefully noisy) internal temperature sensor. You will often get better results by calling analogRead() - not mozziAnalogRead(0), in this case! - on one or two floating (non-connected) analog pins.
- -

Definition at line 59 of file mozzi_rand.h.

- -
-
- -

◆ randSeed [2/2]

- -
-
- - - - - -
- - - - - - - - -
void randSeed (uint32_t seed)
-
-friend
-
- -

Initialises Mozzi's (pseudo)random number generator xorshift96(), which is used in Mozzi's rand() function.

-

This can be useful if you want random sequences to be different on each run of a sketch, by seeding with fairly random input, such as analogRead() on an unconnected pin (as explained in the Arduino documentation for randomSeed(). randSeed is the same as xorshift96Seed(), but easier to remember.

Parameters
- - -
seeda number to use as a seed.
-
-
- -

Definition at line 43 of file mozzi_rand_p.h.

- -
-
- -

◆ xorshift96

- -
-
- - - - - -
- - - - - - - -
uint32_t xorshift96 ()
-
-friend
-
- -

Random number generator.

-

A faster replacement for Arduino's random function, which is too slow to use with Mozzi. Based on Marsaglia, George. (2003). Xorshift RNGs. http://www.jstatsoft.org/v08/i14/xorshift.pdf

Returns
a random 32 bit integer.
- -

Definition at line 30 of file mozzi_rand.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/class_mozzi_private_1_1_mozzi_rand_private.js b/extras/doc/html/class_mozzi_private_1_1_mozzi_rand_private.js deleted file mode 100644 index 72490ff2b..000000000 --- a/extras/doc/html/class_mozzi_private_1_1_mozzi_rand_private.js +++ /dev/null @@ -1,6 +0,0 @@ -var class_mozzi_private_1_1_mozzi_rand_private = -[ - [ "randSeed", "class_mozzi_private_1_1_mozzi_rand_private.html#a83ff6b4e38c84713e0d67aa1ec06af66", null ], - [ "randSeed", "class_mozzi_private_1_1_mozzi_rand_private.html#a4647c5989e5cf1ada9d952d5eb943d13", null ], - [ "xorshift96", "class_mozzi_private_1_1_mozzi_rand_private.html#a68ed69ece800f0c1e5819c05aed8d398", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/class_multi_resonant_filter-members.html b/extras/doc/html/class_multi_resonant_filter-members.html deleted file mode 100644 index 20f226eb0..000000000 --- a/extras/doc/html/class_multi_resonant_filter-members.html +++ /dev/null @@ -1,136 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
MultiResonantFilter< su > Member List
-
-
- -

This is the complete list of members for MultiResonantFilter< su >, including all inherited members.

- - - - - - - - - - - - - - - - - - - - - - - - - - -
advanceBuffers(AudioOutputStorage_t in) (defined in ResonantFilter< LOWPASS, uint8_t >)ResonantFilter< LOWPASS, uint8_t >inlineprotected
band()MultiResonantFilter< su >inline
buf0 (defined in ResonantFilter< LOWPASS, uint8_t >)ResonantFilter< LOWPASS, uint8_t >protected
buf1 (defined in ResonantFilter< LOWPASS, uint8_t >)ResonantFilter< LOWPASS, uint8_t >protected
current(AudioOutputStorage_t in, Int2Type< LOWPASS >) (defined in ResonantFilter< LOWPASS, uint8_t >)ResonantFilter< LOWPASS, uint8_t >inlineprotected
current(AudioOutputStorage_t in, Int2Type< HIGHPASS >) (defined in ResonantFilter< LOWPASS, uint8_t >)ResonantFilter< LOWPASS, uint8_t >inlineprotected
current(AudioOutputStorage_t in, Int2Type< BANDPASS >) (defined in ResonantFilter< LOWPASS, uint8_t >)ResonantFilter< LOWPASS, uint8_t >inlineprotected
current(AudioOutputStorage_t in, Int2Type< NOTCH >) (defined in ResonantFilter< LOWPASS, uint8_t >)ResonantFilter< LOWPASS, uint8_t >inlineprotected
f (defined in ResonantFilter< LOWPASS, uint8_t >)ResonantFilter< LOWPASS, uint8_t >protected
fb (defined in ResonantFilter< LOWPASS, uint8_t >)ResonantFilter< LOWPASS, uint8_t >protected
FX_SHIFT (defined in ResonantFilter< LOWPASS, uint8_t >)ResonantFilter< LOWPASS, uint8_t >protected
FX_SHIFT_M_1 (defined in ResonantFilter< LOWPASS, uint8_t >)ResonantFilter< LOWPASS, uint8_t >protected
fxmul(typename IntegerType< sizeof(AudioOutputStorage_t)+sizeof(AudioOutputStorage_t)>::signed_type a, typename IntegerType< sizeof(AudioOutputStorage_t)+sizeof(uint8_t) -1 >::signed_type b) (defined in ResonantFilter< LOWPASS, uint8_t >)ResonantFilter< LOWPASS, uint8_t >inlineprotected
high()MultiResonantFilter< su >inline
ifxmul(typename IntegerType< sizeof(AudioOutputStorage_t)+sizeof(uint8_t) -1 >::signed_type a, uint8_t b) (defined in ResonantFilter< LOWPASS, uint8_t >)ResonantFilter< LOWPASS, uint8_t >inlineprotected
low()MultiResonantFilter< su >inline
next(AudioOutputStorage_t in)MultiResonantFilter< su >inline
notch()MultiResonantFilter< su >inline
q (defined in ResonantFilter< LOWPASS, uint8_t >)ResonantFilter< LOWPASS, uint8_t >protected
ResonantFilter()ResonantFilter< LOWPASS, uint8_t >inline
setCutoffFreq(uint8_t cutoff)ResonantFilter< LOWPASS, uint8_t >inline
setCutoffFreqAndResonance(uint8_t cutoff, uint8_t resonance)ResonantFilter< LOWPASS, uint8_t >inline
setResonance(uint8_t resonance)ResonantFilter< LOWPASS, uint8_t >inline
SHIFTED_1 (defined in ResonantFilter< LOWPASS, uint8_t >)ResonantFilter< LOWPASS, uint8_t >protected
ucfxmul(uint8_t a, typename IntegerType< sizeof(uint8_t)+sizeof(uint8_t)>::unsigned_type b) (defined in ResonantFilter< LOWPASS, uint8_t >)ResonantFilter< LOWPASS, uint8_t >inlineprotected
-
- - - diff --git a/extras/doc/html/class_multi_resonant_filter.html b/extras/doc/html/class_multi_resonant_filter.html deleted file mode 100644 index 2448e3353..000000000 --- a/extras/doc/html/class_multi_resonant_filter.html +++ /dev/null @@ -1,508 +0,0 @@ - - - - - - - -Mozzi: MultiResonantFilter< su > Class Template Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
MultiResonantFilter< su > Class Template Reference
-
-
- -

A generic filter for audio signals that can produce lowpass, highpass, bandpass and notch outputs at runtime. - More...

- -

#include <ResonantFilter.h>

-
- + Inheritance diagram for MultiResonantFilter< su >:
-
-
- -

Detailed Description

-

template<typename su = uint8_t>
-class MultiResonantFilter< su >

- -

A generic filter for audio signals that can produce lowpass, highpass, bandpass and notch outputs at runtime.

-

Behaves like ResonantFilter for setting the resonance and cutoff frequency. Like ResonantFilter, it can be used on different sample sizes: MultiResonantFilter<uint8_t> and MultiResonantFilter<uint16_t> have been tested. For the former, both cutoff and resonance are uint8_t, hence between 0-255. For the later, both cutoff and resonance are uint16_t, hence between 0-65535.

- -

Definition at line 184 of file ResonantFilter.h.

-
- - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

void next (AudioOutputStorage_t in)
 Compute the filters, given an input signal. More...
 
AudioOutputStorage_t low ()
 Return the input filtered with a lowpass filter. More...
 
AudioOutputStorage_t high ()
 Return the input filtered with a highpass filter. More...
 
AudioOutputStorage_t band ()
 Return the input filtered with a bandpass filter. More...
 
AudioOutputStorage_t notch ()
 Return the input filtered with a notch filter. More...
 
void setCutoffFreq (uint8_t cutoff)
 deprecated. More...
 
void setResonance (uint8_t resonance)
 deprecated. More...
 
void setCutoffFreqAndResonance (uint8_t cutoff, uint8_t resonance)
 Set the cut off frequency and resonance. More...
 
- - - - - - - - - - - - - - - - - -

-Protected Member Functions

-void advanceBuffers (AudioOutputStorage_t in)
 
-AudioOutputStorage_t current (AudioOutputStorage_t in, Int2Type< LOWPASS >)
 
-AudioOutputStorage_t current (AudioOutputStorage_t in, Int2Type< HIGHPASS >)
 
-AudioOutputStorage_t current (AudioOutputStorage_t in, Int2Type< BANDPASS >)
 
-AudioOutputStorage_t current (AudioOutputStorage_t in, Int2Type< NOTCH >)
 
-IntegerType< sizeof(uint8_t)+sizeof(uint8_t)>::unsigned_type ucfxmul (uint8_t a, typename IntegerType< sizeof(uint8_t)+sizeof(uint8_t)>::unsigned_type b)
 
-IntegerType< sizeof(AudioOutputStorage_t)+sizeof(uint8_t) -1 >::signed_type ifxmul (typename IntegerType< sizeof(AudioOutputStorage_t)+sizeof(uint8_t) -1 >::signed_type a, uint8_t b)
 
-IntegerType< sizeof(AudioOutputStorage_t)+sizeof(AudioOutputStorage_t)>::signed_type fxmul (typename IntegerType< sizeof(AudioOutputStorage_t)+sizeof(AudioOutputStorage_t)>::signed_type a, typename IntegerType< sizeof(AudioOutputStorage_t)+sizeof(uint8_t) -1 >::signed_type b)
 
- - - - - - - - - - - - - - - - - -

-Protected Attributes

-uint8_t q
 
-uint8_t f
 
-IntegerType< sizeof(uint8_t)+sizeof(uint8_t)>::unsigned_type fb
 
-AudioOutputStorage_t buf0
 
-AudioOutputStorage_t buf1
 
-const uint8_t FX_SHIFT
 
-const uint8_t FX_SHIFT_M_1
 
-const uint8_t SHIFTED_1
 
-

Member Function Documentation

- -

◆ band()

- -
-
-
-template<typename su = uint8_t>
- - - - - -
- - - - - - - -
AudioOutputStorage_t MultiResonantFilter< su >::band ()
-
-inline
-
- -

Return the input filtered with a bandpass filter.

-
Returns
the filtered signal output.
- -

Definition at line 206 of file ResonantFilter.h.

- -
-
- -

◆ high()

- -
-
-
-template<typename su = uint8_t>
- - - - - -
- - - - - - - -
AudioOutputStorage_t MultiResonantFilter< su >::high ()
-
-inline
-
- -

Return the input filtered with a highpass filter.

-
Returns
the filtered signal output.
- -

Definition at line 202 of file ResonantFilter.h.

- -
-
- -

◆ low()

- -
-
-
-template<typename su = uint8_t>
- - - - - -
- - - - - - - -
AudioOutputStorage_t MultiResonantFilter< su >::low ()
-
-inline
-
- -

Return the input filtered with a lowpass filter.

-
Returns
the filtered signal output.
- -

Definition at line 198 of file ResonantFilter.h.

- -
-
- -

◆ next()

- -
-
-
-template<typename su = uint8_t>
- - - - - -
- - - - - - - - -
void MultiResonantFilter< su >::next (AudioOutputStorage_t in)
-
-inline
-
- -

Compute the filters, given an input signal.

-
Parameters
- - -
inthe signal input. Should not be more than 8bits on 8bits platforms (Arduino) if using the 8bits version and not 16bits version.
-
-
- -

Definition at line 190 of file ResonantFilter.h.

- -
-
- -

◆ notch()

- -
-
-
-template<typename su = uint8_t>
- - - - - -
- - - - - - - -
AudioOutputStorage_t MultiResonantFilter< su >::notch ()
-
-inline
-
- -

Return the input filtered with a notch filter.

-
Returns
the filtered signal output.
- -

Definition at line 210 of file ResonantFilter.h.

- -
-
- -

◆ setCutoffFreq()

- -
-
- - - - - -
- - - - - - - - -
void ResonantFilter< FILTER_TYPE, uint8_t >::setCutoffFreq (uint8_t cutoff)
-
-inlineinherited
-
- -

deprecated.

-

Use setCutoffFreqAndResonance(su cutoff, su resonance).

-

Set the cut off frequency,

Parameters
- - -
cutoffuse the range 0-255 to represent 0-8191 Hz (MOZZI_AUDIO_RATE/2) for ResonantFilter, cutoff use the range 0-65535 to represent 0-MOZZI_AUDIO_RATE/2. Be careful of distortion at the lower end, especially with high resonance.
-
-
- -

Definition at line 91 of file ResonantFilter.h.

- -
-
- -

◆ setCutoffFreqAndResonance()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void ResonantFilter< FILTER_TYPE, uint8_t >::setCutoffFreqAndResonance (uint8_t cutoff,
uint8_t resonance 
)
-
-inlineinherited
-
- -

Set the cut off frequency and resonance.

-

Replaces setCutoffFreq() and setResonance(). (Because the internal calculations need to be done whenever either parameter changes.)

Parameters
- - - -
cutoffrange 0-255 represents 0-8191 Hz (MOZZI_AUDIO_RATE/2) for ResonantFilter, range 0-65535 for ResonantFilter16 Be careful of distortion at the lower end, especially with high resonance.
resonancerange 0-255 for ResonantFilter, 0-65535 for ResonantFilter<FILTER_TYPE, uint16_t>, 255/65535 is most resonant.
-
-
- -

Definition at line 114 of file ResonantFilter.h.

- -
-
- -

◆ setResonance()

- -
-
- - - - - -
- - - - - - - - -
void ResonantFilter< FILTER_TYPE, uint8_t >::setResonance (uint8_t resonance)
-
-inlineinherited
-
- -

deprecated.

-

Use setCutoffFreqAndResonance(su cutoff, su resonance).

-

Set the resonance. If you hear unwanted distortion, back off the resonance. After setting resonance, you need to call setCuttoffFreq() to hear the change!

Parameters
- - -
resonancein the range 0-255 for ResonantFilter, 0-65535 for ResonantFilter<FILTER_TYPE, uint16_t>, with 255/65535 being most resonant
-
-
-
Note
Remember to call setCuttoffFreq() after resonance is changed!
- -

Definition at line 105 of file ResonantFilter.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/class_multi_resonant_filter.js b/extras/doc/html/class_multi_resonant_filter.js deleted file mode 100644 index 4772ec605..000000000 --- a/extras/doc/html/class_multi_resonant_filter.js +++ /dev/null @@ -1,27 +0,0 @@ -var class_multi_resonant_filter = -[ - [ "advanceBuffers", "class_multi_resonant_filter.html#abff68aae1ffc1bd9894e8f824365e84a", null ], - [ "band", "class_multi_resonant_filter.html#a93c35829c63addc2f54f42ca3b30b37e", null ], - [ "current", "class_multi_resonant_filter.html#a319f11e6f6a9cfb3570a335bf1dc0866", null ], - [ "current", "class_multi_resonant_filter.html#a0dc200c213651f770768cffff90bcf26", null ], - [ "current", "class_multi_resonant_filter.html#adbf4efd639c951276ee5e8612b6818ee", null ], - [ "current", "class_multi_resonant_filter.html#a496a19cd2b4ce184374ce78bd83bbbee", null ], - [ "fxmul", "class_multi_resonant_filter.html#a8d6056a34164a1ed81732f1f09c75268", null ], - [ "high", "class_multi_resonant_filter.html#a1a624bcfa3ad251c2e4af27a6a453006", null ], - [ "ifxmul", "class_multi_resonant_filter.html#a98aafa9b6a65c3a9940c5c3b9394d135", null ], - [ "low", "class_multi_resonant_filter.html#ae5b4d06f4acad8a7a9e5291538ffd865", null ], - [ "next", "class_multi_resonant_filter.html#a477e6e40d56d5e8f65ec3f6a5559581a", null ], - [ "notch", "class_multi_resonant_filter.html#a737e621190d5897ea44560a0ba37e4cc", null ], - [ "setCutoffFreq", "class_multi_resonant_filter.html#a906d49cb7d195dd0ac2185e3064fb25b", null ], - [ "setCutoffFreqAndResonance", "class_multi_resonant_filter.html#ab6f35bf0b8dd435b501931cef941e4a6", null ], - [ "setResonance", "class_multi_resonant_filter.html#a68ff331edeba47b0c8e561c7ad7a8223", null ], - [ "ucfxmul", "class_multi_resonant_filter.html#a046b0acedad3179baf2b325978dd0cbd", null ], - [ "buf0", "class_multi_resonant_filter.html#ad3afc93082a2e14dfc9e2695c4863007", null ], - [ "buf1", "class_multi_resonant_filter.html#a82a3fc274f96c3522ac0fdc4c0eaf4d8", null ], - [ "f", "class_multi_resonant_filter.html#ada7ec2094234f193d923f83a42e23167", null ], - [ "fb", "class_multi_resonant_filter.html#a9b0a58b259dc0e2002bd5c62b49b7c9c", null ], - [ "FX_SHIFT", "class_multi_resonant_filter.html#ac8414ce266b89b723ff18a0e688faa6b", null ], - [ "FX_SHIFT_M_1", "class_multi_resonant_filter.html#ab865ed9d5d8d64bde33027e39fc61536", null ], - [ "q", "class_multi_resonant_filter.html#a71999c89bb8bc643ea9c1f6c805cf231", null ], - [ "SHIFTED_1", "class_multi_resonant_filter.html#a6c680dfcbbb7bad84d4d199e8987218d", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/class_multi_resonant_filter.png b/extras/doc/html/class_multi_resonant_filter.png deleted file mode 100644 index 519c62bca..000000000 Binary files a/extras/doc/html/class_multi_resonant_filter.png and /dev/null differ diff --git a/extras/doc/html/class_oscil-members.html b/extras/doc/html/class_oscil-members.html deleted file mode 100644 index 86e148481..000000000 --- a/extras/doc/html/class_oscil-members.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Oscil< NUM_TABLE_CELLS, UPDATE_RATE > Member List
-
-
- -

This is the complete list of members for Oscil< NUM_TABLE_CELLS, UPDATE_RATE >, including all inherited members.

- - - - - - - - - - - - - - - - - - - - - - -
atIndex(unsigned int index)Oscil< NUM_TABLE_CELLS, UPDATE_RATE >inline
getPhaseFractional()Oscil< NUM_TABLE_CELLS, UPDATE_RATE >inline
next()Oscil< NUM_TABLE_CELLS, UPDATE_RATE >inline
Oscil(const int8_t *TABLE_NAME)Oscil< NUM_TABLE_CELLS, UPDATE_RATE >inline
Oscil()Oscil< NUM_TABLE_CELLS, UPDATE_RATE >inline
phaseIncFromFreq(int frequency)Oscil< NUM_TABLE_CELLS, UPDATE_RATE >inline
phMod(Q15n16 phmod_proportion)Oscil< NUM_TABLE_CELLS, UPDATE_RATE >inline
phMod(SFix< NI, NF, RANGE > phmod_proportion)Oscil< NUM_TABLE_CELLS, UPDATE_RATE >inline
phMod(SFix< 15, 16 > phmod_proportion)Oscil< NUM_TABLE_CELLS, UPDATE_RATE >inline
setFreq(int frequency)Oscil< NUM_TABLE_CELLS, UPDATE_RATE >inline
setFreq(float frequency)Oscil< NUM_TABLE_CELLS, UPDATE_RATE >inline
setFreq(UFix< NI, NF, RANGE > frequency)Oscil< NUM_TABLE_CELLS, UPDATE_RATE >inline
setFreq(UFix< 24, 8, RANGE > frequency)Oscil< NUM_TABLE_CELLS, UPDATE_RATE >inline
setFreq(UFix< 16, 16, RANGE > frequency)Oscil< NUM_TABLE_CELLS, UPDATE_RATE >inline
setFreq(SFix< NI, NF, RANGE > frequency)Oscil< NUM_TABLE_CELLS, UPDATE_RATE >inline
setFreq_Q16n16(Q16n16 frequency)Oscil< NUM_TABLE_CELLS, UPDATE_RATE >inline
setFreq_Q24n8(Q24n8 frequency)Oscil< NUM_TABLE_CELLS, UPDATE_RATE >inline
setPhase(unsigned int phase)Oscil< NUM_TABLE_CELLS, UPDATE_RATE >inline
setPhaseFractional(uint32_t phase)Oscil< NUM_TABLE_CELLS, UPDATE_RATE >inline
setPhaseInc(uint32_t phaseinc_fractional)Oscil< NUM_TABLE_CELLS, UPDATE_RATE >inline
setTable(const int8_t *TABLE_NAME)Oscil< NUM_TABLE_CELLS, UPDATE_RATE >inline
-
- - - diff --git a/extras/doc/html/class_oscil.html b/extras/doc/html/class_oscil.html deleted file mode 100644 index 7bee583d6..000000000 --- a/extras/doc/html/class_oscil.html +++ /dev/null @@ -1,1015 +0,0 @@ - - - - - - - -Mozzi: Oscil< NUM_TABLE_CELLS, UPDATE_RATE > Class Template Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
Oscil< NUM_TABLE_CELLS, UPDATE_RATE > Class Template Reference
-
-
- -

Oscil plays a wavetable, cycling through the table to generate an audio or control signal. - More...

- -

#include <Oscil.h>

-

Detailed Description

-

template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE>
-class Oscil< NUM_TABLE_CELLS, UPDATE_RATE >

- -

Oscil plays a wavetable, cycling through the table to generate an audio or control signal.

-

The frequency of the signal can be set or changed with setFreq(), and the output of an Oscil can be produced with next() for a simple cycling oscillator, or atIndex() for a particular sample in the table.

Template Parameters
- - - -
NUM_TABLE_CELLSThis is defined in the table ".h" file the Oscil will be using. It's important that it's a power of 2, and either a literal number (eg. "8192") or a defined macro, rather than a const or int, for the Oscil to run fast enough.
UPDATE_RATEThis will be MOZZI_AUDIO_RATE if the Oscil is updated in updateAudio(), or MOZZI_CONTROL_RATE if it's updated each time updateControl() is called. It could also be a fraction of MOZZI_CONTROL_RATE if you are doing some kind of cyclic updating in updateControl(), for example, to spread out the processor load.
-
-
-
Note
If you #define OSCIL_DITHER_PHASE before you #include <Oscil.h>, the phase increments will be dithered, which reduces spurious frequency spurs in the audio output, at the cost of some extra processing and memory.
-

-int8_t2mozzi

-

Converting soundfiles for Mozzi There is a python script called char2mozzi.py in the Mozzi/python folder. The usage is: char2mozzi.py infilename outfilename tablename samplerate

- -

Definition at line 61 of file Oscil.h.

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 Oscil (const int8_t *TABLE_NAME)
 Constructor. More...
 
 Oscil ()
 Constructor. More...
 
int8_t next ()
 Updates the phase according to the current frequency and returns the sample at the new phase position. More...
 
void setTable (const int8_t *TABLE_NAME)
 Change the sound table which will be played by the Oscil. More...
 
void setPhase (unsigned int phase)
 Set the phase of the Oscil. More...
 
void setPhaseFractional (uint32_t phase)
 Set the phase of the Oscil. More...
 
uint32_t getPhaseFractional ()
 Get the phase of the Oscil in fractional format. More...
 
int8_t phMod (Q15n16 phmod_proportion)
 Returns the next sample given a phase modulation value. More...
 
template<int8_t NI, int8_t NF, uint8_t RANGE>
int8_t phMod (SFix< NI, NF, RANGE > phmod_proportion)
 Returns the next sample given a phase modulation value. More...
 
int8_t phMod (SFix< 15, 16 > phmod_proportion)
 Returns the next sample given a phase modulation value. More...
 
void setFreq (int frequency)
 Set the oscillator frequency with an unsigned int. More...
 
void setFreq (float frequency)
 Set the oscillator frequency with a float. More...
 
template<int8_t NI, int8_t NF, uint64_t RANGE>
void setFreq (UFix< NI, NF, RANGE > frequency)
 Set the frequency using UFix<NI,NF> fixed-point number format. More...
 
void setFreq_Q24n8 (Q24n8 frequency)
 Set the frequency using Q24n8 fixed-point number format. More...
 
template<uint64_t RANGE>
void setFreq (UFix< 24, 8, RANGE > frequency)
 Set the frequency using UFix<24,8> fixed-point number format. More...
 
void setFreq_Q16n16 (Q16n16 frequency)
 Set the frequency using Q16n16 fixed-point number format. More...
 
template<uint64_t RANGE>
void setFreq (UFix< 16, 16, RANGE > frequency)
 Set the frequency using UFix<16,16> fixed-point number format. More...
 
template<int8_t NI, int8_t NF, uint64_t RANGE>
void setFreq (SFix< NI, NF, RANGE > frequency)
 Set the frequency using SFix<NI,NF> fixed-point number format. More...
 
int8_t atIndex (unsigned int index)
 Returns the sample at the given table index. More...
 
uint32_t phaseIncFromFreq (int frequency)
 phaseIncFromFreq() and setPhaseInc() are for saving processor time when sliding between frequencies. More...
 
void setPhaseInc (uint32_t phaseinc_fractional)
 Set a specific phase increment. More...
 
-

Constructor & Destructor Documentation

- -

◆ Oscil() [1/2]

- -
-
-
-template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE>
- - - - - -
- - - - - - - - -
Oscil< NUM_TABLE_CELLS, UPDATE_RATE >::Oscil (const int8_t * TABLE_NAME)
-
-inline
-
- -

Constructor.

-
Parameters
- - -
TABLE_NAMEthe name of the array the Oscil will be using. This can be found in the table ".h" file if you are using a table made for Mozzi by the int8_t2mozzi.py python script in Mozzi's python folder.
-
-
- -

Definition at line 71 of file Oscil.h.

- -
-
- -

◆ Oscil() [2/2]

- -
-
-
-template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE>
- - - - - -
- - - - - - - -
Oscil< NUM_TABLE_CELLS, UPDATE_RATE >::Oscil ()
-
-inline
-
- -

Constructor.

-

Declare an Oscil with template TABLE_NUM_CELLS and UPDATE_RATE parameters, without specifying a particular wave table for it to play. The table can be set or changed on the fly with setTable(). Any tables used by the Oscil must be the same size.

- -

Definition at line 81 of file Oscil.h.

- -
-
-

Member Function Documentation

- -

◆ atIndex()

- -
-
-
-template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE>
- - - - - -
- - - - - - - - -
int8_t Oscil< NUM_TABLE_CELLS, UPDATE_RATE >::atIndex (unsigned int index)
-
-inline
-
- -

Returns the sample at the given table index.

-
Parameters
- - -
indexbetween 0 and the table size.The index rolls back around to 0 if it's larger than the table size.
-
-
-
Returns
the sample at the given table index.
- -

Definition at line 333 of file Oscil.h.

- -
-
- -

◆ getPhaseFractional()

- -
-
-
-template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE>
- - - - - -
- - - - - - - -
uint32_t Oscil< NUM_TABLE_CELLS, UPDATE_RATE >::getPhaseFractional ()
-
-inline
-
- -

Get the phase of the Oscil in fractional format.

-
Returns
position in the wavetable, shifted left by OSCIL_F_BITS (which is 16 when this was written).
- -

Definition at line 131 of file Oscil.h.

- -
-
- -

◆ next()

- -
-
-
-template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE>
- - - - - -
- - - - - - - -
int8_t Oscil< NUM_TABLE_CELLS, UPDATE_RATE >::next ()
-
-inline
-
- -

Updates the phase according to the current frequency and returns the sample at the new phase position.

-
Returns
the next sample.
- -

Definition at line 89 of file Oscil.h.

- -
-
- -

◆ phaseIncFromFreq()

- -
-
-
-template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE>
- - - - - -
- - - - - - - - -
uint32_t Oscil< NUM_TABLE_CELLS, UPDATE_RATE >::phaseIncFromFreq (int frequency)
-
-inline
-
- -

phaseIncFromFreq() and setPhaseInc() are for saving processor time when sliding between frequencies.

-

Instead of recalculating the phase increment for each frequency in between, you can just calculate the phase increment for each end frequency with phaseIncFromFreq(), then use a Line to interpolate on the fly and use setPhaseInc() to set the phase increment at each step. (Note: I should really profile this with the oscilloscope to see if it's worth the extra confusion!)

Parameters
- - -
frequencyfor which you want to calculate a phase increment value.
-
-
-
Returns
the phase increment value which will produce a given frequency.
- -

Definition at line 350 of file Oscil.h.

- -
-
- -

◆ phMod() [1/3]

- -
-
-
-template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE>
- - - - - -
- - - - - - - - -
int8_t Oscil< NUM_TABLE_CELLS, UPDATE_RATE >::phMod (Q15n16 phmod_proportion)
-
-inline
-
- -

Returns the next sample given a phase modulation value.

-
Parameters
- - -
phmod_proportiona phase modulation value given as a proportion of the wave. The phmod_proportion parameter is a Q15n16 fixed-point number where the fractional n16 part represents almost -1 to almost 1, modulating the phase by one whole table length in each direction.
-
-
-
Returns
a sample from the table.
- -

Definition at line 149 of file Oscil.h.

- -
-
- -

◆ phMod() [2/3]

- -
-
-
-template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE>
- - - - - -
- - - - - - - - -
int8_t Oscil< NUM_TABLE_CELLS, UPDATE_RATE >::phMod (SFix< 15, 16 > phmod_proportion)
-
-inline
-
- -

Returns the next sample given a phase modulation value.

-
Parameters
- - -
phmod_proportiona phase modulation value given as a proportion of the wave. The phmod_proportion parameter is a SFix<15,16> fixed-point number where the fractional part represents almost -1 to almost 1, modulating the phase by one whole table length in each direction.
-
-
-
Returns
a sample from the table.
- -

Definition at line 178 of file Oscil.h.

- -
-
- -

◆ phMod() [3/3]

- -
-
-
-template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE>
-
-template<int8_t NI, int8_t NF, uint8_t RANGE>
- - - - - -
- - - - - - - - -
int8_t Oscil< NUM_TABLE_CELLS, UPDATE_RATE >::phMod (SFix< NI, NF, RANGE > phmod_proportion)
-
-inline
-
- -

Returns the next sample given a phase modulation value.

-
Parameters
- - -
phmod_proportiona phase modulation value given as a proportion of the wave. The phmod_proportion parameter is a SFix<NI,NF> fixed-point number where the fractional part represents almost -1 to almost 1, modulating the phase by one whole table length in each direction. This fixed point math number is interpreted as a SFix<15,16> internally.
-
-
-
Returns
a sample from the table.
- -

Definition at line 164 of file Oscil.h.

- -
-
- -

◆ setFreq() [1/6]

- -
-
-
-template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE>
- - - - - -
- - - - - - - - -
void Oscil< NUM_TABLE_CELLS, UPDATE_RATE >::setFreq (float frequency)
-
-inline
-
- -

Set the oscillator frequency with a float.

-

Using a float is the most reliable way to set frequencies, -Might- be slower than using an int but you need either this, setFreq_Q24n8() or setFreq_Q16n16() for fractional frequencies.

Parameters
- - -
frequencyto play the wave table.
-
-
- -

Definition at line 207 of file Oscil.h.

- -
-
- -

◆ setFreq() [2/6]

- -
-
-
-template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE>
- - - - - -
- - - - - - - - -
void Oscil< NUM_TABLE_CELLS, UPDATE_RATE >::setFreq (int frequency)
-
-inline
-
- -

Set the oscillator frequency with an unsigned int.

-

This is faster than using a float, so it's useful when processor time is tight, but it can be tricky with low and high frequencies, depending on the size of the wavetable being used. If you're not getting the results you expect, try explicitly using a float, or try setFreq_Q24n8() or or setFreq_Q16n16().

Parameters
- - -
frequencyto play the wave table.
-
-
- -

Definition at line 192 of file Oscil.h.

- -
-
- -

◆ setFreq() [3/6]

- -
-
-
-template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE>
-
-template<int8_t NI, int8_t NF, uint64_t RANGE>
- - - - - -
- - - - - - - - -
void Oscil< NUM_TABLE_CELLS, UPDATE_RATE >::setFreq (SFix< NI, NF, RANGE > frequency)
-
-inline
-
- -

Set the frequency using SFix<NI,NF> fixed-point number format.

-

This falls back to using UFix<16,16> internally and is provided as a fallout for other UFix types. If possible try to use directly UFix<16,16> or UFix<24,8> for well defined (and well tested) behaviors.

Note
This should work OK with tables 2048 cells or smaller and frequencies up to 4096 Hz. Can't be used with UPDATE_RATE less than 64 Hz.
-
-This didn't run faster than float last time it was tested, after 2014 code changes. Need to see if 2014 changes improved or worsened performance.
-
Parameters
- - -
frequencyin SFix<16,16> fixed-point number format.
-
-
- -

Definition at line 316 of file Oscil.h.

- -
-
- -

◆ setFreq() [4/6]

- -
-
-
-template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE>
-
-template<uint64_t RANGE>
- - - - - -
- - - - - - - - -
void Oscil< NUM_TABLE_CELLS, UPDATE_RATE >::setFreq (UFix< 16, 16, RANGE > frequency)
-
-inline
-
- -

Set the frequency using UFix<16,16> fixed-point number format.

-

This is useful in combination with Q16n16_mtof(), a fast alternative to mtof(), using UFix<16,16> fixed-point format instead of fractional numbers.

Note
This should work OK with tables 2048 cells or smaller and frequencies up to 4096 Hz. Can't be used with UPDATE_RATE less than 64 Hz.
-
-This didn't run faster than float last time it was tested, after 2014 code changes. Need to see if 2014 changes improved or worsened performance.
-
Parameters
- - -
frequencyin UFix<16,16> fixed-point number format.
-
-
- -

Definition at line 301 of file Oscil.h.

- -
-
- -

◆ setFreq() [5/6]

- -
-
-
-template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE>
-
-template<uint64_t RANGE>
- - - - - -
- - - - - - - - -
void Oscil< NUM_TABLE_CELLS, UPDATE_RATE >::setFreq (UFix< 24, 8, RANGE > frequency)
-
-inline
-
- -

Set the frequency using UFix<24,8> fixed-point number format.

-

This might be faster than the float version for setting low frequencies such as 1.5 Hz, or other values which may not work well with your table size. A UFix<24,8> representation of 1.5 is 384 (ie. 1.5 * 256). Can't be used with UPDATE_RATE less than 64 Hz.

Parameters
- - -
frequencyin UFix<24,8> fixed-point number format.
-
-
- -

Definition at line 261 of file Oscil.h.

- -
-
- -

◆ setFreq() [6/6]

- -
-
-
-template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE>
-
-template<int8_t NI, int8_t NF, uint64_t RANGE>
- - - - - -
- - - - - - - - -
void Oscil< NUM_TABLE_CELLS, UPDATE_RATE >::setFreq (UFix< NI, NF, RANGE > frequency)
-
-inline
-
- -

Set the frequency using UFix<NI,NF> fixed-point number format.

-

This falls back to using UFix<16,16> internally and is provided as a fallout for other UFix types. If possible try to use directly UFix<16,16> or UFix<24,8> for well defined (and well tested) behaviors.

Note
This should work OK with tables 2048 cells or smaller and frequencies up to 4096 Hz. Can't be used with UPDATE_RATE less than 64 Hz.
-
-This didn't run faster than float last time it was tested, after 2014 code changes. Need to see if 2014 changes improved or worsened performance.
-
Parameters
- - -
frequencyin UFix<NI,NF> fixed-point number format.
-
-
- -

Definition at line 221 of file Oscil.h.

- -
-
- -

◆ setFreq_Q16n16()

- -
-
-
-template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE>
- - - - - -
- - - - - - - - -
void Oscil< NUM_TABLE_CELLS, UPDATE_RATE >::setFreq_Q16n16 (Q16n16 frequency)
-
-inline
-
- -

Set the frequency using Q16n16 fixed-point number format.

-

This is useful in combination with Q16n16_mtof(), a fast alternative to mtof(), using Q16n16 fixed-point format instead of floats.

Note
This should work OK with tables 2048 cells or smaller and frequencies up to 4096 Hz. Can't be used with UPDATE_RATE less than 64 Hz.
-
-This didn't run faster than float last time it was tested, after 2014 code changes. Need to see if 2014 changes improved or worsened performance.
-
Parameters
- - -
frequencyin Q16n16 fixed-point number format.
-
-
- -

Definition at line 276 of file Oscil.h.

- -
-
- -

◆ setFreq_Q24n8()

- -
-
-
-template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE>
- - - - - -
- - - - - - - - -
void Oscil< NUM_TABLE_CELLS, UPDATE_RATE >::setFreq_Q24n8 (Q24n8 frequency)
-
-inline
-
- -

Set the frequency using Q24n8 fixed-point number format.

-

This might be faster than the float version for setting low frequencies such as 1.5 Hz, or other values which may not work well with your table size. A Q24n8 representation of 1.5 is 384 (ie. 1.5 * 256). Can't be used with UPDATE_RATE less than 64 Hz.

Parameters
- - -
frequencyin Q24n8 fixed-point number format.
-
-
- -

Definition at line 236 of file Oscil.h.

- -
-
- -

◆ setPhase()

- -
-
-
-template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE>
- - - - - -
- - - - - - - - -
void Oscil< NUM_TABLE_CELLS, UPDATE_RATE >::setPhase (unsigned int phase)
-
-inline
-
- -

Set the phase of the Oscil.

-

This does the same thing as Sample::start(offset). Just different ways of thinking about oscillators and samples.

Parameters
- - -
phasea position in the wavetable.
-
-
- -

Definition at line 111 of file Oscil.h.

- -
-
- -

◆ setPhaseFractional()

- -
-
-
-template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE>
- - - - - -
- - - - - - - - -
void Oscil< NUM_TABLE_CELLS, UPDATE_RATE >::setPhaseFractional (uint32_t phase)
-
-inline
-
- -

Set the phase of the Oscil.

-

Might be useful with getPhaseFractional().

Parameters
- - -
phasea position in the wavetable.
-
-
- -

Definition at line 122 of file Oscil.h.

- -
-
- -

◆ setPhaseInc()

- -
-
-
-template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE>
- - - - - -
- - - - - - - - -
void Oscil< NUM_TABLE_CELLS, UPDATE_RATE >::setPhaseInc (uint32_t phaseinc_fractional)
-
-inline
-
- -

Set a specific phase increment.

-

See phaseIncFromFreq().

Parameters
- - -
phaseinc_fractionala phase increment value as calculated by phaseIncFromFreq().
-
-
- -

Definition at line 363 of file Oscil.h.

- -
-
- -

◆ setTable()

- -
-
-
-template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE>
- - - - - -
- - - - - - - - -
void Oscil< NUM_TABLE_CELLS, UPDATE_RATE >::setTable (const int8_t * TABLE_NAME)
-
-inline
-
- -

Change the sound table which will be played by the Oscil.

-
Parameters
- - -
TABLE_NAMEis the name of the array in the table ".h" file you're using.
-
-
- -

Definition at line 99 of file Oscil.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/class_oscil.js b/extras/doc/html/class_oscil.js deleted file mode 100644 index 1d73e8e1d..000000000 --- a/extras/doc/html/class_oscil.js +++ /dev/null @@ -1,24 +0,0 @@ -var class_oscil = -[ - [ "Oscil", "class_oscil.html#afe6a75646d2dd822a654bcd85242e800", null ], - [ "Oscil", "class_oscil.html#ab7dc5f97742d841fff6a4dca6d7242f3", null ], - [ "atIndex", "class_oscil.html#a97f2c0f28751641417202fee2a0776d3", null ], - [ "getPhaseFractional", "class_oscil.html#aefafa92dd2065243a164c1d824f292d7", null ], - [ "next", "class_oscil.html#a655de04690650b27182e3b4d07768d46", null ], - [ "phaseIncFromFreq", "class_oscil.html#a48ad51d7fbac24263008a9931f537baf", null ], - [ "phMod", "class_oscil.html#a4c6de90bc2d4183a5146eb2ae5e3dd2c", null ], - [ "phMod", "class_oscil.html#ae12f5e34705bb92394c4941aebe5a8ea", null ], - [ "phMod", "class_oscil.html#a90aeeb558d2d06efceaf9b81566f4d3d", null ], - [ "setFreq", "class_oscil.html#aa342e74f8e73edda0b0f042770e3fba4", null ], - [ "setFreq", "class_oscil.html#a23121f22ea447918088a79c7f9748b3d", null ], - [ "setFreq", "class_oscil.html#a47bd8774216331e1c3ab62b8c9f92e8a", null ], - [ "setFreq", "class_oscil.html#a5161b31eea29b634f530d37c8f552685", null ], - [ "setFreq", "class_oscil.html#a7dbb7386be70efdda01bda5c280b15ee", null ], - [ "setFreq", "class_oscil.html#a078e9b56769b96a2e9a6a645b3c49596", null ], - [ "setFreq_Q16n16", "class_oscil.html#a73b52741178ed490463d9ff471cebef3", null ], - [ "setFreq_Q24n8", "class_oscil.html#abc8a4ee236f7fd45dda9dece7292b6e7", null ], - [ "setPhase", "class_oscil.html#ab7b740eec56740426a47508562ed4dd5", null ], - [ "setPhaseFractional", "class_oscil.html#a9befaff8a21a4915b647636e821435f9", null ], - [ "setPhaseInc", "class_oscil.html#aced127a46f0e45c259f1a788b6c31074", null ], - [ "setTable", "class_oscil.html#a0b22d79fb2d6c7fb50b19c00f249ed84", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/class_p_d_resonant-members.html b/extras/doc/html/class_p_d_resonant-members.html deleted file mode 100644 index cda9f8696..000000000 --- a/extras/doc/html/class_p_d_resonant-members.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
PDResonant Member List
-
-
- -

This is the complete list of members for PDResonant, including all inherited members.

- - - - - - - -
next()PDResonantinline
noteOff(byte channel, byte pitch, byte velocity)PDResonantinline
noteOn(byte channel, byte pitch, byte velocity)PDResonantinline
PDResonant()PDResonantinline
setPDEnv(int attack, int decay)PDResonantinline
update()PDResonantinline
-
- - - diff --git a/extras/doc/html/class_p_d_resonant.html b/extras/doc/html/class_p_d_resonant.html deleted file mode 100644 index 32ae161c2..000000000 --- a/extras/doc/html/class_p_d_resonant.html +++ /dev/null @@ -1,360 +0,0 @@ - - - - - - - -Mozzi: PDResonant Class Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
PDResonant Class Reference
-
-
- -

PDResonant is a simple midi instrument using Phase distortion used to simulate resonant filter, based on https://en.wikipedia.org/wiki/Phase_distortion_synthesis. - More...

- -

#include <PDResonant.h>

-

Detailed Description

-

PDResonant is a simple midi instrument using Phase distortion used to simulate resonant filter, based on https://en.wikipedia.org/wiki/Phase_distortion_synthesis.

-

The class shows how the Mozzi Phasor class can be used to generate an index into a wavetable, and an ADSR is used to modulate the effect by modifying the Phasor frequency and sync. More complex phase distortion effects could be developed by using precalculated tables, or calcuating tables on the fly using a double buffer, or a line-breakpoint model, a sort of hybridPhasor-Line object.

- -

Definition at line 31 of file PDResonant.h.

-
- - - - - - - - - - - - - - - - - - - -

-Public Member Functions

PDResonant ()
 Constructor.
 
void noteOn (byte channel, byte pitch, byte velocity)
 Play a note in response to midi input. More...
 
void noteOff (byte channel, byte pitch, byte velocity)
 Stop a note in response to midi input. More...
 
void setPDEnv (int attack, int decay)
 Set the resonant filter sweep parameters. More...
 
void update ()
 Update the filter sweep. More...
 
int next ()
 Produce the audio output. More...
 
-

Member Function Documentation

- -

◆ next()

- -
-
- - - - - -
- - - - - - - -
int PDResonant::next ()
-
-inline
-
- -

Produce the audio output.

-

This goes in updateAudio().

- -

Definition at line 102 of file PDResonant.h.

- -
-
- -

◆ noteOff()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void PDResonant::noteOff (byte channel,
byte pitch,
byte velocity 
)
-
-inline
-
- -

Stop a note in response to midi input.

-

Params copied from MIDI library HandleNoteOff()

Parameters
- - - - -
channelis the midi channel
pitchis the midi note
velocityyou know what it is
-
-
- -

Definition at line 67 of file PDResonant.h.

- -
-
- -

◆ noteOn()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void PDResonant::noteOn (byte channel,
byte pitch,
byte velocity 
)
-
-inline
-
- -

Play a note in response to midi input.

-

Params copied from MIDI library HandleNoteOn().

Parameters
- - - - -
channelis the midi channel
pitchis the midi note
velocityyou know what it is
-
-
- -

Definition at line 52 of file PDResonant.h.

- -
-
- -

◆ setPDEnv()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void PDResonant::setPDEnv (int attack,
int decay 
)
-
-inline
-
- -

Set the resonant filter sweep parameters.

-
Parameters
- - - -
attackADSR attack
decayADSR decay
-
-
- -

Definition at line 78 of file PDResonant.h.

- -
-
- -

◆ update()

- -
-
- - - - - -
- - - - - - - -
void PDResonant::update ()
-
-inline
-
- -

Update the filter sweep.

-

Use this in updateControl().

- -

Definition at line 91 of file PDResonant.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/class_p_d_resonant.js b/extras/doc/html/class_p_d_resonant.js deleted file mode 100644 index bd8eb1f7d..000000000 --- a/extras/doc/html/class_p_d_resonant.js +++ /dev/null @@ -1,9 +0,0 @@ -var class_p_d_resonant = -[ - [ "PDResonant", "class_p_d_resonant.html#a2bd77e08be68fc6ce89f1f71a7e1e069", null ], - [ "next", "class_p_d_resonant.html#a80bd42c7ea92a64c3b8a42779a1e0d26", null ], - [ "noteOff", "class_p_d_resonant.html#a2b548734ea968d99d7939d68c95411cb", null ], - [ "noteOn", "class_p_d_resonant.html#a7d4497f3b5944f73dd2fb82d68fc099b", null ], - [ "setPDEnv", "class_p_d_resonant.html#a7c921c18d37b0625beab9e4f06c69ca4", null ], - [ "update", "class_p_d_resonant.html#ae604c6401c636ab32757913f21c6dbe6", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/class_phasor-members.html b/extras/doc/html/class_phasor-members.html deleted file mode 100644 index de2e280cd..000000000 --- a/extras/doc/html/class_phasor-members.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Phasor< UPDATE_RATE > Member List
-
-
- -

This is the complete list of members for Phasor< UPDATE_RATE >, including all inherited members.

- - - - - - - - -
next()Phasor< UPDATE_RATE >inline
phaseIncFromFreq(int frequency)Phasor< UPDATE_RATE >inline
Phasor()Phasor< UPDATE_RATE >inline
set(uint32_t value)Phasor< UPDATE_RATE >inline
setFreq(int frequency)Phasor< UPDATE_RATE >inline
setFreq(float frequency)Phasor< UPDATE_RATE >inline
setPhaseInc(uint32_t stepsize)Phasor< UPDATE_RATE >inline
-
- - - diff --git a/extras/doc/html/class_phasor.html b/extras/doc/html/class_phasor.html deleted file mode 100644 index e044a7f25..000000000 --- a/extras/doc/html/class_phasor.html +++ /dev/null @@ -1,407 +0,0 @@ - - - - - - - -Mozzi: Phasor< UPDATE_RATE > Class Template Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
Phasor< UPDATE_RATE > Class Template Reference
-
-
- -

Phasor repeatedly generates a high resolution ramp at a variable frequency. - More...

- -

#include <Phasor.h>

-

Detailed Description

-

template<unsigned int UPDATE_RATE>
-class Phasor< UPDATE_RATE >

- -

Phasor repeatedly generates a high resolution ramp at a variable frequency.

-

The output of Phasor.next() is an unsigned number between 0 and 4294967295, the maximum that can be expressed by an unsigned 32 bit integer.

Template Parameters
- - -
UPDATE_RATEthe rate at which the Phasor will be updated, usually MOZZI_CONTROL_RATE or MOZZI_AUDIO_RATE.
-
-
- -

Definition at line 28 of file Phasor.h.

-
- - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 Phasor ()
 Constructor. More...
 
uint32_t next ()
 Increments one step along the phase. More...
 
void set (uint32_t value)
 Set the current value of the phasor. More...
 
void setFreq (int frequency)
 Set the Phasor frequency with an unsigned int. More...
 
void setFreq (float frequency)
 Set the Phasor frequency with a float. More...
 
uint32_t phaseIncFromFreq (int frequency)
 phaseIncFromFreq() and setPhaseInc() are for saving processor time when sliding between frequencies. More...
 
void setPhaseInc (uint32_t stepsize)
 Set a specific phase increment. More...
 
-

Constructor & Destructor Documentation

- -

◆ Phasor()

- -
-
-
-template<unsigned int UPDATE_RATE>
- - - - - -
- - - - - - - -
Phasor< UPDATE_RATE >::Phasor ()
-
-inline
-
- -

Constructor.

-

"Phasor <MOZZI_AUDIO_RATE> myphasor;" makes a Phasor which updates at MOZZI_AUDIO_RATE.

- -

Definition at line 38 of file Phasor.h.

- -
-
-

Member Function Documentation

- -

◆ next()

- -
-
-
-template<unsigned int UPDATE_RATE>
- - - - - -
- - - - - - - -
uint32_t Phasor< UPDATE_RATE >::next ()
-
-inline
-
- -

Increments one step along the phase.

-
Returns
the next value.
- -

Definition at line 46 of file Phasor.h.

- -
-
- -

◆ phaseIncFromFreq()

- -
-
-
-template<unsigned int UPDATE_RATE>
- - - - - -
- - - - - - - - -
uint32_t Phasor< UPDATE_RATE >::phaseIncFromFreq (int frequency)
-
-inline
-
- -

phaseIncFromFreq() and setPhaseInc() are for saving processor time when sliding between frequencies.

-

Instead of recalculating the phase increment for each frequency in between, you can just calculate the phase increment for each end frequency with phaseIncFromFreq(), then use a Line to interpolate on the fly and use setPhaseInc() to set the phase increment at each step. (Note: I should really profile this with the oscilloscope to see if it's worth the extra confusion!)

Parameters
- - -
frequencyfor which you want to calculate a phase increment value.
-
-
-
Returns
the phase increment value which will produce a given frequency.
- -

Definition at line 94 of file Phasor.h.

- -
-
- -

◆ set()

- -
-
-
-template<unsigned int UPDATE_RATE>
- - - - - -
- - - - - - - - -
void Phasor< UPDATE_RATE >::set (uint32_t value)
-
-inline
-
- -

Set the current value of the phasor.

-

The Phasor will continue incrementing from this value using any previously calculated step size.

- -

Definition at line 56 of file Phasor.h.

- -
-
- -

◆ setFreq() [1/2]

- -
-
-
-template<unsigned int UPDATE_RATE>
- - - - - -
- - - - - - - - -
void Phasor< UPDATE_RATE >::setFreq (float frequency)
-
-inline
-
- -

Set the Phasor frequency with a float.

-
Parameters
- - -
frequencyis how many times per second to count from 0 to the maximum uint32_t value 4294967295.
-
-
- -

Definition at line 79 of file Phasor.h.

- -
-
- -

◆ setFreq() [2/2]

- -
-
-
-template<unsigned int UPDATE_RATE>
- - - - - -
- - - - - - - - -
void Phasor< UPDATE_RATE >::setFreq (int frequency)
-
-inline
-
- -

Set the Phasor frequency with an unsigned int.

-
Parameters
- - -
frequencyis how many times per second to count from 0 to the maximum uint32_t value 4294967295.
-
-
-
Note
Timing 8us
- -

Definition at line 68 of file Phasor.h.

- -
-
- -

◆ setPhaseInc()

- -
-
-
-template<unsigned int UPDATE_RATE>
- - - - - -
- - - - - - - - -
void Phasor< UPDATE_RATE >::setPhaseInc (uint32_t stepsize)
-
-inline
-
- -

Set a specific phase increment.

-

See phaseIncFromFreq().

Parameters
- - -
stepsizea phase increment value as calculated by phaseIncFromFreq().
-
-
- -

Definition at line 104 of file Phasor.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/class_phasor.js b/extras/doc/html/class_phasor.js deleted file mode 100644 index f81a478af..000000000 --- a/extras/doc/html/class_phasor.js +++ /dev/null @@ -1,10 +0,0 @@ -var class_phasor = -[ - [ "Phasor", "class_phasor.html#a147c4c3aa7506c3da800e6cc77deb4ac", null ], - [ "next", "class_phasor.html#a696198206182acaed5cf27fef226118d", null ], - [ "phaseIncFromFreq", "class_phasor.html#a6e7656824ae72aea09ce851c7b340eaf", null ], - [ "set", "class_phasor.html#ad9e0eceb175bca6b2b79130fd9c4f4ef", null ], - [ "setFreq", "class_phasor.html#a81f1976ebb4a91f66f26674efca52072", null ], - [ "setFreq", "class_phasor.html#afc6106c648bddb5f2f084b8f34216b0f", null ], - [ "setPhaseInc", "class_phasor.html#adf134d4e4ce960e4c773830fd8467e4b", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/class_portamento-members.html b/extras/doc/html/class_portamento-members.html deleted file mode 100644 index 1c5110a86..000000000 --- a/extras/doc/html/class_portamento-members.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Portamento< CONTROL_UPDATE_RATE > Member List
-
-
- -

This is the complete list of members for Portamento< CONTROL_UPDATE_RATE >, including all inherited members.

- - - - - - -
next()Portamento< CONTROL_UPDATE_RATE >inline
Portamento()Portamento< CONTROL_UPDATE_RATE >inline
setTime(unsigned int milliseconds)Portamento< CONTROL_UPDATE_RATE >inline
start(uint8_t note)Portamento< CONTROL_UPDATE_RATE >inline
start(Q16n16 note)Portamento< CONTROL_UPDATE_RATE >inline
-
- - - diff --git a/extras/doc/html/class_portamento.html b/extras/doc/html/class_portamento.html deleted file mode 100644 index 973cdc514..000000000 --- a/extras/doc/html/class_portamento.html +++ /dev/null @@ -1,290 +0,0 @@ - - - - - - - -Mozzi: Portamento< CONTROL_UPDATE_RATE > Class Template Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
Portamento< CONTROL_UPDATE_RATE > Class Template Reference
-
-
- -

A simple portamento (pitch slide from one note to the next) effect, useful for note-based applications. - More...

- -

#include <Portamento.h>

-

Detailed Description

-

template<unsigned int CONTROL_UPDATE_RATE>
-class Portamento< CONTROL_UPDATE_RATE >

- -

A simple portamento (pitch slide from one note to the next) effect, useful for note-based applications.

- -

Definition at line 22 of file Portamento.h.

-
- - - - - - - - - - - - - - - - -

-Public Member Functions

Portamento ()
 Constructor.
 
void setTime (unsigned int milliseconds)
 Set how long it will take to slide from note to note, in milliseconds. More...
 
void start (uint8_t note)
 Call this at note-on, it initialises the portamento. More...
 
void start (Q16n16 note)
 Call this at note-on, it initialises the portamento. More...
 
Q16n16 next ()
 Use this in updateControl() to provide a frequency to the oscillator it's controlling. More...
 
-

Member Function Documentation

- -

◆ next()

- -
-
-
-template<unsigned int CONTROL_UPDATE_RATE>
- - - - - -
- - - - - - - -
Q16n16 Portamento< CONTROL_UPDATE_RATE >::next ()
-
-inline
-
- -

Use this in updateControl() to provide a frequency to the oscillator it's controlling.

-

For example: myOscil.setFreq_Q16n16(myPortamento.next());

Returns
a Q16n16 fractional frequency value, progressing smoothly between successive notes.
- -

Definition at line 72 of file Portamento.h.

- -
-
- -

◆ setTime()

- -
-
-
-template<unsigned int CONTROL_UPDATE_RATE>
- - - - - -
- - - - - - - - -
void Portamento< CONTROL_UPDATE_RATE >::setTime (unsigned int milliseconds)
-
-inline
-
- -

Set how long it will take to slide from note to note, in milliseconds.

-
Parameters
- - -
milliseconds
-
-
- -

Definition at line 38 of file Portamento.h.

- -
-
- -

◆ start() [1/2]

- -
-
-
-template<unsigned int CONTROL_UPDATE_RATE>
- - - - - -
- - - - - - - - -
void Portamento< CONTROL_UPDATE_RATE >::start (Q16n16 note)
-
-inline
-
- -

Call this at note-on, it initialises the portamento.

-
Parameters
- - -
notea midi note number in Q16n16 fractional format. This is useful for non-whole note or detuned values.
-
-
- -

Definition at line 58 of file Portamento.h.

- -
-
- -

◆ start() [2/2]

- -
-
-
-template<unsigned int CONTROL_UPDATE_RATE>
- - - - - -
- - - - - - - - -
void Portamento< CONTROL_UPDATE_RATE >::start (uint8_t note)
-
-inline
-
- -

Call this at note-on, it initialises the portamento.

-
Parameters
- - -
notea midi note number, a whole number.
-
-
- -

Definition at line 47 of file Portamento.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/class_portamento.js b/extras/doc/html/class_portamento.js deleted file mode 100644 index 4ee685c65..000000000 --- a/extras/doc/html/class_portamento.js +++ /dev/null @@ -1,8 +0,0 @@ -var class_portamento = -[ - [ "Portamento", "class_portamento.html#adc910a47d3fe8eff848d6de42d7280df", null ], - [ "next", "class_portamento.html#ad39101f5275c433713df7699214638bc", null ], - [ "setTime", "class_portamento.html#af19c3b3c189e111079f54211ff5a4ebe", null ], - [ "start", "class_portamento.html#af70701abfdd9f3d788f3b313e38017d0", null ], - [ "start", "class_portamento.html#aae67a74be47cb2e8a6ffbb90786221af", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/class_r_cpoll-members.html b/extras/doc/html/class_r_cpoll-members.html deleted file mode 100644 index dda5869b6..000000000 --- a/extras/doc/html/class_r_cpoll-members.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
RCpoll< SENSOR_PIN > Member List
-
-
- -

This is the complete list of members for RCpoll< SENSOR_PIN >, including all inherited members.

- - - -
next()RCpoll< SENSOR_PIN >inline
RCpoll()RCpoll< SENSOR_PIN >inline
-
- - - diff --git a/extras/doc/html/class_r_cpoll.html b/extras/doc/html/class_r_cpoll.html deleted file mode 100644 index 018acaea9..000000000 --- a/extras/doc/html/class_r_cpoll.html +++ /dev/null @@ -1,168 +0,0 @@ - - - - - - - -Mozzi: RCpoll< SENSOR_PIN > Class Template Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
RCpoll< SENSOR_PIN > Class Template Reference
-
-
- -

A class for reading voltage on a digital pin, derived from http://arduino.cc/en/Tutorial/RCtime. - More...

- -

#include <RCpoll.h>

-

Detailed Description

-

template<unsigned char SENSOR_PIN>
-class RCpoll< SENSOR_PIN >

- -

A class for reading voltage on a digital pin, derived from http://arduino.cc/en/Tutorial/RCtime.

-

This is designed to be used in updateControl(). Each time it is called, it checks if a capacitor has charged, and returns an output reflecting how long it took for the most recent charge.

- -

Definition at line 23 of file RCpoll.h.

-
- - - - - - - -

-Public Member Functions

RCpoll ()
 Constructor.
 
unsigned int next ()
 Checks whether the capacitor has charged, and returns how long it took for the most recent charge. More...
 
-

Member Function Documentation

- -

◆ next()

- -
-
-
-template<unsigned char SENSOR_PIN>
- - - - - -
- - - - - - - -
unsigned int RCpoll< SENSOR_PIN >::next ()
-
-inline
-
- -

Checks whether the capacitor has charged, and returns how long it took for the most recent charge.

-

This would preferably be called in updateControl(), but if the resolution isn't fine enough or the pin charges too fast for updateControl() to catch, try it in updateAudio().

Returns
the sensor value, reflected in how many checking cycles it took to charge the capacitor.
- -

Definition at line 40 of file RCpoll.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/class_r_cpoll.js b/extras/doc/html/class_r_cpoll.js deleted file mode 100644 index 49676e94b..000000000 --- a/extras/doc/html/class_r_cpoll.js +++ /dev/null @@ -1,5 +0,0 @@ -var class_r_cpoll = -[ - [ "RCpoll", "class_r_cpoll.html#a44673505bbfbac288ec994dd48017e83", null ], - [ "next", "class_r_cpoll.html#ab61697b3922ed289c8d501ccd11cbd6f", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/class_resonant_filter-members.html b/extras/doc/html/class_resonant_filter-members.html deleted file mode 100644 index 2185126a0..000000000 --- a/extras/doc/html/class_resonant_filter-members.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
ResonantFilter< FILTER_TYPE, su > Member List
-
-
- -

This is the complete list of members for ResonantFilter< FILTER_TYPE, su >, including all inherited members.

- - - - - - - - - - - - - - - - - - - - - - -
advanceBuffers(AudioOutputStorage_t in) (defined in ResonantFilter< FILTER_TYPE, su >)ResonantFilter< FILTER_TYPE, su >inlineprotected
buf0 (defined in ResonantFilter< FILTER_TYPE, su >)ResonantFilter< FILTER_TYPE, su >protected
buf1 (defined in ResonantFilter< FILTER_TYPE, su >)ResonantFilter< FILTER_TYPE, su >protected
current(AudioOutputStorage_t in, Int2Type< LOWPASS >) (defined in ResonantFilter< FILTER_TYPE, su >)ResonantFilter< FILTER_TYPE, su >inlineprotected
current(AudioOutputStorage_t in, Int2Type< HIGHPASS >) (defined in ResonantFilter< FILTER_TYPE, su >)ResonantFilter< FILTER_TYPE, su >inlineprotected
current(AudioOutputStorage_t in, Int2Type< BANDPASS >) (defined in ResonantFilter< FILTER_TYPE, su >)ResonantFilter< FILTER_TYPE, su >inlineprotected
current(AudioOutputStorage_t in, Int2Type< NOTCH >) (defined in ResonantFilter< FILTER_TYPE, su >)ResonantFilter< FILTER_TYPE, su >inlineprotected
f (defined in ResonantFilter< FILTER_TYPE, su >)ResonantFilter< FILTER_TYPE, su >protected
fb (defined in ResonantFilter< FILTER_TYPE, su >)ResonantFilter< FILTER_TYPE, su >protected
FX_SHIFT (defined in ResonantFilter< FILTER_TYPE, su >)ResonantFilter< FILTER_TYPE, su >protected
FX_SHIFT_M_1 (defined in ResonantFilter< FILTER_TYPE, su >)ResonantFilter< FILTER_TYPE, su >protected
fxmul(typename IntegerType< sizeof(AudioOutputStorage_t)+sizeof(AudioOutputStorage_t)>::signed_type a, typename IntegerType< sizeof(AudioOutputStorage_t)+sizeof(su) -1 >::signed_type b) (defined in ResonantFilter< FILTER_TYPE, su >)ResonantFilter< FILTER_TYPE, su >inlineprotected
ifxmul(typename IntegerType< sizeof(AudioOutputStorage_t)+sizeof(su) -1 >::signed_type a, su b) (defined in ResonantFilter< FILTER_TYPE, su >)ResonantFilter< FILTER_TYPE, su >inlineprotected
next(AudioOutputStorage_t in)ResonantFilter< FILTER_TYPE, su >inline
q (defined in ResonantFilter< FILTER_TYPE, su >)ResonantFilter< FILTER_TYPE, su >protected
ResonantFilter()ResonantFilter< FILTER_TYPE, su >inline
setCutoffFreq(su cutoff)ResonantFilter< FILTER_TYPE, su >inline
setCutoffFreqAndResonance(su cutoff, su resonance)ResonantFilter< FILTER_TYPE, su >inline
setResonance(su resonance)ResonantFilter< FILTER_TYPE, su >inline
SHIFTED_1 (defined in ResonantFilter< FILTER_TYPE, su >)ResonantFilter< FILTER_TYPE, su >protected
ucfxmul(su a, typename IntegerType< sizeof(su)+sizeof(su)>::unsigned_type b) (defined in ResonantFilter< FILTER_TYPE, su >)ResonantFilter< FILTER_TYPE, su >inlineprotected
-
- - - diff --git a/extras/doc/html/class_resonant_filter.html b/extras/doc/html/class_resonant_filter.html deleted file mode 100644 index 7124d3feb..000000000 --- a/extras/doc/html/class_resonant_filter.html +++ /dev/null @@ -1,368 +0,0 @@ - - - - - - - -Mozzi: ResonantFilter< FILTER_TYPE, su > Class Template Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
ResonantFilter< FILTER_TYPE, su > Class Template Reference
-
-
- -

A generic resonant filter for audio signals. - More...

- -

#include <ResonantFilter.h>

-

Detailed Description

-

template<int8_t FILTER_TYPE, typename su = uint8_t>
-class ResonantFilter< FILTER_TYPE, su >

- -

A generic resonant filter for audio signals.

- -

Definition at line 75 of file ResonantFilter.h.

-
- - - - - - - - - - - - - - - - -

-Public Member Functions

ResonantFilter ()
 Constructor.
 
void setCutoffFreq (su cutoff)
 deprecated. More...
 
void setResonance (su resonance)
 deprecated. More...
 
void setCutoffFreqAndResonance (su cutoff, su resonance)
 Set the cut off frequency and resonance. More...
 
AudioOutputStorage_t next (AudioOutputStorage_t in)
 Calculate the next sample, given an input signal. More...
 
- - - - - - - - - - - - - - - - - -

-Protected Member Functions

-void advanceBuffers (AudioOutputStorage_t in)
 
-AudioOutputStorage_t current (AudioOutputStorage_t in, Int2Type< LOWPASS >)
 
-AudioOutputStorage_t current (AudioOutputStorage_t in, Int2Type< HIGHPASS >)
 
-AudioOutputStorage_t current (AudioOutputStorage_t in, Int2Type< BANDPASS >)
 
-AudioOutputStorage_t current (AudioOutputStorage_t in, Int2Type< NOTCH >)
 
-IntegerType< sizeof(su)+sizeof(su)>::unsigned_type ucfxmul (su a, typename IntegerType< sizeof(su)+sizeof(su)>::unsigned_type b)
 
-IntegerType< sizeof(AudioOutputStorage_t)+sizeof(su) -1 >::signed_type ifxmul (typename IntegerType< sizeof(AudioOutputStorage_t)+sizeof(su) -1 >::signed_type a, su b)
 
-IntegerType< sizeof(AudioOutputStorage_t)+sizeof(AudioOutputStorage_t)>::signed_type fxmul (typename IntegerType< sizeof(AudioOutputStorage_t)+sizeof(AudioOutputStorage_t)>::signed_type a, typename IntegerType< sizeof(AudioOutputStorage_t)+sizeof(su) -1 >::signed_type b)
 
- - - - - - - - - - - - - - - - - -

-Protected Attributes

-su q
 
-su f
 
-IntegerType< sizeof(su)+sizeof(su)>::unsigned_type fb
 
-AudioOutputStorage_t buf0
 
-AudioOutputStorage_t buf1
 
-const uint8_t FX_SHIFT
 
-const uint8_t FX_SHIFT_M_1
 
-const su SHIFTED_1
 
-

Member Function Documentation

- -

◆ next()

- -
-
-
-template<int8_t FILTER_TYPE, typename su = uint8_t>
- - - - - -
- - - - - - - - -
AudioOutputStorage_t ResonantFilter< FILTER_TYPE, su >::next (AudioOutputStorage_t in)
-
-inline
-
- -

Calculate the next sample, given an input signal.

-
Parameters
- - -
inthe signal input. Should not be more than 8bits on 8bits platforms (Arduino) if using the 8bits version and not 16bits version.
-
-
-
Returns
the signal output.
-
Note
Timing: about 11us.
- -

Definition at line 128 of file ResonantFilter.h.

- -
-
- -

◆ setCutoffFreq()

- -
-
-
-template<int8_t FILTER_TYPE, typename su = uint8_t>
- - - - - -
- - - - - - - - -
void ResonantFilter< FILTER_TYPE, su >::setCutoffFreq (su cutoff)
-
-inline
-
- -

deprecated.

-

Use setCutoffFreqAndResonance(su cutoff, su resonance).

-

Set the cut off frequency,

Parameters
- - -
cutoffuse the range 0-255 to represent 0-8191 Hz (MOZZI_AUDIO_RATE/2) for ResonantFilter, cutoff use the range 0-65535 to represent 0-MOZZI_AUDIO_RATE/2. Be careful of distortion at the lower end, especially with high resonance.
-
-
- -

Definition at line 91 of file ResonantFilter.h.

- -
-
- -

◆ setCutoffFreqAndResonance()

- -
-
-
-template<int8_t FILTER_TYPE, typename su = uint8_t>
- - - - - -
- - - - - - - - - - - - - - - - - - -
void ResonantFilter< FILTER_TYPE, su >::setCutoffFreqAndResonance (su cutoff,
su resonance 
)
-
-inline
-
- -

Set the cut off frequency and resonance.

-

Replaces setCutoffFreq() and setResonance(). (Because the internal calculations need to be done whenever either parameter changes.)

Parameters
- - - -
cutoffrange 0-255 represents 0-8191 Hz (MOZZI_AUDIO_RATE/2) for ResonantFilter, range 0-65535 for ResonantFilter16 Be careful of distortion at the lower end, especially with high resonance.
resonancerange 0-255 for ResonantFilter, 0-65535 for ResonantFilter<FILTER_TYPE, uint16_t>, 255/65535 is most resonant.
-
-
- -

Definition at line 114 of file ResonantFilter.h.

- -
-
- -

◆ setResonance()

- -
-
-
-template<int8_t FILTER_TYPE, typename su = uint8_t>
- - - - - -
- - - - - - - - -
void ResonantFilter< FILTER_TYPE, su >::setResonance (su resonance)
-
-inline
-
- -

deprecated.

-

Use setCutoffFreqAndResonance(su cutoff, su resonance).

-

Set the resonance. If you hear unwanted distortion, back off the resonance. After setting resonance, you need to call setCuttoffFreq() to hear the change!

Parameters
- - -
resonancein the range 0-255 for ResonantFilter, 0-65535 for ResonantFilter<FILTER_TYPE, uint16_t>, with 255/65535 being most resonant
-
-
-
Note
Remember to call setCuttoffFreq() after resonance is changed!
- -

Definition at line 105 of file ResonantFilter.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/class_resonant_filter.js b/extras/doc/html/class_resonant_filter.js deleted file mode 100644 index f026c7913..000000000 --- a/extras/doc/html/class_resonant_filter.js +++ /dev/null @@ -1,24 +0,0 @@ -var class_resonant_filter = -[ - [ "ResonantFilter", "class_resonant_filter.html#acd29c5e737fe80e0dc5c408113c3c282", null ], - [ "advanceBuffers", "class_resonant_filter.html#abff68aae1ffc1bd9894e8f824365e84a", null ], - [ "current", "class_resonant_filter.html#a319f11e6f6a9cfb3570a335bf1dc0866", null ], - [ "current", "class_resonant_filter.html#a0dc200c213651f770768cffff90bcf26", null ], - [ "current", "class_resonant_filter.html#adbf4efd639c951276ee5e8612b6818ee", null ], - [ "current", "class_resonant_filter.html#a496a19cd2b4ce184374ce78bd83bbbee", null ], - [ "fxmul", "class_resonant_filter.html#a8d6056a34164a1ed81732f1f09c75268", null ], - [ "ifxmul", "class_resonant_filter.html#a98aafa9b6a65c3a9940c5c3b9394d135", null ], - [ "next", "class_resonant_filter.html#a0ebe21b235b04ab406a3f09363b73f43", null ], - [ "setCutoffFreq", "class_resonant_filter.html#a906d49cb7d195dd0ac2185e3064fb25b", null ], - [ "setCutoffFreqAndResonance", "class_resonant_filter.html#ab6f35bf0b8dd435b501931cef941e4a6", null ], - [ "setResonance", "class_resonant_filter.html#a68ff331edeba47b0c8e561c7ad7a8223", null ], - [ "ucfxmul", "class_resonant_filter.html#a046b0acedad3179baf2b325978dd0cbd", null ], - [ "buf0", "class_resonant_filter.html#ad3afc93082a2e14dfc9e2695c4863007", null ], - [ "buf1", "class_resonant_filter.html#a82a3fc274f96c3522ac0fdc4c0eaf4d8", null ], - [ "f", "class_resonant_filter.html#ada7ec2094234f193d923f83a42e23167", null ], - [ "fb", "class_resonant_filter.html#a9b0a58b259dc0e2002bd5c62b49b7c9c", null ], - [ "FX_SHIFT", "class_resonant_filter.html#ac8414ce266b89b723ff18a0e688faa6b", null ], - [ "FX_SHIFT_M_1", "class_resonant_filter.html#ab865ed9d5d8d64bde33027e39fc61536", null ], - [ "q", "class_resonant_filter.html#a71999c89bb8bc643ea9c1f6c805cf231", null ], - [ "SHIFTED_1", "class_resonant_filter.html#a6c680dfcbbb7bad84d4d199e8987218d", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/class_reverb_tank-members.html b/extras/doc/html/class_reverb_tank-members.html deleted file mode 100644 index f8d6bac19..000000000 --- a/extras/doc/html/class_reverb_tank-members.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
ReverbTank Member List
-
-
- -

This is the complete list of members for ReverbTank, including all inherited members.

- - - - - - -
next(int input)ReverbTankinline
ReverbTank(int8_t early_reflection1=37, int8_t early_reflection2=77, int8_t early_reflection3=127, int8_t loop1_delay=117, uint8_t loop2_delay=255, int8_t feedback_level=85)ReverbTankinline
setEarlyReflections(int8_t early_reflection1, int8_t early_reflection2, int8_t early_reflection3)ReverbTankinline
setFeebackLevel(int8_t feedback_level)ReverbTankinline
setLoopDelays(int8_t loop1_delay, uint8_t loop2_delay)ReverbTankinline
-
- - - diff --git a/extras/doc/html/class_reverb_tank.html b/extras/doc/html/class_reverb_tank.html deleted file mode 100644 index ca1723913..000000000 --- a/extras/doc/html/class_reverb_tank.html +++ /dev/null @@ -1,393 +0,0 @@ - - - - - - - -Mozzi: ReverbTank Class Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
ReverbTank Class Reference
-
-
- -

A reverb which sounds like the inside of a tin can. - More...

- -

#include <ReverbTank.h>

-

Detailed Description

-

A reverb which sounds like the inside of a tin can.

-

ReverbTank is small enough to fit on the Arduino Nano, which for some reason wasn't able to fit a larger version which did fit on other 328 based boards. For simplicity, ReverbTank has hardcoded maximum delay sizes but also has default delay times which can be changed in the constructor or by setting during run time to allow live tweaking. This is a highly simplified design drawing on and probably misinterpreting Miller Puckette's G08.reverb recirculating reverb example for Pure Data.

-

The room size according to the maximum delay lengths corresponds to:

-

early reflections and recirculating delay 1: 128/16384 seconds * 340.29 m/s speed of sound = 3.5 metres recirculating delay 2: 7 metres It looks bigger on paper than it sounds.

- -

Definition at line 32 of file ReverbTank.h.

-
- - - - - - - - - - - - - - - - -

-Public Member Functions

 ReverbTank (int8_t early_reflection1=37, int8_t early_reflection2=77, int8_t early_reflection3=127, int8_t loop1_delay=117, uint8_t loop2_delay=255, int8_t feedback_level=85)
 Constructor. More...
 
int next (int input)
 Process the next audio sample and return the reverbed signal. More...
 
void setEarlyReflections (int8_t early_reflection1, int8_t early_reflection2, int8_t early_reflection3)
 Set the early reflection times in terms of delay cells. More...
 
void setLoopDelays (int8_t loop1_delay, uint8_t loop2_delay)
 Set the loop delay times in terms of delay cells. More...
 
void setFeebackLevel (int8_t feedback_level)
 Set the feedback level for the recirculating delays. More...
 
-

Constructor & Destructor Documentation

- -

◆ ReverbTank()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ReverbTank::ReverbTank (int8_t early_reflection1 = 37,
int8_t early_reflection2 = 77,
int8_t early_reflection3 = 127,
int8_t loop1_delay = 117,
uint8_t loop2_delay = 255,
int8_t feedback_level = 85 
)
-
-inline
-
- -

Constructor.

-

This has default values for the early reflection times, recirculating delay lengths and feedback level, which can be changed here in the constructor or set with other functions during run time.

Parameters
- - - - - - - -
early_reflection1how long in delay cells till the first early reflection, from 0 to 127
early_reflection2how long in delay cells till the second early reflection, from early_reflection1 to 127
early_reflection3how long in delay cells till the third early reflection, from early_reflection2 to 127
loop1_delayhow long in delay cells for the first recirculating delay, form 0 to 127
loop2_delayhow long in delay cells for the first recirculating delay, form 0 to 255
feedback_levelhow much recirculation, from -128 to 127
-
-
- -

Definition at line 45 of file ReverbTank.h.

- -
-
-

Member Function Documentation

- -

◆ next()

- -
-
- - - - - -
- - - - - - - - -
int ReverbTank::next (int input)
-
-inline
-
- -

Process the next audio sample and return the reverbed signal.

-

This returns only the "wet" signal, which can be combined with the dry input signal in the sketch.

Parameters
- - -
inputthe audio signal to process
-
-
-
Returns
the processed signal
- -

Definition at line 65 of file ReverbTank.h.

- -
-
- -

◆ setEarlyReflections()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void ReverbTank::setEarlyReflections (int8_t early_reflection1,
int8_t early_reflection2,
int8_t early_reflection3 
)
-
-inline
-
- -

Set the early reflection times in terms of delay cells.

-
Parameters
- - - - -
early_reflection1how long in delay cells till the first early reflection, from 0 to 127
early_reflection2how long in delay cells till the second early reflection, from early_reflection1 to 127
early_reflection3how long in delay cells till the third early reflection, from early_reflection2 to 127
-
-
- -

Definition at line 91 of file ReverbTank.h.

- -
-
- -

◆ setFeebackLevel()

- -
-
- - - - - -
- - - - - - - - -
void ReverbTank::setFeebackLevel (int8_t feedback_level)
-
-inline
-
- -

Set the feedback level for the recirculating delays.

-
Parameters
- - -
feedback_levelhow much recirculation, from -128 to 127
-
-
- -

Definition at line 110 of file ReverbTank.h.

- -
-
- -

◆ setLoopDelays()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void ReverbTank::setLoopDelays (int8_t loop1_delay,
uint8_t loop2_delay 
)
-
-inline
-
- -

Set the loop delay times in terms of delay cells.

-
Parameters
- - - -
loop1_delayhow long in delay cells for the first recirculating delay, form 0 to 127
loop2_delayhow long in delay cells for the first recirculating delay, form 0 to 255
-
-
- -

Definition at line 102 of file ReverbTank.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/class_reverb_tank.js b/extras/doc/html/class_reverb_tank.js deleted file mode 100644 index 3119c98fc..000000000 --- a/extras/doc/html/class_reverb_tank.js +++ /dev/null @@ -1,8 +0,0 @@ -var class_reverb_tank = -[ - [ "ReverbTank", "class_reverb_tank.html#a3ca18b03d045df164462338f6ed0648c", null ], - [ "next", "class_reverb_tank.html#a4930ae7a871dba610fb141d7ab83d827", null ], - [ "setEarlyReflections", "class_reverb_tank.html#a6d27d8a02ec9551a5338bb1ba4bf9af2", null ], - [ "setFeebackLevel", "class_reverb_tank.html#a91eeb601e42df576737f0d44dc73c653", null ], - [ "setLoopDelays", "class_reverb_tank.html#a0b348b630007a5cbda8b314d0c8dd604", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/class_sample-members.html b/extras/doc/html/class_sample-members.html deleted file mode 100644 index 81aa7de62..000000000 --- a/extras/doc/html/class_sample-members.html +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP > Member List
-
-
- -

This is the complete list of members for Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >, including all inherited members.

- - - - - - - - - - - - - - - - - - - -
atIndex(unsigned int index)Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >inline
isPlaying()Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >inline
next()Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >inline
phaseIncFromFreq(unsigned int frequency)Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >inline
rangeWholeSample()Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >inline
Sample(const int8_t *TABLE_NAME)Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >inline
Sample()Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >inline
setEnd(unsigned int end)Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >inline
setFreq(int frequency)Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >inline
setFreq(float frequency)Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >inline
setFreq_Q24n8(Q24n8 frequency)Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >inline
setLoopingOff()Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >inline
setLoopingOn()Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >inline
setPhaseInc(unsigned long phaseinc_fractional)Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >inline
setStart(unsigned int startpos)Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >inline
setTable(const int8_t *TABLE_NAME)Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >inline
start()Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >inline
start(unsigned int startpos)Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >inline
-
- - - diff --git a/extras/doc/html/class_sample.html b/extras/doc/html/class_sample.html deleted file mode 100644 index f9b1e51bd..000000000 --- a/extras/doc/html/class_sample.html +++ /dev/null @@ -1,713 +0,0 @@ - - - - - - - -Mozzi: Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP > Class Template Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP > Class Template Reference
-
-
- -

Sample is like Oscil, it plays a wavetable. - More...

- -

#include <Sample.h>

-

Detailed Description

-

template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE, uint8_t INTERP = INTERP_NONE>
-class Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >

- -

Sample is like Oscil, it plays a wavetable.

-

However, Sample can be set to play once through only, with variable start and end points, or can loop, also with variable start and end points. It defaults to playing once through the whole sound table, from start to finish.

Template Parameters
- - - -
NUM_TABLE_CELLSThis is defined in the table ".h" file the Sample will be using. The sound table can be arbitrary length for Sample. It's important that NUM_TABLE_CELLS is either a literal number (eg. "8192") or a defined macro, rather than a const or int, for the Sample to run fast enough.
UPDATE_RATEThis will be MOZZI_AUDIO_RATE if the Sample is updated in updateAudio(), or MOZZI_CONTROL_RATE if it's updated each time updateControl() is called. It could also be a fraction of MOZZI_CONTROL_RATE if you are doing some kind of cyclic updating in updateControl(), for example, to spread out the processor load.
-
-
-

-int8_t2mozzi

-

Converting soundfiles for Mozzi. There is a python script called int8_t2mozzi.py in the Mozzi/python folder. The script converts raw sound data saved from a program like Audacity. Instructions are in the int8_t2mozzi.py file.

- -

Definition at line 48 of file Sample.h.

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 Sample (const int8_t *TABLE_NAME)
 Constructor. More...
 
 Sample ()
 Constructor. More...
 
void setTable (const int8_t *TABLE_NAME)
 Change the sound table which will be played by the Sample. More...
 
void setStart (unsigned int startpos)
 Sets the starting position in samples. More...
 
-void start ()
 Resets the phase (the playhead) to the start position, which will be 0 unless set to another value with setStart();.
 
void start (unsigned int startpos)
 Sets a new start position plays the sample from that position. More...
 
void setEnd (unsigned int end)
 Sets the end position in samples from the beginning of the sound. More...
 
-void rangeWholeSample ()
 Sets the start and end points to include the range of the whole sound table.
 
-void setLoopingOn ()
 Turns looping on.
 
-void setLoopingOff ()
 Turns looping off.
 
int8_t next ()
 Returns the sample at the current phase position, or 0 if looping is off and the phase overshoots the end of the sample. More...
 
boolean isPlaying ()
 Checks if the sample is playing by seeing if the phase is within the limits of its end position. More...
 
void setFreq (int frequency)
 Set the oscillator frequency with an unsigned int. More...
 
void setFreq (float frequency)
 Set the sample frequency with a float. More...
 
void setFreq_Q24n8 (Q24n8 frequency)
 Set the frequency using Q24n8 fixed-point number format. More...
 
int8_t atIndex (unsigned int index)
 Returns the sample at the given table index. More...
 
unsigned long phaseIncFromFreq (unsigned int frequency)
 phaseIncFromFreq() and setPhaseInc() are for saving processor time when sliding between frequencies. More...
 
void setPhaseInc (unsigned long phaseinc_fractional)
 Set a specific phase increment. More...
 
-

Constructor & Destructor Documentation

- -

◆ Sample() [1/2]

- -
-
-
-template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE, uint8_t INTERP = INTERP_NONE>
- - - - - -
- - - - - - - - -
Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >::Sample (const int8_t * TABLE_NAME)
-
-inline
-
- -

Constructor.

-
Parameters
- - -
TABLE_NAMEthe name of the array the Sample will be using. This can be found in the table ".h" file if you are using a table made for Mozzi by the int8_t2mozzi.py python script in Mozzi's python folder. Sound tables can be of arbitrary lengths for Sample().
-
-
- -

Definition at line 59 of file Sample.h.

- -
-
- -

◆ Sample() [2/2]

- -
-
-
-template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE, uint8_t INTERP = INTERP_NONE>
- - - - - -
- - - - - - - -
Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >::Sample ()
-
-inline
-
- -

Constructor.

-

Declare a Sample with template TABLE_NUM_CELLS and UPDATE_RATE parameters, without specifying a particular wave table for it to play. The table can be set or changed on the fly with setTable().

- -

Definition at line 71 of file Sample.h.

- -
-
-

Member Function Documentation

- -

◆ atIndex()

- -
-
-
-template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE, uint8_t INTERP = INTERP_NONE>
- - - - - -
- - - - - - - - -
int8_t Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >::atIndex (unsigned int index)
-
-inline
-
- -

Returns the sample at the given table index.

-
Parameters
- - -
indexbetween 0 and the table size.
-
-
-
Returns
the sample at the given table index.
- -

Definition at line 264 of file Sample.h.

- -
-
- -

◆ isPlaying()

- -
-
-
-template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE, uint8_t INTERP = INTERP_NONE>
- - - - - -
- - - - - - - -
boolean Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >::isPlaying ()
-
-inline
-
- -

Checks if the sample is playing by seeing if the phase is within the limits of its end position.

-
Returns
true if the sample is playing
- -

Definition at line 194 of file Sample.h.

- -
-
- -

◆ next()

- -
-
-
-template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE, uint8_t INTERP = INTERP_NONE>
- - - - - -
- - - - - - - -
int8_t Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >::next ()
-
-inline
-
- -

Returns the sample at the current phase position, or 0 if looping is off and the phase overshoots the end of the sample.

-

Updates the phase according to the current frequency.

Returns
the next sample value from the table, or 0 if it's finished playing.
- -

Definition at line 165 of file Sample.h.

- -
-
- -

◆ phaseIncFromFreq()

- -
-
-
-template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE, uint8_t INTERP = INTERP_NONE>
- - - - - -
- - - - - - - - -
unsigned long Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >::phaseIncFromFreq (unsigned int frequency)
-
-inline
-
- -

phaseIncFromFreq() and setPhaseInc() are for saving processor time when sliding between frequencies.

-

Instead of recalculating the phase increment for each frequency in between, you can just calculate the phase increment for each end frequency with phaseIncFromFreq(), then use a Line to interpolate on the fly and use setPhaseInc() to set the phase increment at each step. (Note: I should really profile this with the oscilloscope to see if it's worth the extra confusion!)

Parameters
- - -
frequencyfor which you want to calculate a phase increment value.
-
-
-
Returns
the phase increment value which will produce a given frequency.
- -

Definition at line 281 of file Sample.h.

- -
-
- -

◆ setEnd()

- -
-
-
-template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE, uint8_t INTERP = INTERP_NONE>
- - - - - -
- - - - - - - - -
void Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >::setEnd (unsigned int end)
-
-inline
-
- -

Sets the end position in samples from the beginning of the sound.

-
Parameters
- - -
endposition in samples.
-
-
- -

Definition at line 122 of file Sample.h.

- -
-
- -

◆ setFreq() [1/2]

- -
-
-
-template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE, uint8_t INTERP = INTERP_NONE>
- - - - - -
- - - - - - - - -
void Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >::setFreq (float frequency)
-
-inline
-
- -

Set the sample frequency with a float.

-

Using a float is the most reliable way to set frequencies, -Might- be slower than using an int but you need either this or setFreq_Q24n8 for fractional frequencies.

Parameters
- - -
frequencyto play the wave table.
-
-
- -

Definition at line 236 of file Sample.h.

- -
-
- -

◆ setFreq() [2/2]

- -
-
-
-template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE, uint8_t INTERP = INTERP_NONE>
- - - - - -
- - - - - - - - -
void Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >::setFreq (int frequency)
-
-inline
-
- -

Set the oscillator frequency with an unsigned int.

-

This is faster than using a float, so it's useful when processor time is tight, but it can be tricky with low and high frequencies, depending on the size of the wavetable being used. If you're not getting the results you expect, try explicitly using a float, or try setFreq_Q24n8.

Parameters
- - -
frequencyto play the wave table.
-
-
- -

Definition at line 225 of file Sample.h.

- -
-
- -

◆ setFreq_Q24n8()

- -
-
-
-template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE, uint8_t INTERP = INTERP_NONE>
- - - - - -
- - - - - - - - -
void Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >::setFreq_Q24n8 (Q24n8 frequency)
-
-inline
-
- -

Set the frequency using Q24n8 fixed-point number format.

-

This might be faster than the float version for setting low frequencies such as 1.5 Hz, or other values which may not work well with your table size. Note: use with caution because it's prone to overflow with higher frequencies and larger table sizes. An Q24n8 representation of 1.5 is 384 (ie. 1.5 * 256).

Parameters
- - -
frequencyin Q24n8 fixed-point number format.
-
-
- -

Definition at line 251 of file Sample.h.

- -
-
- -

◆ setPhaseInc()

- -
-
-
-template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE, uint8_t INTERP = INTERP_NONE>
- - - - - -
- - - - - - - - -
void Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >::setPhaseInc (unsigned long phaseinc_fractional)
-
-inline
-
- -

Set a specific phase increment.

-

See phaseIncFromFreq().

Parameters
- - -
phaseinc_fractionala phase increment value as calculated by phaseIncFromFreq().
-
-
- -

Definition at line 291 of file Sample.h.

- -
-
- -

◆ setStart()

- -
-
-
-template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE, uint8_t INTERP = INTERP_NONE>
- - - - - -
- - - - - - - - -
void Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >::setStart (unsigned int startpos)
-
-inline
-
- -

Sets the starting position in samples.

-
Parameters
- - -
startposoffset position in samples.
-
-
- -

Definition at line 92 of file Sample.h.

- -
-
- -

◆ setTable()

- -
-
-
-template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE, uint8_t INTERP = INTERP_NONE>
- - - - - -
- - - - - - - - -
void Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >::setTable (const int8_t * TABLE_NAME)
-
-inline
-
- -

Change the sound table which will be played by the Sample.

-
Parameters
- - -
TABLE_NAMEis the name of the array in the table ".h" file you're using.
-
-
- -

Definition at line 82 of file Sample.h.

- -
-
- -

◆ start()

- -
-
-
-template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE, uint8_t INTERP = INTERP_NONE>
- - - - - -
- - - - - - - - -
void Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >::start (unsigned int startpos)
-
-inline
-
- -

Sets a new start position plays the sample from that position.

-
Parameters
- - -
startposposition in samples from the beginning of the sound.
-
-
- -

Definition at line 111 of file Sample.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/class_sample.js b/extras/doc/html/class_sample.js deleted file mode 100644 index 01369187e..000000000 --- a/extras/doc/html/class_sample.js +++ /dev/null @@ -1,21 +0,0 @@ -var class_sample = -[ - [ "Sample", "class_sample.html#a0a22d5d06e5665853432fe1949e9d514", null ], - [ "Sample", "class_sample.html#ac9a043d47ab143f7a4d9370cf9f2f02d", null ], - [ "atIndex", "class_sample.html#a86948f48dcdc0cb19f6e256ece70149d", null ], - [ "isPlaying", "class_sample.html#ae4fa817151691ece9d2a91a0c0c03007", null ], - [ "next", "class_sample.html#a087e0da33436c9bfce1f462df50ac2a9", null ], - [ "phaseIncFromFreq", "class_sample.html#a18e72ecdb7bac8d41038b785d6deba58", null ], - [ "rangeWholeSample", "class_sample.html#a8a012ae52ee028222118f6bba5c7fb33", null ], - [ "setEnd", "class_sample.html#a9713e2d38b94e629c06916a7543ef48f", null ], - [ "setFreq", "class_sample.html#a4d5840157e98024537ae10cd27ff9f9e", null ], - [ "setFreq", "class_sample.html#aa0c37457f99def5c7036c6b6d9ee43fc", null ], - [ "setFreq_Q24n8", "class_sample.html#a903c2d634b10ac531c3c9f6a35fcb046", null ], - [ "setLoopingOff", "class_sample.html#accfdc762cd47425824179bff4cd2a78f", null ], - [ "setLoopingOn", "class_sample.html#a40e76011d841b84d2d54bf2cec6c4d5f", null ], - [ "setPhaseInc", "class_sample.html#aaff03b2a14f8f0f79c13840948151a1d", null ], - [ "setStart", "class_sample.html#a01836f7624ea574e966e775377d5bf11", null ], - [ "setTable", "class_sample.html#ade1401f231c920576b1eea2776ac591f", null ], - [ "start", "class_sample.html#a49ab98acdfb4f81a8860ad21876bdc18", null ], - [ "start", "class_sample.html#abb7084b95a6141843ede8025cdd726ac", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/class_sample_huffman-members.html b/extras/doc/html/class_sample_huffman-members.html deleted file mode 100644 index 1b5ed120d..000000000 --- a/extras/doc/html/class_sample_huffman-members.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
SampleHuffman Member List
-
-
- -

This is the complete list of members for SampleHuffman, including all inherited members.

- - - - - - -
next()SampleHuffmaninline
SampleHuffman(uint8_t const *SOUNDDATA, int16_t const *HUFFMAN_DATA, uint32_t const SOUNDDATA_BITS)SampleHuffmaninline
setLoopingOff()SampleHuffmaninline
setLoopingOn()SampleHuffmaninline
start()SampleHuffmaninline
-
- - - diff --git a/extras/doc/html/class_sample_huffman.html b/extras/doc/html/class_sample_huffman.html deleted file mode 100644 index ae411d99a..000000000 --- a/extras/doc/html/class_sample_huffman.html +++ /dev/null @@ -1,237 +0,0 @@ - - - - - - - -Mozzi: SampleHuffman Class Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
SampleHuffman Class Reference
-
-
- -

A sample player for samples encoded with Huffman compression. - More...

- -

#include <SampleHuffman.h>

-

Detailed Description

-

A sample player for samples encoded with Huffman compression.

-

This class and the audio2huff.py script are adapted from "audioout", an Arduino sketch by Thomas Grill, 2011 http//grrrr.org

-

Huffman decoding is used on sample differentials, saving 50-70% of space for 8 bit data, depending on the sample rate.

-

This implementation just plays back one sample each time next() is called, with no speed or other adjustments. It's slow, so it's likely you will only be able to play one sound at a time.

-

Audio data, Huffman decoder table, sample rate and bit depth are defined in a sounddata.h header file. This file can be generated for a sound file with the accompanying Python script audio2huff.py, in Mozzi/extras/python/

-

Invoke with: python audio2huff.py –sndfile=arduinosnd.wav –hdrfile=sounddata.h –bits=8 –name=soundtablename

-

You can resample and dither your audio file with SOX, e.g. to 8 bits depth @ Mozzi's 16384 Hz sample rate: sox fullglory.wav -b 8 -r 16384 arduinosnd.wav

-

Alternatively you can export a sound from Audacity, which seems to have less noticeable or no dithering, using Project Rate 16384 Hz and these output options: Other uncompressed files, Header: WAV(Microsoft), Encoding: Unsigned 8 bit PCM

-

The header file contains two lengthy arrays: One is "SOUNDDATA" which must fit into Flash RAM (available in total: 32k for ATMega328) The other is "HUFFMAN" which must also fit into Flash RAM

- -

Definition at line 50 of file SampleHuffman.h.

-
- - - - - - - - - - - - - - - - -

-Public Member Functions

 SampleHuffman (uint8_t const *SOUNDDATA, int16_t const *HUFFMAN_DATA, uint32_t const SOUNDDATA_BITS)
 Constructor. More...
 
int16_t next ()
 Update and return the next audio sample. More...
 
-void setLoopingOn ()
 Turns looping on, with the whole sample length as the loop range.
 
-void setLoopingOff ()
 Turns looping off.
 
-void start ()
 Sets the playhead to the beginning of the sample.
 
-

Constructor & Destructor Documentation

- -

◆ SampleHuffman()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
SampleHuffman::SampleHuffman (uint8_t const * SOUNDDATA,
int16_t const * HUFFMAN_DATA,
uint32_t const SOUNDDATA_BITS 
)
-
-inline
-
- -

Constructor.

-
Parameters
- - - - -
SOUNDDATAthe name of the SOUNDDATA table in the huffman sample .h file
HUFFMAN_DATAthe name of the HUFFMAN table in the huffman sample .h file
SOUNDDATA_BITSfrom the huffman sample .h file
-
-
- -

Definition at line 60 of file SampleHuffman.h.

- -
-
-

Member Function Documentation

- -

◆ next()

- -
-
- - - - - -
- - - - - - - -
int16_t SampleHuffman::next ()
-
-inline
-
- -

Update and return the next audio sample.

-

So far it just plays back one sample at a time without any variable tuning or speed.

Returns
the next audio sample
-
Note
timing: about 5 to 40 us, varies continuously depending on data
- -

Definition at line 71 of file SampleHuffman.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/class_sample_huffman.js b/extras/doc/html/class_sample_huffman.js deleted file mode 100644 index 69e2a177b..000000000 --- a/extras/doc/html/class_sample_huffman.js +++ /dev/null @@ -1,8 +0,0 @@ -var class_sample_huffman = -[ - [ "SampleHuffman", "class_sample_huffman.html#a8587f641949024cd5aad7bfc1715adff", null ], - [ "next", "class_sample_huffman.html#a8ec7bbb21f5cf0e780611a7539e86695", null ], - [ "setLoopingOff", "class_sample_huffman.html#a040bfc55c19bbaa6cc42331be3646c8a", null ], - [ "setLoopingOn", "class_sample_huffman.html#a01f9bfb513da0374fe78c12300b69760", null ], - [ "start", "class_sample_huffman.html#a15ead859261d3d916d700b75f4626f15", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/class_smooth-members.html b/extras/doc/html/class_smooth-members.html deleted file mode 100644 index 540bc06f4..000000000 --- a/extras/doc/html/class_smooth-members.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Smooth< T > Member List
-
-
- -

This is the complete list of members for Smooth< T >, including all inherited members.

- - - - - - -
next(T in)Smooth< T >inline
operator()(T n)Smooth< T >inline
setSmoothness(float smoothness)Smooth< T >inline
Smooth(float smoothness)Smooth< T >inline
Smooth()Smooth< T >inline
-
- - - diff --git a/extras/doc/html/class_smooth.html b/extras/doc/html/class_smooth.html deleted file mode 100644 index 719509e4b..000000000 --- a/extras/doc/html/class_smooth.html +++ /dev/null @@ -1,337 +0,0 @@ - - - - - - - -Mozzi: Smooth< T > Class Template Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
Smooth< T > Class Template Reference
-
-
- -

A simple infinite impulse response low pass filter for smoothing control or audio signals. - More...

- -

#include <Smooth.h>

-

Detailed Description

-

template<class T>
-class Smooth< T >

- -

A simple infinite impulse response low pass filter for smoothing control or audio signals.

-

This algorithm comes from http://en.wikipedia.org/wiki/Low-pass_filter: y[i] := y[i-1] + α * (x[i] - y[i-1]), translated as out = last_out + a * (in - last_out). It's not calibrated to any real-world update rate, so if you use it at MOZZI_CONTROL_RATE and you change MOZZI_CONTROL_RATE, you'll need to adjust the smoothness value to suit.

Template Parameters
- - -
Tthe type of numbers being smoothed. Watch out for numbers overflowing the internal calculations. Some experimentation is recommended.
-
-
-
Note
Timing: ~5us for 16 bit types, ~1us for 8 bit types.
- -

Definition at line 35 of file Smooth.h.

-
- - - - - - - - - - - - - - - - -

-Public Member Functions

 Smooth (float smoothness)
 Constructor. More...
 
 Smooth ()
 Constructor. More...
 
next (T in)
 Filters the input and returns the filtered value. More...
 
operator() (T n)
 Filters the input and returns the filtered value. More...
 
void setSmoothness (float smoothness)
 Sets how much smoothing the filter will apply to its input. More...
 
-

Constructor & Destructor Documentation

- -

◆ Smooth() [1/2]

- -
-
-
-template<class T >
- - - - - -
- - - - - - - - -
Smooth< T >::Smooth (float smoothness)
-
-inline
-
- -

Constructor.

-
Parameters
- - -
smoothnesssets how much smoothing the filter will apply to its input. Use a float in the range 0~1, where 0 is not very smooth and 0.99 is very smooth.
-
-
- -

Definition at line 47 of file Smooth.h.

- -
-
- -

◆ Smooth() [2/2]

- -
-
-
-template<class T >
- - - - - -
- - - - - - - -
Smooth< T >::Smooth ()
-
-inline
-
- -

Constructor.

-

This constructor which doesn't take a smoothness parameter is useful when you incorporate Smooth into another class definition. You need to call setSmoothness(float) for your object before using Smooth.

Note
there's probably a better way to do this...
- -

Definition at line 57 of file Smooth.h.

- -
-
-

Member Function Documentation

- -

◆ next()

- -
-
-
-template<class T >
- - - - - -
- - - - - - - - -
T Smooth< T >::next (in)
-
-inline
-
- -

Filters the input and returns the filtered value.

-

You can also use the operator() function, eg. something like mySmoother(input-value).

Parameters
- - -
inthe signal to be smoothed.
-
-
-
Returns
the filtered signal.
- -

Definition at line 66 of file Smooth.h.

- -
-
- -

◆ operator()()

- -
-
-
-template<class T >
- - - - - -
- - - - - - - - -
T Smooth< T >::operator() (n)
-
-inline
-
- -

Filters the input and returns the filtered value.

-

Same as next(input-value).

Parameters
- - -
inthe signal to be smoothed.
-
-
-
Returns
the filtered signal.
- -

Definition at line 79 of file Smooth.h.

- -
-
- -

◆ setSmoothness()

- -
-
-
-template<class T >
- - - - - -
- - - - - - - - -
void Smooth< T >::setSmoothness (float smoothness)
-
-inline
-
- -

Sets how much smoothing the filter will apply to its input.

-
Parameters
- - -
smoothnesssets how much smoothing the filter will apply to its input. Use a float in the range 0~1, where 0 is not very smooth and 0.99 is very smooth.
-
-
- -

Definition at line 90 of file Smooth.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/class_smooth.js b/extras/doc/html/class_smooth.js deleted file mode 100644 index 90dfd7b77..000000000 --- a/extras/doc/html/class_smooth.js +++ /dev/null @@ -1,8 +0,0 @@ -var class_smooth = -[ - [ "Smooth", "class_smooth.html#ac6626aae94eb7a22024e2054c1bbbb26", null ], - [ "Smooth", "class_smooth.html#ae57139ceccee7527013ec2297dbc79ad", null ], - [ "next", "class_smooth.html#ab7c809b6b5217771832a3e829695f8d5", null ], - [ "operator()", "class_smooth.html#a24eb02e4c4bfe9401f24ed0399b1e392", null ], - [ "setSmoothness", "class_smooth.html#aac44bbf7a9bc6b9bae80eecc1be6e188", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/class_smooth_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4-members.html b/extras/doc/html/class_smooth_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4-members.html deleted file mode 100644 index b553852e1..000000000 --- a/extras/doc/html/class_smooth_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4-members.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Smooth< SFix< NI, NF > > Member List
-
-
- -

This is the complete list of members for Smooth< SFix< NI, NF > >, including all inherited members.

- - - - - - - -
next(internal_type in)Smooth< SFix< NI, NF > >inline
operator()(internal_type n) (defined in Smooth< SFix< NI, NF > >)Smooth< SFix< NI, NF > >inline
setSmoothness(float smoothness)Smooth< SFix< NI, NF > >inline
setSmoothness(UFix< 0, _NF > smoothness)Smooth< SFix< NI, NF > >inline
Smooth(T smoothness)Smooth< SFix< NI, NF > >inline
Smooth()Smooth< SFix< NI, NF > >inline
-
- - - diff --git a/extras/doc/html/class_smooth_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html b/extras/doc/html/class_smooth_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html deleted file mode 100644 index 36b2fd858..000000000 --- a/extras/doc/html/class_smooth_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html +++ /dev/null @@ -1,332 +0,0 @@ - - - - - - - -Mozzi: Smooth< SFix< NI, NF > > Class Template Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
Smooth< SFix< NI, NF > > Class Template Reference
-
-
-

Detailed Description

-

template<int8_t NI, int8_t NF>
-class Smooth< SFix< NI, NF > >

- - -

Definition at line 352 of file Smooth.h.

-
- - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

template<typename T >
 Smooth (T smoothness)
 Constructor. More...
 
 Smooth ()
 Constructor. More...
 
internal_type next (internal_type in)
 Filters the input and returns the filtered value. More...
 
-internal_type operator() (internal_type n)
 
void setSmoothness (float smoothness)
 Sets how much smoothing the filter will apply to its input. More...
 
template<int8_t _NF>
void setSmoothness (UFix< 0, _NF > smoothness)
 Sets how much smoothing the filter will apply to its input. More...
 
-

Constructor & Destructor Documentation

- -

◆ Smooth() [1/2]

- -
-
-
-template<int8_t NI, int8_t NF>
-
-template<typename T >
- - - - - -
- - - - - - - - -
Smooth< SFix< NI, NF > >::Smooth (smoothness)
-
-inline
-
- -

Constructor.

-
Parameters
- - -
smoothnesssets how much smoothing the filter will apply to its input. Use a float or a UFix<0,NF> in the range 0~1, where 0 is not very smooth and 0.99 is very smooth.
-
-
- -

Definition at line 368 of file Smooth.h.

- -
-
- -

◆ Smooth() [2/2]

- -
-
-
-template<int8_t NI, int8_t NF>
- - - - - -
- - - - - - - -
Smooth< SFix< NI, NF > >::Smooth ()
-
-inline
-
- -

Constructor.

-

This constructor which doesn't take a smoothness parameter is useful when you incorporate Smooth into another class definition. You need to call setSmoothness(float) for your object before using Smooth.

Note
there's probably a better way to do this...
- -

Definition at line 378 of file Smooth.h.

- -
-
-

Member Function Documentation

- -

◆ next()

- -
-
-
-template<int8_t NI, int8_t NF>
- - - - - -
- - - - - - - - -
internal_type Smooth< SFix< NI, NF > >::next (internal_type in)
-
-inline
-
- -

Filters the input and returns the filtered value.

-

You can also use the operator() function, eg. something like mySmoother(input-value).

Parameters
- - -
inthe signal to be smoothed.
-
-
-
Returns
the filtered signal.
- -

Definition at line 387 of file Smooth.h.

- -
-
- -

◆ setSmoothness() [1/2]

- -
-
-
-template<int8_t NI, int8_t NF>
- - - - - -
- - - - - - - - -
void Smooth< SFix< NI, NF > >::setSmoothness (float smoothness)
-
-inline
-
- -

Sets how much smoothing the filter will apply to its input.

-
Parameters
- - -
smoothnesssets how much smoothing the filter will apply to its input. Use a float in the range 0~1, where 0 is not very smooth and 0.99 is very smooth.
-
-
- -

Definition at line 407 of file Smooth.h.

- -
-
- -

◆ setSmoothness() [2/2]

- -
-
-
-template<int8_t NI, int8_t NF>
-
-template<int8_t _NF>
- - - - - -
- - - - - - - - -
void Smooth< SFix< NI, NF > >::setSmoothness (UFix< 0, _NF > smoothness)
-
-inline
-
- -

Sets how much smoothing the filter will apply to its input.

-
Parameters
- - -
smoothnesssets how much smoothing the filter will apply to its input. Use a UFix<0,NF> in the range 0~1, where 0 is not very smooth and 0.99 is very smooth.
-
-
- -

Definition at line 418 of file Smooth.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/class_smooth_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.js b/extras/doc/html/class_smooth_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.js deleted file mode 100644 index 1363475c4..000000000 --- a/extras/doc/html/class_smooth_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.js +++ /dev/null @@ -1,9 +0,0 @@ -var class_smooth_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4 = -[ - [ "Smooth", "class_smooth_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#aa28affdd0ec1fb3d2b8519dce1bd62b1", null ], - [ "Smooth", "class_smooth_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#aa34d3186fcabc7a245c4b47e1f1dc135", null ], - [ "next", "class_smooth_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#a65d8d8b4cd627d57d8ff601b94edbf20", null ], - [ "operator()", "class_smooth_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#af7e0f03ad5fc534cb1fb042101f50eb8", null ], - [ "setSmoothness", "class_smooth_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#a1c440ce813507ccb32bd9a2f19aeb643", null ], - [ "setSmoothness", "class_smooth_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#a6fb0f2216e29f946dfb8befafaf9d5fc", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/class_smooth_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4-members.html b/extras/doc/html/class_smooth_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4-members.html deleted file mode 100644 index 89e316fa8..000000000 --- a/extras/doc/html/class_smooth_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4-members.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Smooth< UFix< NI, NF > > Member List
-
-
- -

This is the complete list of members for Smooth< UFix< NI, NF > >, including all inherited members.

- - - - - - - -
next(internal_type in)Smooth< UFix< NI, NF > >inline
operator()(internal_type n) (defined in Smooth< UFix< NI, NF > >)Smooth< UFix< NI, NF > >inline
setSmoothness(float smoothness)Smooth< UFix< NI, NF > >inline
setSmoothness(UFix< 0, _NF > smoothness)Smooth< UFix< NI, NF > >inline
Smooth(T smoothness)Smooth< UFix< NI, NF > >inline
Smooth()Smooth< UFix< NI, NF > >inline
-
- - - diff --git a/extras/doc/html/class_smooth_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html b/extras/doc/html/class_smooth_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html deleted file mode 100644 index 76ac73625..000000000 --- a/extras/doc/html/class_smooth_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html +++ /dev/null @@ -1,332 +0,0 @@ - - - - - - - -Mozzi: Smooth< UFix< NI, NF > > Class Template Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
Smooth< UFix< NI, NF > > Class Template Reference
-
-
-

Detailed Description

-

template<int8_t NI, int8_t NF>
-class Smooth< UFix< NI, NF > >

- - -

Definition at line 274 of file Smooth.h.

-
- - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

template<typename T >
 Smooth (T smoothness)
 Constructor. More...
 
 Smooth ()
 Constructor. More...
 
internal_type next (internal_type in)
 Filters the input and returns the filtered value. More...
 
-internal_type operator() (internal_type n)
 
void setSmoothness (float smoothness)
 Sets how much smoothing the filter will apply to its input. More...
 
template<int8_t _NF>
void setSmoothness (UFix< 0, _NF > smoothness)
 Sets how much smoothing the filter will apply to its input. More...
 
-

Constructor & Destructor Documentation

- -

◆ Smooth() [1/2]

- -
-
-
-template<int8_t NI, int8_t NF>
-
-template<typename T >
- - - - - -
- - - - - - - - -
Smooth< UFix< NI, NF > >::Smooth (smoothness)
-
-inline
-
- -

Constructor.

-
Parameters
- - -
smoothnesssets how much smoothing the filter will apply to its input. Use a float or a UFix<0,NF> in the range 0~1, where 0 is not very smooth and 0.99 is very smooth.
-
-
- -

Definition at line 290 of file Smooth.h.

- -
-
- -

◆ Smooth() [2/2]

- -
-
-
-template<int8_t NI, int8_t NF>
- - - - - -
- - - - - - - -
Smooth< UFix< NI, NF > >::Smooth ()
-
-inline
-
- -

Constructor.

-

This constructor which doesn't take a smoothness parameter is useful when you incorporate Smooth into another class definition. You need to call setSmoothness(float) for your object before using Smooth.

Note
there's probably a better way to do this...
- -

Definition at line 300 of file Smooth.h.

- -
-
-

Member Function Documentation

- -

◆ next()

- -
-
-
-template<int8_t NI, int8_t NF>
- - - - - -
- - - - - - - - -
internal_type Smooth< UFix< NI, NF > >::next (internal_type in)
-
-inline
-
- -

Filters the input and returns the filtered value.

-

You can also use the operator() function, eg. something like mySmoother(input-value).

Parameters
- - -
inthe signal to be smoothed.
-
-
-
Returns
the filtered signal.
- -

Definition at line 309 of file Smooth.h.

- -
-
- -

◆ setSmoothness() [1/2]

- -
-
-
-template<int8_t NI, int8_t NF>
- - - - - -
- - - - - - - - -
void Smooth< UFix< NI, NF > >::setSmoothness (float smoothness)
-
-inline
-
- -

Sets how much smoothing the filter will apply to its input.

-
Parameters
- - -
smoothnesssets how much smoothing the filter will apply to its input. Use a float in the range 0~1, where 0 is not very smooth and 0.99 is very smooth.
-
-
- -

Definition at line 329 of file Smooth.h.

- -
-
- -

◆ setSmoothness() [2/2]

- -
-
-
-template<int8_t NI, int8_t NF>
-
-template<int8_t _NF>
- - - - - -
- - - - - - - - -
void Smooth< UFix< NI, NF > >::setSmoothness (UFix< 0, _NF > smoothness)
-
-inline
-
- -

Sets how much smoothing the filter will apply to its input.

-
Parameters
- - -
smoothnesssets how much smoothing the filter will apply to its input. Use a UFix<0,NF> in the range 0~1, where 0 is not very smooth and 0.99 is very smooth.
-
-
- -

Definition at line 340 of file Smooth.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/class_smooth_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.js b/extras/doc/html/class_smooth_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.js deleted file mode 100644 index b2c408f32..000000000 --- a/extras/doc/html/class_smooth_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.js +++ /dev/null @@ -1,9 +0,0 @@ -var class_smooth_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4 = -[ - [ "Smooth", "class_smooth_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#a2ea0479e484a72f477f8dc56726cf933", null ], - [ "Smooth", "class_smooth_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#abc93c181f47511887d1275757b3c2c70", null ], - [ "next", "class_smooth_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#a2981f4eee274902609641c3a9e949576", null ], - [ "operator()", "class_smooth_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#a7c51b3bf5a40191727c376b4243ce93b", null ], - [ "setSmoothness", "class_smooth_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#aa4fb9cdb86f67bfc3e310920418329b7", null ], - [ "setSmoothness", "class_smooth_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#a24a2eb8633ce6a2a0da4e527c0186784", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/class_stack-members.html b/extras/doc/html/class_stack-members.html deleted file mode 100644 index 071c3b5f0..000000000 --- a/extras/doc/html/class_stack-members.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Stack< T, NUM_ITEMS > Member List
-
-
- -

This is the complete list of members for Stack< T, NUM_ITEMS >, including all inherited members.

- - - - -
pop()Stack< T, NUM_ITEMS >inline
push(T item)Stack< T, NUM_ITEMS >inline
Stack()Stack< T, NUM_ITEMS >inline
-
- - - diff --git a/extras/doc/html/class_stack.html b/extras/doc/html/class_stack.html deleted file mode 100644 index dc29ab03f..000000000 --- a/extras/doc/html/class_stack.html +++ /dev/null @@ -1,215 +0,0 @@ - - - - - - - -Mozzi: Stack< T, NUM_ITEMS > Class Template Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
Stack< T, NUM_ITEMS > Class Template Reference
-
-
- -

A simple stack, used internally for keeping track of analog input channels as they are read. - More...

- -

#include <Stack.h>

-

Detailed Description

-

template<class T, int NUM_ITEMS>
-class Stack< T, NUM_ITEMS >

- -

A simple stack, used internally for keeping track of analog input channels as they are read.

-

This stack is really just an array with a pointer to the most recent item, and memory is allocated at compile time.

Template Parameters
- - - -
Tthe kind of numbers (or other things) to store.
NUM_ITEMSthe maximum number of items the stack will need to hold.
-
-
- -

Definition at line 18 of file Stack.h.

-
- - - - - - - - - - -

-Public Member Functions

Stack ()
 Constructor.
 
void push (T item)
 Put an item on the stack. More...
 
pop ()
 Get the item on top of the stack. More...
 
-

Member Function Documentation

- -

◆ pop()

- -
-
-
-template<class T , int NUM_ITEMS>
- - - - - -
- - - - - - - -
T Stack< T, NUM_ITEMS >::pop ()
-
-inline
-
- -

Get the item on top of the stack.

-
Returns
T the item
- -

Definition at line 45 of file Stack.h.

- -
-
- -

◆ push()

- -
-
-
-template<class T , int NUM_ITEMS>
- - - - - -
- - - - - - - - -
void Stack< T, NUM_ITEMS >::push (item)
-
-inline
-
- -

Put an item on the stack.

-
Parameters
- - -
itemthe thing you want to put on the stack.
-
-
- -

Definition at line 34 of file Stack.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/class_stack.js b/extras/doc/html/class_stack.js deleted file mode 100644 index 92d6a7b3f..000000000 --- a/extras/doc/html/class_stack.js +++ /dev/null @@ -1,6 +0,0 @@ -var class_stack = -[ - [ "Stack", "class_stack.html#ab034b819e2382f80d952cf8527dc6e6c", null ], - [ "pop", "class_stack.html#afa9a35e13b68d9b59999227218a34d0a", null ], - [ "push", "class_stack.html#af67739d9b82966da46f7496f4c1fc801", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/class_state_variable-members.html b/extras/doc/html/class_state_variable-members.html deleted file mode 100644 index e298103c3..000000000 --- a/extras/doc/html/class_state_variable-members.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
StateVariable< FILTER_TYPE > Member List
-
-
- -

This is the complete list of members for StateVariable< FILTER_TYPE >, including all inherited members.

- - - - - -
next(int input)StateVariable< FILTER_TYPE >inline
setCentreFreq(unsigned int centre_freq)StateVariable< FILTER_TYPE >inline
setResonance(Q0n8 resonance)StateVariable< FILTER_TYPE >inline
StateVariable()StateVariable< FILTER_TYPE >inline
-
- - - diff --git a/extras/doc/html/class_state_variable.html b/extras/doc/html/class_state_variable.html deleted file mode 100644 index 6a2e0dfa4..000000000 --- a/extras/doc/html/class_state_variable.html +++ /dev/null @@ -1,273 +0,0 @@ - - - - - - - -Mozzi: StateVariable< FILTER_TYPE > Class Template Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
StateVariable< FILTER_TYPE > Class Template Reference
-
-
- -

State Variable Filter (approximation of Chamberlin version) Informed by pseudocode at http://www.musicdsp.org/showone.php?id=23 and. - More...

- -

#include <StateVariable.h>

-

Detailed Description

-

template<int8_t FILTER_TYPE>
-class StateVariable< FILTER_TYPE >

- -

State Variable Filter (approximation of Chamberlin version) Informed by pseudocode at http://www.musicdsp.org/showone.php?id=23 and.

-

http://www.musicdsp.org/showone.php?id=142. Here's the original:

-

cutoff = cutoff freq in Hz fs = sampling frequency //(e.g. 44100Hz) f = 2 sin (pi * cutoff / fs) //[approximately] q = resonance/bandwidth [0 < q <= 1] most res: q=1, less: q=0 low = lowpass output high = highpass output band = bandpass output notch = notch output

-

scale = q

-

low=high=band=0;

-

–beginloop low = low + f * band; high = scale * input - low - q*band; band = f * high + band; notch = high + low;

–endloop

-

References : Hal Chamberlin, Musical Applications of Microprocessors, 2nd Ed, Hayden Book Company 1985. pp 490-492. Jon Dattorro, Effect Design Part 1, J. Audio Eng. Soc., Vol 45, No. 9, 1997 September A State Variable filter which offers 12db resonant low, high, bandpass and notch modes.

Template Parameters
- - -
FILTER_TYPEchoose between LOWPASS, BANDPASS, HIGHPASS and NOTCH.
-
-
-
Note
To save processing time, this version of the filter does not saturate internally, so any resonant peaks are unceremoniously truncated. It may be worth adding code to constrain the internal variables to enable resonant saturating effects.
- -

Definition at line 65 of file StateVariable.h.

-
- - - - - - - - - - - - - -

-Public Member Functions

StateVariable ()
 Constructor.
 
void setResonance (Q0n8 resonance)
 Set how resonant the filter will be. More...
 
void setCentreFreq (unsigned int centre_freq)
 Set the centre or corner frequency of the filter. More...
 
int next (int input)
 Calculate the next sample, given an input signal. More...
 
-

Member Function Documentation

- -

◆ next()

- -
-
-
-template<int8_t FILTER_TYPE>
- - - - - -
- - - - - - - - -
int StateVariable< FILTER_TYPE >::next (int input)
-
-inline
-
- -

Calculate the next sample, given an input signal.

-
Parameters
- - -
inputthe signal input.
-
-
-
Returns
the signal output.
-
Note
Timing: 16 - 20 us
- -

Definition at line 112 of file StateVariable.h.

- -
-
- -

◆ setCentreFreq()

- -
-
-
-template<int8_t FILTER_TYPE>
- - - - - -
- - - - - - - - -
void StateVariable< FILTER_TYPE >::setCentreFreq (unsigned int centre_freq)
-
-inline
-
- -

Set the centre or corner frequency of the filter.

-
Parameters
- - -
centre_freq20 - 4096 Hz (MOZZI_AUDIO_RATE/4). This will be the cut-off frequency for LOWPASS and HIGHPASS, and the centre frequency to pass or reduce for BANDPASS and NOTCH.
-
-
-
Note
Timing 25-30us
-
-The frequency calculation is VERY "approximate". This really needs to be fixed.
- -

Definition at line 94 of file StateVariable.h.

- -
-
- -

◆ setResonance()

- -
-
-
-template<int8_t FILTER_TYPE>
- - - - - -
- - - - - - - - -
void StateVariable< FILTER_TYPE >::setResonance (Q0n8 resonance)
-
-inline
-
- -

Set how resonant the filter will be.

-
Parameters
- - -
resonancea byte value between 1 and 255. The lower this value is, the more resonant the filter. At very low values, the filter can output loud peaks which can exceed Mozzi's output range, so you may need to attenuate the output in your sketch.
-
-
-
Note
Timing < 500 ns
- -

Definition at line 79 of file StateVariable.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/class_state_variable.js b/extras/doc/html/class_state_variable.js deleted file mode 100644 index 0972d694d..000000000 --- a/extras/doc/html/class_state_variable.js +++ /dev/null @@ -1,7 +0,0 @@ -var class_state_variable = -[ - [ "StateVariable", "class_state_variable.html#a9950b71a16f63654552d3e15774d6638", null ], - [ "next", "class_state_variable.html#a14cb100c22e4a33025665ef3620ca2b8", null ], - [ "setCentreFreq", "class_state_variable.html#a47e7ddad76db7009e370fa91ea5d4d3d", null ], - [ "setResonance", "class_state_variable.html#a992e23a80b611b72e3e764c14d5ee188", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/class_wave_folder-members.html b/extras/doc/html/class_wave_folder-members.html deleted file mode 100644 index f924ab452..000000000 --- a/extras/doc/html/class_wave_folder-members.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
WaveFolder< T > Member List
-
-
- -

This is the complete list of members for WaveFolder< T >, including all inherited members.

- - - - - - -
next(T in)WaveFolder< T >inline
setHighLimit(T highLimit)WaveFolder< T >inline
setLimits(T lowLimit, T highLimit)WaveFolder< T >inline
setLowLimit(T lowLimit)WaveFolder< T >inline
WaveFolder()WaveFolder< T >inline
-
- - - diff --git a/extras/doc/html/class_wave_folder.html b/extras/doc/html/class_wave_folder.html deleted file mode 100644 index 690c8808a..000000000 --- a/extras/doc/html/class_wave_folder.html +++ /dev/null @@ -1,309 +0,0 @@ - - - - - - - -Mozzi: WaveFolder< T > Class Template Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
WaveFolder< T > Class Template Reference
-
-
- -

A simple wavefolder. - More...

- -

#include <WaveFolder.h>

-

Detailed Description

-

template<typename T = AudioOutputStorage_t>
-class WaveFolder< T >

- -

A simple wavefolder.

- -

Definition at line 37 of file WaveFolder.h.

-
- - - - - - - - - - - - - - - - -

-Public Member Functions

WaveFolder ()
 Constructor.
 
void setHighLimit (T highLimit)
 Set the high limit where the wave will start to be folded back the other way. More...
 
void setLowLimit (T lowLimit)
 Set the low limit where the wave will start to be folded back the other way. More...
 
void setLimits (T lowLimit, T highLimit)
 Set the low and the high limits at the same time. More...
 
next (T in)
 Return the next folded sample. More...
 
-

Member Function Documentation

- -

◆ next()

- -
-
-
-template<typename T = AudioOutputStorage_t>
- - - - - -
- - - - - - - - -
T WaveFolder< T >::next (in)
-
-inline
-
- -

Return the next folded sample.

-
Parameters
- - -
inis the signal input.
-
-
-
Returns
the folded output.
- -

Definition at line 85 of file WaveFolder.h.

- -
-
- -

◆ setHighLimit()

- -
-
-
-template<typename T = AudioOutputStorage_t>
- - - - - -
- - - - - - - - -
void WaveFolder< T >::setHighLimit (highLimit)
-
-inline
-
- -

Set the high limit where the wave will start to be folded back the other way.

-
Parameters
- - -
highLimitthe high limit used by the wavefolder.
-
-
- -

Definition at line 48 of file WaveFolder.h.

- -
-
- -

◆ setLimits()

- -
-
-
-template<typename T = AudioOutputStorage_t>
- - - - - -
- - - - - - - - - - - - - - - - - - -
void WaveFolder< T >::setLimits (lowLimit,
highLimit 
)
-
-inline
-
- -

Set the low and the high limits at the same time.

-
Parameters
- - - -
lowLimitthe low limit used by the wavefolder
highLimitthe high limit used by the wavefolder
-
-
-
Note
highLimit MUST be higher than lowLimit
- -

Definition at line 72 of file WaveFolder.h.

- -
-
- -

◆ setLowLimit()

- -
-
-
-template<typename T = AudioOutputStorage_t>
- - - - - -
- - - - - - - - -
void WaveFolder< T >::setLowLimit (lowLimit)
-
-inline
-
- -

Set the low limit where the wave will start to be folded back the other way.

-
Parameters
- - -
lowLimitthe low limit used by the wavefolder.
-
-
- -

Definition at line 59 of file WaveFolder.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/class_wave_folder.js b/extras/doc/html/class_wave_folder.js deleted file mode 100644 index 14a4a7152..000000000 --- a/extras/doc/html/class_wave_folder.js +++ /dev/null @@ -1,8 +0,0 @@ -var class_wave_folder = -[ - [ "WaveFolder", "class_wave_folder.html#a3be0f0b5ee86082e44b0b88cf5b9ac2f", null ], - [ "next", "class_wave_folder.html#af80790f963340c3b7f289933a28cbfc5", null ], - [ "setHighLimit", "class_wave_folder.html#a2103be1ef91d0a3e4d896eabdad83fc7", null ], - [ "setLimits", "class_wave_folder.html#af06cfae975014be2651966519df0f0cd", null ], - [ "setLowLimit", "class_wave_folder.html#ae8522fd82e949e8115193905bcf5b01c", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/class_wave_packet-members.html b/extras/doc/html/class_wave_packet-members.html deleted file mode 100644 index 119f9bdbe..000000000 --- a/extras/doc/html/class_wave_packet-members.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
WavePacket< ALGORITHM > Member List
-
-
- -

This is the complete list of members for WavePacket< ALGORITHM >, including all inherited members.

- - - - - - - -
next()WavePacket< ALGORITHM >inline
set(int fundamental, int bandwidth, int centrefreq)WavePacket< ALGORITHM >inline
setBandwidth(int bandwidth)WavePacket< ALGORITHM >inline
setCentreFreq(int centrefreq)WavePacket< ALGORITHM >inline
setFundamental(int fundamental)WavePacket< ALGORITHM >inline
WavePacket()WavePacket< ALGORITHM >inline
-
- - - diff --git a/extras/doc/html/class_wave_packet.html b/extras/doc/html/class_wave_packet.html deleted file mode 100644 index ab6e367c2..000000000 --- a/extras/doc/html/class_wave_packet.html +++ /dev/null @@ -1,369 +0,0 @@ - - - - - - - -Mozzi: WavePacket< ALGORITHM > Class Template Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
WavePacket< ALGORITHM > Class Template Reference
-
-
- -

Wavepacket synthesis, with two overlapping streams of wave packets. - More...

- -

#include <WavePacket.h>

-
- + Inheritance diagram for WavePacket< ALGORITHM >:
-
-
- -

Detailed Description

-

template<int8_t ALGORITHM>
-class WavePacket< ALGORITHM >

- -

Wavepacket synthesis, with two overlapping streams of wave packets.

-

Draws on Miller Puckette's Pure Data example, F14.wave.packet.pd. Each packet is an enveloped grain of a sin (or cos) wave. The frequency of the wave, the width of the envelopes and the rate of release of envelopes are the parameters which can be changed.

Template Parameters
- - -
ALGORITHMoptions are SINGLE or DOUBLE, for a single non-overlapping stream of packets or a double, overlapping stream.
-
-
- -

Definition at line 36 of file WavePacket.h.

-
- - - - - - - - - - - - - - - - - - - -

-Public Member Functions

WavePacket ()
 Constructor.
 
void set (int fundamental, int bandwidth, int centrefreq)
 Set all the parameters for the synthesis. More...
 
void setFundamental (int fundamental)
 Set the fundamental frequency. More...
 
void setBandwidth (int bandwidth)
 Set the bandwidth. More...
 
void setCentreFreq (int centrefreq)
 Set the centre frequency. More...
 
int next ()
 Calculate the next synthesised sample. More...
 
-

Member Function Documentation

- -

◆ next()

- -
-
-
-template<int8_t ALGORITHM>
- - - - - -
- - - - - - - -
int WavePacket< ALGORITHM >::next ()
-
-inline
-
- -

Calculate the next synthesised sample.

-
Returns
a full-scale 16 bit value, which needs to be scaled to suit your sketch. If you're using it straight as the sketch output, then that will be yourThing.next()>>2 for HIFI 14 bit output, or >>8 for STANDARD 8+ bit output.
- -

Definition at line 113 of file WavePacket.h.

- -
-
- -

◆ set()

- -
-
-
-template<int8_t ALGORITHM>
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void WavePacket< ALGORITHM >::set (int fundamental,
int bandwidth,
int centrefreq 
)
-
-inline
-
- -

Set all the parameters for the synthesis.

-

The function is designed so that usable ranges for parameters can come from analog inputs, ie. 0-1023.

Parameters
- - - - -
fundamentalthe rate at which packets are produced.
bandwidththe width of each packet. A lower value allows more of the centre frequency to be audible, a rounder sound.
- A higher value produces narrower packets, a more buzzing sound.
centrefreqthe oscillation frequency within each packet.
-
-
- -

Definition at line 57 of file WavePacket.h.

- -
-
- -

◆ setBandwidth()

- -
-
-
-template<int8_t ALGORITHM>
- - - - - -
- - - - - - - - -
void WavePacket< ALGORITHM >::setBandwidth (int bandwidth)
-
-inline
-
- -

Set the bandwidth.

-

The function is designed so that usable ranges for parameters can come from analog inputs, ie. 0-1023.

Parameters
- - -
bandwidththe width of each packet. A lower value allows more of the centre frequency to be audible, a rounder sound.
- A higher value produces narrower packets, a more buzzing sound.
-
-
- -

Definition at line 85 of file WavePacket.h.

- -
-
- -

◆ setCentreFreq()

- -
-
-
-template<int8_t ALGORITHM>
- - - - - -
- - - - - - - - -
void WavePacket< ALGORITHM >::setCentreFreq (int centrefreq)
-
-inline
-
- -

Set the centre frequency.

-

The function is designed so that usable ranges for parameters can come from analog inputs, ie. 0-1023.

Parameters
- - -
centrefreqthe oscillation frequency within each packet.
-
-
- -

Definition at line 100 of file WavePacket.h.

- -
-
- -

◆ setFundamental()

- -
-
-
-template<int8_t ALGORITHM>
- - - - - -
- - - - - - - - -
void WavePacket< ALGORITHM >::setFundamental (int fundamental)
-
-inline
-
- -

Set the fundamental frequency.

-

The function is designed so that usable ranges for parameters can come from analog inputs, ie. 0-1023.

Parameters
- - -
fundamentalthe rate at which packets are produced.
-
-
- -

Definition at line 70 of file WavePacket.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/class_wave_packet.js b/extras/doc/html/class_wave_packet.js deleted file mode 100644 index 14e6d2c2c..000000000 --- a/extras/doc/html/class_wave_packet.js +++ /dev/null @@ -1,9 +0,0 @@ -var class_wave_packet = -[ - [ "WavePacket", "class_wave_packet.html#a09afa3b26d61c97e24ccbae9cba2fd57", null ], - [ "next", "class_wave_packet.html#ab4e35082b60d3ccc29c86d09078329bd", null ], - [ "set", "class_wave_packet.html#ac693b3d676b583584a8cfc6b9cc0f37f", null ], - [ "setBandwidth", "class_wave_packet.html#abce5b3ca4c559473c199744753fb75aa", null ], - [ "setCentreFreq", "class_wave_packet.html#adbbbf8b6b9eaae18ef381ff04be3eb5b", null ], - [ "setFundamental", "class_wave_packet.html#af87c37ffd274eee91aa93c0f7d560be2", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/class_wave_packet.png b/extras/doc/html/class_wave_packet.png deleted file mode 100644 index fe78b82e1..000000000 Binary files a/extras/doc/html/class_wave_packet.png and /dev/null differ diff --git a/extras/doc/html/class_wave_packet_sample-members.html b/extras/doc/html/class_wave_packet_sample-members.html deleted file mode 100644 index f0af04e58..000000000 --- a/extras/doc/html/class_wave_packet_sample-members.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
WavePacketSample< ALGORITHM > Member List
-
-
- -

This is the complete list of members for WavePacketSample< ALGORITHM >, including all inherited members.

- - - - - - - - -
next()WavePacket< ALGORITHM >inline
set(int fundamental, int bandwidth, int centrefreq)WavePacket< ALGORITHM >inline
setBandwidth(int bandwidth)WavePacket< ALGORITHM >inline
setCentreFreq(int centrefreq)WavePacket< ALGORITHM >inline
setFundamental(int fundamental)WavePacket< ALGORITHM >inline
setTable(const int8_t *TABLE_NAME)WavePacketSample< ALGORITHM >inline
WavePacket()WavePacket< ALGORITHM >inline
-
- - - diff --git a/extras/doc/html/class_wave_packet_sample.html b/extras/doc/html/class_wave_packet_sample.html deleted file mode 100644 index 443904551..000000000 --- a/extras/doc/html/class_wave_packet_sample.html +++ /dev/null @@ -1,405 +0,0 @@ - - - - - - - -Mozzi: WavePacketSample< ALGORITHM > Class Template Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
WavePacketSample< ALGORITHM > Class Template Reference
-
-
- -

A WavePacket which allows a custom table to be set as the audio source for the wavepackets (or grains). - More...

- -

#include <WavePacketSample.h>

-
- + Inheritance diagram for WavePacketSample< ALGORITHM >:
-
-
- -

Detailed Description

-

template<int8_t ALGORITHM>
-class WavePacketSample< ALGORITHM >

- -

A WavePacket which allows a custom table to be set as the audio source for the wavepackets (or grains).

-
Template Parameters
- - -
ALGORITHMoptions are SINGLE or DOUBLE, for a single non-overlapping stream of packets or a double, overlapping stream.
-
-
- -

Definition at line 23 of file WavePacketSample.h.

-
- - - - - - - - - - - - - - - - - - - -

-Public Member Functions

void setTable (const int8_t *TABLE_NAME)
 Change the sound table which will be played. More...
 
void set (int fundamental, int bandwidth, int centrefreq)
 Set all the parameters for the synthesis. More...
 
void setFundamental (int fundamental)
 Set the fundamental frequency. More...
 
void setBandwidth (int bandwidth)
 Set the bandwidth. More...
 
void setCentreFreq (int centrefreq)
 Set the centre frequency. More...
 
int next ()
 Calculate the next synthesised sample. More...
 
-

Member Function Documentation

- -

◆ next()

- -
-
-
-template<int8_t ALGORITHM>
- - - - - -
- - - - - - - -
int WavePacket< ALGORITHM >::next ()
-
-inlineinherited
-
- -

Calculate the next synthesised sample.

-
Returns
a full-scale 16 bit value, which needs to be scaled to suit your sketch. If you're using it straight as the sketch output, then that will be yourThing.next()>>2 for HIFI 14 bit output, or >>8 for STANDARD 8+ bit output.
- -

Definition at line 113 of file WavePacket.h.

- -
-
- -

◆ set()

- -
-
-
-template<int8_t ALGORITHM>
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
void WavePacket< ALGORITHM >::set (int fundamental,
int bandwidth,
int centrefreq 
)
-
-inlineinherited
-
- -

Set all the parameters for the synthesis.

-

The function is designed so that usable ranges for parameters can come from analog inputs, ie. 0-1023.

Parameters
- - - - -
fundamentalthe rate at which packets are produced.
bandwidththe width of each packet. A lower value allows more of the centre frequency to be audible, a rounder sound.
- A higher value produces narrower packets, a more buzzing sound.
centrefreqthe oscillation frequency within each packet.
-
-
- -

Definition at line 57 of file WavePacket.h.

- -
-
- -

◆ setBandwidth()

- -
-
-
-template<int8_t ALGORITHM>
- - - - - -
- - - - - - - - -
void WavePacket< ALGORITHM >::setBandwidth (int bandwidth)
-
-inlineinherited
-
- -

Set the bandwidth.

-

The function is designed so that usable ranges for parameters can come from analog inputs, ie. 0-1023.

Parameters
- - -
bandwidththe width of each packet. A lower value allows more of the centre frequency to be audible, a rounder sound.
- A higher value produces narrower packets, a more buzzing sound.
-
-
- -

Definition at line 85 of file WavePacket.h.

- -
-
- -

◆ setCentreFreq()

- -
-
-
-template<int8_t ALGORITHM>
- - - - - -
- - - - - - - - -
void WavePacket< ALGORITHM >::setCentreFreq (int centrefreq)
-
-inlineinherited
-
- -

Set the centre frequency.

-

The function is designed so that usable ranges for parameters can come from analog inputs, ie. 0-1023.

Parameters
- - -
centrefreqthe oscillation frequency within each packet.
-
-
- -

Definition at line 100 of file WavePacket.h.

- -
-
- -

◆ setFundamental()

- -
-
-
-template<int8_t ALGORITHM>
- - - - - -
- - - - - - - - -
void WavePacket< ALGORITHM >::setFundamental (int fundamental)
-
-inlineinherited
-
- -

Set the fundamental frequency.

-

The function is designed so that usable ranges for parameters can come from analog inputs, ie. 0-1023.

Parameters
- - -
fundamentalthe rate at which packets are produced.
-
-
- -

Definition at line 70 of file WavePacket.h.

- -
-
- -

◆ setTable()

- -
-
-
-template<int8_t ALGORITHM>
- - - - - -
- - - - - - - - -
void WavePacketSample< ALGORITHM >::setTable (const int8_t * TABLE_NAME)
-
-inline
-
- -

Change the sound table which will be played.

-

Needs to be 8192 cells long for now.

Parameters
- - -
TABLE_NAMEis the name of the array in the table ".h" file you're using.
-
-
- -

Definition at line 30 of file WavePacketSample.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/class_wave_packet_sample.js b/extras/doc/html/class_wave_packet_sample.js deleted file mode 100644 index 3e22eb7be..000000000 --- a/extras/doc/html/class_wave_packet_sample.js +++ /dev/null @@ -1,9 +0,0 @@ -var class_wave_packet_sample = -[ - [ "next", "class_wave_packet_sample.html#ab4e35082b60d3ccc29c86d09078329bd", null ], - [ "set", "class_wave_packet_sample.html#ac693b3d676b583584a8cfc6b9cc0f37f", null ], - [ "setBandwidth", "class_wave_packet_sample.html#abce5b3ca4c559473c199744753fb75aa", null ], - [ "setCentreFreq", "class_wave_packet_sample.html#adbbbf8b6b9eaae18ef381ff04be3eb5b", null ], - [ "setFundamental", "class_wave_packet_sample.html#af87c37ffd274eee91aa93c0f7d560be2", null ], - [ "setTable", "class_wave_packet_sample.html#af50b8ef715a86bcdf417961b585c170d", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/class_wave_packet_sample.png b/extras/doc/html/class_wave_packet_sample.png deleted file mode 100644 index c6943fc24..000000000 Binary files a/extras/doc/html/class_wave_packet_sample.png and /dev/null differ diff --git a/extras/doc/html/class_wave_shaper.html b/extras/doc/html/class_wave_shaper.html deleted file mode 100644 index 33546f94d..000000000 --- a/extras/doc/html/class_wave_shaper.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - - -Mozzi: WaveShaper< T > Class Template Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
WaveShaper< T > Class Template Reference
-
-
- -

WaveShaper maps values from its input to values in a table, which are returned as output. - More...

- -

#include <WaveShaper.h>

-

Detailed Description

-

template<class T>
-class WaveShaper< T >

- -

WaveShaper maps values from its input to values in a table, which are returned as output.

-
Template Parameters
- - -
Tthe type of numbers being input to be shaped, chosen to match the table.
-
-
- -

Definition at line 22 of file WaveShaper.h.

-
-
- - - diff --git a/extras/doc/html/class_wave_shaper_3_01char_01_4-members.html b/extras/doc/html/class_wave_shaper_3_01char_01_4-members.html deleted file mode 100644 index b89b2b548..000000000 --- a/extras/doc/html/class_wave_shaper_3_01char_01_4-members.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
WaveShaper< char > Member List
-
-
- -

This is the complete list of members for WaveShaper< char >, including all inherited members.

- - - -
next(byte in)WaveShaper< char >inline
WaveShaper(const int8_t *TABLE_NAME)WaveShaper< char >inline
-
- - - diff --git a/extras/doc/html/class_wave_shaper_3_01char_01_4.html b/extras/doc/html/class_wave_shaper_3_01char_01_4.html deleted file mode 100644 index 460598a0b..000000000 --- a/extras/doc/html/class_wave_shaper_3_01char_01_4.html +++ /dev/null @@ -1,211 +0,0 @@ - - - - - - - -Mozzi: WaveShaper< char > Class Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
WaveShaper< char > Class Reference
-
-
- -

int8_t specialisation of WaveShaper template - More...

- -

#include <WaveShaper.h>

-

Detailed Description

-

int8_t specialisation of WaveShaper template

- -

Definition at line 29 of file WaveShaper.h.

-
- - - - - - - -

-Public Member Functions

 WaveShaper (const int8_t *TABLE_NAME)
 Constructor. More...
 
int8_t next (byte in)
 Maps input to output, transforming it according to the table being used. More...
 
-

Constructor & Destructor Documentation

- -

◆ WaveShaper()

- -
-
- - - - - -
- - - - - - - - -
WaveShaper< char >::WaveShaper (const int8_t * TABLE_NAME)
-
-inline
-
- -

Constructor.

-

Use the template parameter to set type of numbers being mapped. For example, WaveShaper <int> myWaveShaper; makes a WaveShaper which uses ints.

Template Parameters
- - -
Tthe type of numbers being input to be shaped, chosen to match the table.
-
-
-
Parameters
- - -
TABLE_NAMEthe name of the table being used, which can be found in the ".h" file containing the table.
-
-
- -

Definition at line 38 of file WaveShaper.h.

- -
-
-

Member Function Documentation

- -

◆ next()

- -
-
- - - - - -
- - - - - - - - -
int8_t WaveShaper< char >::next (byte in)
-
-inline
-
- -

Maps input to output, transforming it according to the table being used.

-
Parameters
- - -
inthe input signal. For flexibility, it's up to you to give the correct offset to your input signal. So if you're mapping a signed 8-bit signal (such as the output of an Oscil) into a 256 cell table centred around cell 128, add 128 to offset the input value.
-
-
-
Returns
the shaped signal.
- -

Definition at line 52 of file WaveShaper.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/class_wave_shaper_3_01char_01_4.js b/extras/doc/html/class_wave_shaper_3_01char_01_4.js deleted file mode 100644 index d9c3e50ed..000000000 --- a/extras/doc/html/class_wave_shaper_3_01char_01_4.js +++ /dev/null @@ -1,5 +0,0 @@ -var class_wave_shaper_3_01char_01_4 = -[ - [ "WaveShaper", "class_wave_shaper_3_01char_01_4.html#a6364609248c42174f9f7e4974585e301", null ], - [ "next", "class_wave_shaper_3_01char_01_4.html#a8aa75261350b2651a2cbca264a02e944", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/class_wave_shaper_3_01int_01_4-members.html b/extras/doc/html/class_wave_shaper_3_01int_01_4-members.html deleted file mode 100644 index 33569d762..000000000 --- a/extras/doc/html/class_wave_shaper_3_01int_01_4-members.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
WaveShaper< int > Member List
-
-
- -

This is the complete list of members for WaveShaper< int >, including all inherited members.

- - - -
next(int in)WaveShaper< int >inline
WaveShaper(const int16_t *TABLE_NAME)WaveShaper< int >inline
-
- - - diff --git a/extras/doc/html/class_wave_shaper_3_01int_01_4.html b/extras/doc/html/class_wave_shaper_3_01int_01_4.html deleted file mode 100644 index afaf01a18..000000000 --- a/extras/doc/html/class_wave_shaper_3_01int_01_4.html +++ /dev/null @@ -1,211 +0,0 @@ - - - - - - - -Mozzi: WaveShaper< int > Class Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
WaveShaper< int > Class Reference
-
-
- -

int specialisation of WaveShaper template - More...

- -

#include <WaveShaper.h>

-

Detailed Description

-

int specialisation of WaveShaper template

- -

Definition at line 65 of file WaveShaper.h.

-
- - - - - - - -

-Public Member Functions

 WaveShaper (const int16_t *TABLE_NAME)
 Constructor. More...
 
int next (int in)
 Maps input to output, transforming it according to the table being used. More...
 
-

Constructor & Destructor Documentation

- -

◆ WaveShaper()

- -
-
- - - - - -
- - - - - - - - -
WaveShaper< int >::WaveShaper (const int16_t * TABLE_NAME)
-
-inline
-
- -

Constructor.

-

Use the template parameter to set type of numbers being mapped. For example, WaveShaper <int> myWaveShaper; makes a WaveShaper which uses ints.

Template Parameters
- - -
Tthe type of numbers being input to be shaped, chosen to match the table.
-
-
-
Parameters
- - -
TABLE_NAMEthe name of the table being used, which can be found in the ".h" file containing the table.
-
-
- -

Definition at line 74 of file WaveShaper.h.

- -
-
-

Member Function Documentation

- -

◆ next()

- -
-
- - - - - -
- - - - - - - - -
int WaveShaper< int >::next (int in)
-
-inline
-
- -

Maps input to output, transforming it according to the table being used.

-
Parameters
- - -
inthe input signal. For flexibility, it's up to you to give the correct offset to your input signal. So if you're mapping a signed 9-bit signal (such as the sum of 2 8-bit Oscils) into a 512 cell table centred around cell 256, add 256 to offset the input value. With a sigmoid table, this may be useful for compressing a bigger signal into the -244 to 243 output range of Mozzi, rather than dividing the signal and returning a int8_t from updateAudio().
-
-
-
Returns
the shaped signal.
- -

Definition at line 91 of file WaveShaper.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/class_wave_shaper_3_01int_01_4.js b/extras/doc/html/class_wave_shaper_3_01int_01_4.js deleted file mode 100644 index e00986f6c..000000000 --- a/extras/doc/html/class_wave_shaper_3_01int_01_4.js +++ /dev/null @@ -1,5 +0,0 @@ -var class_wave_shaper_3_01int_01_4 = -[ - [ "WaveShaper", "class_wave_shaper_3_01int_01_4.html#a9cc7f4f6a7493172cdc94411ac09275a", null ], - [ "next", "class_wave_shaper_3_01int_01_4.html#a2bf3bca1848a953c52ae94d5b58199ba", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/classes.html b/extras/doc/html/classes.html deleted file mode 100644 index 011df6fc7..000000000 --- a/extras/doc/html/classes.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - - -Mozzi: Class Index - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Class Index
-
- -
- - - diff --git a/extras/doc/html/closed.png b/extras/doc/html/closed.png deleted file mode 100644 index 8fc5c6a9c..000000000 Binary files a/extras/doc/html/closed.png and /dev/null differ diff --git a/extras/doc/html/config__checks__avr_8h_source.html b/extras/doc/html/config__checks__avr_8h_source.html deleted file mode 100644 index 81c6502d8..000000000 --- a/extras/doc/html/config__checks__avr_8h_source.html +++ /dev/null @@ -1,280 +0,0 @@ - - - - - - - -Mozzi: config_checks_avr.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
config_checks_avr.h
-
-
-
1 /*
-
2  * config_checks_avr.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2023-2024 Thomas Friedrichsmeier and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10 */
-
11 
-
12 /* For Mozzi-internal use: Apply hardware specific config defaults and config checks: AVR */
-
13 
-
14 /**
-
15  * @page hardware_avr Mozzi on classic Arduino, Teensy 2.x, Arduino Mega, and other 8 bit "AVR"/ATMEGA architecture boards
-
16  *
-
17  * @section avr_status Port status and notes
-
18  * This is the original "port" of Mozzi, and thus very elaborate. The main challenges on this platform, compared to other MCUs, are limitations in
-
19  * flash, RAM, and CPU power.
-
20  *
-
21  * @section avr_output Output modes
-
22  * The following audio modes (see @ref MOZZI_AUDIO_MODE) are currently supported on this hardware:
-
23  * - MOZZI_OUTPUT_PWM
-
24  * - MOZZI_OUTPUT_2PIN_PWM
-
25  * - MOZZI_OUTPUT_EXTERNAL_TIMED
-
26  * - MOZZI_OUTPUT_EXTERNAL_CUSTOM
-
27  *
-
28  * In all modes, except MOZZI_OUTPUT_EXTERNAL_CUSTOM, Timer 1 is claimed, and is not available for any other purpose.
-
29  * This means, among other things, that pins 9 and 10 cannot be used for analogWrite(), while pins 3 and 11 should still be available
-
30  * @em except in MOZZI_OUTPUT_2PIN_PWM mode (as Timer2 is also claimed, then; for definite info on which pin is connected to which timer,
-
31  * check a suitable reference, as your board may differ). See *Mozzi>examples>11.Communication>Sinewave_PWM_pins_HIFI*. for an example
-
32  * of emulating analogWrite() on any digital pin, without the need for a hardware timer.
-
33  *
-
34  * @section avr_pwm MOZZI_OUTPUT_PWM
-
35  * For MOZZI_OUTPUT_PWM, output is restricted to pins that are hardware-attached to Timer 1, but can be configured
-
36  * within this tight limit. In particular, the default setup on the
-
37  * Arduino UNO is:
-
38  * - Mono: Pin 9 -> configurable using MOZZI_AUDIO_PIN_1
-
39  * - Stereo: Pin 9 (left) and Pin 10 (right) -> configurable using MOZZI_AUDIO_PIN_1 and MOZZI_AUDIO_PIN_2
-
40  * For pinouts on other boards, refer to config/known_16bit_timers.
-
41  *
-
42  * Rate of the PWM output can be controlled separately from MOZZI_AUDIO_RATE: MOZZI_PWM_RATE.
-
43  *
-
44  * The available sample resolution is 488, i.e. almost 9 bits, providing some headroom above the 8 bit table resolution
-
45  * currently used by the oscillators. You can look at the TimerOne library for more info about how interrupt rate and pwm resolution relate.
-
46  *
-
47  * @section avr_2pin_pwm MOZZI_OUTPUT_2PIN_PWM
-
48  * In this mode, output is split across two pins (again, both connected to Timer 1), with each outputting 7 bits for a total of 14. This allows for
-
49  * much better dynamic range, providing much more definition than can be achieved using @ref avr_pwm , while using
-
50  * only modestly more processing power. Further, it allows for a much higher PWM carrier rate can be much higher (125 kHz by default; see @ref
-
51  * MOZZI_PWM_RATE), which is well beyond the audible range.
-
52  *
-
53  * On the downside, this mode requires an extra hardware timer (Timer2 in addition to Timer1), which may increase compatibility
-
54  * problems with other Arduino libraries that also require a timer. Further, a more elaborate hardware setup is needed, making it less convenient
-
55  * for rapid prototyping. For circuit details, see https://sensorium.github.io/Mozzi/learn/output/ .
-
56  *
-
57  * On the classic Arduino Uno, the default pinout in this mode is:
-
58  * - Pin 9 (high bits) and Pin 10 (low bits) -> configurable using MOZZI_AUDIO_PIN_1 and MOZZI_AUDIO_PIN_1_LOW
-
59  *
-
60  * Here is table of the default pins on some other boards. Rows with an x on it have actually been tested (and importantly, the outcome recoreded;
-
61  * input welcome on further boards.)
-
62  *
-
63  * resistor.....3.9k......499k \n
-
64  * x................9..........10...............Arduino Uno \n
-
65  * x................9..........10...............Arduino Duemilanove \n
-
66  * x................9..........10...............Arduino Nano \n
-
67  * x................9..........10...............Arduino Leonardo \n
-
68  * x................9..........10...............Ardweeny \n
-
69  * x................9..........10...............Boarduino \n
-
70  * x...............11.........12...............Freetronics EtherMega \n
-
71  * .................11.........12...............Arduino Mega \n
-
72  * .................14.........15...............Teensy \n
-
73  * .............B5(14)...B6(15)...........Teensy2 \n
-
74  * x...........B5(25)...B6(26)...........Teensy2++ \n
-
75  * .................13.........12...............Sanguino \n
-
76  *
-
77  * For pinouts on other AVR boards, config/known_16bit_timers might contain some hints.
-
78  *
-
79  * Rate of the PWM output can be controlled separately from @ref MOZZI_AUDIO_RATE, and is much higher (125kHz), by default: @ref MOZZI_PWM_RATE.
-
80  *
-
81  * The default sample resolution is 7 bits per pin, for a total of 14 bits. This can be configured within hardware limits (@ref MOZZI_PWM_RATE) using
-
82  * @ref MOZZI_AUDIO_BITS_PER_CHANNEL, but beware that increasing this will require even more accuracy in our output resistors (see the linked documentation, above).
-
83  *
-
84  * @section avr_external MOZZI_OUTPUT_EXTERNAL_TIMED and MOZZI_OUTPUT_EXTERNAL_CUSTOM
-
85  * See @ref external_audio
-
86 */
-
87 
-
88 
-
89 #if not defined(MOZZI_AUDIO_MODE)
-
90 #define MOZZI_AUDIO_MODE MOZZI_OUTPUT_PWM
-
91 #endif
-
92 
-
93 #if not defined(MOZZI_AUDIO_RATE)
-
94 #define MOZZI_AUDIO_RATE 16384
-
95 #endif
-
96 
-
97 #if not defined(MOZZI_ANALOG_READ)
-
98 #define MOZZI_ANALOG_READ MOZZI_ANALOG_READ_STANDARD
-
99 #endif
-
100 
-
101 // Pins for regular PWM output
-
102 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PWM)
-
103 # if !defined(MOZZI_AUDIO_PIN_1)
-
104 #define MOZZI_AUDIO_PIN_1 TIMER1_A_PIN
-
105 #define MOZZI_AUDIO_PIN_1_REGISTER OCR1A
-
106 # endif
-
107 # if (MOZZI_AUDIO_CHANNELS > 1) && !defined(MOZZI_AUDIO_PIN_2)
-
108 #define MOZZI_AUDIO_PIN_2 TIMER1_B_PIN
-
109 #define MOZZI_AUDIO_PIN_2_REGISTER OCR1B
-
110 # endif
-
111 
-
112 # if !defined(MOZZI_PWM_RATE)
-
113 #define MOZZI_PWM_RATE 32768
-
114 # endif
-
115 
-
116 #define MOZZI_AUDIO_BITS 8
-
117 #define MOZZI_AUDIO_BITS_OPTIMISTIC 9
-
118 #define MOZZI_AUDIO_BIAS ((uint8_t) 244)
-
119 #endif
-
120 
-
121 // Pins for 2 pin HIFI PWM output
-
122 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_2PIN_PWM)
-
123 # if !defined(MOZZI_AUDIO_PIN_1)
-
124 #define MOZZI_AUDIO_PIN_1 TIMER1_A_PIN
-
125 #define MOZZI_AUDIO_PIN_1_REGISTER OCR1A
-
126 # endif
-
127 # if !defined(MOZZI_AUDIO_PIN_1_LOW)
-
128 #define MOZZI_AUDIO_PIN_1_LOW TIMER1_B_PIN
-
129 #define MOZZI_AUDIO_PIN_1_LOW_REGISTER OCR1B
-
130 # endif
-
131 
-
132 # if !defined(MOZZI_PWM_RATE)
-
133 #define MOZZI_PWM_RATE 125000
-
134 # endif
-
135 
-
136 # if !defined(MOZZI_AUDIO_BITS_PER_CHANNEL)
-
137 #define MOZZI_AUDIO_BITS_PER_CHANNEL 7
-
138 # endif
-
139 
-
140 #define MOZZI_AUDIO_BITS (2*MOZZI_AUDIO_BITS_PER_CHANNEL)
-
141 #endif
-
142 
-
143 #define MOZZI__INTERNAL_ANALOG_READ_RESOLUTION 10
-
144 
-
145 // Step 2: Check
-
146 // NOTE: This step is not technically required, but a good idea in any port
-
147 
-
148 MOZZI_CHECK_SUPPORTED(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PWM, MOZZI_OUTPUT_2PIN_PWM, MOZZI_OUTPUT_EXTERNAL_TIMED, MOZZI_OUTPUT_EXTERNAL_CUSTOM)
-
149 
-
150 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PWM)
-
151 MOZZI_CHECK_SUPPORTED(MOZZI_AUDIO_CHANNELS, MOZZI_MONO, MOZZI_STEREO)
-
152 #endif
-
153 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_2PIN_PWM)
-
154 MOZZI_CHECK_SUPPORTED(MOZZI_AUDIO_CHANNELS, MOZZI_MONO)
-
155 #endif
-
156 
-
157 /** should we enforce the following?
-
158 #if (MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PWM) || MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_2PIN_PWM))
-
159 MOZZI_CHECK_SUPPORTED(MOZZI_AUDIO_RATE, 16384, 32768)
-
160 #endif */
-
161 
-
162 MOZZI_CHECK_SUPPORTED(MOZZI_ANALOG_READ, MOZZI_ANALOG_READ_NONE, MOZZI_ANALOG_READ_STANDARD)
-
163 MOZZI_CHECK_SUPPORTED(MOZZI_AUDIO_INPUT, MOZZI_AUDIO_INPUT_NONE, MOZZI_AUDIO_INPUT_STANDARD)
-
164 #include "../config/known_16bit_timers.h"
-
165 
-
166 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PWM, MOZZI_OUTPUT_2PIN_PWM)
-
167 # if defined(TIMER1_C_PIN)
-
168 MOZZI_CHECK_SUPPORTED(MOZZI_AUDIO_PIN_1, TIMER1_A_PIN, TIMER1_B_PIN, TIMER1_C_PIN);
-
169 # else
-
170 MOZZI_CHECK_SUPPORTED(MOZZI_AUDIO_PIN_1, TIMER1_A_PIN, TIMER1_B_PIN);
-
171 # endif
-
172 #endif
-
-
- - - diff --git a/extras/doc/html/config__checks__esp32_8h_source.html b/extras/doc/html/config__checks__esp32_8h_source.html deleted file mode 100644 index 73699dd5c..000000000 --- a/extras/doc/html/config__checks__esp32_8h_source.html +++ /dev/null @@ -1,255 +0,0 @@ - - - - - - - -Mozzi: config_checks_esp32.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
config_checks_esp32.h
-
-
-
1 /*
-
2  * config_checks_esp32.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2023-2024 Thomas Friedrichsmeier and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10 */
-
11 
-
12 #ifndef CONFIG_CHECK_ESP32_H
-
13 #define CONFIG_CHECK_ESP32_H
-
14 
-
15 /**
-
16  * @page hardware_esp32 Mozzi on ESP32-based boards.
-
17  *
-
18  * port by Dieter Vandoren and Thomas Friedrichsmeier
-
19  *
-
20  * @section esp32_status Port status and notes
-
21  * - Since flash memory is not built into the ESP32, but connected, externally, it is much too slow for keeping wave tables, audio samples, etc. Instead, these are kept in RAM on this platform.
-
22  * - Asynchronous analog reads are not implemented. `mozziAnalogRead()` relays to `analogRead()`. @ref MOZZI_AUDIO_INPUT is not implemented
-
23  * - twi_nonblock is not ported
-
24  * - WIFI-activity not yet tested, but likely the same notes as for ESP8266 apply, i.e. @em any Wifi activity is likely to introdcue considerable nose. Consider turning off WIFI.
-
25  * - The implementation of audioTicks() may be slightly inaccurate on this platform.
-
26  *
-
27  * @section esp32_output Output modes
-
28  * The following audio modes (see @ref MOZZI_AUDIO_MODE) are currently supported on this hardware:
-
29  * - MOZZI_OUTPUT_EXTERNAL_TIMED
-
30  * - MOZZI_OUTPUT_EXTERNAL_CUSTOM
-
31  * - MOZZI_OUTPUT_PDM_VIA_I2S
-
32  * - MOZZI_OUTPUT_I2S_DAC
-
33  * - MOZZI_OUTPUT_INTERNAL_DAC
-
34  *
-
35  * The default mode is @ref esp32_internal_dac .
-
36  *
-
37  * @section esp32_internal_dac MOZZI_OUTPUT_INTERNAL_DAC
-
38  * The internal DAC has 8 bit resolution, and outputs to GPIO pins 25 and 26 (non-configurable). For simplicity of code, both pins are always used.
-
39  * In a mono configuration, both pins output the same sample.
-
40  *
-
41  * TODO: We could really use this to hack in a 2 PIN mode!
-
42  *
-
43  * @note
-
44  * The number 25 refers to "GPIO 25" or sometimes labelled "D25". Confusingly, many boards come with an additional, totally different numbering scheme on top of that.
-
45  * Check a detailed pinout diagram, if in any doubt.
-
46  *
-
47  * Internally, the inbuilt DAC is connected via an I2S interface. Which interface number to use can be configured using:
-
48  *
-
49  * @code
-
50  * #define MOZZI_I2S_PORT ... // (default: I2S_NUM_0)
-
51  * @endcode
-
52  *
-
53  * @section esp32_i2s_dac MOZZI_OUTPUT_I2S_DAC
-
54  * This mode outputs to a PT8211 (or compatible) I2S DAC, which allows for very high quality (mono or stereo) output. Communication needs the BCK, WS, and DATA(out) pins
-
55  * of one I2S interface. Presumably, any pins qualify, and you can configure this using:
-
56  * @code
-
57  * #define MOZZI_I2S_PIN_BCK ... // (default: 26)
-
58  * #define MOZZI_I2S_PIN_WS ... // (default: 15)
-
59  * #define MOZZI_I2S_PIN_DATA ... // (default: 33)
-
60  * #define MOZZI_I2S_PORT ... // (default: I2S_NUM_0)
-
61  * @endcode
-
62  *
-
63  * See the note above (@ref esp_internal_dac) regarding pin numbering. Also, please always test the default pinout, should a custom setting fail!
-
64  *
-
65  * As a technical note, I2S support in the ESP32 SDK has been reworked since this was implemented in Mozzi, and Mozzi uses the "legacy" implementation "i2s.h".
-
66  * This should not be an issue, unless you want to connect additional I2S components, yourself. In which case contributions are certainly welcome!
-
67  *
-
68  * @section esp32_pdm_via_i2s MOZZI_OUTPUT_PDM_VIA_I2S
-
69  * This mode uses the same setup as @ref esp32_i2s_dac, but rather than using an external DAC, the communication signal itself is modulated in PDM
-
70  * (pulse density modulation) encoded form. Thus not extra hardware is needed, and the signal is output on the DATA pin (see above). The BCK and
-
71  * WS pins are also claimed, but should be left non-connected, and do not produce anything meaningful. This can only be used in mono mode.
-
72  *
-
73  * Output resolution may be adjusted by defining MOZZI_PDM_RESOLUTION , where the default value of 4 means that each audio sample is encoded into four 32 bit blocks
-
74  * of ones and zeros. Obviously, more is potentially better, but at the cost of considerable computation power.
-
75  *
-
76  * @section esp32_external MOZZI_OUTPUT_EXTERNAL_TIMED and MOZZI_OUTPUT_EXTERNAL_CUSTOM
-
77  * See @ref external_audio
-
78 */
-
79 
-
80 #if not IS_ESP32()
-
81 #error This header should be included for ESP32 architecture, only
-
82 #endif
-
83 
- -
85 #if !defined(MOZZI_AUDIO_MODE)
-
86 #define MOZZI_AUDIO_MODE MOZZI_OUTPUT_INTERNAL_DAC
-
87 #endif
-
88 MOZZI_CHECK_SUPPORTED(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_TIMED, MOZZI_OUTPUT_EXTERNAL_CUSTOM, MOZZI_OUTPUT_PDM_VIA_I2S, MOZZI_OUTPUT_I2S_DAC, MOZZI_OUTPUT_INTERNAL_DAC)
-
89 
-
90 #if !defined(MOZZI_AUDIO_RATE)
-
91 #define MOZZI_AUDIO_RATE 32768
-
92 #endif
-
93 
-
94 #if defined(MOZZI_PWM_RATE)
-
95 #error Configuration of MOZZI_PWM_RATE is not currently supported on this platform (always same as MOZZI_AUDIO_RATE)
-
96 #endif
-
97 
-
98 #if !defined(MOZZI_ANALOG_READ)
-
99 # define MOZZI_ANALOG_READ MOZZI_ANALOG_READ_NONE
-
100 #endif
-
101 
-
102 MOZZI_CHECK_SUPPORTED(MOZZI_ANALOG_READ, MOZZI_ANALOG_READ_NONE)
-
103 MOZZI_CHECK_SUPPORTED(MOZZI_AUDIO_INPUT, MOZZI_AUDIO_INPUT_NONE)
-
104 
-
105 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_I2S_DAC, MOZZI_OUTPUT_PDM_VIA_I2S)
-
106 # if !defined(MOZZI_I2S_PIN_BCK)
-
107 # define MOZZI_I2S_PIN_BCK 26
-
108 # endif
-
109 # if !defined(MOZZI_I2S_PIN_WS)
-
110 # define MOZZI_I2S_PIN_WS 25
-
111 # endif
-
112 # if !defined(MOZZI_I2S_PIN_DATA)
-
113 # define MOZZI_I2S_PIN_DATA 33
-
114 # endif
-
115 #endif
-
116 
-
117 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_INTERNAL_DAC, MOZZI_OUTPUT_I2S_DAC, MOZZI_OUTPUT_PDM_VIA_I2S)
-
118 # include <driver/i2s.h>
-
119 # if !defined(MOZZI_IS2_PORT)
-
120 # define MOZZI_I2S_PORT I2S_NUM_0
-
121 # endif
-
122 #endif
-
123 
-
124 #if !defined(MOZZI_AUDIO_BITS)
-
125 # if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_INTERNAL_DAC)
-
126 # define MOZZI_AUDIO_BITS 8
-
127 # else
-
128 # define MOZZI_AUDIO_BITS 16
-
129 # endif
-
130 #endif
-
131 
-
132 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PDM_VIA_I2S)
-
133 # if !defined(MOZZI_PDM_RESOLUTION)
-
134 # define MOZZI_PDM_RESOLUTION 8
-
135 # endif
-
136 #else
-
137 # define MOZZI_PDM_RESOLUTION 1 // unconditionally, no other value allowed
-
138 #endif
-
139 
-
140 // All modes besides timed external bypass the output buffer!
-
141 #if !MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_TIMED)
-
142 # define BYPASS_MOZZI_OUTPUT_BUFFER true
-
143 #endif
-
144 
-
145 #define MOZZI__INTERNAL_ANALOG_READ_RESOLUTION 12
-
146 
-
147 #endif // #ifndef CONFIG_CHECK_ESP32_H
-
-
- - - diff --git a/extras/doc/html/config__checks__esp8266_8h_source.html b/extras/doc/html/config__checks__esp8266_8h_source.html deleted file mode 100644 index 695bbc9c5..000000000 --- a/extras/doc/html/config__checks__esp8266_8h_source.html +++ /dev/null @@ -1,229 +0,0 @@ - - - - - - - -Mozzi: config_checks_esp8266.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
config_checks_esp8266.h
-
-
-
1 /*
-
2  * config_checks_esp8266.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2023-2024 Thomas Friedrichsmeier and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10 */
-
11 
-
12 #ifndef CONFIG_CHECK_ESP8266_H
-
13 #define CONFIG_CHECK_ESP8266_H
-
14 
-
15 /**
-
16  * @page hardware_esp8266 Mozzi on ESP8266-based boards.
-
17  *
-
18  * port by Thomas Friedrichsmeier
-
19  *
-
20  * @section esp8266_status Port status and notes
-
21  * - Since flash memory is not built into the ESP8266, but connected, externally, it is much too slow for keeping wave tables, audio samples, etc. Instead, these are kept in RAM on this platform.
-
22  * - Asynchronous analog reads are not implemented. `mozziAnalogRead()` relays to `analogRead()`. @ref MOZZI_AUDIO_INPUT is not available
-
23  * - twi_nonblock is not ported
-
24  * - Note that the ESP8266 pins can output less current than the other supported CPUs. The maximum is 12mA, with a recommendation to stay below 6mA.
-
25  * - WHEN CONNECTING A HEADPHONE, DIRECTLY, USE APPROPRIATE CURRENT LIMITING RESISTORS (>= 500Ohms).
-
26  * - _Any_ WiFi-activity can cause severe spikes in power consumption. This can cause audible "ticking" artifacts, long before any other symptoms.
-
27  * - If you do not require WiFi in your sketch, you should turn it off, _explicitly_, using @code WiFi.mode(WIFI_OFF) @endcode.
-
28  * - A juicy enough, well regulated power supply, and a stabilizing capacitor between VCC and Gnd can help a lot.
-
29  * - As the (PDM) output signal is digital, a single (fast!) transistor can be used to amplify it to an independent voltage level.
-
30  * - audioHook() calls `yield()` once for every audio sample generated. Thus, as long as your audio output buffer does not run empty, you should not need any additional `yield()`s inside `loop()`.
-
31  *
-
32  * @section esp8266_output Output modes
-
33  * The following audio modes (see @ref MOZZI_AUDIO_MODE) are currently supported on this hardware:
-
34  * - MOZZI_OUTPUT_EXTERNAL_TIMED
-
35  * - MOZZI_OUTPUT_EXTERNAL_CUSTOM
-
36  * - MOZZI_OUTPUT_PDM_VIA_I2S
-
37  * - MOZZI_OUTPUT_PDM_VIA_SERIAL
-
38  * - MOZZI_OUTPUT_I2S_DAC
-
39  *
-
40  * The default mode is @ref esp8266_pdm_via_serial .
-
41  *
-
42  * @note
-
43  * This port really does not currently come with a PWM mode!
-
44  *
-
45  * @section esp8266_pdm_via_serial MOZZI_OUTPUT_PDM_VIA_SERIAL
-
46  * Output is coded using pulse density modulation, and sent via GPIO2 (Serial1 TX).
-
47  * - This output mode uses timer1 for queuing audio sample, so that timer is not available for other uses.
-
48  * - Note that this mode has slightly lower effective analog output range than @ref esp8266_pdm_via_i2s, due to start/stop bits being added to the output stream.
-
49  * - Supports mono output, only, pins not configurable.
-
50  *
-
51  * The option @ref MOZZI_PDM_RESOLTUON (default value 2, corresponding to 64 ones and zeros per audio sample) can be used to adjust the output resolution.
-
52  * Obviously higher values demand more computation power.
-
53  *
-
54  * @section esp8266_pdm_via_serial MOZZI_OUTPUT_PDM_VIA_I2S
-
55  * Output is coded using pulse density modulation, and sent via the I2S pins. The I2S data out pin (GPIO3, which is also "RX") will have the output,
-
56  * but *all* I2S output pins (RX, GPIO2 and GPIO15) will be affected. Mozzi tries to set GPIO2 and GPIO15 to input mode, and *at the time of this writing*, this allows
-
57  * I2S output on RX even on boards such as the ESP01 (where GPIO15 is tied to Ground). However, it seems safest to assume that this mode may not be useable on boards where
-
58  * GPIO2 or GPIO15 are not available as output pins.
-
59  *
-
60  * Supports mono output, only, pins not configurable.
-
61  *
-
62  * Resolution may be controlled using MOZZI_PDM_RESOLUTION (see above; default value is 2).
-
63  *
-
64  * @section esp8266_i2s_dac MOZZI_OUTPUT_I2S_DAC
-
65  * Output is sent to an external DAC (such as a PT8211), digitally coded. This is the only mode that supports stereo (@ref MOZZI_AUDIO_CHANNELS). It also needs the least processing power.
-
66  * The pins cannot be configured (GPIO3/RX, GPIO2, and GPIO15).
-
67  *
-
68  * @section esp8266_external MOZZI_OUTPUT_EXTERNAL_TIMED and MOZZI_OUTPUT_EXTERNAL_CUSTOM
-
69  * See @ref external_audio
-
70 */
-
71 
-
72 #if not IS_ESP8266()
-
73 #error This header should be included for ESP architecture, only
-
74 #endif
-
75 
- -
77 #if !defined(MOZZI_AUDIO_MODE)
-
78 #define MOZZI_AUDIO_MODE MOZZI_OUTPUT_PDM_VIA_SERIAL
-
79 #endif
-
80 MOZZI_CHECK_SUPPORTED(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_TIMED, MOZZI_OUTPUT_EXTERNAL_CUSTOM, MOZZI_OUTPUT_PDM_VIA_I2S, MOZZI_OUTPUT_PDM_VIA_SERIAL, MOZZI_OUTPUT_I2S_DAC)
-
81 
-
82 #if !defined(MOZZI_AUDIO_RATE)
-
83 #define MOZZI_AUDIO_RATE 32768
-
84 #endif
-
85 
-
86 #if !defined(MOZZI_AUDIO_BITS)
-
87 # define MOZZI_AUDIO_BITS 16
-
88 #endif
-
89 
-
90 #if !defined(MOZZI_ANALOG_READ)
-
91 # define MOZZI_ANALOG_READ MOZZI_ANALOG_READ_NONE
-
92 #endif
-
93 
-
94 MOZZI_CHECK_SUPPORTED(MOZZI_ANALOG_READ, MOZZI_ANALOG_READ_NONE)
-
95 MOZZI_CHECK_SUPPORTED(MOZZI_AUDIO_INPUT, MOZZI_AUDIO_INPUT_NONE)
-
96 
-
97 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PDM_VIA_I2S, MOZZI_OUTPUT_PDM_VIA_SERIAL)
-
98 # if !defined(PDM_RESOLUTION)
-
99 # define MOZZI_PDM_RESOLUTION 2
-
100 # endif
-
101 # include "disable_stereo_on_github_workflow.h"
-
102 MOZZI_CHECK_SUPPORTED(MOZZI_AUDIO_CHANNELS, 1)
-
103 MOZZI_CHECK_SUPPORTED(MOZZI_AUDIO_BITS, 16)
-
104 #elif MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_I2S_DAC)
-
105 # define MOZZI_PDM_RESOLUTION 1 // DO NOT CHANGE THIS VALUE! Not actually PDM coded, but this define is useful to keep code simple.
-
106 MOZZI_CHECK_SUPPORTED(MOZZI_AUDIO_BITS, 16)
-
107 #endif
-
108 
-
109 #define PDM_RESOLUTION 2 // 1 corresponds to 32 PDM clocks per sample, 2 corresponds to 64 PDM clocks, etc. (and at some level you're going hit the hardware limits)
-
110 
-
111 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PDM_VIA_I2S, MOZZI_OUTPUT_I2S_DAC)
-
112 // NOTE: On ESP / output via I2S, we simply use the I2S buffer as the output
-
113 // buffer, which saves RAM, but also simplifies things a lot
-
114 // esp. since i2s output already has output rate control -> no need for a
-
115 // separate output timer
-
116 #define BYPASS_MOZZI_OUTPUT_BUFFER true
-
117 #endif
-
118 
-
119 #define MOZZI__INTERNAL_ANALOG_READ_RESOLUTION 10
-
120 
-
121 #endif // #ifndef CONFIG_CHECK_ESP8266_H
-
-
- - - diff --git a/extras/doc/html/config__checks__generic_8h_source.html b/extras/doc/html/config__checks__generic_8h_source.html deleted file mode 100644 index 82169820e..000000000 --- a/extras/doc/html/config__checks__generic_8h_source.html +++ /dev/null @@ -1,310 +0,0 @@ - - - - - - - -Mozzi: config_checks_generic.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
config_checks_generic.h
-
-
-
1 /*
-
2  * config_checks_generic.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2023-2024 Thomas Friedrichsmeier and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10 */
-
11 
-
12 /** @page hardware Hardware and configuration
-
13  *
-
14  * Mozzi works on many different platforms, but not the same output modes are available on all hardware. For boards specific notes
-
15  * and configuration options, see the relevant sub-pages in this section:
-
16  *
-
17  * - @subpage hardware_avr
-
18  * - @subpage hardware_esp32
-
19  * - @subpage hardware_esp8266
-
20  * - @subpage hardware_mbed
-
21  * - @subpage hardware_renesas
-
22  * - @subpage hardware_rp2040
-
23  * - @subpage hardware_samd
-
24  * - @subpage hardware_stm32duino
-
25  * - @subpage hardware_stm32_maple
-
26  * - (@subpage hardware_stm32_disambiguation)
-
27  * - @subpage hardware_teensy3
-
28  * - @subpage hardware_teensy4
-
29 */
-
30 
-
31 /** For Mozzi-internal use: Check configuration options for (some) invalid settings, and apply default for options that have not been set, so far.
-
32  * */
-
33 
-
34 #ifndef MOZZI_CONFIG_CHECK_GENERIC_H
-
35 #define MOZZI_CONFIG_CHECK_GENERIC_H
-
36 
-
37 #include "../MozziConfigValues.h" // in case not user-included
-
38 #include "mozzi_macros.h"
-
39 
-
40 /// Step 0: Check for some stuff that user should never configure directly (but may be set, indirectly from the hardware-specific setups)
-
41 #if defined(BYPASS_MOZZI_OUTPUT_BUFFER)
-
42 #error "BYPASS_MOZZI_OUTPUT_BUFFER may not be customized via config"
-
43 #endif
-
44 
-
45 
-
46 //// Step 1: Apply missing defaults for generic config options (not the hardware specific ones)
-
47 #if not defined(MOZZI_COMPATIBILITY_LEVEL)
-
48 #define MOZZI_COMPATIBILITY_LEVEL MOZZI_COMPATIBILITY_2_0
-
49 #endif
-
50 
-
51 #if not defined(MOZZI_AUDIO_CHANNELS)
-
52 #define MOZZI_AUDIO_CHANNELS MOZZI_MONO
-
53 #endif
-
54 
-
55 //MOZZI_AUDIO_MODE -> hardware specific
-
56 //MOZZI_AUDIO_RATE -> hardware specific
-
57 
-
58 #if not defined(MOZZI_CONTROL_RATE)
-
59 # if defined(CONTROL_RATE) && (MOZZI_COMPATIBILITY_LEVEL < MOZZI_COMPATIBILITY_LATEST)
-
60 # warning Please change CONTROL_RATE to MOZZI_CONTROL_RATE
-
61 # define MOZZI_CONTROL_RATE CONTROL_RATE
-
62 # else
-
63 # define MOZZI_CONTROL_RATE 64
-
64 # endif
-
65 #endif
-
66 
-
67 //MOZZI_ANALOG_READ -> hardware specific, but we want to insert a warning, if not supported, and user has not explicitly configured anything
-
68 #if not defined(MOZZI_ANALOG_READ)
-
69 #define MOZZI__ANALOG_READ_NOT_CONFIGURED
-
70 #endif
-
71 
-
72 #if not defined(MOZZI_AUDIO_INPUT)
-
73 #define MOZZI_AUDIO_INPUT MOZZI_AUDIO_INPUT_NONE
-
74 #endif
-
75 
-
76 #if !MOZZI_IS(MOZZI_AUDIO_INPUT, MOZZI_AUDIO_INPUT_NONE) && !defined(MOZZI_AUDIO_INPUT_PIN)
-
77 #warning Using audio input, but no audio input pin defined, explicitly. Defaulting to pin 0.
-
78 #define MOZZI_AUDIO_INPUT_PIN 0
-
79 #endif
-
80 
-
81 //MOZZI_PWM_RATE -> hardware specific
-
82 //MOZZI_AUDIO_PIN_1 -> hardware specific
-
83 //MOZZI_AUDIO_PIN_1_LOW -> hardware specific
-
84 //MOZZI_AUDIO_PIN_2 -> hardware specific
-
85 //MOZZI_AUDIO_PIN_2_LOW -> hardware specific
-
86 
-
87 
-
88 /// Step 2: Include the hardware specific checks-and-defaults-header
-
89 #if IS_AVR()
-
90 #include "config_checks_avr.h"
-
91 #elif IS_ESP32()
-
92 #include "config_checks_esp32.h"
-
93 #elif IS_ESP8266()
-
94 #include "config_checks_esp8266.h"
-
95 #elif IS_MBED()
-
96 #include "config_checks_mbed.h"
-
97 #elif IS_RENESAS()
-
98 #include "config_checks_renesas.h"
-
99 #elif IS_RP2040()
-
100 #include "config_checks_rp2040.h"
-
101 #elif IS_SAMD21()
-
102 #include "config_checks_samd21.h"
-
103 #elif IS_STM32DUINO()
-
104 #include "config_checks_stm32duino.h"
-
105 #elif IS_STM32MAPLE()
-
106 #include "config_checks_stm32maple.h"
-
107 #elif (IS_TEENSY3() || IS_TEENSY4())
-
108 #include "config_checks_teensy.h"
-
109 #else
-
110 #error Problem detecting hardware
-
111 #endif
-
112 
-
113 
-
114 /// Step 2b: Minimal special handling for MOZZI_OUTPUT_EXTERNAL_TIMED/CUSTOM
-
115 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_TIMED, MOZZI_OUTPUT_EXTERNAL_CUSTOM) && !defined(MOZZI_AUDIO_BITS)
-
116 # define MOZZI_AUDIO_BITS 16
-
117 #endif
-
118 
-
119 
-
120 
-
121 /// Step 3: Apply various generic checks that make sense on more than one platform
-
122 MOZZI_CHECK_POW2(MOZZI_AUDIO_RATE)
- -
124 
- -
126 #error "MOZZI_AUDIO_INPUT depends on MOZZI_ANALOG_READ option"
-
127 #endif
-
128 
-
129 #if MOZZI_IS(MOZZI_AUDIO_INPUT, MOZZI_AUDIO_INPUT_NONE) && defined(MOZZI_AUDIO_INPUT_PIN)
-
130 #warning "MOZZI_AUDIO_INPUT_PIN defined without MOZZI_AUDIO_INPUT"
-
131 #endif
-
132 
- -
134 #error "MOZZI_AUDIO_CHANNELS outside of (currently) supported range"
-
135 #endif
-
136 
-
137 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_TIMED) || MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_CUSTOM)
-
138 #warning "Mozzi is configured to use an external void 'audioOutput(const AudioOutput f)' function. Please define one in your sketch"
-
139 #endif
-
140 
-
141 // Hardware-specific checks file should have more narrow checks for most options, below, but is not required to, so let's check for anything that is wildly out of scope:
- - -
144 
-
145 #if defined(MOZZI__ANALOG_READ_NOT_CONFIGURED)
-
146 # if MOZZI_IS(MOZZI_ANALOG_READ, MOZZI_ANALOG_READ_NONE)
-
147 # warning Asynchronous analog reads not implemented on this platform
-
148 # endif
-
149 # undef MOZZI__ANALOG_READ_NOT_CONFIGURED
-
150 #endif
-
151 
-
152 #if defined(MOZZI_ANALOG_READ_RESOLUTION)
-
153 # if (MOZZI_ANALOG_READ_RESOLUTION < 1) || (MOZZI_ANALOG_READ_RESOLUTION > 16)
-
154 // NOTE: We could certainly allow more than 16 bits, but then the data type would need to be adjusted/adjustable, accrodingly.
-
155 # error MOZZI_ANALOG_READ_RESOLUTION must be between 1 and 16 bits
-
156 # endif
-
157 #endif
-
158 
-
159 /// Step 4: Init Read-only defines that depend on other values
-
160 #if !defined(MOZZI_AUDIO_BIAS)
-
161 #define MOZZI_AUDIO_BIAS ((uint16_t) 1<<(MOZZI_AUDIO_BITS-1))
-
162 #endif
-
163 
-
164 #if !defined(MOZZI_AUDIO_BITS_OPTIMISTIC)
-
165 #define MOZZI_AUDIO_BITS_OPTIMISTIC MOZZI_AUDIO_BITS
-
166 #endif
-
167 
-
168 // TODO: Rename these defines
-
169 #if MOZZI_AUDIO_RATE == 8192
-
170 #define AUDIO_RATE_AS_LSHIFT 13
-
171 #define MICROS_PER_AUDIO_TICK 122
-
172 #elif MOZZI_AUDIO_RATE == 16384
-
173 #define AUDIO_RATE_AS_LSHIFT 14
-
174 #define MICROS_PER_AUDIO_TICK 61 // 1000000 / 16384 = 61.035, ...* 256 = 15625
-
175 #elif MOZZI_AUDIO_RATE == 32768
-
176 #define AUDIO_RATE_AS_LSHIFT 15
-
177 #define MICROS_PER_AUDIO_TICK 31 // = 1000000 / 32768 = 30.518, ...* 256 = 7812.6
-
178 #elif MOZZI_AUDIO_RATE == 65336
-
179 #define AUDIO_RATE_AS_LSHIFT 16
-
180 #define MICROS_PER_AUDIO_TICK 15
-
181 #else
-
182 #error Whoopsie, not LSHIFT defined for this audio rate. Please report and/or fix
-
183 #endif
-
184 
-
185 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_CUSTOM)
-
186 #define BYPASS_MOZZI_OUTPUT_BUFFER true
-
187 #endif
-
188 
-
189 /// Step 5: Patch up some backwards compatibility issues as far as config-related
- -
191 # define AUDIO_RATE MOZZI_AUDIO_RATE
-
192 # if !defined(CONTROL_RATE)
-
193 # define CONTROL_RATE MOZZI_CONTROL_RATE
-
194 # endif
-
195 #endif
-
196 
-
197 /// Step 6: Some more checks that need to be at the end, because of requiring end of the foodchain headers
-
198 // TODO: Rather move this up again, and make AudioOutputStorage_t a primary config option
-
199 #include "../AudioOutput.h"
-
200 static_assert(MOZZI_AUDIO_BITS <= (8*sizeof(AudioOutputStorage_t)), "Configured MOZZI_AUDIO_BITS is too large for the internal storage type");
-
201 
-
202 #endif
-
-
- - - diff --git a/extras/doc/html/config__checks__mbed_8h_source.html b/extras/doc/html/config__checks__mbed_8h_source.html deleted file mode 100644 index fc0bdc6f9..000000000 --- a/extras/doc/html/config__checks__mbed_8h_source.html +++ /dev/null @@ -1,236 +0,0 @@ - - - - - - - -Mozzi: config_checks_mbed.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
config_checks_mbed.h
-
-
-
1 /*
-
2  * config_checks_mbed.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2023-2024 Thomas Friedrichsmeier and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10 */
-
11 
-
12 #ifndef CONFIG_CHECK_MBED_H
-
13 #define CONFIG_CHECK_MBED_H
-
14 
-
15 /**
-
16  * @page hardware_mbed Mozzi on MBED-based boards (Arduino Giga / Portenta).
-
17  *
-
18  * port by Thomas Friedrichsmeier & Thomas Combriat
-
19  *
-
20  * @section mbed_status Port status and notes
-
21  * Compiles and runs using Arduino's standard and Arduino_AdvancedAnalog libraries. This port is still **experimental**, testing reveals
-
22  * some instabilities for some configurations (in particular with @ref MOZZI_AUDIO_INPUT) that are under active investigations.
-
23  *
-
24  * This port is not complete yet, in particular:
-
25  * - Asynchroneous analog reads are not implemented (yet), `mozziAnalogRead()` relays to `analogRead()`. (Note that @ref MOZZI_AUDIO_INPUT @em is implemented!)
-
26  * - This port should support other MBED based Arduino boards like the Arduino Portenta, in *theory*, but the developer have only tested it on the Giga. Feedback welcome!
-
27  *
-
28  * @section mbed_output Output modes
-
29  * The following audio modes (see @ref MOZZI_AUDIO_MODE) are currently supported on this hardware:
-
30  * - MOZZI_OUTPUT_EXTERNAL_TIMED
-
31  * - MOZZI_OUTPUT_EXTERNAL_CUSTOM
-
32  * - MOZZI_OUTPUT_PDM_VIA_SERIAL
-
33  * - MOZZI_OUTPUT_INTERNAL_DAC
-
34  *
-
35  * The default mode is @ref mbed_internal_dac .
-
36  *
-
37  * @section mbed_internal_dac MOZZI_OUTPUT_INTERNAL_DAC
-
38  * This uses the inbuild DAC on the board. The default is setting is appropriate for the Arduino Giga: 12 bits going to A13 (3.5mm jack connector's tip),
-
39  * and in stereo mode to pin A12 (3.5mm jack connector's first ring) additionally.
-
40  *
-
41  * For other boards is may be appropriate to customize:
-
42  * @code
-
43  * #define MOZZI_AUDIO_PIN_1 ... // mono / left channel; default: A13
-
44  * #define MOZZI_AUDIO_PIN_2 ... // stereo only: right channel; default: A12
-
45  * #define MOZZI_AUDIO_BITS ... // default is 12
-
46  * @endcode
-
47  *
-
48  * @section mbed_pdm_via_serial MOZZI_PDM_VIA_SERIAL
-
49  * Returns a pulse-density modulated (mono only) signal on one of the hardware UARTs of the board (Serial ports). Default is using the SERIAL2, on pin D18.
-
50  * You can confiugre the pins to use, but it must be connected to a hardware UART. Output is written to the TX pin, only, but the RX pin needs to be
-
51  * claimed as well. Beware of confusing pinout labelling, for instance SERIAL2_TX iss labelled "TX1" on the Arduino Giga. The audio resolution can be enhanced
-
52  * using @ref MOZZI_PDM_RESOLUTION, which is described in more detail here: @esp32_pdm_via_i2s .
-
53  *
-
54  * Configuration options:
-
55  * @code
-
56  * #define MOZZI_SERIAL_PIN_TX ... // default: SERIAL2_TX
-
57  * #define MOZZI_SERIAL_PIN_RX ... // *must* specify the matching one, if customizing the above; default: SERIAL2_RX
-
58  * #define MOZZI_PDM_RESOLUTION ... // default value is 2, for 2*32 ones and zeros per audio sample
-
59  * @endcode
-
60  *
-
61  * @section mbed_external MOZZI_OUTPUT_EXTERNAL_TIMED and MOZZI_OUTPUT_EXTERNAL_CUSTOM
-
62  * See @ref external_audio
-
63 */
-
64 
-
65 
-
66 #if not IS_MBED()
-
67 #error This header should be included for MBED architecture, only
-
68 #endif
-
69 
- -
71 #if !defined(MOZZI_AUDIO_MODE)
-
72 #define MOZZI_AUDIO_MODE MOZZI_OUTPUT_INTERNAL_DAC
-
73 #endif
-
74 MOZZI_CHECK_SUPPORTED(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_TIMED, MOZZI_OUTPUT_EXTERNAL_CUSTOM, MOZZI_OUTPUT_PDM_VIA_SERIAL, MOZZI_OUTPUT_INTERNAL_DAC)
-
75 
-
76 #if !defined(MOZZI_AUDIO_RATE)
-
77 #define MOZZI_AUDIO_RATE 32768
-
78 #endif
-
79 
-
80 #if defined(MOZZI_PWM_RATE)
-
81 #error Configuration of MOZZI_PWM_RATE is not currently supported on this platform (always same as MOZZI_AUDIO_RATE)
-
82 #endif
-
83 
-
84 #if !defined(MOZZI_ANALOG_READ)
-
85 # define MOZZI_ANALOG_READ MOZZI_ANALOG_READ_NONE
-
86 #endif
-
87 
-
88 // yes, correct: async "single" reads are not implemented, but audio input is
-
89 MOZZI_CHECK_SUPPORTED(MOZZI_ANALOG_READ, MOZZI_ANALOG_READ_NONE)
-
90 MOZZI_CHECK_SUPPORTED(MOZZI_AUDIO_INPUT, MOZZI_AUDIO_INPUT_NONE, MOZZI_AUDIO_INPUT_STANDARD)
-
91 
-
92 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_INTERNAL_DAC)
-
93 # if !defined(MOZZI_AUDIO_BITS)
-
94 # define MOZZI_AUDIO_BITS 12
-
95 # endif
-
96 # if !defined(MOZZI_AUDIO_PIN_1)
-
97 # define MOZZI_AUDIO_PIN_1 A13
-
98 # endif
-
99 # if !defined(MOZZI_AUDIO_PIN_2)
-
100 # define MOZZI_AUDIO_PIN_2 A12
-
101 # endif
-
102 #endif
-
103 
-
104 #if !defined(MOZZI_AUDIO_BITS)
-
105 # define MOZZI_AUDIO_BITS 16
-
106 #endif
-
107 
-
108 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PDM_VIA_SERIAL)
-
109 # if !defined(MOZZI_PDM_RESOLUTION)
-
110 # define MOZZI_PDM_RESOLUTION 2
-
111 # endif
-
112 # if !defined(MOZZI_SERIAL_PIN_TX)
-
113 # define MOZZI_SERIAL_PIN_TX SERIAL2_TX
-
114 # endif
-
115 # if !defined(MOZZI_SERIAL_PIN_RX)
-
116 # define MOZZI_SERIAL_PIN_RX SERIAL2_RX
-
117 # endif
-
118 #endif
-
119 
-
120 // All modes besides timed external bypass the output buffer!
-
121 #if !MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_TIMED)
-
122 # define BYPASS_MOZZI_OUTPUT_BUFFER true
-
123 #endif
-
124 
-
125 // TODO: This value is correct for Arduino Giga and Arduino Portenta, but not necessarily everywhere else
-
126 #define MOZZI__INTERNAL_ANALOG_READ_RESOLUTION 16
-
127 
-
128 #endif // #ifndef CONFIG_CHECK_MBED_H
-
-
- - - diff --git a/extras/doc/html/config__checks__renesas_8h_source.html b/extras/doc/html/config__checks__renesas_8h_source.html deleted file mode 100644 index 606e85c0c..000000000 --- a/extras/doc/html/config__checks__renesas_8h_source.html +++ /dev/null @@ -1,191 +0,0 @@ - - - - - - - -Mozzi: config_checks_renesas.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
config_checks_renesas.h
-
-
-
1 /*
-
2  * config_checks_renesas.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2023-2024 Thomas Friedrichsmeier and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10 */
-
11 
-
12 #ifndef CONFIG_CHECK_RENESAS_H
-
13 #define CONFIG_CHECK_RENESAS_H
-
14 
-
15 /**
-
16  * @page hardware_renesas Mozzi on Arduino Uno R4 - Renesas.
-
17  *
-
18  * port by Thomas Combriat
-
19  *
-
20  * @section renesas_status Port status and notes
-
21  * Compiles and runs using Arduino's standard library (Renesas 0.8.7 at the time of this writing).
-
22  *
-
23  * A few particularities:
-
24  * - Because this board has an on-board DAC (A0), but only one, STEREO is not implemented and Mozzi uses this pin. Usage of other pins using PWM for instance is not implemented yet.
-
25  * - getAudioInput() and mozziAnalogRead() return values in the Renesas' full ADC resolution of 0-16384 rather than AVR's 0-1023. *This might change in the near future for speed purposes.*
-
26  *
-
27  * @section rensesas_output Output modes
-
28  * The following audio modes (see @ref MOZZI_AUDIO_MODE) are currently supported on this hardware:
-
29  * - MOZZI_OUTPUT_EXTERNAL_TIMED
-
30  * - MOZZI_OUTPUT_EXTERNAL_CUSTOM
-
31  * - MOZZI_OUTPUT_INTERNAL_DAC
-
32  *
-
33  * The default mode is @ref renesas_internal_dac. Further modes may be added in the future.
-
34  *
-
35  * @section renesas_internal_dac MOZZI_OUTPUT_INTERNAL_DAC
-
36  * This uses the inbuild DAC on the board on pin A0. Mono output only, and the pin is not configurable. Audio resolution is also fixed at 12 bits (which is what the board supports).
-
37  *
-
38  * This mode claims two timers (but it is not hardcoded, which ones).
-
39  *
-
40  * @section renesas_external MOZZI_OUTPUT_EXTERNAL_TIMED and MOZZI_OUTPUT_EXTERNAL_CUSTOM
-
41  * MOZZI_OUTPUT_EXTERNAL_TIMED claimes one timer, MOZZI_OUTPUT_EXTERNAL_CUSTOM does not claim any timer.
-
42  * See @ref external_audio
-
43 */
-
44 
-
45 #if not IS_RENESAS()
-
46 #error This header should be included for RENESAS (Arduino Uno R4) architecture, only
-
47 #endif
-
48 
- -
50 #if !defined(MOZZI_AUDIO_MODE)
-
51 #define MOZZI_AUDIO_MODE MOZZI_OUTPUT_INTERNAL_DAC
-
52 #endif
-
53 MOZZI_CHECK_SUPPORTED(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_TIMED, MOZZI_OUTPUT_EXTERNAL_CUSTOM, MOZZI_OUTPUT_INTERNAL_DAC)
-
54 
-
55 #if !defined(MOZZI_AUDIO_RATE)
-
56 #define MOZZI_AUDIO_RATE 32768
-
57 #endif
-
58 
-
59 #if defined(MOZZI_PWM_RATE)
-
60 #error Configuration of MOZZI_PWM_RATE is not currently supported on this platform (always same as MOZZI_AUDIO_RATE)
-
61 #endif
-
62 
-
63 #if !defined(MOZZI_ANALOG_READ)
-
64 # define MOZZI_ANALOG_READ MOZZI_ANALOG_READ_STANDARD
-
65 #endif
-
66 
-
67 MOZZI_CHECK_SUPPORTED(MOZZI_ANALOG_READ, MOZZI_ANALOG_READ_NONE, MOZZI_ANALOG_READ_STANDARD)
-
68 
-
69 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_INTERNAL_DAC)
-
70 # if !defined(MOZZI_AUDIO_BITS)
-
71 # define MOZZI_AUDIO_BITS 12
-
72 # endif
-
73 # if !defined(MOZZI_AUDIO_PIN_1)
-
74 # define MOZZI_AUDIO_PIN_1 A0
-
75 # endif
-
76 # define BYPASS_MOZZI_OUTPUT_BUFFER true
-
77 # include "disable_stereo_on_github_workflow.h"
-
78 MOZZI_CHECK_SUPPORTED(MOZZI_AUDIO_CHANNELS, 1)
-
79 #endif
-
80 
-
81 #define MOZZI__INTERNAL_ANALOG_READ_RESOLUTION 14
-
82 
-
83 #endif // #ifndef CONFIG_CHECK_RENESAS_H
-
-
- - - diff --git a/extras/doc/html/config__checks__rp2040_8h_source.html b/extras/doc/html/config__checks__rp2040_8h_source.html deleted file mode 100644 index 2120e6f1e..000000000 --- a/extras/doc/html/config__checks__rp2040_8h_source.html +++ /dev/null @@ -1,238 +0,0 @@ - - - - - - - -Mozzi: config_checks_rp2040.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
config_checks_rp2040.h
-
-
-
1 /*
-
2  * config_checks_rp2040.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2023-2024 Thomas Friedrichsmeier and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10 */
-
11 
-
12 #ifndef CONFIG_CHECK_RP2040_H
-
13 #define CONFIG_CHECK_RP2040_H
-
14 
-
15 /**
-
16  * @page hardware_rp2040 Mozzi on RP2040 (Raspberry Pi Pico)
-
17  *
-
18  * port by Thomas Friedrichsmeier
-
19  *
-
20  * @section rp2040_status Port status and notes
-
21  * Compiles and runs using [this core](https://github.com/earlephilhower/arduino-pico). Can probably be ported to the Mbed core for RP2040, relatively easily,
-
22  * as it relies mostly on the RP2040 SDK API. Tested on a Pi Pico.
-
23  *
-
24  * - This is a recent addition, implementation details may still change (currently just PWM driven by a timer; this may be worth changing to a DMA driven output)
-
25  * - Wavetables and samples are not kept in progmem on this platform. While apparently speed (of the external flash) is not much of an issue, the data always seems to be copied into RAM, anyway.
-
26  * - Note that getAudioInput() and mozziAnalogRead() return values in the RP2040's full ADC resolution of 0-4095 rather than AVR's 0-1023.
-
27  * - twi_nonblock is not ported
-
28  * - Code uses only one CPU core
-
29  *
-
30  * @section rp2040_output Output modes
-
31  * The following audio modes (see @ref MOZZI_AUDIO_MODE) are currently supported on this hardware:
-
32  * - MOZZI_OUTPUT_EXTERNAL_TIMED
-
33  * - MOZZI_OUTPUT_EXTERNAL_CUSTOM
-
34  * - MOZZI_OUTPUT_PWM
-
35  * - MOZZI_OUTPUT_I2S_DAC
-
36  *
-
37  * The default mode is @ref rp2040_pwm .
-
38  *
-
39  * @section rp2040_pwm MOZZI_OUTPUT_PWM
-
40  * Audio output is written to pin 0 (mono) or 0 and 1 (stereo), by default, with 11 bits of ouput resolution.
-
41  * One hardware timer interrupt and one DMA channel are claimed (number not hardcoded), a non-exclusive handler is installed on DMA_IRQ_0.
-
42  *
-
43  * Configuration options:
-
44  * @code
-
45  * #define MOZZI_AUDIO_PIN_1 ... // default is 0
-
46  * #define MOZZI_AUDIO_BITS ... // output resolution (bits); default is 11
-
47  * // additionally, for stereo:
-
48  * #define MOZZI_AUDIO_PIN_2 ... // default is 1; this must be on the same PWM slice as the first pin (i.e. neighboring)
-
49  * @endcode
-
50  *
-
51  * @section rp2040_i2s_dac MOZZI_OUTPUT_I2S_DAC
-
52  * Output to an external DAC, connected via I2S. This uses 16 bit (per audio channel), but can be changed to 8, 16, 24 (left aligned) and 32 resolution.
-
53  * Both plain I2S and LSBJ format (PT8211 needs this, for instance) are available. Plain format is used by default. The GPIO pins to use can be configured,
-
54  * - almost - freely (see below). Two DMA channels are claimed (numbers not hardcoded), non-exclusive handlers are installed on DMA_IRQ_0.
-
55  *
-
56  * Configuration options:
-
57  * @code
-
58  * #define MOZZI_AUDIO_BITS ... // available values are 8, 16 (default), 24 (LEFT ALIGN in 32 bits type!!) and 32 bits
-
59  * #define MOZZI_I2S_PIN_BCK ... // /BLCK) default is 20
-
60  * //#define MOZZI_I2S_PIN_WS (MOZZI_I2S_PIN_BCK+1) ... // CANNOT BE CHANGED, HAS TO BE NEXT TO pBCLK, i.e. default is 21
-
61  * #define MOZZI_I2S_PIN_DATA ... // (DOUT) default is 22
-
62  * #define MOZZI_I2S_FORMAT ... // may be MOZZI_I2S_FORMAT_LSBJ or MOZZI_I2S_FORMAT_PLAIN (default)
-
63  * @endcode
-
64  *
-
65  * @note
-
66  * The MOZZI_I2S_FORMAT_LSBJ option may require a relatively recent git-hub checkout of the arduino-pico core.
-
67  *
-
68  * @section rp2040_external MOZZI_OUTPUT_EXTERNAL_TIMED and MOZZI_OUTPUT_EXTERNAL_CUSTOM
-
69  * See @ref external_audio
-
70 */
-
71 
-
72 #if not IS_RP2040()
-
73 #error This header should be included for RP2040 architecture (Raspberry Pi Pico and others), only
-
74 #endif
-
75 
- -
77 #if !defined(MOZZI_AUDIO_MODE)
-
78 # define MOZZI_AUDIO_MODE MOZZI_OUTPUT_PWM
-
79 #endif
-
80 MOZZI_CHECK_SUPPORTED(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_TIMED, MOZZI_OUTPUT_EXTERNAL_CUSTOM, MOZZI_OUTPUT_PWM, MOZZI_OUTPUT_I2S_DAC)
-
81 
-
82 #if !defined(MOZZI_AUDIO_RATE)
-
83 #define MOZZI_AUDIO_RATE 32768
-
84 #endif
-
85 
-
86 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PWM)
-
87 # if !defined(MOZZI_AUDIO_BITS)
-
88 # define MOZZI_AUDIO_BITS 16 // PWMAudio expects 16bits
-
89 # endif
-
90 # if !defined(MOZZI_AUDIO_PIN_1)
-
91 # define MOZZI_AUDIO_PIN_1 0
-
92 # endif
-
93 # if !defined(MOZZI_AUDIO_PIN_2)
-
94 # define MOZZI_AUDIO_PIN_2 1
-
95 # endif
-
96 # define BYPASS_MOZZI_OUTPUT_BUFFER true
-
97 # define MOZZI_RP2040_BUFFERS 8 // number of DMA buffers used
-
98 # define MOZZI_RP2040_BUFFER_SIZE 256 // total size of the buffer, in samples
-
99 #endif
-
100 
-
101 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_I2S_DAC)
-
102 # if !defined(MOZZI_AUDIO_BITS)
-
103 # define MOZZI_AUDIO_BITS 16
-
104 # endif
-
105 # if !defined(MOZZI_I2S_PIN_BCK)
-
106 # define MOZZI_I2S_PIN_BCK 20
-
107 # endif
-
108 //# define MOZZI_IS_PIN_WS(MOZZI_I2S_PIN_BCK + 1) // implicit
-
109 # if !defined(MOZZI_I2S_PIN_DATA)
-
110 # define MOZZI_I2S_PIN_DATA 22
-
111 # endif
-
112 # if !defined(MOZZI_I2S_FORMAT)
-
113 # define MOZZI_I2S_FORMAT MOZZI_I2S_FORMAT_PLAIN
-
114 # endif
-
115 MOZZI_CHECK_SUPPORTED(MOZZI_I2S_FORMAT, MOZZI_I2S_FORMAT_PLAIN, MOZZI_I2S_FORMAT_LSBJ)
-
116 # define BYPASS_MOZZI_OUTPUT_BUFFER true
-
117 # define MOZZI_RP2040_BUFFERS 8 // number of DMA buffers used
-
118 # define MOZZI_RP2040_BUFFER_SIZE 256 // total size of the buffer, in samples
-
119 #endif
-
120 
-
121 #if !defined(MOZZI_ANALOG_READ)
-
122 # define MOZZI_ANALOG_READ MOZZI_ANALOG_READ_STANDARD
-
123 #endif
-
124 
-
125 #define MOZZI__INTERNAL_ANALOG_READ_RESOLUTION 12
-
126 
-
127 MOZZI_CHECK_SUPPORTED(MOZZI_ANALOG_READ, MOZZI_ANALOG_READ_NONE, MOZZI_ANALOG_READ_STANDARD)
-
128 MOZZI_CHECK_SUPPORTED(MOZZI_AUDIO_INPUT, MOZZI_AUDIO_INPUT_NONE, MOZZI_ANALOG_READ_STANDARD)
-
129 
-
130 #endif // #ifndef CONFIG_CHECK_RP2040_H
-
-
- - - diff --git a/extras/doc/html/config__checks__samd21_8h_source.html b/extras/doc/html/config__checks__samd21_8h_source.html deleted file mode 100644 index c99cccd54..000000000 --- a/extras/doc/html/config__checks__samd21_8h_source.html +++ /dev/null @@ -1,190 +0,0 @@ - - - - - - - -Mozzi: config_checks_samd21.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
config_checks_samd21.h
-
-
-
1 /*
-
2  * config_checks_samd21.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2023-2024 Thomas Friedrichsmeier and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10 */
-
11 
-
12 #ifndef CONFIG_CHECK_SAMD21_H
-
13 #define CONFIG_CHECK_SAMD21_H
-
14 
-
15 /**
-
16  * @page hardware_samd Mozzi on SAMD21 based boards (Arduino Circuitplayground M0 and others)
-
17  *
-
18  * port by Adrian Freed
-
19  *
-
20  * @section samd_status Port status and notes
-
21  * - @def MOZZI_ANALOG_READ and MOZZI_ANALOG_INPUT are not implemented (contributions welcome)
-
22  * - We don't have a lot of data, which boards this port has been tested on. Success or not, let us know, if you are using Mozzi on SAMD21 boards
-
23  *
-
24  * @section samd_output_modes Output modes
-
25  * The following audio modes (see @ref MOZZI_AUDIO_MODE) are currently supported on this hardware:
-
26  * - MOZZI_OUTPUT_EXTERNAL_TIMED
-
27  * - MOZZI_OUTPUT_EXTERNAL_CUSTOM
-
28  * - MOZZI_OUTPUT_INTERNAL_DAC
-
29  *
-
30  * The default mode is @ref samd_internal_dac , meaning, only boards with an inbuilt DAC are covered by default
-
31  * (you could stil use one of the external output modes, however).
-
32  *
-
33  * @section samd_internal_dac MOZZI_OUTPUT_INTERNAL_DAC
-
34  * Output resolution is 10 bits by default, and goes to pin DAC0. Only mono output is supported. Within the hardware limits of your board, you can configure the following:
-
35  *
-
36  * @code
-
37  * #define MOZZI_AUDIO_PIN_1 ... // default is DAC0
-
38  * #define MOZZI_AUDIO_BITS ... // default is 10
-
39  * @endcode
-
40  *
-
41  * @section samd_external MOZZI_OUTPUT_EXTERNAL_TIMED and MOZZI_OUTPUT_EXTERNAL_CUSTOM
-
42  * See @ref external_audio
-
43 */
-
44 
-
45 #if not IS_SAMD21()
-
46 #error This header should be included for SAMD21 architecture (Arduino Circuitplayground M0 and others), only
-
47 #endif
-
48 
- -
50 #if !defined(MOZZI_AUDIO_MODE)
-
51 #define MOZZI_AUDIO_MODE MOZZI_OUTPUT_INTERNAL_DAC
-
52 #endif
-
53 MOZZI_CHECK_SUPPORTED(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_TIMED, MOZZI_OUTPUT_EXTERNAL_CUSTOM, MOZZI_OUTPUT_INTERNAL_DAC)
-
54 
-
55 #if !defined(MOZZI_AUDIO_RATE)
-
56 #define MOZZI_AUDIO_RATE 32768
-
57 #endif
-
58 
-
59 #if defined(MOZZI_PWM_RATE)
-
60 #error Configuration of MOZZI_PWM_RATE is not currently supported on this platform (always same as MOZZI_AUDIO_RATE)
-
61 #endif
-
62 
-
63 #if !defined(MOZZI_ANALOG_READ)
-
64 # define MOZZI_ANALOG_READ MOZZI_ANALOG_READ_NONE
-
65 #endif
-
66 
-
67 MOZZI_CHECK_SUPPORTED(MOZZI_ANALOG_READ, MOZZI_ANALOG_READ_NONE)
-
68 
-
69 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_INTERNAL_DAC)
-
70 # if !defined(MOZZI_AUDIO_BITS)
-
71 # define MOZZI_AUDIO_BITS 10
-
72 # endif
-
73 # if !defined(MOZZI_AUDIO_PIN_1)
-
74 # define MOZZI_AUDIO_PIN_1 DAC0
-
75 # endif
-
76 # include "disable_stereo_on_github_workflow.h"
-
77 MOZZI_CHECK_SUPPORTED(MOZZI_AUDIO_CHANNELS, 1)
-
78 #endif
-
79 
-
80 #define MOZZI__INTERNAL_ANALOG_READ_RESOLUTION 12
-
81 
-
82 #endif // #ifndef CONFIG_CHECK_SAMD21_H
-
-
- - - diff --git a/extras/doc/html/config__checks__stm32duino_8h_source.html b/extras/doc/html/config__checks__stm32duino_8h_source.html deleted file mode 100644 index 174509adc..000000000 --- a/extras/doc/html/config__checks__stm32duino_8h_source.html +++ /dev/null @@ -1,253 +0,0 @@ - - - - - - - -Mozzi: config_checks_stm32duino.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
config_checks_stm32duino.h
-
-
-
1 /*
-
2  * config_checks_stm32duino.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2023-2024 Thomas Friedrichsmeier and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10 */
-
11 
-
12 #ifndef CONFIG_CHECKS_STM32DUINO_H
-
13 #define CONFIG_CHECKS_STM32DUINO_H
-
14 
-
15 /**
-
16 * @page hardware_stm32_disambiguation Mozzi on STM32-based boards - disambiguation
-
17 *
-
18 * * The situation on STM32-based boards is rather confusing, as there are several competing Arduino cores. Importantly:
-
19 * - Some boards use dedicated cores (e.g. Arduino Giga / Portenta @ref hardware_mbed) etc. For those, see the relevant sections (if we support them).
-
20 * - There is a series of libmaple-based cores, including [Roger Clark's libmaple-based core](https://github.com/rogerclarkmelbourne/Arduino_STM32). These are highly optimized,
-
21 * and provide very complete support, but only for a limited number of boards. Unfortunately, at the time of this writing (2023/04), they are not available for installation
-
22 * via the Arduino Board Manager, and they do not currently seem actively maintained.
-
23 * For using these with Mozzi, see @ref hardware_stm32_maple
-
24 * - A generic Arduino core for STM32 is the [STM32duino core](https://github.com/stm32duino/Arduino_Core_STM32). It supports a huge set of boards, and seems to have offical
-
25 * backing by STM, but some features of the libmaple based cores are still lacking. To complete confusion, this core now uses the label "STM32duino", which used to be what
-
26 * the libmaple cores above were known by (don't blame Mozzi for this mess!).
-
27 * For using this with Mozzi, see @ref hardware_stm32duino
-
28 * */
-
29 
-
30 /**
-
31  * @page hardware_stm32duino Mozzi on STM32duino-based boards.
-
32  *
-
33  * port by Thomas Friedrichsmeier
-
34  *
-
35  * @note
-
36  * Be sure to understand the info given at @ref hardware_stm32_disambiguation . This page is about using Mozzi with the STM32duino core.
-
37  *
-
38  * @section stm32duino_status Port status and usage notes
-
39  * Tested on a STM32F103C8T6 blue pill board as well as an STM32F411CE black pill board, i.e. on sboards _without_ a
-
40  * real DAC. Compiles and runs, with a bunch of caveats (see below). Should probably run on any other board supported by the
-
41  * [STM32duino core](https://github.com/stm32duino/Arduino_Core_STM32) (although this theory is untested).
-
42  * When trying any other board, you probably want to check the platform specific settings (see below), carefully, importantly, whether the desired output resolution is
-
43  * achievable, and whether the desired output pins are PWM capable.
-
44  *
-
45  * - @ref MOZZI_ANALOG_READ input implementation is somewhat experimental, and may not be able to service a whole lot of pins (contributions welcome)
-
46  * - @ref MOZZI_AUDIO_INPUT is completely untested (but implemented in theory; feedback welcome!)
-
47  * - getAudioInput() and mozziAnalogRead() return values in the STM32's full ADC resolution (the exact range depending on the board in use) rather than AVR's 0-1023.
-
48  * - twi_nonblock is not ported
-
49  *
-
50  * @section stm32duino_output_modes Output modes
-
51  * The following audio modes (see @ref MOZZI_AUDIO_MODE) are currently supported on this hardware:
-
52  * - MOZZI_OUTPUT_EXTERNAL_TIMED
-
53  * - MOZZI_OUTPUT_EXTERNAL_CUSTOM
-
54  * - MOZZI_OUTPUT_PWM
-
55  * - MOZZI_OUTPUT_PWM_2PIN
-
56  *
-
57  * The default mode is @ref stm32duino_pwm .
-
58  *
-
59  * @note
-
60  * This port may look similar to, but uses a different default GPIO pinout than @hardware_stm32_maple !
-
61  *
-
62  * @section stm32duino_pwm MOZZI_OUTPUT_PWM
-
63  * Standard pulse width modulated output to one (mono) or two (stereo, see @ref MOZZI_AUDIO_CHANNELS) GPIO pins. Default pinout: PA8 (mono/left), PA9 (right channel in stereo).
-
64  * This mode uses two hardware timers: One for the PWM (Timer 3 when using the default pin configuration), and a second for updating the output at audio rate.
-
65  * The default audio resolution is 10 bits, which results in a carrier frequency of ~70kHz on a 72MHz CPU. On slower boards you will have to descrease this.
-
66  * The following settings may be costumized, if desired:
-
67  *
-
68  * @code
-
69  * #define MOZZI_AUDIO_PIN_1 ... // Left / mono output pin. Default: PA8
-
70  * #define MOZZI_AUDIO_UPDATE_TIMER ... // Second hardware timer to claim, must not be the same of the timer for the above pin. Default TIM2
-
71  * #define MOZZI_AUDIO_BITS ... // Output resolution in bits. Default is 10
-
72  * // For stereo, only:
-
73  * #define MOZZI_AUDIO_PIN_2 ... // Right channel output pin. This *must* be connected to the same hardware timer as MOZZI_AUDIO_PIN_1 ! Default: PA9
-
74  * @endcode
-
75  *
-
76  * @section stm32duino_pwm MOZZI_OUTPUT_2PIN_PWM
-
77  * This mode is very similar to @ref stm32duino_pwm, but splitting output for a single channel across two GPIO pins for better resolution. For details on the required
-
78  * hardware setup, and configuration tradeoffs, see @ref avr_2pin_pwm . Stereo output is not available in this mode.
-
79  * Output is at 2*7 bits at up to 560kHz carrier frequency (but limited to 5 times audio rate).
-
80  *
-
81  * Customizable configuration options:
-
82  * @code
-
83  * #define MOZZI_AUDIO_PIN_1 ... // High byte of the output. Default: PA8
-
84  * #define MOZZI_AUDIO_PIN_1_LOW ... // Low byte of the output. Default: PA9
-
85  * #define MOZZI_AUDIO_UPDATE_TIMER ... // Second hardware timer to claim. Default TIM2
-
86  * #define MOZZI_AUDIO_BITS_PER_CHANNEL ... // Bits per pin. Default is 7
-
87  * @endcode
-
88  *
-
89  * @section stm32duino_external MOZZI_OUTPUT_EXTERNAL_TIMED and MOZZI_OUTPUT_EXTERNAL_CUSTOM
-
90  * See @ref external_audio .
-
91  * The (single) hardware timer claimed for MOZZI_OUTPUT_EXTERNAL_TIMED may be configured using "MOZZI_AUDIO_UPDATE_TIMER" (default: TIM2).
-
92 */
-
93 
-
94 #if not IS_STM32DUINO()
-
95 #error This header should be included for STM32 (stm32duino.com core), only
-
96 #endif
-
97 
-
98 #if !defined(MOZZI_AUDIO_MODE)
-
99 # define MOZZI_AUDIO_MODE MOZZI_OUTPUT_PWM
-
100 #endif
-
101 MOZZI_CHECK_SUPPORTED(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_TIMED, MOZZI_OUTPUT_EXTERNAL_CUSTOM, MOZZI_OUTPUT_PWM, MOZZI_OUTPUT_2PIN_PWM)
-
102 
-
103 #if !defined(MOZZI_AUDIO_RATE)
-
104 # define MOZZI_AUDIO_RATE 32768
-
105 #endif
-
106 
-
107 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PWM, MOZZI_OUTPUT_2PIN_PWM, MOZZI_OUTPUT_EXTERNAL_TIMED)
-
108 # if !defined(MOZZI_AUDIO_UPDATE_TIMER)
-
109 # define MOZZI_AUDIO_UPDATE_TIMER TIM2
-
110 # endif
-
111 #endif
-
112 
-
113 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PWM)
-
114 # if !defined(MOZZI_AUDIO_PIN_1)
-
115 # define MOZZI_AUDIO_PIN_1 PA8
-
116 # endif
-
117 # if (MOZZI_AUDIO_CHANNELS > 1) && !defined(MOZZI_AUDIO_PIN_1)
-
118 # define MOZZI_AUDIO_PIN_2 PA9
-
119 # endif
-
120 # if !defined(MOZZI_AUDIO_BITS)
-
121 # define MOZZI_AUDIO_BITS 10
-
122 # endif
-
123 # define MOZZI_AUDIO_BITS_PER_CHANNEL MOZZI_AUDIO_BITS
-
124 #elif MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_2PIN_PWM)
-
125 # if !defined(MOZZI_AUDIO_PIN_1)
-
126 # define MOZZI_AUDIO_PIN_1 PA8
-
127 # endif
-
128 # if !defined(MOZZI_AUDIO_PIN_1_LOW)
-
129 # define MOZZI_AUDIO_PIN_1_LOW PA9
-
130 # endif
-
131 # include "disable_stereo_on_github_workflow.h"
-
132 MOZZI_CHECK_SUPPORTED(MOZZI_AUDIO_CHANNELS, 1)
-
133 # if !defined(MOZZI_AUDIO_PER_CHANNEL)
-
134 # define MOZZI_AUDIO_BITS_PER_CHANNEL 7
-
135 # endif
-
136 # define MOZZI_AUDIO_BITS (MOZZI_AUDIO_BITS_PER_CHANNEL * 2)
-
137 #endif
-
138 
-
139 #if !defined(MOZZI_ANALOG_READ)
-
140 #define MOZZI_ANALOG_READ MOZZI_ANALOG_READ_STANDARD
-
141 #endif
-
142 
-
143 #define MOZZI__INTERNAL_ANALOG_READ_RESOLUTION ADC_RESOLUTION
-
144 
-
145 #endif // #ifndef CONFIG_CHECKS_STM32DUINO_H
-
-
- - - diff --git a/extras/doc/html/config__checks__stm32maple_8h_source.html b/extras/doc/html/config__checks__stm32maple_8h_source.html deleted file mode 100644 index 828343c41..000000000 --- a/extras/doc/html/config__checks__stm32maple_8h_source.html +++ /dev/null @@ -1,245 +0,0 @@ - - - - - - - -Mozzi: config_checks_stm32maple.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
config_checks_stm32maple.h
-
-
-
1 /*
-
2  * config_checks_stm32maple.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2023-2024 Thomas Friedrichsmeier and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10 */
-
11 
-
12 #ifndef CONFIG_CHECKS_STM32MAPLE_H
-
13 #define CONFIG_CHECKS_STM32MAPLE_H
-
14 
-
15 /**
-
16  * @page hardware_stm32_maple Mozzi on STM32-boards with libmaple based core.
-
17  * port by Thomas Friedrichsmeier
-
18  *
-
19  * @note
-
20  * Be sure to understand the info given at @ref hardware_stm32_disambiguation . This page is about using Mozzi with the STM32 "libmaple based" core.
-
21  *
-
22  * @note
-
23  * This port may look similar to, but uses a different default GPIO pinout than @ref @hardware_stm32duino !
-
24  *
-
25  * @section stm32_maple_status Status and peculiarities of this port
-
26  * Compiles for and runs on a STM32F103C8T6 blue pill board, with a bunch of caveats (see below), i.e. on a board _without_ a
-
27  * real DAC. Should probably run on any other board supported by [Roger Clark's libmaple-based core](https://github.com/rogerclarkmelbourne/Ardu0ino_STM32) (although this theory is untested).
-
28  *
-
29  * @note that at the time of this writing, [Stev Strong's slightliy more recent fork of this core](https://github.com/stevstrong/Arduino_STM32/) does *not* work with
-
30  * Mozzi, apparently due to a bug in pwmWrite().
-
31  *
-
32  * - If you want to use MIDI, be sure to replace "MIDI_CREATE_DEFAULT_INSTANCE()" with "MIDI_CREATE_INSTANCE(HardwareSerial, Serial1, MIDI)" (or Serial2)
-
33  * - @ref MOZZI_AUDIO_INPUT_STANDARD is implemented in theory, but untested (feedback welcome)
-
34  * - getAudioInput() and mozziAnalogRead() return values in the STM32's full ADC resolution of 0-4095 rather than AVR's 0-1023.
-
35  *- twi_nonblock is not ported
-
36  *
-
37  * @section stm32_output_modes Output modes
-
38  *
-
39  * The following audio modes (see @ref MOZZI_AUDIO_MODE) are currently supported on this hardware:
-
40  * - MOZZI_OUTPUT_EXTERNAL_TIMED
-
41  * - MOZZI_OUTPUT_EXTERNAL_CUSTOM
-
42  * - MOZZI_OUTPUT_PWM
-
43  * - MOZZI_OUTPUT_PWM_2PIN
-
44  *
-
45  * The default mode is @ref stm32_maple_pwm .
-
46  *
-
47  * @section stm32_maple_pwm MOZZI_OUTPUT_PWM
-
48  * Standard pulse width modulated output to one (mono) or two (stereo, see @ref MOZZI_AUDIO_CHANNELS) GPIO pins. Default pinout: PB8 (mono/left), PB9 (right channel in stereo).
-
49  * This mode uses two hardware timers: One for the PWM (Timer 4 when using the default pin configuration), and a second for updating the output at audio rate.
-
50  * The default audio resolution is 10 bits, which results in a carrier frequency of ~70kHz on a 72MHz CPU. On slower boards you will have to descrease this.
-
51  * The following settings may be costumized, if desired:
-
52  *
-
53  * @code
-
54  * #define MOZZI_AUDIO_PIN_1 ... // Left / mono output pin. Default: PB8
-
55  * #define MOZZI_AUDIO_PWM_TIMER ... // Must be set ot the hardware timer connected to the above pin. Default: 4
-
56  * #define MOZZI_AUDIO_UPDATE_TIMER ... // Second hardware timer to claim. Default 2
-
57  * #define MOZZI_AUDIO_BITS ... // Output resolution in bits. Default is 10
-
58  * // For stereo, only:
-
59  * #define MOZZI_AUDIO_PIN_2 ... // Right channel output pin. This *must* be connected to the same hardware timer as MOZZI_AUDIO_PIN_1 ! Default: PB9
-
60  * @endcode
-
61  *
-
62  * @section stm32_maple_2pin_pwm MOZZI_OUTPUT_2PIN_PWM
-
63  * This mode is very similar to @ref stm32_maple_pwm, but splitting output for a single channel across two GPIO pins for better resolution. For details on the required
-
64  * hardware setup, and configuration tradeoffs, see @ref avr_2pin_pwm . Stereo output is not available in this mode.
-
65  * Output is at 2*7 bits at up to 560kHz carrier frequency (but limited to 5 times audio rate).
-
66  *
-
67  * Customizable configuration options:
-
68  * @code
-
69  * #define MOZZI_AUDIO_PIN_1 ... // High byte of the output. Default: PB8
-
70  * #define MOZZI_AUDIO_PIN_2 ... // Low byte of the output. Default: PB9
-
71  * #define MOZZI_AUDIO_PWM_TIMER ... // Must be set to the number of the hardware timer connect to the above pins. Default: 4
-
72  * #define MOZZI_AUDIO_UPDATE_TIMER ... // Second hardware timer to claim. Default TIM2
-
73  * #define MOZZI_AUDIO_BITS_PER_CHANNEL ... // Bits per pin. Default is 7
-
74  * @endcode
-
75  *
-
76  * @section stm32_maple_external MOZZI_OUTPUT_EXTERNAL_TIMED and MOZZI_OUTPUT_EXTERNAL_CUSTOM
-
77  * See @ref external_audio
-
78  * The (single) hardware timer claimed for MOZZI_OUTPUT_EXTERNAL_TIMED may be configured using "MOZZI_AUDIO_UPDATE_TIMER" (default: TIM2).
-
79 */
-
80 
-
81 
-
82 #if not IS_STM32MAPLE()
-
83 #error This header should be included for STM32 (libmaple based core), only
-
84 #endif
-
85 
-
86 #if !defined(MOZZI_AUDIO_MODE)
-
87 # define MOZZI_AUDIO_MODE MOZZI_OUTPUT_PWM
-
88 #endif
-
89 MOZZI_CHECK_SUPPORTED(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_TIMED, MOZZI_OUTPUT_EXTERNAL_CUSTOM, MOZZI_OUTPUT_PWM, MOZZI_OUTPUT_2PIN_PWM)
-
90 
-
91 #if !defined(MOZZI_AUDIO_RATE)
-
92 # define MOZZI_AUDIO_RATE 32768
-
93 #endif
-
94 
-
95 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PWM, MOZZI_OUTPUT_2PIN_PWM, MOZZI_OUTPUT_EXTERNAL_TIMED)
-
96 # if !defined(MOZZI_AUDIO_UPDATE_TIMER)
-
97 # define MOZZI_AUDIO_UPDATE_TIMER 2
-
98 # endif
-
99 # if !defined(MOZZI_AUDIO_PWM_TIMER)
-
100 # define MOZZI_AUDIO_PWM_TIMER 4
-
101 # endif
-
102 #endif
-
103 
-
104 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PWM)
-
105 # if !defined(MOZZI_AUDIO_PIN_1)
-
106 # define MOZZI_AUDIO_PIN_1 PB8
-
107 # endif
-
108 # if (MOZZI_AUDIO_CHANNELS > 1) && !defined(MOZZI_AUDIO_PIN_1)
-
109 # define MOZZI_AUDIO_PIN_2 PB9
-
110 # endif
-
111 # if !defined(MOZZI_AUDIO_BITS)
-
112 # define MOZZI_AUDIO_BITS 10
-
113 # endif
-
114 # define MOZZI_AUDIO_BITS_PER_CHANNEL MOZZI_AUDIO_BITS
-
115 #elif MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_2PIN_PWM)
-
116 # if !defined(MOZZI_AUDIO_PIN_1)
-
117 # define MOZZI_AUDIO_PIN_1 PB8
-
118 # endif
-
119 # if !defined(MOZZI_AUDIO_PIN_1_LOW)
-
120 # define MOZZI_AUDIO_PIN_1_LOW PB9
-
121 # endif
-
122 # include "disable_stereo_on_github_workflow.h"
-
123 MOZZI_CHECK_SUPPORTED(MOZZI_AUDIO_CHANNELS, 1)
-
124 # if !defined(MOZZI_AUDIO_PER_CHANNEL)
-
125 # define MOZZI_AUDIO_PER_CHANNEL 7
-
126 # endif
-
127 # define MOZZI_AUDIO_BITS MOZZI_AUDIO_BITS_PER_CHANNEL * 2
-
128 #endif
-
129 
-
130 #if !defined(MOZZI_ANALOG_READ)
-
131 #define MOZZI_ANALOG_READ MOZZI_ANALOG_READ_STANDARD
-
132 #endif
-
133 
-
134 // TODO: This probably isn't correct for all boards!
-
135 #define MOZZI__INTERNAL_ANALOG_READ_RESOLUTION 12
-
136 
-
137 #endif // #ifndef CONFIG_CHECKS_STM32MAPLE_H
-
-
- - - diff --git a/extras/doc/html/config__checks__teensy_8h_source.html b/extras/doc/html/config__checks__teensy_8h_source.html deleted file mode 100644 index 9e63e61ff..000000000 --- a/extras/doc/html/config__checks__teensy_8h_source.html +++ /dev/null @@ -1,263 +0,0 @@ - - - - - - - -Mozzi: config_checks_teensy.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
config_checks_teensy.h
-
-
-
1 /*
-
2  * config_checks_teensy.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2023-2024 Thomas Friedrichsmeier and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10 */
-
11 
-
12 #ifndef CONFIG_CHECK_TEENSY_H
-
13 #define CONFIG_CHECK_TEENSY_H
-
14 
-
15 /** @ingroup hardware
-
16  * @page hardware_teensy3 Mozzi on Teensy 3.0/3.1/3.2/3.4/3.5/LC boards.
-
17  *
-
18  * port by Tim Barrass
-
19  *
-
20  * @note
-
21  * For Teensy 4.x see @ref hardware_teensy4
-
22  *
-
23  * @section teensy3_status Port status and ussage notes
-
24  * This port requires the following two libraries (which should be part of a default installtion, however):
-
25  * - [Timer library](https://github.com/loglow/IntervalTimer) for Teensy 3.* by Daniel Gilbert
-
26  * - [ADC library](http://github.com/pedvide/ADC) by Pedro Villanueva
-
27  *
-
28  * Some of the differences for Teensy 3.* which will affect users include:
-
29  * - twi_nonblock code by Marije Baalman for non-blocking I2C is not compatible with Teensy 3.0/3.1/3.2.
-
30  *
-
31  * @section teensy3_output Output modes
-
32  * The following audio modes (see @ref MOZZI_AUDIO_MODE) are currently supported on this hardware:
-
33  * - MOZZI_OUTPUT_EXTERNAL_TIMED
-
34  * - MOZZI_OUTPUT_EXTERNAL_CUSTOM
-
35  * - MOZZI_OUTPUT_INTERNAL_DAC
-
36  *
-
37  * The default mode is @ref teensy3_internal_dac .
-
38  *
-
39  * @section teensy3_internal_dac MOZZI_OUTPUT_INTERNAL_DAC
-
40  * Output is to the inbuilt DAC. Output resolution is 12 bits. Mono, only. The DAC output pin differs from board to boards.
-
41  * In most cases the appropriate pin will be set outmatically. If needed, you can specify the DAC pin, explicitly:
-
42  *
-
43  * @code
-
44  * #define MOZZI_AUDIO_PIN_1 ... // Default: A14, A12, or A21, depending on board
-
45  * @endcode
-
46  *
-
47  * @section teensy3_external MOZZI_OUTPUT_EXTERNAL_TIMED and MOZZI_OUTPUT_EXTERNAL_CUSTOM
-
48  * See @ref external_audio
-
49 */
-
50 
-
51 
-
52 /** @ingroup hardware
-
53  * @page hardware_teensy4 Mozzi on Teensy 4.x boards.
-
54  *
-
55  * port by Thomas Combriat
-
56  *
-
57  * @note
-
58  * For Teensy 3.x see @ref hardware_teensy3
-
59  *
-
60  * @section teensy4_status Port status and ussage notes
-
61  * This port requires the following two libraries (which should be part of a default installtion, however):
-
62  * - [Timer library](https://github.com/loglow/IntervalTimer) for Teensy 4.* by Daniel Gilbert
-
63  * - [ADC library](http://github.com/pedvide/ADC) by Pedro Villanueva
-
64  *
-
65  * Contrary to the Teensy 3, the Teensy 4 do not have any DAC. The output is done on pin A8 (PWM) by default (see below).
-
66  * twi_nonblock is not ported.
-
67  *
-
68  * @section teensy3_output Output modes
-
69  * The following audio modes (see @ref MOZZI_AUDIO_MODE) are currently supported on this hardware:
-
70  * - MOZZI_OUTPUT_EXTERNAL_TIMED
-
71  * - MOZZI_OUTPUT_EXTERNAL_CUSTOM
-
72  * - MOZZI_OUTPUT_PWM
-
73  *
-
74  * The default mode is @ref teensy4_pwm .
-
75  *
-
76  * @section teensy4_pwm MOZZI_OUTPUT_PWM
-
77  * Output is to a GPIO pin (or two in stereo). The output resolution is fixed at 10 bits, and a 146484 kHz carrier frequency.
-
78  * The output pins can be configured as:
-
79  *
-
80  * @code
-
81  * #define MOZZI_AUDIO_PIN_1 ... // Left / mono output pin. Default: A8
-
82  * // For stereo, only:
-
83  * #define MOZZI_AUDIO_PIN_2 ... // Right channel output pin. Default: A9
-
84  * @endcode
-
85  *
-
86  * @section teensy4_external MOZZI_OUTPUT_EXTERNAL_TIMED and MOZZI_OUTPUT_EXTERNAL_CUSTOM
-
87  * See @ref external_audio
-
88 */
-
89 
-
90 
-
91 #if !(IS_TEENSY3() || IS_TEENSY4())
-
92 #error This header should be included for Teensy (3.x or 4.x) boards, only
-
93 #endif
-
94 
-
95 
-
96 
-
97 #if IS_TEENSY3()
-
98 # include "disable_2pinmode_on_github_workflow.h"
-
99 # if !defined(MOZZI_AUDIO_MODE)
-
100 # define MOZZI_AUDIO_MODE MOZZI_OUTPUT_INTERNAL_DAC
-
101 # endif
-
102 MOZZI_CHECK_SUPPORTED(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_TIMED, MOZZI_OUTPUT_EXTERNAL_CUSTOM, MOZZI_OUTPUT_INTERNAL_DAC)
-
103 #elif IS_TEENSY4()
-
104 # include "disable_2pinmode_on_github_workflow.h"
-
105 # if !defined(MOZZI_AUDIO_MODE)
-
106 # define MOZZI_AUDIO_MODE MOZZI_OUTPUT_PWM
-
107 # endif
-
108 MOZZI_CHECK_SUPPORTED(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_EXTERNAL_TIMED, MOZZI_OUTPUT_EXTERNAL_CUSTOM, MOZZI_OUTPUT_PWM)
-
109 #endif
-
110 
-
111 #if !defined(MOZZI_AUDIO_RATE)
-
112 #define MOZZI_AUDIO_RATE 32768
-
113 #endif
-
114 
-
115 #if defined(MOZZI_PWM_RATE)
-
116 #error Configuration of MOZZI_PWM_RATE is not currently supported on this platform (always same as MOZZI_AUDIO_RATE)
-
117 #endif
-
118 
-
119 #if !defined(MOZZI_ANALOG_READ)
-
120 # define MOZZI_ANALOG_READ MOZZI_ANALOG_READ_STANDARD
-
121 #endif
-
122 
-
123 MOZZI_CHECK_SUPPORTED(MOZZI_ANALOG_READ, MOZZI_ANALOG_READ_NONE, MOZZI_ANALOG_READ_STANDARD)
-
124 
-
125 #include "teensyPinMap.h"
-
126 
-
127 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_INTERNAL_DAC)
-
128 # define MOZZI_AUDIO_BITS 12 // not configurable
-
129 # if !defined(MOZZI_AUDIO_PIN_1)
-
130 # if defined(__MKL26Z64__)
-
131 # define MOZZI_AUDIO_PIN_1 A12
-
132 # elif defined(__MK20DX128__) || defined(__MK20DX256__)
-
133 # define MOZZI_AUDIO_PIN_1 A14
-
134 # elif defined(__MK64FX512__) || defined(__MK66FX1M0__)
-
135 # define MOZZI_AUDIO_PIN_1 A21
-
136 # else
-
137 # error DAC pin not know for this board. Please define MOZZI_AUDIO_PIN_1 as appropriate
-
138 # endif
-
139 # endif
-
140 # include "disable_stereo_on_github_workflow.h"
-
141 MOZZI_CHECK_SUPPORTED(MOZZI_AUDIO_CHANNELS, 1)
-
142 #elif MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PWM)
-
143 # define MOZZI_AUDIO_BITS 10 // not configurable
-
144 # if !defined(MOZZI_AUDIO_PIN_1)
-
145 # define MOZZI_AUDIO_PIN_1 A8
-
146 # endif
-
147 # if !defined(MOZZI_AUDIO_PIN_2)
-
148 # define MOZZI_AUDIO_PIN_2 A9
-
149 # endif
-
150 #endif
-
151 
-
152 //TODO: Not 100% sure this is correct in all cases.
-
153 #define MOZZI__INTERNAL_ANALOG_READ_RESOLUTION 10
-
154 
-
155 #endif // #ifndef CONFIG_CHECK_TEENSY_H
-
-
- - - diff --git a/extras/doc/html/config__checks__template_8h_source.html b/extras/doc/html/config__checks__template_8h_source.html deleted file mode 100644 index a08d3754e..000000000 --- a/extras/doc/html/config__checks__template_8h_source.html +++ /dev/null @@ -1,236 +0,0 @@ - - - - - - - -Mozzi: config_checks_template.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
config_checks_template.h
-
-
-
1 /** NOTE Template only: Copy and adjust this file when adding a new port.
-
2  *
-
3  * More instructions on the process are to be found in MozziGuts_impl_template.hpp. Read those first!
-
4  *
-
5  * What this file shall do:
-
6  * 1) Set default values for certain configurable options. Try to stick to the defines already in use as much as possible,
-
7  * so configuration is consistent across ports.
-
8  * 2) Have some checks for configuration values that are not supported on this port
-
9  * 3) Document some details of your port
-
10  */
-
11 
-
12 /*
-
13  * config_checks_template.h
-
14  *
-
15  * This file is part of Mozzi.
-
16  *
-
17  * Copyright 2023-2024 Thomas Friedrichsmeier and the Mozzi Team
-
18  * NOTE: In your port, don't forget to update the above copyright notice!
-
19  *
-
20  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
21  *
-
22 */
-
23 
-
24 /** NOTE: If your port doesn't support MOZZI_OUTPUT_2PIN_PWM, add this include to make compilation of HIFI examples pass on the github runner */
- -
26 /** NOTE: All ports need to provide a default for this */
-
27 #if not defined(MOZZI_AUDIO_MODE)
-
28 # define MOZZI_AUDIO_MODE MOZZI_OUTPUT_PWM
-
29 #endif
-
30 /** NOTE: And all ports should allow only supported output modes. Note that MOZZI_OUTPUT_EXTERNAL_TIMED and MOZZI_OUTPUT_EXTERNAL_CUSTOM
-
31 are usually trivial to implement, so we'll assume your port allows them, too: */
-
32 MOZZI_CHECK_SUPPORTED(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PWM, MOZZI_OUTPUT_EXTERNAL_TIMED, MOZZI_OUTPUT_EXTERNAL_CUSTOM)
-
33 
-
34 /** NOTE: All ports need to provide a default for this. 32768 is reasonable on most modern MCUs, but 16384 may be useful for weaker MCUs. */
-
35 #if not defined(MOZZI_AUDIO_RATE)
-
36 # define MOZZI_AUDIO_RATE 32768
-
37 #endif
-
38 
-
39 /** NOTE: *If* your port has an implementation for asynchronous analog reads, these shall be enabled by default. */
-
40 #if not defined(MOZZI_ANALOG_READ)
-
41 # define MOZZI_ANALOG_READ MOZZI_ANALOG_READ_STANDARD
-
42 #endif
-
43 /** NOTE: *Otherwise* you may additionally document that as not-yet-supported like so: */
-
44 // MOZZI_CHECK_SUPPORTED(MOZZI_ANALOG_READ, MOZZI_ANALOG_READ)
-
45 
-
46 /** NOTE: This should be set to whichever resolution (in bits) mozziAnalogRead() returns values in by default in your implementation.
-
47  * mozziAnalogRead<bits>() will shift the return value accordingly. Generally you will set this to the default hardware resolution for this platform.
-
48  *
-
49  * @em Optionally, you could to set this to the user configurable MOZZI_ANALOG_READ_RESOLUTION (if it has been defined), and configure your ADC reads,
-
50  * accordingly, avoiding the extra shift operation:
-
51  *
-
52  * @code
-
53 #ifdef MOZZI_ANALOG_READ_RESOLUTION
-
54 #define MOZZI__INTERNAL_ANALOG_READ_RESOLUTION MOZZI_ANALOG_READ_RESOLUTION
-
55 #define MOZZI__IMPL_SET_ANALOG_READ_RESOLUTION
-
56 #else
-
57 #define MOZZI__INTERNAL_ANALOG_READ_RESOLUTION 16
-
58 #endif
-
59 
-
60 [...]
-
61 
-
62 //inside MozziGuts_impl_MPLATFORM, function setupMozziADC():
-
63 #ifdef MOZZI__IMPL_SET_ANALOG_READ_RESOLUTION
-
64 analogReadResolution(MOZZI_ANALOG_READ_RESOLUTION);
-
65 #endif
-
66  * @endcode
-
67 */
-
68 #define MOZZI__INTERNAL_ANALOG_READ_RESOLUTION 10
-
69 
-
70 /** NOTE: Example for additional config options depending on a specific output mode: */
-
71 #if MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_INTERNAL_DAC)
-
72 # if !defined(MOZZI_AUDIO_PIN_1)
-
73 # define MOZZI_AUDIO_PIN_1 5
-
74 # endif
-
75 /** NOTE: All ports need to provide a default for this, for all audio modes _except_ for the external ones: */
-
76 # if !defined(MOZZI_AUDIO_BITS)
-
77 # define MOZZI_AUDIO_BITS 10
-
78 # endif
-
79 /** NOTE: If only mono is supported in this output mode: */
-
80 # include "disable_stereo_on_github_workflow.h" // This allows stereo sketches to compile (in mono) in automated testing builds.
-
81 MOZZI_CHECK_SUPPORTED(MOZZI_AUDIO_CHANNELS, MOZZI_MONO)
-
82 #endif
-
83 
-
84 
-
85 /** NOTE: You may also set further, implementation-specific defines, here. E.g. BYPASS_MOZZI_OUTPUT_BUFFER. Defines that are purely
-
86  * specific to your port (i.e. only needed inside MozziGuts_impt_YOURPLATFORM.h, should be #undef'ed at the end of that file. */
-
87 
-
88 
-
89 /** NOTE: The following is an example documentation for your port. In order not to end up in the real documentation, the comment starts
-
90  * with "/*", only. Change that to "/**" to enable documentation to be extracted. */
-
91 
-
92 /* @ingroup hardware
-
93  * @page hardware_MYPORT Mozzi on MYPORT architecture based boards (e.g. MOST PROMINENT BOARD)
-
94  *
-
95  * Port added by YOUR_NAME.
-
96  *
-
97  * @section MYPORT_status Status of this port and usage notes
-
98  * This port has been tested on BOARD A, BOARD B, but is expected to work on other boards using this family of MCUs, too.
-
99  * The default MOZZI_AUDIO_RATE is set to 32678 Hz. Asynchronous analog reads are not yet implemented, so be careful
-
100  * not to use mozziAnalogRead() too much. Also @ref MOZZI_AUDIO_INPUT is not available.
-
101  *
-
102  * When connecting external circuitry, keep in mind that the GPIO pins on this CPU are rated at a max of 3 mA. Be careful
-
103  * not to over-stress them. It is further recommended not to make use of feature X when using Mozzi, as it will
-
104  * introduce considerable noise into the audio.
-
105  *
-
106  * Also, something else to keep in mind about this port.
-
107  *
-
108  * @section MYPORT_output_modes Output modes
-
109  * The following audio modes (see @ref MOZZI_AUDIO_MODE) are currently supported on this hardware:
-
110  * - MOZZI_OUTPUT_EXTERNAL_TIMED
-
111  * - MOZZI_OUTPUT_EXTERNAL_CUSTOM
-
112  * - MOZZI_OUTPUT_INTERNAL_DAC
-
113  *
-
114  * The default mode is @ref MYPORT_internal_dac , meaning, only boards with an inbuilt DAC are covered by default
-
115  * (you could stil use one of the external output modes, however).
-
116  *
-
117  * @section MYPORT_internal_dac MOZZI_OUTPUT_INTERNAL_DAC
-
118  * Output resolution is 10 bits by default, and goes to pin DAC0. Hardware timer 1 is claimed by Mozzi.
-
119  * Only mono output is supported. Within the hardware limits of your board, you can configure the following:
-
120  *
-
121  * @code
-
122  * #define MOZZI_AUDIO_PIN_1 ... // default is DAC0
-
123  * #define MOZZI_AUDIO_BITS ... // default is 10
-
124  * @endcode
-
125  *
-
126  * @section MYPORT_external MOZZI_OUTPUT_EXTERNAL_TIMED and MOZZI_OUTPUT_EXTERNAL_CUSTOM
-
127  * See @ref external_audio
-
128 */
-
-
- - - diff --git a/extras/doc/html/config__example__avr__hifi_8h_source.html b/extras/doc/html/config__example__avr__hifi_8h_source.html deleted file mode 100644 index b8d585827..000000000 --- a/extras/doc/html/config__example__avr__hifi_8h_source.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - -Mozzi: config_example_avr_hifi.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
config_example_avr_hifi.h
-
-
-
1 /* Configuration example
-
2 
-
3 This example is targetted at the AVR platform (Arduino Uno & friends), only!
-
4 
-
5 Set configuration options according to the mode that was formerly known as "HIFI".
-
6 Do read up on the required hardware circuitry! */
-
7 
-
8 #include "MozziConfigValues.h" // for named option values
-
9 
-
10 #define MOZZI_AUDIO_MODE MOZZI_OUTPUT_2PIN_PWM
-
11 //#define MOZZI_AUDIO_RATE 32768 // the default, in this mode
-
12 //#define MOZZI_PWM_RATE 125000 // the default, in this mode
-
13 //#define MOZZI_AUDIO_BITS_PER_CHANNEL 2 // the default, in this mode
-
14 
-
15 // should you wish to customize the output pins:
-
16 //#define AUDIO_AUDIO_PIN_1 TIMER1_A_PIN
-
17 //#define MOZZI_AUDIO_PIN_1_REGISTER OCR1A // must also specify the hardware register responsible for this pin
-
18 //#define AUDIO_AUDIO_PIN_1_LOW TIMER1_B_PIN
-
19 //#define MOZZI_AUDIO_PIN_1_LOW_REGISTER OCR1B // must also specify the hardware register responsible for this pin
-
-
- - - diff --git a/extras/doc/html/config__example__avr__legacy__standard__mode_8h_source.html b/extras/doc/html/config__example__avr__legacy__standard__mode_8h_source.html deleted file mode 100644 index 946c1f817..000000000 --- a/extras/doc/html/config__example__avr__legacy__standard__mode_8h_source.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - -Mozzi: config_example_avr_legacy_standard_mode.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
config_example_avr_legacy_standard_mode.h
-
-
-
1 /* Configuration example
-
2 
-
3 This example is targetted at the AVR platform (Arduino Uno & friends), only!
-
4 
-
5 Set configuration options according to the mode that was formerly known as "STANDARD" (not STANDARD_PLUS). */
-
6 
-
7 #include "MozziConfigValues.h" // for named option values
-
8 
-
9 #define MOZZI_AUDIO_MODE MOZZI_OUTPUT_MODE_PWM
-
10 #define MOZZI_AUDIO_RATE 16384
-
11 #define MOZZI_PWM_RATE 16384
-
12 
-
13 // should you wish to customize the output pin:
-
14 //#define AUDIO_AUDIO_PIN_1 TIMER1_A_PIN
-
15 //#define MOZZI_AUDIO_PIN_1_REGISTER OCR1A // must also specify the hardware register responsible for this pin
-
-
- - - diff --git a/extras/doc/html/config__example__avr__legacy__standardplus__mode_8h_source.html b/extras/doc/html/config__example__avr__legacy__standardplus__mode_8h_source.html deleted file mode 100644 index 25c251213..000000000 --- a/extras/doc/html/config__example__avr__legacy__standardplus__mode_8h_source.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - - -Mozzi: config_example_avr_legacy_standardplus_mode.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
config_example_avr_legacy_standardplus_mode.h
-
-
-
1 /* Configuration example
-
2 
-
3 This example is targetted at the AVR platform (Arduino Uno & friends), only!
-
4 
-
5 The configuration formerly known as STANDARD_PLUS is still the default on AVR, so you
-
6 do not need to configure anything! This file just lists the relevant settings involved: */
-
7 
-
8 #include "MozziConfigValues.h" // for named option values
-
9 
-
10 // all of these are the defaults on AVR, anyway, thus commented
-
11 //#define MOZZI_AUDIO_MODE MOZZI_OUTPUT_MODE_PWM
-
12 //#define MOZZI_AUDIO_RATE 16384
-
13 //#define MOZZI_PWM_RATE 32768
-
14 
-
15 
-
16 // should you wish to customize the output pin:
-
17 //#define AUDIO_AUDIO_PIN_1 TIMER1_A_PIN
-
18 //#define MOZZI_AUDIO_PIN_1_REGISTER OCR1A // must also specify the hardware register responsible for this pin
-
-
- - - diff --git a/extras/doc/html/config__example__avr__stereo_8h_source.html b/extras/doc/html/config__example__avr__stereo_8h_source.html deleted file mode 100644 index 32b707f4d..000000000 --- a/extras/doc/html/config__example__avr__stereo_8h_source.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - -Mozzi: config_example_avr_stereo.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
config_example_avr_stereo.h
-
-
-
1 /* Configuration example
-
2 
-
3 This example is targetted at the AVR platform (Arduino Uno & friends), only!
-
4 
-
5 This example shows setting up stereo mode on AVR. */
-
6 
-
7 #include "MozziConfigValues.h" // for named option values
-
8 
-
9 #define MOZZI_AUDIO_CHANNELS MOZZI_STEREO
-
10 
-
11 // should you wish to customize the output pins:
-
12 //#define AUDIO_AUDIO_PIN_1 TIMER1_A_PIN
-
13 //#define MOZZI_AUDIO_PIN_1_REGISTER OCR1A // must also specify the hardware register responsible for this pin
-
14 //#define AUDIO_AUDIO_PIN_2 TIMER1_B_PIN
-
15 //#define MOZZI_AUDIO_PIN_2_REGISTER OCR1B // must also specify the hardware register responsible for this pin
-
-
- - - diff --git a/extras/doc/html/config__example__external_8h_source.html b/extras/doc/html/config__example__external_8h_source.html deleted file mode 100644 index 5f6091588..000000000 --- a/extras/doc/html/config__example__external_8h_source.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - -Mozzi: config_example_external.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
config_example_external.h
-
-
-
1 /* Configuration example
-
2 
-
3 Configure Mozzi for "external" audio output. You will need to provide an audioOutput() function in your sketch.
-
4 
-
5 See TODO: link to relevant tutorial
-
6 */
-
7 
-
8 #include "MozziConfigValues.h" // for named option values
-
9 
-
10 #define MOZZI_AUDIO_MODE MOZZI_OUTPUT_EXTERNAL_TIMED
-
11 // or use this:
-
12 //#define MOZZI_AUDIO_MODE MOZZI_OUTPUT_EXTERNAL_CUSTOM
-
13 
-
14 //#define MOZZI_AUDIO_RATE 32768 // the default, in this mode
-
15 //#define MOZZI_AUDIO_BITS 16 // the default in this mode, but e.g. when connecting to a 24-bit DAC, you'd set 24, here.
-
-
- - - diff --git a/extras/doc/html/config__example__rp2040__i2s__pt8211__mono_8h_source.html b/extras/doc/html/config__example__rp2040__i2s__pt8211__mono_8h_source.html deleted file mode 100644 index 78e5b4807..000000000 --- a/extras/doc/html/config__example__rp2040__i2s__pt8211__mono_8h_source.html +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - - -Mozzi: config_example_rp2040_i2s_pt8211_mono.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
config_example_rp2040_i2s_pt8211_mono.h
-
-
-
1 /* Configuration example
-
2 
-
3 This example is targetted at the RP2040 (raspberry Pi pico) platform only!
-
4 
-
5 Configure the Raspberry Pico to output sound in mono on a I2S DAC on LSBJ format (like the PT8211). */
-
6 
-
7 
-
8 #include "MozziConfigValues.h" // for named option values
-
9 
-
10 #define MOZZI_AUDIO_MODE MOZZI_OUTPUT_I2S_DAC
-
11 #define MOZZI_I2S_FORMAT MOZZI_I2S_FORMAT_LSBJ // PT8211 is on LSBJ format
-
12 
-
13 // all of these are the defaults on RP2040 outputting on I2S, anyway, thus commented
-
14 #define MOZZI_AUDIO_BITS 16
-
15 #define MOZZI_I2S_PIN_BCK 20
-
16 #define MOZZI_I2S_PIN_WS (MOZZI_I2S_PIN_BCK+1) // CANNOT BE CHANGED, HAS TO BE NEXT TO pBCLK, i.e. default is 21
-
17 #define MOZZI_I2S_PIN_DATA 22
-
-
- - - diff --git a/extras/doc/html/config__example__rp2040__pwm_8h_source.html b/extras/doc/html/config__example__rp2040__pwm_8h_source.html deleted file mode 100644 index 2f1b81abf..000000000 --- a/extras/doc/html/config__example__rp2040__pwm_8h_source.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - -Mozzi: config_example_rp2040_pwm.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
config_example_rp2040_pwm.h
-
-
-
1 /* Configuration example
-
2 
-
3 This example is targetted at the RP2040 (raspberry Pi pico) platform only!
-
4 
-
5 The configuration formerly known as STANDARD_PLUS is still the default on RP2040, so you
-
6 do not need to configure anything! This file just lists the relevant settings involved: */
-
7 
-
8 #include "MozziConfigValues.h" // for named option values
-
9 
-
10 // all of these are the defaults on RP2040, anyway, thus commented
-
11 //#define MOZZI_AUDIO_MODE MOZZI_OUTPUT_MODE_PWM
-
12 //#define MOZZI_AUDIO_RATE 32768
-
13 
-
14 
-
15 // should you wish to customize the output pin:
-
16 //#define AUDIO_AUDIO_PIN_1 0
-
-
- - - diff --git a/extras/doc/html/custom_stylesheet.css b/extras/doc/html/custom_stylesheet.css deleted file mode 100644 index 09036fc8c..000000000 --- a/extras/doc/html/custom_stylesheet.css +++ /dev/null @@ -1,48 +0,0 @@ -/* Mozzi extra CSS for doxygen 1.8.3.1 */ - -#projectlogo -{ - text-align: center; - vertical-align: bottom; - border-collapse: separate; -} - -#projectlogo img -{ - max-width: 50%; - margin: 10%; - border: 0px none; -} - -#projectname -{ - color: white; - font: 300% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 2px 0px; -} - -#projectbrief -{ - color: white; - font: 120% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 0px; -} - -#projectnumber -{ - color: white; - font: 50% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 0px; -} - -#titlearea -{ - background-color: #94C254; - padding: 5px; - margin: 0px; - width: 100%; - border-bottom: 1px solid #5373B4; -} diff --git a/extras/doc/html/dir_0d6feda837323b0c7a50b1cca0a6cf12.html b/extras/doc/html/dir_0d6feda837323b0c7a50b1cca0a6cf12.html deleted file mode 100644 index fd951ce9f..000000000 --- a/extras/doc/html/dir_0d6feda837323b0c7a50b1cca0a6cf12.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - -Mozzi: SampleHuffman_Umpah Directory Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
SampleHuffman_Umpah Directory Reference
-
-
-
-
- - - diff --git a/extras/doc/html/dir_3faa5fff9e46bf8b8f48c87f683ce0e6.html b/extras/doc/html/dir_3faa5fff9e46bf8b8f48c87f683ce0e6.html deleted file mode 100644 index e697f0f8c..000000000 --- a/extras/doc/html/dir_3faa5fff9e46bf8b8f48c87f683ce0e6.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - -Mozzi: python Directory Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
python Directory Reference
-
-
- - - - - -

-Files

file  char2mozzi.py [code]
 A script for converting raw 8 bit sound data files to wavetables for Mozzi.
 
-
-
- - - diff --git a/extras/doc/html/dir_7374381ecdb819c64ee9b6ea2bd3370d.html b/extras/doc/html/dir_7374381ecdb819c64ee9b6ea2bd3370d.html deleted file mode 100644 index caed656d5..000000000 --- a/extras/doc/html/dir_7374381ecdb819c64ee9b6ea2bd3370d.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - -Mozzi: internal Directory Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
internal Directory Reference
-
-
- - - - - -

-Files

file  MozziGuts_impl_template.hpp [code]
 Template for implementation of new ports.
 
-
-
- - - diff --git a/extras/doc/html/dir_91ea62b43b2ac03ee8b1ec98abec0fd0.html b/extras/doc/html/dir_91ea62b43b2ac03ee8b1ec98abec0fd0.html deleted file mode 100644 index 8bc0f2051..000000000 --- a/extras/doc/html/dir_91ea62b43b2ac03ee8b1ec98abec0fd0.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - -Mozzi: Skeleton_Multi Directory Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Skeleton_Multi Directory Reference
-
-
-
-
- - - diff --git a/extras/doc/html/dir_972072f1ab172f7c6da94578c90fb35b.html b/extras/doc/html/dir_972072f1ab172f7c6da94578c90fb35b.html deleted file mode 100644 index 1ce5e7a52..000000000 --- a/extras/doc/html/dir_972072f1ab172f7c6da94578c90fb35b.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - -Mozzi: 01.Basics Directory Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
01.Basics Directory Reference
-
-
- - -

-Directories

-
-
- - - diff --git a/extras/doc/html/dir_9ca29615486e86932f4b900563144736.html b/extras/doc/html/dir_9ca29615486e86932f4b900563144736.html deleted file mode 100644 index 67cdf992f..000000000 --- a/extras/doc/html/dir_9ca29615486e86932f4b900563144736.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - -Mozzi: 08.Samples Directory Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
08.Samples Directory Reference
-
-
- - -

-Directories

-
-
- - - diff --git a/extras/doc/html/dir_9f351d46ce3cc29445a41dc3a31e6919.html b/extras/doc/html/dir_9f351d46ce3cc29445a41dc3a31e6919.html deleted file mode 100644 index ead963c3f..000000000 --- a/extras/doc/html/dir_9f351d46ce3cc29445a41dc3a31e6919.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - -Mozzi: config Directory Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
config Directory Reference
-
-
- - - - -

-Files

file  mozzi_config_documentation.h [code]
 
-
-
- - - diff --git a/extras/doc/html/dir_d28a4824dc47e487b107a5db32ef43c4.html b/extras/doc/html/dir_d28a4824dc47e487b107a5db32ef43c4.html deleted file mode 100644 index 4e629f24f..000000000 --- a/extras/doc/html/dir_d28a4824dc47e487b107a5db32ef43c4.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - -Mozzi: examples Directory Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
examples Directory Reference
-
-
-
-
- - - diff --git a/extras/doc/html/dir_da40a2d191134d083f9bacf4a8879a55.html b/extras/doc/html/dir_da40a2d191134d083f9bacf4a8879a55.html deleted file mode 100644 index aab398c2c..000000000 --- a/extras/doc/html/dir_da40a2d191134d083f9bacf4a8879a55.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - -Mozzi: 03.Sensors Directory Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
03.Sensors Directory Reference
-
-
- - -

-Directories

-
-
- - - diff --git a/extras/doc/html/dir_dd81b9de5c9027a54e49f977944ecdc1.html b/extras/doc/html/dir_dd81b9de5c9027a54e49f977944ecdc1.html deleted file mode 100644 index fc58c1020..000000000 --- a/extras/doc/html/dir_dd81b9de5c9027a54e49f977944ecdc1.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - -Mozzi: Piezo_SampleScrubber Directory Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Piezo_SampleScrubber Directory Reference
-
-
-
-
- - - diff --git a/extras/doc/html/disable__2pinmode__on__github__workflow_8h_source.html b/extras/doc/html/disable__2pinmode__on__github__workflow_8h_source.html deleted file mode 100644 index 5d09622cf..000000000 --- a/extras/doc/html/disable__2pinmode__on__github__workflow_8h_source.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - -Mozzi: disable_2pinmode_on_github_workflow.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
disable_2pinmode_on_github_workflow.h
-
-
-
1 /* This purely internal header takes care of disabling stereo mode when on a github runner. Intended to be used
-
2  * on platforms that don't support stereo, allowing the compilation to proceed without error. */
-
3 
-
4 #if __has_include("../detect_github_runner.h") // the marker file we added inside the workflow
-
5  // do nothing, if this isn't present
-
6 # if defined(MOZZI_AUDIO_MODE) && MOZZI_IS(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_2PIN_PWM)
-
7 # undef MOZZI_AUDIO_MODE
-
8 # warning Disabled 2pin pwm output mode on github runner
-
9 # endif
-
10 
-
11 #endif
-
-
- - - diff --git a/extras/doc/html/disable__stereo__on__github__workflow_8h_source.html b/extras/doc/html/disable__stereo__on__github__workflow_8h_source.html deleted file mode 100644 index c2f3cef30..000000000 --- a/extras/doc/html/disable__stereo__on__github__workflow_8h_source.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - -Mozzi: disable_stereo_on_github_workflow.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
disable_stereo_on_github_workflow.h
-
-
-
1 /* This purely internal header takes care of disabling stereo mode when on a github runner. Intended to be used
-
2  * on platforms that don't support stereo, allowing the compilation to proceed without error. */
-
3 
-
4 #if __has_include("../detect_github_runner.h") // the marker file we added inside the workflow
-
5  // do nothing, if this isn't present
-
6 # if defined(MOZZI_AUDIO_CHANNELS) && (MOZZI_AUDIO_CHANNELS > 1)
-
7 # define GITHUB_RUNNER_ACCEPT_STEREO_IN_MONO
-
8 # undef MOZZI_AUDIO_CHANNELS
-
9 # define MOZZI_AUDIO_CHANNELS MOZZI_MONO
-
10 # warning Disabled stereo compilation while in Github runner.
-
11 # endif
-
12 
-
13 #endif
-
-
- - - diff --git a/extras/doc/html/doc.png b/extras/doc/html/doc.png deleted file mode 100644 index 9fe9dc717..000000000 Binary files a/extras/doc/html/doc.png and /dev/null differ diff --git a/extras/doc/html/doxygen.css b/extras/doc/html/doxygen.css deleted file mode 100644 index f2c4902bd..000000000 --- a/extras/doc/html/doxygen.css +++ /dev/null @@ -1,1793 +0,0 @@ -/* The standard CSS for doxygen 1.9.1 */ - -body, table, div, p, dl { - font: 400 14px/22px Roboto,sans-serif; -} - -p.reference, p.definition { - font: 400 14px/22px Roboto,sans-serif; -} - -/* @group Heading Levels */ - -h1.groupheader { - font-size: 150%; -} - -.title { - font: 400 14px/28px Roboto,sans-serif; - font-size: 150%; - font-weight: bold; - margin: 10px 2px; -} - -h2.groupheader { - border-bottom: 1px solid #657438; - color: #12140A; - font-size: 150%; - font-weight: normal; - margin-top: 1.75em; - padding-top: 8px; - padding-bottom: 4px; - width: 100%; -} - -h3.groupheader { - font-size: 100%; -} - -h1, h2, h3, h4, h5, h6 { - -webkit-transition: text-shadow 0.5s linear; - -moz-transition: text-shadow 0.5s linear; - -ms-transition: text-shadow 0.5s linear; - -o-transition: text-shadow 0.5s linear; - transition: text-shadow 0.5s linear; - margin-right: 15px; -} - -h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { - text-shadow: 0 0 15px cyan; -} - -dt { - font-weight: bold; -} - -ul.multicol { - -moz-column-gap: 1em; - -webkit-column-gap: 1em; - column-gap: 1em; - -moz-column-count: 3; - -webkit-column-count: 3; - column-count: 3; -} - -p.startli, p.startdd { - margin-top: 2px; -} - -th p.starttd, th p.intertd, th p.endtd { - font-size: 100%; - font-weight: 700; -} - -p.starttd { - margin-top: 0px; -} - -p.endli { - margin-bottom: 0px; -} - -p.enddd { - margin-bottom: 4px; -} - -p.endtd { - margin-bottom: 2px; -} - -p.interli { -} - -p.interdd { -} - -p.intertd { -} - -/* @end */ - -caption { - font-weight: bold; -} - -span.legend { - font-size: 70%; - text-align: center; -} - -h3.version { - font-size: 90%; - text-align: center; -} - -div.navtab { - border-right: 1px solid #889C4C; - padding-right: 15px; - text-align: right; - line-height: 110%; -} - -div.navtab table { - border-spacing: 0; -} - -td.navtab { - padding-right: 6px; - padding-left: 6px; -} -td.navtabHL { - background-image: url('tab_a.png'); - background-repeat:repeat-x; - padding-right: 6px; - padding-left: 6px; -} - -td.navtabHL a, td.navtabHL a:visited { - color: #fff; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); -} - -a.navtab { - font-weight: bold; -} - -div.qindex{ - text-align: center; - width: 100%; - line-height: 140%; - font-size: 130%; - color: #A0A0A0; -} - -dt.alphachar{ - font-size: 180%; - font-weight: bold; -} - -.alphachar a{ - color: black; -} - -.alphachar a:hover, .alphachar a:visited{ - text-decoration: none; -} - -.classindex dl { - padding: 25px; - column-count:1 -} - -.classindex dd { - display:inline-block; - margin-left: 50px; - width: 90%; - line-height: 1.15em; -} - -.classindex dl.odd { - background-color: #F4F6EE; -} - -@media(min-width: 1120px) { - .classindex dl { - column-count:2 - } -} - -@media(min-width: 1320px) { - .classindex dl { - column-count:3 - } -} - - -/* @group Link Styling */ - -a { - color: #191D0E; - font-weight: normal; - text-decoration: none; -} - -.contents a:visited { - color: #252B15; -} - -a:hover { - text-decoration: underline; -} - -.contents a.qindexHL:visited { - color: #FFFFFF; -} - -a.el { - font-weight: bold; -} - -a.elRef { -} - -a.code, a.code:visited, a.line, a.line:visited { - color: #252B15; -} - -a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { - color: #252B15; -} - -/* @end */ - -dl.el { - margin-left: -1cm; -} - -ul { - overflow: hidden; /*Fixed: list item bullets overlap floating elements*/ -} - -#side-nav ul { - overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ -} - -#main-nav ul { - overflow: visible; /* reset ul rule for the navigation bar drop down lists */ -} - -.fragment { - text-align: left; - direction: ltr; - overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/ - overflow-y: hidden; -} - -pre.fragment { - border: 1px solid #AFC07D; - background-color: #F9FAF6; - padding: 4px 6px; - margin: 4px 8px 4px 2px; - overflow: auto; - word-wrap: break-word; - font-size: 9pt; - line-height: 125%; - font-family: monospace, fixed; - font-size: 105%; -} - -div.fragment { - padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ - margin: 4px 8px 4px 2px; - background-color: #F9FAF6; - border: 1px solid #AFC07D; -} - -div.line { - font-family: monospace, fixed; - font-size: 13px; - min-height: 13px; - line-height: 1.0; - text-wrap: unrestricted; - white-space: -moz-pre-wrap; /* Moz */ - white-space: -pre-wrap; /* Opera 4-6 */ - white-space: -o-pre-wrap; /* Opera 7 */ - white-space: pre-wrap; /* CSS3 */ - word-wrap: break-word; /* IE 5.5+ */ - text-indent: -53px; - padding-left: 53px; - padding-bottom: 0px; - margin: 0px; - -webkit-transition-property: background-color, box-shadow; - -webkit-transition-duration: 0.5s; - -moz-transition-property: background-color, box-shadow; - -moz-transition-duration: 0.5s; - -ms-transition-property: background-color, box-shadow; - -ms-transition-duration: 0.5s; - -o-transition-property: background-color, box-shadow; - -o-transition-duration: 0.5s; - transition-property: background-color, box-shadow; - transition-duration: 0.5s; -} - -div.line:after { - content:"\000A"; - white-space: pre; -} - -div.line.glow { - background-color: cyan; - box-shadow: 0 0 10px cyan; -} - - -span.lineno { - padding-right: 4px; - text-align: right; - border-right: 2px solid #0F0; - background-color: #E8E8E8; - white-space: pre; -} -span.lineno a { - background-color: #D8D8D8; -} - -span.lineno a:hover { - background-color: #C8C8C8; -} - -.lineno { - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -div.ah, span.ah { - background-color: black; - font-weight: bold; - color: #FFFFFF; - margin-bottom: 3px; - margin-top: 3px; - padding: 0.2em; - border: solid thin #333; - border-radius: 0.5em; - -webkit-border-radius: .5em; - -moz-border-radius: .5em; - box-shadow: 2px 2px 3px #999; - -webkit-box-shadow: 2px 2px 3px #999; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; - background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); - background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); -} - -div.classindex ul { - list-style: none; - padding-left: 0; -} - -div.classindex span.ai { - display: inline-block; -} - -div.groupHeader { - margin-left: 16px; - margin-top: 12px; - font-weight: bold; -} - -div.groupText { - margin-left: 16px; - font-style: italic; -} - -body { - background-color: white; - color: black; - margin: 0; -} - -div.contents { - margin-top: 10px; - margin-left: 12px; - margin-right: 8px; -} - -td.indexkey { - background-color: #E2E8D0; - font-weight: bold; - border: 1px solid #AFC07D; - margin: 2px 0px 2px 0; - padding: 2px 10px; - white-space: nowrap; - vertical-align: top; -} - -td.indexvalue { - background-color: #E2E8D0; - border: 1px solid #AFC07D; - padding: 2px 10px; - margin: 2px 0px; -} - -tr.memlist { - background-color: #E5EAD5; -} - -p.formulaDsp { - text-align: center; -} - -img.formulaDsp { - -} - -img.formulaInl, img.inline { - vertical-align: middle; -} - -div.center { - text-align: center; - margin-top: 0px; - margin-bottom: 0px; - padding: 0px; -} - -div.center img { - border: 0px; -} - -address.footer { - text-align: right; - padding-right: 12px; -} - -img.footer { - border: 0px; - vertical-align: middle; -} - -/* @group Code Colorization */ - -span.keyword { - color: #008000 -} - -span.keywordtype { - color: #604020 -} - -span.keywordflow { - color: #e08000 -} - -span.comment { - color: #800000 -} - -span.preprocessor { - color: #806020 -} - -span.stringliteral { - color: #002080 -} - -span.charliteral { - color: #008080 -} - -span.vhdldigit { - color: #ff00ff -} - -span.vhdlchar { - color: #000000 -} - -span.vhdlkeyword { - color: #700070 -} - -span.vhdllogic { - color: #ff0000 -} - -blockquote { - background-color: #F2F5EB; - border-left: 2px solid #7E9146; - margin: 0 24px 0 4px; - padding: 0 12px 0 16px; -} - -blockquote.DocNodeRTL { - border-left: 0; - border-right: 2px solid #7E9146; - margin: 0 4px 0 24px; - padding: 0 16px 0 12px; -} - -/* @end */ - -/* -.search { - color: #003399; - font-weight: bold; -} - -form.search { - margin-bottom: 0px; - margin-top: 0px; -} - -input.search { - font-size: 75%; - color: #000080; - font-weight: normal; - background-color: #e8eef2; -} -*/ - -td.tiny { - font-size: 75%; -} - -.dirtab { - padding: 4px; - border-collapse: collapse; - border: 1px solid #889C4C; -} - -th.dirtab { - background: #E2E8D0; - font-weight: bold; -} - -hr { - height: 0px; - border: none; - border-top: 1px solid #2A3117; -} - -hr.footer { - height: 1px; -} - -/* @group Member Descriptions */ - -table.memberdecls { - border-spacing: 0px; - padding: 0px; -} - -.memberdecls td, .fieldtable tr { - -webkit-transition-property: background-color, box-shadow; - -webkit-transition-duration: 0.5s; - -moz-transition-property: background-color, box-shadow; - -moz-transition-duration: 0.5s; - -ms-transition-property: background-color, box-shadow; - -ms-transition-duration: 0.5s; - -o-transition-property: background-color, box-shadow; - -o-transition-duration: 0.5s; - transition-property: background-color, box-shadow; - transition-duration: 0.5s; -} - -.memberdecls td.glow, .fieldtable tr.glow { - background-color: cyan; - box-shadow: 0 0 15px cyan; -} - -.mdescLeft, .mdescRight, -.memItemLeft, .memItemRight, -.memTemplItemLeft, .memTemplItemRight, .memTemplParams { - background-color: #F6F8F0; - border: none; - margin: 4px; - padding: 1px 0 0 8px; -} - -.mdescLeft, .mdescRight { - padding: 0px 8px 4px 8px; - color: #555; -} - -.memSeparator { - border-bottom: 1px solid #CFD9B1; - line-height: 1px; - margin: 0px; - padding: 0px; -} - -.memItemLeft, .memTemplItemLeft { - white-space: nowrap; -} - -.memItemRight, .memTemplItemRight { - width: 100%; -} - -.memTemplParams { - color: #252B15; - white-space: nowrap; - font-size: 80%; -} - -/* @end */ - -/* @group Member Details */ - -/* Styles for detailed member documentation */ - -.memtitle { - padding: 8px; - border-top: 1px solid #8EA34F; - border-left: 1px solid #8EA34F; - border-right: 1px solid #8EA34F; - border-top-right-radius: 4px; - border-top-left-radius: 4px; - margin-bottom: -1px; - background-image: url('nav_f.png'); - background-repeat: repeat-x; - background-color: #D5DEBB; - line-height: 1.25; - font-weight: 300; - float:left; -} - -.permalink -{ - font-size: 65%; - display: inline-block; - vertical-align: middle; -} - -.memtemplate { - font-size: 80%; - color: #252B15; - font-weight: normal; - margin-left: 9px; -} - -.memnav { - background-color: #E2E8D0; - border: 1px solid #889C4C; - text-align: center; - margin: 2px; - margin-right: 15px; - padding: 2px; -} - -.mempage { - width: 100%; -} - -.memitem { - padding: 0; - margin-bottom: 10px; - margin-right: 5px; - -webkit-transition: box-shadow 0.5s linear; - -moz-transition: box-shadow 0.5s linear; - -ms-transition: box-shadow 0.5s linear; - -o-transition: box-shadow 0.5s linear; - transition: box-shadow 0.5s linear; - display: table !important; - width: 100%; -} - -.memitem.glow { - box-shadow: 0 0 15px cyan; -} - -.memname { - font-weight: 400; - margin-left: 6px; -} - -.memname td { - vertical-align: bottom; -} - -.memproto, dl.reflist dt { - border-top: 1px solid #8EA34F; - border-left: 1px solid #8EA34F; - border-right: 1px solid #8EA34F; - padding: 6px 0px 6px 0px; - color: #060703; - font-weight: bold; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - background-color: #D0DAB4; - /* opera specific markup */ - box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - border-top-right-radius: 4px; - /* firefox specific markup */ - -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; - -moz-border-radius-topright: 4px; - /* webkit specific markup */ - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - -webkit-border-top-right-radius: 4px; - -} - -.overload { - font-family: "courier new",courier,monospace; - font-size: 65%; -} - -.memdoc, dl.reflist dd { - border-bottom: 1px solid #8EA34F; - border-left: 1px solid #8EA34F; - border-right: 1px solid #8EA34F; - padding: 6px 10px 2px 10px; - background-color: #F9FAF6; - border-top-width: 0; - background-image:url('nav_g.png'); - background-repeat:repeat-x; - background-color: #FFFFFF; - /* opera specific markup */ - border-bottom-left-radius: 4px; - border-bottom-right-radius: 4px; - box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - /* firefox specific markup */ - -moz-border-radius-bottomleft: 4px; - -moz-border-radius-bottomright: 4px; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; - /* webkit specific markup */ - -webkit-border-bottom-left-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -} - -dl.reflist dt { - padding: 5px; -} - -dl.reflist dd { - margin: 0px 0px 10px 0px; - padding: 5px; -} - -.paramkey { - text-align: right; -} - -.paramtype { - white-space: nowrap; -} - -.paramname { - color: #602020; - white-space: nowrap; -} -.paramname em { - font-style: normal; -} -.paramname code { - line-height: 14px; -} - -.params, .retval, .exception, .tparams { - margin-left: 0px; - padding-left: 0px; -} - -.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { - font-weight: bold; - vertical-align: top; -} - -.params .paramtype, .tparams .paramtype { - font-style: italic; - vertical-align: top; -} - -.params .paramdir, .tparams .paramdir { - font-family: "courier new",courier,monospace; - vertical-align: top; -} - -table.mlabels { - border-spacing: 0px; -} - -td.mlabels-left { - width: 100%; - padding: 0px; -} - -td.mlabels-right { - vertical-align: bottom; - padding: 0px; - white-space: nowrap; -} - -span.mlabels { - margin-left: 8px; -} - -span.mlabel { - background-color: #4E5A2C; - border-top:1px solid #343B1D; - border-left:1px solid #343B1D; - border-right:1px solid #AFC07D; - border-bottom:1px solid #AFC07D; - text-shadow: none; - color: white; - margin-right: 4px; - padding: 2px 3px; - border-radius: 3px; - font-size: 7pt; - white-space: nowrap; - vertical-align: middle; -} - - - -/* @end */ - -/* these are for tree view inside a (index) page */ - -div.directory { - margin: 10px 0px; - border-top: 1px solid #7E9146; - border-bottom: 1px solid #7E9146; - width: 100%; -} - -.directory table { - border-collapse:collapse; -} - -.directory td { - margin: 0px; - padding: 0px; - vertical-align: top; -} - -.directory td.entry { - white-space: nowrap; - padding-right: 6px; - padding-top: 3px; -} - -.directory td.entry a { - outline:none; -} - -.directory td.entry a img { - border: none; -} - -.directory td.desc { - width: 100%; - padding-left: 6px; - padding-right: 6px; - padding-top: 3px; - border-left: 1px solid rgba(0,0,0,0.05); -} - -.directory tr.even { - padding-left: 6px; - background-color: #F2F5EB; -} - -.directory img { - vertical-align: -30%; -} - -.directory .levels { - white-space: nowrap; - width: 100%; - text-align: right; - font-size: 9pt; -} - -.directory .levels span { - cursor: pointer; - padding-left: 2px; - padding-right: 2px; - color: #191D0E; -} - -.arrow { - color: #7E9146; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - cursor: pointer; - font-size: 80%; - display: inline-block; - width: 16px; - height: 22px; -} - -.icon { - font-family: Arial, Helvetica; - font-weight: bold; - font-size: 12px; - height: 14px; - width: 16px; - display: inline-block; - background-color: #4E5A2C; - color: white; - text-align: center; - border-radius: 4px; - margin-left: 2px; - margin-right: 2px; -} - -.icona { - width: 24px; - height: 22px; - display: inline-block; -} - -.iconfopen { - width: 24px; - height: 18px; - margin-bottom: 4px; - background-image:url('folderopen.png'); - background-position: 0px -4px; - background-repeat: repeat-y; - vertical-align:top; - display: inline-block; -} - -.iconfclosed { - width: 24px; - height: 18px; - margin-bottom: 4px; - background-image:url('folderclosed.png'); - background-position: 0px -4px; - background-repeat: repeat-y; - vertical-align:top; - display: inline-block; -} - -.icondoc { - width: 24px; - height: 18px; - margin-bottom: 4px; - background-image:url('doc.png'); - background-position: 0px -4px; - background-repeat: repeat-y; - vertical-align:top; - display: inline-block; -} - -table.directory { - font: 400 14px Roboto,sans-serif; -} - -/* @end */ - -div.dynheader { - margin-top: 8px; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -address { - font-style: normal; - color: #090B05; -} - -table.doxtable caption { - caption-side: top; -} - -table.doxtable { - border-collapse:collapse; - margin-top: 4px; - margin-bottom: 4px; -} - -table.doxtable td, table.doxtable th { - border: 1px solid #0B0D06; - padding: 3px 7px 2px; -} - -table.doxtable th { - background-color: #13160B; - color: #FFFFFF; - font-size: 110%; - padding-bottom: 4px; - padding-top: 5px; -} - -table.fieldtable { - /*width: 100%;*/ - margin-bottom: 10px; - border: 1px solid #8EA34F; - border-spacing: 0px; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; - -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); - box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); -} - -.fieldtable td, .fieldtable th { - padding: 3px 7px 2px; -} - -.fieldtable td.fieldtype, .fieldtable td.fieldname { - white-space: nowrap; - border-right: 1px solid #8EA34F; - border-bottom: 1px solid #8EA34F; - vertical-align: top; -} - -.fieldtable td.fieldname { - padding-top: 3px; -} - -.fieldtable td.fielddoc { - border-bottom: 1px solid #8EA34F; - /*width: 100%;*/ -} - -.fieldtable td.fielddoc p:first-child { - margin-top: 0px; -} - -.fieldtable td.fielddoc p:last-child { - margin-bottom: 2px; -} - -.fieldtable tr:last-child td { - border-bottom: none; -} - -.fieldtable th { - background-image:url('nav_f.png'); - background-repeat:repeat-x; - background-color: #D5DEBB; - font-size: 90%; - color: #060703; - padding-bottom: 4px; - padding-top: 5px; - text-align:left; - font-weight: 400; - -moz-border-radius-topleft: 4px; - -moz-border-radius-topright: 4px; - -webkit-border-top-left-radius: 4px; - -webkit-border-top-right-radius: 4px; - border-top-left-radius: 4px; - border-top-right-radius: 4px; - border-bottom: 1px solid #8EA34F; -} - - -.tabsearch { - top: 0px; - left: 10px; - height: 36px; - background-image: url('tab_b.png'); - z-index: 101; - overflow: hidden; - font-size: 13px; -} - -.navpath ul -{ - font-size: 11px; - background-image:url('tab_b.png'); - background-repeat:repeat-x; - background-position: 0 -5px; - height:30px; - line-height:30px; - color:#68773A; - border:solid 1px #ACBD79; - overflow:hidden; - margin:0px; - padding:0px; -} - -.navpath li -{ - list-style-type:none; - float:left; - padding-left:10px; - padding-right:15px; - background-image:url('bc_s.png'); - background-repeat:no-repeat; - background-position:right; - color:#12150A; -} - -.navpath li.navelem a -{ - height:32px; - display:block; - text-decoration: none; - outline: none; - color: #080904; - font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - text-decoration: none; -} - -.navpath li.navelem a:hover -{ - color:#454F26; -} - -.navpath li.footer -{ - list-style-type:none; - float:right; - padding-left:10px; - padding-right:15px; - background-image:none; - background-repeat:no-repeat; - background-position:right; - color:#12150A; - font-size: 8pt; -} - - -div.summary -{ - float: right; - font-size: 8pt; - padding-right: 5px; - width: 50%; - text-align: right; -} - -div.summary a -{ - white-space: nowrap; -} - -table.classindex -{ - margin: 10px; - white-space: nowrap; - margin-left: 3%; - margin-right: 3%; - width: 94%; - border: 0; - border-spacing: 0; - padding: 0; -} - -div.ingroups -{ - font-size: 8pt; - width: 50%; - text-align: left; -} - -div.ingroups a -{ - white-space: nowrap; -} - -div.header -{ - background-image:url('nav_h.png'); - background-repeat:repeat-x; - background-color: #F6F8F0; - margin: 0px; - border-bottom: 1px solid #AFC07D; -} - -div.headertitle -{ - padding: 5px 5px 5px 10px; -} - -.PageDocRTL-title div.headertitle { - text-align: right; - direction: rtl; -} - -dl { - padding: 0 0 0 0; -} - -/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */ -dl.section { - margin-left: 0px; - padding-left: 0px; -} - -dl.section.DocNodeRTL { - margin-right: 0px; - padding-right: 0px; -} - -dl.note { - margin-left: -7px; - padding-left: 3px; - border-left: 4px solid; - border-color: #D0C000; -} - -dl.note.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #D0C000; -} - -dl.warning, dl.attention { - margin-left: -7px; - padding-left: 3px; - border-left: 4px solid; - border-color: #FF0000; -} - -dl.warning.DocNodeRTL, dl.attention.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #FF0000; -} - -dl.pre, dl.post, dl.invariant { - margin-left: -7px; - padding-left: 3px; - border-left: 4px solid; - border-color: #00D000; -} - -dl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #00D000; -} - -dl.deprecated { - margin-left: -7px; - padding-left: 3px; - border-left: 4px solid; - border-color: #505050; -} - -dl.deprecated.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #505050; -} - -dl.todo { - margin-left: -7px; - padding-left: 3px; - border-left: 4px solid; - border-color: #00C0E0; -} - -dl.todo.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #00C0E0; -} - -dl.test { - margin-left: -7px; - padding-left: 3px; - border-left: 4px solid; - border-color: #3030E0; -} - -dl.test.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #3030E0; -} - -dl.bug { - margin-left: -7px; - padding-left: 3px; - border-left: 4px solid; - border-color: #C08050; -} - -dl.bug.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #C08050; -} - -dl.section dd { - margin-bottom: 6px; -} - - -#projectlogo -{ - text-align: center; - vertical-align: bottom; - border-collapse: separate; -} - -#projectlogo img -{ - border: 0px none; -} - -#projectalign -{ - vertical-align: middle; -} - -#projectname -{ - font: 300% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 2px 0px; -} - -#projectbrief -{ - font: 120% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 0px; -} - -#projectnumber -{ - font: 50% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 0px; -} - -#titlearea -{ - padding: 0px; - margin: 0px; - width: 100%; - border-bottom: 1px solid #343B1D; -} - -.image -{ - text-align: center; -} - -.dotgraph -{ - text-align: center; -} - -.mscgraph -{ - text-align: center; -} - -.plantumlgraph -{ - text-align: center; -} - -.diagraph -{ - text-align: center; -} - -.caption -{ - font-weight: bold; -} - -div.zoom -{ - border: 1px solid #6F7F3E; -} - -dl.citelist { - margin-bottom:50px; -} - -dl.citelist dt { - color:#0F1208; - float:left; - font-weight:bold; - margin-right:10px; - padding:5px; - text-align:right; - width:52px; -} - -dl.citelist dd { - margin:2px 0 2px 72px; - padding:5px 0; -} - -div.toc { - padding: 14px 25px; - background-color: #EFF2E5; - border: 1px solid #C7D3A5; - border-radius: 7px 7px 7px 7px; - float: right; - height: auto; - margin: 0 8px 10px 10px; - width: 200px; -} - -.PageDocRTL-title div.toc { - float: left !important; - text-align: right; -} - -div.toc li { - background: url("bdwn.png") no-repeat scroll 0 5px transparent; - font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; - margin-top: 5px; - padding-left: 10px; - padding-top: 2px; -} - -.PageDocRTL-title div.toc li { - background-position-x: right !important; - padding-left: 0 !important; - padding-right: 10px; -} - -div.toc h3 { - font: bold 12px/1.2 Arial,FreeSans,sans-serif; - color: #252B15; - border-bottom: 0 none; - margin: 0; -} - -div.toc ul { - list-style: none outside none; - border: medium none; - padding: 0px; -} - -div.toc li.level1 { - margin-left: 0px; -} - -div.toc li.level2 { - margin-left: 15px; -} - -div.toc li.level3 { - margin-left: 30px; -} - -div.toc li.level4 { - margin-left: 45px; -} - -span.emoji { - /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html - * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; - */ -} - -.PageDocRTL-title div.toc li.level1 { - margin-left: 0 !important; - margin-right: 0; -} - -.PageDocRTL-title div.toc li.level2 { - margin-left: 0 !important; - margin-right: 15px; -} - -.PageDocRTL-title div.toc li.level3 { - margin-left: 0 !important; - margin-right: 30px; -} - -.PageDocRTL-title div.toc li.level4 { - margin-left: 0 !important; - margin-right: 45px; -} - -.inherit_header { - font-weight: bold; - color: gray; - cursor: pointer; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.inherit_header td { - padding: 6px 0px 2px 5px; -} - -.inherit { - display: none; -} - -tr.heading h2 { - margin-top: 12px; - margin-bottom: 4px; -} - -/* tooltip related style info */ - -.ttc { - position: absolute; - display: none; -} - -#powerTip { - cursor: default; - white-space: nowrap; - background-color: white; - border: 1px solid gray; - border-radius: 4px 4px 4px 4px; - box-shadow: 1px 1px 7px gray; - display: none; - font-size: smaller; - max-width: 80%; - opacity: 0.9; - padding: 1ex 1em 1em; - position: absolute; - z-index: 2147483647; -} - -#powerTip div.ttdoc { - color: grey; - font-style: italic; -} - -#powerTip div.ttname a { - font-weight: bold; -} - -#powerTip div.ttname { - font-weight: bold; -} - -#powerTip div.ttdeci { - color: #006318; -} - -#powerTip div { - margin: 0px; - padding: 0px; - font: 12px/16px Roboto,sans-serif; -} - -#powerTip:before, #powerTip:after { - content: ""; - position: absolute; - margin: 0px; -} - -#powerTip.n:after, #powerTip.n:before, -#powerTip.s:after, #powerTip.s:before, -#powerTip.w:after, #powerTip.w:before, -#powerTip.e:after, #powerTip.e:before, -#powerTip.ne:after, #powerTip.ne:before, -#powerTip.se:after, #powerTip.se:before, -#powerTip.nw:after, #powerTip.nw:before, -#powerTip.sw:after, #powerTip.sw:before { - border: solid transparent; - content: " "; - height: 0; - width: 0; - position: absolute; -} - -#powerTip.n:after, #powerTip.s:after, -#powerTip.w:after, #powerTip.e:after, -#powerTip.nw:after, #powerTip.ne:after, -#powerTip.sw:after, #powerTip.se:after { - border-color: rgba(255, 255, 255, 0); -} - -#powerTip.n:before, #powerTip.s:before, -#powerTip.w:before, #powerTip.e:before, -#powerTip.nw:before, #powerTip.ne:before, -#powerTip.sw:before, #powerTip.se:before { - border-color: rgba(128, 128, 128, 0); -} - -#powerTip.n:after, #powerTip.n:before, -#powerTip.ne:after, #powerTip.ne:before, -#powerTip.nw:after, #powerTip.nw:before { - top: 100%; -} - -#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { - border-top-color: #FFFFFF; - border-width: 10px; - margin: 0px -10px; -} -#powerTip.n:before { - border-top-color: #808080; - border-width: 11px; - margin: 0px -11px; -} -#powerTip.n:after, #powerTip.n:before { - left: 50%; -} - -#powerTip.nw:after, #powerTip.nw:before { - right: 14px; -} - -#powerTip.ne:after, #powerTip.ne:before { - left: 14px; -} - -#powerTip.s:after, #powerTip.s:before, -#powerTip.se:after, #powerTip.se:before, -#powerTip.sw:after, #powerTip.sw:before { - bottom: 100%; -} - -#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { - border-bottom-color: #FFFFFF; - border-width: 10px; - margin: 0px -10px; -} - -#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { - border-bottom-color: #808080; - border-width: 11px; - margin: 0px -11px; -} - -#powerTip.s:after, #powerTip.s:before { - left: 50%; -} - -#powerTip.sw:after, #powerTip.sw:before { - right: 14px; -} - -#powerTip.se:after, #powerTip.se:before { - left: 14px; -} - -#powerTip.e:after, #powerTip.e:before { - left: 100%; -} -#powerTip.e:after { - border-left-color: #FFFFFF; - border-width: 10px; - top: 50%; - margin-top: -10px; -} -#powerTip.e:before { - border-left-color: #808080; - border-width: 11px; - top: 50%; - margin-top: -11px; -} - -#powerTip.w:after, #powerTip.w:before { - right: 100%; -} -#powerTip.w:after { - border-right-color: #FFFFFF; - border-width: 10px; - top: 50%; - margin-top: -10px; -} -#powerTip.w:before { - border-right-color: #808080; - border-width: 11px; - top: 50%; - margin-top: -11px; -} - -@media print -{ - #top { display: none; } - #side-nav { display: none; } - #nav-path { display: none; } - body { overflow:visible; } - h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } - .summary { display: none; } - .memitem { page-break-inside: avoid; } - #doc-content - { - margin-left:0 !important; - height:auto !important; - width:auto !important; - overflow:inherit; - display:inline; - } -} - -/* @group Markdown */ - -table.markdownTable { - border-collapse:collapse; - margin-top: 4px; - margin-bottom: 4px; -} - -table.markdownTable td, table.markdownTable th { - border: 1px solid #0B0D06; - padding: 3px 7px 2px; -} - -table.markdownTable tr { -} - -th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { - background-color: #13160B; - color: #FFFFFF; - font-size: 110%; - padding-bottom: 4px; - padding-top: 5px; -} - -th.markdownTableHeadLeft, td.markdownTableBodyLeft { - text-align: left -} - -th.markdownTableHeadRight, td.markdownTableBodyRight { - text-align: right -} - -th.markdownTableHeadCenter, td.markdownTableBodyCenter { - text-align: center -} - -.DocNodeRTL { - text-align: right; - direction: rtl; -} - -.DocNodeLTR { - text-align: left; - direction: ltr; -} - -table.DocNodeRTL { - width: auto; - margin-right: 0; - margin-left: auto; -} - -table.DocNodeLTR { - width: auto; - margin-right: auto; - margin-left: 0; -} - -tt, code, kbd, samp -{ - display: inline-block; - direction:ltr; -} -/* @end */ - -u { - text-decoration: underline; -} - diff --git a/extras/doc/html/doxygen.svg b/extras/doc/html/doxygen.svg deleted file mode 100644 index 2f0e803ea..000000000 --- a/extras/doc/html/doxygen.svg +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/extras/doc/html/dynsections.js b/extras/doc/html/dynsections.js deleted file mode 100644 index 88f2c27e6..000000000 --- a/extras/doc/html/dynsections.js +++ /dev/null @@ -1,128 +0,0 @@ -/* - @licstart The following is the entire license notice for the JavaScript code in this file. - - The MIT License (MIT) - - Copyright (C) 1997-2020 by Dimitri van Heesch - - Permission is hereby granted, free of charge, to any person obtaining a copy of this software - and associated documentation files (the "Software"), to deal in the Software without restriction, - including without limitation the rights to use, copy, modify, merge, publish, distribute, - sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or - substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - @licend The above is the entire license notice for the JavaScript code in this file - */ -function toggleVisibility(linkObj) -{ - var base = $(linkObj).attr('id'); - var summary = $('#'+base+'-summary'); - var content = $('#'+base+'-content'); - var trigger = $('#'+base+'-trigger'); - var src=$(trigger).attr('src'); - if (content.is(':visible')===true) { - content.hide(); - summary.show(); - $(linkObj).addClass('closed').removeClass('opened'); - $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); - } else { - content.show(); - summary.hide(); - $(linkObj).removeClass('closed').addClass('opened'); - $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); - } - return false; -} - -function updateStripes() -{ - $('table.directory tr'). - removeClass('even').filter(':visible:even').addClass('even'); -} - -function toggleLevel(level) -{ - $('table.directory tr').each(function() { - var l = this.id.split('_').length-1; - var i = $('#img'+this.id.substring(3)); - var a = $('#arr'+this.id.substring(3)); - if (l - - - - - - -Mozzi: Examples - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- - - - - diff --git a/extras/doc/html/examples.js b/extras/doc/html/examples.js deleted file mode 100644 index 7fc6e2a66..000000000 --- a/extras/doc/html/examples.js +++ /dev/null @@ -1,29 +0,0 @@ -var examples = -[ - [ "07.Envelopes/ADSR_Envelope/ADSR_Envelope.ino", "07_8_envelopes_2_a_d_s_r__envelope_2_a_d_s_r__envelope_8ino-example.html", null ], - [ "09.Delays/AudioDelay/AudioDelay.ino", "09_8_delays_2_audio_delay_2_audio_delay_8ino-example.html", null ], - [ "09.Delays/AudioDelayFeedback/AudioDelayFeedback.ino", "09_8_delays_2_audio_delay_feedback_2_audio_delay_feedback_8ino-example.html", null ], - [ "03.Sensors/Knob_LDR_x2_WavePacket/Knob_LDR_x2_WavePacket.ino", "03_8_sensors_2_knob__l_d_r_x2__wave_packet_2_knob__l_d_r_x2__wave_packet_8ino-example.html", null ], - [ "02.Control/Control_Echo_Theremin/Control_Echo_Theremin.ino", "02_8_control_2_control__echo__theremin_2_control__echo__theremin_8ino-example.html", null ], - [ "05.Control_Filters/DCFilter/DCFilter.ino", "05_8_control__filters_2_d_c_filter_2_d_c_filter_8ino-example.html", null ], - [ "07.Envelopes/Ead_Envelope/Ead_Envelope.ino", "07_8_envelopes_2_ead__envelope_2_ead__envelope_8ino-example.html", null ], - [ "02.Control/EventDelay/EventDelay.ino", "02_8_control_2_event_delay_2_event_delay_8ino-example.html", null ], - [ "02.Control/Control_Tremelo/Control_Tremelo.ino", "02_8_control_2_control__tremelo_2_control__tremelo_8ino-example.html", null ], - [ "06.Synthesis/NonAlias_MetaOscil/NonAlias_MetaOscil.ino", "06_8_synthesis_2_non_alias__meta_oscil_2_non_alias__meta_oscil_8ino-example.html", null ], - [ "02.Control/Metronome_SampleHuffman/Metronome_SampleHuffman.ino", "02_8_control_2_metronome__sample_huffman_2_metronome__sample_huffman_8ino-example.html", null ], - [ "01.Basics/Vibrato/Vibrato.ino", "01_8_basics_2_vibrato_2_vibrato_8ino-example.html", null ], - [ "05.Control_Filters/Thermistor_OverSample/Thermistor_OverSample.ino", "05_8_control__filters_2_thermistor__over_sample_2_thermistor__over_sample_8ino-example.html", null ], - [ "06.Synthesis/PWM_Phasing/PWM_Phasing.ino", "06_8_synthesis_2_p_w_m__phasing_2_p_w_m__phasing_8ino-example.html", null ], - [ "05.Control_Filters/Teensy_USB_MIDI_portamento/Teensy_USB_MIDI_portamento.ino", "05_8_control__filters_2_teensy__u_s_b__m_i_d_i_portamento_2_teensy__u_s_b__m_i_d_i_portamento_8ino-example.html", null ], - [ "10.Audio_Filters/ResonantFilter/ResonantFilter.ino", "10_8_audio__filters_2_resonant_filter_2_resonant_filter_8ino-example.html", null ], - [ "10.Audio_Filters/ResonantFilter16/ResonantFilter16.ino", "10_8_audio__filters_2_resonant_filter16_2_resonant_filter16_8ino-example.html", null ], - [ "10.Audio_Filters/MultiResonantFilter/MultiResonantFilter.ino", "10_8_audio__filters_2_multi_resonant_filter_2_multi_resonant_filter_8ino-example.html", null ], - [ "09.Delays/ReverbTank_STANDARD/ReverbTank_STANDARD.ino", "09_8_delays_2_reverb_tank__s_t_a_n_d_a_r_d_2_reverb_tank__s_t_a_n_d_a_r_d_8ino-example.html", null ], - [ "08.Samples/Sample/Sample.ino", "08_8_samples_2_sample_2_sample_8ino-example.html", null ], - [ "08.Samples/SampleHuffman_Umpah/SampleHuffman_Umpah.ino", "08_8_samples_2_sample_huffman__umpah_2_sample_huffman__umpah_8ino-example.html", null ], - [ "05.Control_Filters/Smooth/Smooth.ino", "05_8_control__filters_2_smooth_2_smooth_8ino-example.html", null ], - [ "11.Audio_Filters/StateVariableFilter/StateVariableFilter.ino", "11_8_audio__filters_2_state_variable_filter_2_state_variable_filter_8ino-example.html", null ], - [ "06.Synthesis/WavePacket/WavePacket.ino", "06_8_synthesis_2_wave_packet_2_wave_packet_8ino-example.html", null ], - [ "06.Synthesis/WavePacket_Sample/WavePacket_Sample.ino", "06_8_synthesis_2_wave_packet__sample_2_wave_packet__sample_8ino-example.html", null ], - [ "06.Synthesis/WaveShaper/WaveShaper.ino", "06_8_synthesis_2_wave_shaper_2_wave_shaper_8ino-example.html", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/files.html b/extras/doc/html/files.html deleted file mode 100644 index c6fecbd6d..000000000 --- a/extras/doc/html/files.html +++ /dev/null @@ -1,223 +0,0 @@ - - - - - - - -Mozzi: File List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
File List
-
-
-
Here is a list of all documented files with brief descriptions:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 ADSR.h
 audio2huff.py
 AudioDelay.h
 AudioDelayFeedback.h
 AudioOutput.h
 AutoMap.h
 AutoRange.h
 blahblah4b_int8.h
 CapPoll.h
 char2mozzi.pyA script for converting raw 8 bit sound data files to wavetables for Mozzi
 chebyshev_int8.py
 CircularBuffer.h
 config_checks_avr.h
 config_checks_esp32.h
 config_checks_esp8266.h
 config_checks_generic.h
 config_checks_mbed.h
 config_checks_renesas.h
 config_checks_rp2040.h
 config_checks_samd21.h
 config_checks_stm32duino.h
 config_checks_stm32maple.h
 config_checks_teensy.h
 config_checks_template.h
 config_example_avr_hifi.h
 config_example_avr_legacy_standard_mode.h
 config_example_avr_legacy_standardplus_mode.h
 config_example_avr_stereo.h
 config_example_external.h
 config_example_rp2040_i2s_pt8211_mono.h
 config_example_rp2040_pwm.h
 ControlDelay.h
 DCfilter.h
 disable_2pinmode_on_github_workflow.h
 disable_stereo_on_github_workflow.h
 Ead.h
 EventDelay.h
 float2mozzi.py
 float2mozzi_uint8.py
 hardware_defines.h
 IntegerType.h
 IntMap.h
 known_16bit_timers.h
 Line.h
 LowPassFilter.h
 make_standard_tables.py
 meta.h
 MetaOscil.h
 Metronome.h
 Mozzi.hThis is the main include file in Mozzi
 mozzi_analog.h
 mozzi_config_documentation.h
 mozzi_fixmath.cpp
 mozzi_fixmath.h
 mozzi_macros.h
 mozzi_midi.h
 mozzi_pgmspace.h
 mozzi_rand.h
 mozzi_rand_p.h
 mozzi_utils.h
 MozziConfigValues.hThis file keeps a list of named configuration values
 MozziGuts.h
 MozziGuts.hpp
 MozziGuts_impl_AVR.hpp
 MozziGuts_impl_ESP32.hpp
 MozziGuts_impl_ESP8266.hpp
 MozziGuts_impl_MBED.hpp
 MozziGuts_impl_RENESAS.hpp
 MozziGuts_impl_RENESAS_ADC.hpp
 MozziGuts_impl_RENESAS_analog.hpp
 MozziGuts_impl_RP2040.hpp
 MozziGuts_impl_SAMD.hpp
 MozziGuts_impl_STM32.hpp
 MozziGuts_impl_STM32duino.hpp
 MozziGuts_impl_STM32duino_analog.hpp
 MozziGuts_impl_TEENSY.hpp
 MozziGuts_impl_template.hppTemplate for implementation of new ports
 MozziHeadersOnly.hThis file provides declarations of the Mozzi Core Functions Mozzi functions, but no implementation
 mult16x16.h
 mult16x8.h
 mult32x16.h
 Oscil.h
 OverSample.h
 PDResonant.h
 Phasor.h
 Portamento.h
 primes.h
 RCpoll.h
 ResonantFilter.h
 ReverbTank.h
 RollingAverage.h
 RollingStat.h
 Sample.h
 SampleHuffman.h
 sin1024_int8.py
 sin8192_uint8.py
 sin_multi_levels_int8.py
 Skeleton_Multi_Unit2.cpp
 Smooth.h
 Stack.h
 StateVariable.h
 table_generator_template.py
 teensyPinMap.h
 triangle.py
 twi_nonblock.h
 twi_nonblock.hpp
 umpah_huff.h
 WaveFolder.h
 WavePacket.h
 WavePacketSample.h
 WaveShaper.h
-
-
-
- - - diff --git a/extras/doc/html/files_dup.js b/extras/doc/html/files_dup.js deleted file mode 100644 index 9b038dc87..000000000 --- a/extras/doc/html/files_dup.js +++ /dev/null @@ -1,114 +0,0 @@ -var files_dup = -[ - [ "ADSR.h", "_a_d_s_r_8h_source.html", null ], - [ "audio2huff.py", "audio2huff_8py_source.html", null ], - [ "AudioDelay.h", "_audio_delay_8h_source.html", null ], - [ "AudioDelayFeedback.h", "_audio_delay_feedback_8h_source.html", null ], - [ "AudioOutput.h", "_audio_output_8h_source.html", null ], - [ "AutoMap.h", "_auto_map_8h_source.html", null ], - [ "AutoRange.h", "_auto_range_8h_source.html", null ], - [ "blahblah4b_int8.h", "blahblah4b__int8_8h_source.html", null ], - [ "CapPoll.h", "_cap_poll_8h_source.html", null ], - [ "char2mozzi.py", "char2mozzi_8py.html", "char2mozzi_8py" ], - [ "chebyshev_int8.py", "chebyshev__int8_8py_source.html", null ], - [ "CircularBuffer.h", "_circular_buffer_8h_source.html", null ], - [ "config_checks_avr.h", "config__checks__avr_8h_source.html", null ], - [ "config_checks_esp32.h", "config__checks__esp32_8h_source.html", null ], - [ "config_checks_esp8266.h", "config__checks__esp8266_8h_source.html", null ], - [ "config_checks_generic.h", "config__checks__generic_8h_source.html", null ], - [ "config_checks_mbed.h", "config__checks__mbed_8h_source.html", null ], - [ "config_checks_renesas.h", "config__checks__renesas_8h_source.html", null ], - [ "config_checks_rp2040.h", "config__checks__rp2040_8h_source.html", null ], - [ "config_checks_samd21.h", "config__checks__samd21_8h_source.html", null ], - [ "config_checks_stm32duino.h", "config__checks__stm32duino_8h_source.html", null ], - [ "config_checks_stm32maple.h", "config__checks__stm32maple_8h_source.html", null ], - [ "config_checks_teensy.h", "config__checks__teensy_8h_source.html", null ], - [ "config_checks_template.h", "config__checks__template_8h_source.html", null ], - [ "config_example_avr_hifi.h", "config__example__avr__hifi_8h_source.html", null ], - [ "config_example_avr_legacy_standard_mode.h", "config__example__avr__legacy__standard__mode_8h_source.html", null ], - [ "config_example_avr_legacy_standardplus_mode.h", "config__example__avr__legacy__standardplus__mode_8h_source.html", null ], - [ "config_example_avr_stereo.h", "config__example__avr__stereo_8h_source.html", null ], - [ "config_example_external.h", "config__example__external_8h_source.html", null ], - [ "config_example_rp2040_i2s_pt8211_mono.h", "config__example__rp2040__i2s__pt8211__mono_8h_source.html", null ], - [ "config_example_rp2040_pwm.h", "config__example__rp2040__pwm_8h_source.html", null ], - [ "ControlDelay.h", "_control_delay_8h_source.html", null ], - [ "DCfilter.h", "_d_cfilter_8h_source.html", null ], - [ "disable_2pinmode_on_github_workflow.h", "disable__2pinmode__on__github__workflow_8h_source.html", null ], - [ "disable_stereo_on_github_workflow.h", "disable__stereo__on__github__workflow_8h_source.html", null ], - [ "Ead.h", "_ead_8h_source.html", null ], - [ "EventDelay.h", "_event_delay_8h_source.html", null ], - [ "float2mozzi.py", "float2mozzi_8py_source.html", null ], - [ "float2mozzi_uint8.py", "float2mozzi__uint8_8py_source.html", null ], - [ "hardware_defines.h", "hardware__defines_8h_source.html", null ], - [ "IntegerType.h", "_integer_type_8h_source.html", null ], - [ "IntMap.h", "_int_map_8h_source.html", null ], - [ "known_16bit_timers.h", "known__16bit__timers_8h_source.html", null ], - [ "Line.h", "_line_8h_source.html", null ], - [ "LowPassFilter.h", "_low_pass_filter_8h_source.html", null ], - [ "make_standard_tables.py", "make__standard__tables_8py_source.html", null ], - [ "meta.h", "meta_8h_source.html", null ], - [ "MetaOscil.h", "_meta_oscil_8h_source.html", null ], - [ "Metronome.h", "_metronome_8h_source.html", null ], - [ "Mozzi.h", "_mozzi_8h.html", null ], - [ "mozzi_analog.h", "mozzi__analog_8h_source.html", null ], - [ "mozzi_config_documentation.h", "mozzi__config__documentation_8h.html", "mozzi__config__documentation_8h" ], - [ "mozzi_fixmath.cpp", "mozzi__fixmath_8cpp_source.html", null ], - [ "mozzi_fixmath.h", "mozzi__fixmath_8h_source.html", null ], - [ "mozzi_macros.h", "mozzi__macros_8h_source.html", null ], - [ "mozzi_midi.h", "mozzi__midi_8h_source.html", null ], - [ "mozzi_pgmspace.h", "mozzi__pgmspace_8h_source.html", null ], - [ "mozzi_rand.h", "mozzi__rand_8h_source.html", null ], - [ "mozzi_rand_p.h", "mozzi__rand__p_8h_source.html", null ], - [ "mozzi_utils.h", "mozzi__utils_8h_source.html", null ], - [ "MozziConfigValues.h", "_mozzi_config_values_8h.html", "_mozzi_config_values_8h" ], - [ "MozziGuts.h", "_mozzi_guts_8h_source.html", null ], - [ "MozziGuts.hpp", "_mozzi_guts_8hpp_source.html", null ], - [ "MozziGuts_impl_AVR.hpp", "_mozzi_guts__impl___a_v_r_8hpp_source.html", null ], - [ "MozziGuts_impl_ESP32.hpp", "_mozzi_guts__impl___e_s_p32_8hpp_source.html", null ], - [ "MozziGuts_impl_ESP8266.hpp", "_mozzi_guts__impl___e_s_p8266_8hpp_source.html", null ], - [ "MozziGuts_impl_MBED.hpp", "_mozzi_guts__impl___m_b_e_d_8hpp_source.html", null ], - [ "MozziGuts_impl_RENESAS.hpp", "_mozzi_guts__impl___r_e_n_e_s_a_s_8hpp_source.html", null ], - [ "MozziGuts_impl_RENESAS_ADC.hpp", "_mozzi_guts__impl___r_e_n_e_s_a_s___a_d_c_8hpp_source.html", null ], - [ "MozziGuts_impl_RENESAS_analog.hpp", "_mozzi_guts__impl___r_e_n_e_s_a_s__analog_8hpp_source.html", null ], - [ "MozziGuts_impl_RP2040.hpp", "_mozzi_guts__impl___r_p2040_8hpp_source.html", null ], - [ "MozziGuts_impl_SAMD.hpp", "_mozzi_guts__impl___s_a_m_d_8hpp_source.html", null ], - [ "MozziGuts_impl_STM32.hpp", "_mozzi_guts__impl___s_t_m32_8hpp_source.html", null ], - [ "MozziGuts_impl_STM32duino.hpp", "_mozzi_guts__impl___s_t_m32duino_8hpp_source.html", null ], - [ "MozziGuts_impl_STM32duino_analog.hpp", "_mozzi_guts__impl___s_t_m32duino__analog_8hpp_source.html", null ], - [ "MozziGuts_impl_TEENSY.hpp", "_mozzi_guts__impl___t_e_e_n_s_y_8hpp_source.html", null ], - [ "MozziGuts_impl_template.hpp", "_mozzi_guts__impl__template_8hpp.html", "_mozzi_guts__impl__template_8hpp" ], - [ "MozziHeadersOnly.h", "_mozzi_headers_only_8h.html", "_mozzi_headers_only_8h" ], - [ "mult16x16.h", "mult16x16_8h_source.html", null ], - [ "mult16x8.h", "mult16x8_8h_source.html", null ], - [ "mult32x16.h", "mult32x16_8h_source.html", null ], - [ "Oscil.h", "_oscil_8h_source.html", null ], - [ "OverSample.h", "_over_sample_8h_source.html", null ], - [ "PDResonant.h", "_p_d_resonant_8h_source.html", null ], - [ "Phasor.h", "_phasor_8h_source.html", null ], - [ "Portamento.h", "_portamento_8h_source.html", null ], - [ "primes.h", "primes_8h_source.html", null ], - [ "RCpoll.h", "_r_cpoll_8h_source.html", null ], - [ "ResonantFilter.h", "_resonant_filter_8h_source.html", null ], - [ "ReverbTank.h", "_reverb_tank_8h_source.html", null ], - [ "RollingAverage.h", "_rolling_average_8h_source.html", null ], - [ "RollingStat.h", "_rolling_stat_8h_source.html", null ], - [ "Sample.h", "_sample_8h_source.html", null ], - [ "SampleHuffman.h", "_sample_huffman_8h_source.html", null ], - [ "sin1024_int8.py", "sin1024__int8_8py_source.html", null ], - [ "sin8192_uint8.py", "sin8192__uint8_8py_source.html", null ], - [ "sin_multi_levels_int8.py", "sin__multi__levels__int8_8py_source.html", null ], - [ "Skeleton_Multi_Unit2.cpp", "_skeleton___multi___unit2_8cpp_source.html", null ], - [ "Smooth.h", "_smooth_8h_source.html", null ], - [ "Stack.h", "_stack_8h_source.html", null ], - [ "StateVariable.h", "_state_variable_8h_source.html", null ], - [ "table_generator_template.py", "table__generator__template_8py_source.html", null ], - [ "teensyPinMap.h", "teensy_pin_map_8h_source.html", null ], - [ "triangle.py", "triangle_8py_source.html", null ], - [ "twi_nonblock.h", "twi__nonblock_8h_source.html", null ], - [ "twi_nonblock.hpp", "twi__nonblock_8hpp_source.html", null ], - [ "umpah_huff.h", "umpah__huff_8h_source.html", null ], - [ "WaveFolder.h", "_wave_folder_8h_source.html", null ], - [ "WavePacket.h", "_wave_packet_8h_source.html", null ], - [ "WavePacketSample.h", "_wave_packet_sample_8h_source.html", null ], - [ "WaveShaper.h", "_wave_shaper_8h_source.html", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/float2mozzi_8py_source.html b/extras/doc/html/float2mozzi_8py_source.html deleted file mode 100644 index d46d2c43c..000000000 --- a/extras/doc/html/float2mozzi_8py_source.html +++ /dev/null @@ -1,154 +0,0 @@ - - - - - - - -Mozzi: float2mozzi.py Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
float2mozzi.py
-
-
-
1 
-
2 
-
3 import sys, array, os, textwrap, math
-
4 
-
5  if len(sys.argv) != 5:
-
6  print 'Usage: float2mozzi.py <infile outfile tablename samplerate>'
-
7  sys.exit(1)
-
8 
-
9 [infile, outfile, tablename, samplerate] = sys.argv[1:]
-
10 
-
11 def float2mozzi(infile, outfile, tablename,samplerate):
-
12  fin = open(os.path.expanduser(infile), "rb")
-
13  print "opened " + infile
-
14  valuesetad = os.path.getsize(os.path.expanduser(infile))/4
-
15 
-
16 
-
17  valuesfromfile = array.array('f')
-
18  try:
-
19  valuesfromfile.fromfile(fin,valuesetad)
-
20  finally:
-
21  fin.close()
-
22 
-
23  values=valuesfromfile.tolist()
-
24 
-
27  fout = open(os.path.expanduser(outfile), "w")
-
28  fout.write('#ifndef ' + tablename + '_H_' + '\n')
-
29  fout.write('#define ' + tablename + '_H_' + '\n \n')
-
30  fout.write('#include <Arduino.h>'+'\n')
-
31  fout.write('#include "mozzi_pgmspace.h"'+'\n \n')
-
32  fout.write('#define ' + tablename + '_NUM_CELLS '+ str(len(values))+'\n')
-
33  fout.write('#define ' + tablename + '_SAMPLERATE '+ str(samplerate)+'\n \n')
-
34  outstring = 'CONSTTABLE_STORAGE(int8_t) ' + tablename + '_DATA [] = {'
-
35  try:
-
36  for num in values:
-
37  outstring += str(math.trunc((num*256)+0.5)) + ", "
-
38 
-
40  finally:
-
41  outstring += "};"
-
42  outstring = textwrap.fill(outstring, 80)
-
43  fout.write(outstring)
-
44  fout.write('\n \n #endif /* ' + tablename + '_H_ */\n')
-
45  fout.close()
-
46  print "wrote " + outfile
-
47 
-
48 float2mozzi(infile, outfile, tablename, samplerate)
- -
-
- - - diff --git a/extras/doc/html/float2mozzi__uint8_8py_source.html b/extras/doc/html/float2mozzi__uint8_8py_source.html deleted file mode 100644 index 2d0217c7b..000000000 --- a/extras/doc/html/float2mozzi__uint8_8py_source.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - - - - -Mozzi: float2mozzi_uint8.py Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
float2mozzi_uint8.py
-
-
-
1 
-
2 
-
3 import sys, array, os, textwrap, math
-
4 
-
5 def float2mozzi_uint8(infile, outfile, tablename,samplerate):
-
6  fin = open(os.path.expanduser(infile), "rb")
-
7  print "opened " + infile
-
8  valuesetad = os.path.getsize(os.path.expanduser(infile))/4
-
9 
-
10 
-
11  valuesfromfile = array.array('f')
-
12  try:
-
13  valuesfromfile.fromfile(fin,valuesetad)
-
14  finally:
-
15  fin.close()
-
16 
-
17  values=valuesfromfile.tolist()
-
18 
-
21  fout = open(os.path.expanduser(outfile), "w")
-
22  fout.write('#ifndef ' + tablename + '_H_' + '\n')
-
23  fout.write('#define ' + tablename + '_H_' + '\n \n')
-
24  fout.write('#include <Arduino.h>'+'\n')
-
25  fout.write('#include "mozzi_pgmspace.h"'+'\n \n')
-
26  fout.write('#define ' + tablename + '_NUM_CELLS '+ str(len(values))+'\n')
-
27  fout.write('#define ' + tablename + '_SAMPLERATE '+ str(samplerate)+'\n \n')
-
28  outstring = 'CONSTTABLE_STORAGE(int8_t) ' + tablename + '_DATA [] = {'
-
29  try:
-
30  for num in values:
-
31  outstring += str(math.trunc((num*256)+0.5)) + ", "
-
32 
-
34  finally:
-
35  outstring += "};"
-
36  outstring = textwrap.fill(outstring, 80)
-
37  fout.write(outstring)
-
38  fout.write('\n \n #endif /* ' + tablename + '_H_ */\n')
-
39  fout.close()
-
40  print "wrote " + outfile
-
41 
-
42 float2mozzi_uint8(infile, outfile, tablename, samplerate)
- -
-
- - - diff --git a/extras/doc/html/folderclosed.png b/extras/doc/html/folderclosed.png deleted file mode 100644 index 8d3fdf28c..000000000 Binary files a/extras/doc/html/folderclosed.png and /dev/null differ diff --git a/extras/doc/html/folderopen.png b/extras/doc/html/folderopen.png deleted file mode 100644 index 60e317728..000000000 Binary files a/extras/doc/html/folderopen.png and /dev/null differ diff --git a/extras/doc/html/functions.html b/extras/doc/html/functions.html deleted file mode 100644 index ec5161d30..000000000 --- a/extras/doc/html/functions.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - -Mozzi: Class Members - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
Here is a list of all documented class members with links to the class documentation for each member:
- -

- a -

-
-
- - - diff --git a/extras/doc/html/functions_b.html b/extras/doc/html/functions_b.html deleted file mode 100644 index ec23d58f3..000000000 --- a/extras/doc/html/functions_b.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - -Mozzi: Class Members - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
Here is a list of all documented class members with links to the class documentation for each member:
- -

- b -

-
-
- - - diff --git a/extras/doc/html/functions_c.html b/extras/doc/html/functions_c.html deleted file mode 100644 index 14be88933..000000000 --- a/extras/doc/html/functions_c.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - -Mozzi: Class Members - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
Here is a list of all documented class members with links to the class documentation for each member:
- -

- c -

-
-
- - - diff --git a/extras/doc/html/functions_d.html b/extras/doc/html/functions_d.html deleted file mode 100644 index 4dbf5cc6b..000000000 --- a/extras/doc/html/functions_d.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - -Mozzi: Class Members - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
Here is a list of all documented class members with links to the class documentation for each member:
- -

- d -

-
-
- - - diff --git a/extras/doc/html/functions_dup.js b/extras/doc/html/functions_dup.js deleted file mode 100644 index c8659a316..000000000 --- a/extras/doc/html/functions_dup.js +++ /dev/null @@ -1,23 +0,0 @@ -var functions_dup = -[ - [ "a", "functions.html", null ], - [ "b", "functions_b.html", null ], - [ "c", "functions_c.html", null ], - [ "d", "functions_d.html", null ], - [ "e", "functions_e.html", null ], - [ "f", "functions_f.html", null ], - [ "g", "functions_g.html", null ], - [ "h", "functions_h.html", null ], - [ "i", "functions_i.html", null ], - [ "l", "functions_l.html", null ], - [ "m", "functions_m.html", null ], - [ "n", "functions_n.html", null ], - [ "o", "functions_o.html", null ], - [ "p", "functions_p.html", null ], - [ "q", "functions_q.html", null ], - [ "r", "functions_r.html", null ], - [ "s", "functions_s.html", null ], - [ "u", "functions_u.html", null ], - [ "w", "functions_w.html", null ], - [ "x", "functions_x.html", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/functions_e.html b/extras/doc/html/functions_e.html deleted file mode 100644 index 5f8ce538f..000000000 --- a/extras/doc/html/functions_e.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - -Mozzi: Class Members - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
Here is a list of all documented class members with links to the class documentation for each member:
- -

- e -

-
-
- - - diff --git a/extras/doc/html/functions_f.html b/extras/doc/html/functions_f.html deleted file mode 100644 index 1bbe5c5c2..000000000 --- a/extras/doc/html/functions_f.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - -Mozzi: Class Members - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
Here is a list of all documented class members with links to the class documentation for each member:
- -

- f -

-
-
- - - diff --git a/extras/doc/html/functions_func.html b/extras/doc/html/functions_func.html deleted file mode 100644 index d70f84d79..000000000 --- a/extras/doc/html/functions_func.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - -Mozzi: Class Members - Functions - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- - - - - diff --git a/extras/doc/html/functions_func.js b/extras/doc/html/functions_func.js deleted file mode 100644 index cc5b98bc1..000000000 --- a/extras/doc/html/functions_func.js +++ /dev/null @@ -1,21 +0,0 @@ -var functions_func = -[ - [ "a", "functions_func.html", null ], - [ "b", "functions_func_b.html", null ], - [ "c", "functions_func_c.html", null ], - [ "d", "functions_func_d.html", null ], - [ "e", "functions_func_e.html", null ], - [ "f", "functions_func_f.html", null ], - [ "g", "functions_func_g.html", null ], - [ "h", "functions_func_h.html", null ], - [ "i", "functions_func_i.html", null ], - [ "l", "functions_func_l.html", null ], - [ "m", "functions_func_m.html", null ], - [ "n", "functions_func_n.html", null ], - [ "o", "functions_func_o.html", null ], - [ "p", "functions_func_p.html", null ], - [ "r", "functions_func_r.html", null ], - [ "s", "functions_func_s.html", null ], - [ "u", "functions_func_u.html", null ], - [ "w", "functions_func_w.html", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/functions_func_b.html b/extras/doc/html/functions_func_b.html deleted file mode 100644 index 2bf88485d..000000000 --- a/extras/doc/html/functions_func_b.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - -Mozzi: Class Members - Functions - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-  - -

- b -

-
-
- - - diff --git a/extras/doc/html/functions_func_c.html b/extras/doc/html/functions_func_c.html deleted file mode 100644 index 258efc06b..000000000 --- a/extras/doc/html/functions_func_c.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - -Mozzi: Class Members - Functions - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-  - -

- c -

-
-
- - - diff --git a/extras/doc/html/functions_func_d.html b/extras/doc/html/functions_func_d.html deleted file mode 100644 index cf45d785e..000000000 --- a/extras/doc/html/functions_func_d.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - -Mozzi: Class Members - Functions - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-  - -

- d -

-
-
- - - diff --git a/extras/doc/html/functions_func_e.html b/extras/doc/html/functions_func_e.html deleted file mode 100644 index 7c6a738b6..000000000 --- a/extras/doc/html/functions_func_e.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - -Mozzi: Class Members - Functions - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-  - -

- e -

-
-
- - - diff --git a/extras/doc/html/functions_func_f.html b/extras/doc/html/functions_func_f.html deleted file mode 100644 index 24dbf31cc..000000000 --- a/extras/doc/html/functions_func_f.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - -Mozzi: Class Members - Functions - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-  - -

- f -

-
-
- - - diff --git a/extras/doc/html/functions_func_g.html b/extras/doc/html/functions_func_g.html deleted file mode 100644 index ba747ad76..000000000 --- a/extras/doc/html/functions_func_g.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - - -Mozzi: Class Members - Functions - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-  - -

- g -

-
-
- - - diff --git a/extras/doc/html/functions_func_h.html b/extras/doc/html/functions_func_h.html deleted file mode 100644 index 928b209f3..000000000 --- a/extras/doc/html/functions_func_h.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - -Mozzi: Class Members - Functions - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-  - -

- h -

-
-
- - - diff --git a/extras/doc/html/functions_func_i.html b/extras/doc/html/functions_func_i.html deleted file mode 100644 index 3488a5f6e..000000000 --- a/extras/doc/html/functions_func_i.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - -Mozzi: Class Members - Functions - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-  - -

- i -

-
-
- - - diff --git a/extras/doc/html/functions_func_l.html b/extras/doc/html/functions_func_l.html deleted file mode 100644 index 7957ab8da..000000000 --- a/extras/doc/html/functions_func_l.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - -Mozzi: Class Members - Functions - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- - - - - diff --git a/extras/doc/html/functions_func_m.html b/extras/doc/html/functions_func_m.html deleted file mode 100644 index e4dbe6542..000000000 --- a/extras/doc/html/functions_func_m.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - -Mozzi: Class Members - Functions - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-  - -

- m -

-
-
- - - diff --git a/extras/doc/html/functions_func_n.html b/extras/doc/html/functions_func_n.html deleted file mode 100644 index c7d77fb5f..000000000 --- a/extras/doc/html/functions_func_n.html +++ /dev/null @@ -1,156 +0,0 @@ - - - - - - - -Mozzi: Class Members - Functions - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- - - - - diff --git a/extras/doc/html/functions_func_o.html b/extras/doc/html/functions_func_o.html deleted file mode 100644 index 6e0973c9c..000000000 --- a/extras/doc/html/functions_func_o.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - -Mozzi: Class Members - Functions - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-  - -

- o -

-
-
- - - diff --git a/extras/doc/html/functions_func_p.html b/extras/doc/html/functions_func_p.html deleted file mode 100644 index da2482bf6..000000000 --- a/extras/doc/html/functions_func_p.html +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - - -Mozzi: Class Members - Functions - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- - - - - diff --git a/extras/doc/html/functions_func_r.html b/extras/doc/html/functions_func_r.html deleted file mode 100644 index bafac9de6..000000000 --- a/extras/doc/html/functions_func_r.html +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - - -Mozzi: Class Members - Functions - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- - -
- - - diff --git a/extras/doc/html/functions_func_s.html b/extras/doc/html/functions_func_s.html deleted file mode 100644 index 4dc419aa0..000000000 --- a/extras/doc/html/functions_func_s.html +++ /dev/null @@ -1,317 +0,0 @@ - - - - - - - -Mozzi: Class Members - Functions - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-  - -

- s -

-
-
- - - diff --git a/extras/doc/html/functions_func_u.html b/extras/doc/html/functions_func_u.html deleted file mode 100644 index 642941877..000000000 --- a/extras/doc/html/functions_func_u.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - -Mozzi: Class Members - Functions - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- - -
- - - diff --git a/extras/doc/html/functions_func_w.html b/extras/doc/html/functions_func_w.html deleted file mode 100644 index 93f1f91c8..000000000 --- a/extras/doc/html/functions_func_w.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - -Mozzi: Class Members - Functions - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- - -
- - - diff --git a/extras/doc/html/functions_g.html b/extras/doc/html/functions_g.html deleted file mode 100644 index dcaf61e7b..000000000 --- a/extras/doc/html/functions_g.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - - -Mozzi: Class Members - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
Here is a list of all documented class members with links to the class documentation for each member:
- -

- g -

-
-
- - - diff --git a/extras/doc/html/functions_h.html b/extras/doc/html/functions_h.html deleted file mode 100644 index c022e6ac4..000000000 --- a/extras/doc/html/functions_h.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - -Mozzi: Class Members - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
Here is a list of all documented class members with links to the class documentation for each member:
- -

- h -

-
-
- - - diff --git a/extras/doc/html/functions_i.html b/extras/doc/html/functions_i.html deleted file mode 100644 index 6b800472e..000000000 --- a/extras/doc/html/functions_i.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - -Mozzi: Class Members - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
Here is a list of all documented class members with links to the class documentation for each member:
- -

- i -

-
-
- - - diff --git a/extras/doc/html/functions_l.html b/extras/doc/html/functions_l.html deleted file mode 100644 index 927157d23..000000000 --- a/extras/doc/html/functions_l.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - -Mozzi: Class Members - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
Here is a list of all documented class members with links to the class documentation for each member:
- -

- l -

-
-
- - - diff --git a/extras/doc/html/functions_m.html b/extras/doc/html/functions_m.html deleted file mode 100644 index 5f1cfb76d..000000000 --- a/extras/doc/html/functions_m.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - -Mozzi: Class Members - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
Here is a list of all documented class members with links to the class documentation for each member:
- -

- m -

-
-
- - - diff --git a/extras/doc/html/functions_n.html b/extras/doc/html/functions_n.html deleted file mode 100644 index c66313140..000000000 --- a/extras/doc/html/functions_n.html +++ /dev/null @@ -1,156 +0,0 @@ - - - - - - - -Mozzi: Class Members - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- - - - - diff --git a/extras/doc/html/functions_o.html b/extras/doc/html/functions_o.html deleted file mode 100644 index e063baa63..000000000 --- a/extras/doc/html/functions_o.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - - - - -Mozzi: Class Members - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
Here is a list of all documented class members with links to the class documentation for each member:
- -

- o -

-
-
- - - diff --git a/extras/doc/html/functions_p.html b/extras/doc/html/functions_p.html deleted file mode 100644 index 373cc8876..000000000 --- a/extras/doc/html/functions_p.html +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - - -Mozzi: Class Members - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
Here is a list of all documented class members with links to the class documentation for each member:
- -

- p -

-
-
- - - diff --git a/extras/doc/html/functions_q.html b/extras/doc/html/functions_q.html deleted file mode 100644 index 7dbbec4b5..000000000 --- a/extras/doc/html/functions_q.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - -Mozzi: Class Members - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
Here is a list of all documented class members with links to the class documentation for each member:
- -

- q -

-
-
- - - diff --git a/extras/doc/html/functions_r.html b/extras/doc/html/functions_r.html deleted file mode 100644 index 5c1521724..000000000 --- a/extras/doc/html/functions_r.html +++ /dev/null @@ -1,137 +0,0 @@ - - - - - - - -Mozzi: Class Members - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
Here is a list of all documented class members with links to the class documentation for each member:
- -

- r -

-
-
- - - diff --git a/extras/doc/html/functions_rela.html b/extras/doc/html/functions_rela.html deleted file mode 100644 index cc71e15fc..000000000 --- a/extras/doc/html/functions_rela.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - - -Mozzi: Class Members - Related Functions - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
- - - diff --git a/extras/doc/html/functions_s.html b/extras/doc/html/functions_s.html deleted file mode 100644 index 0a5c568e0..000000000 --- a/extras/doc/html/functions_s.html +++ /dev/null @@ -1,317 +0,0 @@ - - - - - - - -Mozzi: Class Members - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
Here is a list of all documented class members with links to the class documentation for each member:
- -

- s -

-
-
- - - diff --git a/extras/doc/html/functions_u.html b/extras/doc/html/functions_u.html deleted file mode 100644 index c9e704e06..000000000 --- a/extras/doc/html/functions_u.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - -Mozzi: Class Members - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
Here is a list of all documented class members with links to the class documentation for each member:
- -

- u -

-
-
- - - diff --git a/extras/doc/html/functions_w.html b/extras/doc/html/functions_w.html deleted file mode 100644 index cea02d022..000000000 --- a/extras/doc/html/functions_w.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - -Mozzi: Class Members - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
Here is a list of all documented class members with links to the class documentation for each member:
- -

- w -

-
-
- - - diff --git a/extras/doc/html/functions_x.html b/extras/doc/html/functions_x.html deleted file mode 100644 index 1dca92e97..000000000 --- a/extras/doc/html/functions_x.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - -Mozzi: Class Members - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
Here is a list of all documented class members with links to the class documentation for each member:
- -

- x -

-
-
- - - diff --git a/extras/doc/html/globals.html b/extras/doc/html/globals.html deleted file mode 100644 index 92a49742e..000000000 --- a/extras/doc/html/globals.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - -Mozzi: File Members - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
Here is a list of all documented file members with links to the documentation:
-
-
- - - diff --git a/extras/doc/html/globals_defs.html b/extras/doc/html/globals_defs.html deleted file mode 100644 index bf1d62cf5..000000000 --- a/extras/doc/html/globals_defs.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - -Mozzi: File Members - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
- - - diff --git a/extras/doc/html/group__analog.html b/extras/doc/html/group__analog.html deleted file mode 100644 index bc11d8123..000000000 --- a/extras/doc/html/group__analog.html +++ /dev/null @@ -1,410 +0,0 @@ - - - - - - - -Mozzi: Analog - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
Analog
-
-
- -

Efficient analog input functions for sensors and audio. -More...

-

Detailed Description

-

Efficient analog input functions for sensors and audio.

-

Helps produce glitch-free audio by allowing analog input functions which normally block processing to be performed in the background.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

void setupFastAnalogRead (int8_t speed=FAST_ADC)
 This is automatically called in startMozzi. More...
 
void disconnectDigitalIn (uint8_t channel_num)
 Prepare an analog input channel by turning off its digital input buffer. More...
 
void reconnectDigitalIn (uint8_t channel_num)
 Reconnect the digital input buffer for an analog input channel which has been set for analog input with disconnectDigitalIn(). More...
 
void adcDisconnectAllDigitalIns ()
 Prepare all analog input channels by turning off their digital input buffers. More...
 
-void adcReconnectAllDigitalIns ()
 Reconnect the digital input buffers for analog input channels which have been set for analog input with disconnectDigitalIn().
 
template<byte RES>
uint16_t mozziAnalogRead (uint8_t pin)
 See mozziAnalogRead(). More...
 
uint16_t mozziAnalogRead16 (uint8_t pin)
 See mozziAnalogRead() but always returns the value shifted to 16 bit range. More...
 
template<byte RES>
uint16_t getAudioInput ()
 See getAudioInput(). More...
 
template<byte RES>
uint16_t getAudioInput16 ()
 See getAudioInput(). More...
 
-

Function Documentation

- -

◆ adcDisconnectAllDigitalIns()

- -
-
- - - - - -
- - - - - - - -
void adcDisconnectAllDigitalIns ()
-
-inline
-
- -

Prepare all analog input channels by turning off their digital input buffers.

-

This helps to reduce noise, increase analog reading speed, and save power.

- -

Definition at line 111 of file mozzi_analog.h.

- -
-
- -

◆ disconnectDigitalIn()

- -
-
- - - - - -
- - - - - - - - -
void disconnectDigitalIn (uint8_t channel_num)
-
-inline
-
- -

Prepare an analog input channel by turning off its digital input buffer.

-

This helps to reduce noise, increase analog reading speed, and save power.

-

Here's more detail from http://www.openmusiclabs.com/learning/digital/atmega-adc/:

-

The DIDR (Data Input Disable Register) disconnects the digital inputs from whichever ADC channels you are using. This is important for 2 reasons. First off, an analog input will be floating all over the place, and causing the digital input to constantly toggle high and low. This creates excessive noise near the ADC, and burns extra power. Secondly, the digital input and associated DIDR switch have a capacitance associated with them which will slow down your input signal if you are sampling a highly resistive load.

-

And from the ATmega328p datasheet, p266:

-

When an analog signal is applied to the ADC pin and the digital input from this pin is not needed, this bit should be written logic one to reduce power consumption in the digital input buffer. Note that ADC named_pins ADC7 and ADC6 do not have digital input buffers, and therefore do not require Digital Input Disable bits.

Parameters
- - -
channel_numthe analog input channel you wish to use.
-
-
- -

Definition at line 86 of file mozzi_analog.h.

- -
-
- -

◆ getAudioInput()

- -
-
-
-template<byte RES>
- - - - - - - -
uint16_t getAudioInput ()
-
- -

See getAudioInput().

-

This returns audio input from the input buffer, if @ref MOZZI_AUDIO_INPUT is enabled in the config (see also the related option MOZZI_AUDIO_INPUT_PIN).

-

The template parameter specifies the desired value range in bits.

-

The audio signal needs to be in the range 0 to VCC volts (i.e. 5 volts on Arduino Uno R3). Circuits and discussions about biasing a signal in the middle of this range can be found at http://electronics.stackexchange.com/questions/14404/dc-biasing-audio-signal and http://interface.khm.de/index.php/lab/experiments/arduino-realtime-audio-processing/ . A circuit and instructions for amplifying and biasing a microphone signal can be found at http://www.instructables.com/id/Arduino-Audio-Input/?ALLSTEPS

-
Note
The value range returned by this function follows the same rules as detailed in the documentation for mozziAnalogRead(): For portable code, define MOZZI_ANALGO_READ_RESOLUTION at the top of your sketch, or use the templated version of this function.
-
Returns
audio data from the input buffer
- -

Definition at line 172 of file MozziGuts.h.

- -
-
- -

◆ getAudioInput16()

- -
-
-
-template<byte RES>
- - - - - -
- - - - - - - -
uint16_t getAudioInput16 ()
-
-inline
-
- -

See getAudioInput().

-

Equivalent to getAudioInput<16>().

- -

Definition at line 149 of file MozziGuts.h.

- -
-
- -

◆ mozziAnalogRead()

- -
-
-
-template<byte RES>
- - - - - - - - -
uint16_t mozziAnalogRead (uint8_t pin)
-
- -

See mozziAnalogRead().

-

Reads the analog input of a chosen channel, without blocking other operations from running.

-

The template parameter RES specifies the number of bits to return.

-

It actually returns the most recent analog reading and puts the chosen pin or channel on the stack of channels to be read in the background before the next control interrupt.

-
Note
Analog reads have different hardware resolution on different platforms. E.g. an analog read on an Arduino Uno R3 will return a value in the range 0-1023 (10 bits), on a Raspberry Pi Pico it will return 0-4095 (12 bits). For portable code, it is thus necessary to specify the desired resolution of reads. This can be done by setting MOZZI_ANALOG_READ_RESOLUTION to the resolution in bits, near the top of your sketch. All reads will then be adjusted to that range, automatically (using a simple bit-shift). Alternatively, the templated version of mozziAanalogRead() allows to specifiy the target resolution per read. If MOZZI_ANALOG_READ_RESOLUTION is not defined, this (non-templated) function returns a value in the default hardware resolution, with a warning.
-
Parameters
- - -
pin_or_channelthe analog pin or channel number.
-
-
-
Returns
the digitised value of the voltage on the chosen channel. See the note above regarding the output range!
- -

Definition at line 174 of file mozzi_analog.h.

- -
-
- -

◆ mozziAnalogRead16()

- -
-
- - - - - -
- - - - - - - - -
uint16_t mozziAnalogRead16 (uint8_t pin)
-
-inline
-
- -

See mozziAnalogRead() but always returns the value shifted to 16 bit range.

-

THis is exactly equivalent to mozziAnalogRead<16>(pin);

- -

Definition at line 152 of file mozzi_analog.h.

- -
-
- -

◆ reconnectDigitalIn()

- -
-
- - - - - -
- - - - - - - - -
void reconnectDigitalIn (uint8_t channel_num)
-
-inline
-
- -

Reconnect the digital input buffer for an analog input channel which has been set for analog input with disconnectDigitalIn().

-
Parameters
- - -
channel_numthe analog input channel you wish to reconnect.
-
-
- -

Definition at line 99 of file mozzi_analog.h.

- -
-
- -

◆ setupFastAnalogRead()

- -
-
- - - - - - - - -
void setupFastAnalogRead (int8_t speed = FAST_ADC)
-
- -

This is automatically called in startMozzi.

-

It makes mozziAnalogRead() happen faster than the standard Arduino analogRead(), changing the duration from about 105 in unmodified Arduino to about 16 microseconds for a dependable read with the default speed parameter FAST_ADC. If you want to set on of the faster modes (see params) you can call this after startMozzi(). See: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1208715493/11, and http://www.marulaberry.co.za/index.php/tutorials/code/arduino-adc/

Parameters
- - -
speedFAST_ADC, FASTER_ADC or FASTEST_ADC. If no parameter is supplied, the default is FAST_ADC, which sets the analog conversion clock predivide rate to 16, giving 1Mhz on a 16MHz board, the fastest rate for which behaviour is defined (~16us per sample). However, divisors of 8 and 4 also show usable results in the graphs in this paper: http://dam.mellis.org/Mellis%20-%20Sensor%20Library%20for%20Arduino%20-%20Paper.pdf, so you can also try FASTER_ADC or FASTEST_ADC for divide rates of 8 or 4, giving times of about 8us or 4us per sample. Beware, reliable results will depend on the sort of input signal you have. Only use FASTER_ADC or FASTEST_ADC if you know what you're doing.
-
-
- -
-
-
-
- - - diff --git a/extras/doc/html/group__analog.js b/extras/doc/html/group__analog.js deleted file mode 100644 index 90f77ddaa..000000000 --- a/extras/doc/html/group__analog.js +++ /dev/null @@ -1,12 +0,0 @@ -var group__analog = -[ - [ "adcDisconnectAllDigitalIns", "group__analog.html#ga5042e7c576dd0307be38eb70efdb69fe", null ], - [ "adcReconnectAllDigitalIns", "group__analog.html#gabad497d1f8c8026e81849be0b65bf38f", null ], - [ "disconnectDigitalIn", "group__analog.html#ga532fe99fe78e34d4e6ae0ae2c7528353", null ], - [ "getAudioInput", "group__analog.html#gacd5e655ae9057843ade0d7647f909663", null ], - [ "getAudioInput16", "group__analog.html#gabb22bb94b66c6b2e583d745820cfac93", null ], - [ "mozziAnalogRead", "group__analog.html#gadedb573129313bad0c183af2486c5283", null ], - [ "mozziAnalogRead16", "group__analog.html#gaf869bc4f93cb0a90664a59b20fb4f556", null ], - [ "reconnectDigitalIn", "group__analog.html#ga26462e443299e8d39a520d4a838e00b7", null ], - [ "setupFastAnalogRead", "group__analog.html#gae909f8857d71ed79f277ee024de52574", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/group__audio__output.html b/extras/doc/html/group__audio__output.html deleted file mode 100644 index e9194be3a..000000000 --- a/extras/doc/html/group__audio__output.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - - -Mozzi: Audio Output and Buffering - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Audio Output and Buffering
-
-
-

Documentation on basic Mozzi architecture and output modes

- - -

Basic architecture of audio generation, buffering, and output in Mozzi

Mozzi provides support for audio ouput on a range of different boards and CPUs.This page is about the following related topics:
    -
  • adding a custom output method (importantly using external DACs) to your sketch
  • -
  • writing sketches that will work on different platforms / with different output methods
  • -
  • extending Mozzi for a new architecture
  • -
-For all of these topics, it is helpful to have a basic understanding of the basic output steps in Mozzi:
    -
  1. Inside the loop() function in your sketch you call audioHook(). 1a. If the audio output buffer is currently filled, this does nothing. 1b. Otherwise, this calls updateAudio(). The generated sample is then added to the audio output buffer. (Also, updateControl() will be called at an appropriate rate, and a few other details that are not important for this discussion.)
  2. -
  3. A platform-specific timer is triggered at audio rate (usually), takes a sample from the output buffer and sends it to audioOutput().
  4. -
  5. The audioOutput() function - usually predefined inside Mozzi - takes care of sending the sample to the hardware.
  6. -
-These output steps are not always followed, however. Firstly, when using External audio output output, the audioOutput() funtion is supplied by the user sketch, instead of Mozzi. External audio output output.Some ports will also want to bypass the Mozzi audio output buffer. For instance, an internal DAC may be addressable via an efficient DMA-connected buffer, already, and also have a built-in rate control. In this case, ports will internally set the define BYPASS_MOZZI_OUTPUT_BUFFER to true. Such a port will have to provide a custom definition of canBufferAudioOutput(), returning true, whenever a new sample of output can be accepted. No timer at audio-rate is set up in this case.Finally, the External audio output output mode (MOZZI_AUDIO_MODE MOZZI_OUTPUT_EXTERNAL_CUSTOM) is essentially a combination of the two. Here, the user sketch needs to provide both audioOutput() and canBufferAudioOutput(). The latter is again called from audioHook(), and whenever it returns true, a new sample is generated and passed to audioOutput().

-Platform specific audio resolution

-

Different output methods often support a different resolution of output samples. To provide best performance on slow boards, Mozzi expects your updateAudio() function to return samples in exactly the width that is needed at the output stage. Thus, defining this naively, an updateAudio() function designed for 8 bit output will produce very low volume output on a 16 bit DAC, while the other way around overflows will result in way too loud and heavily distored output. Fortunately, all that is needed to write portable sketches is to specify how many bits your updateAudio() function provides. The (inline) functions in the AudioOutput namespace do just that. Using them makes sure your audio output is shifted if, and as much as needed on all platforms.

-
See also
MonoOutput::fromNBit(), StereoOutput::fromNBit()
-
- -

External audio output

Only for MOZZI_AUDIO_MODE set to MOZZI_OUTPUT_EXTERNAL_TIMED or MOZZI_OUTPUT_EXTERNAL_CUSTOM. Most (all?) platforms support output using an "external" function. When using this option, you will need to provide a suitable definition for audioOutput() in your own sketch, yourself. Some understanding of the general Mozzi audio output architecture may be recommendable, when using this mode: See AudioOutput .In the more simple case (MOZZI_OUTPUT_EXTERNAL_TIMED), Mozzi will still take care of buffering the samples, and calling this function at audio rate (hence "timed"). This generally involves use of a timer, which should be detailed in the Hardware and configuration details for your platform.Should you desire even more control - perhaps because your board, or your external DAC already comes with a rate controlled DMA buffer - using MOZZI_OUTPUT_EXTERNAL_CUSTOM also bypasses Mozzis sample buffer. In addition to audioOutput(), you will then need to provide a definition for canBufferAudioOutput(), which will control the rate at which samples are produced. In essence, whenever canBufferAudioOutput() returns true, Mozzi will call updateAudio(), and pass the produced sample to audioOutput(), unbuffered. It is entirely your job to make sure that this actually happens at MOZZI_AUDIO_RATE, and / or an appropriate buffer gets used.One additional configuration setting is MOZZI_AUDIO_BITS, which defaults to 16 bits for this mode, but might be set higher, if your hardware supports it.
See also
Mozzi Configuration options
-
-
- - - diff --git a/extras/doc/html/group__audio__output.js b/extras/doc/html/group__audio__output.js deleted file mode 100644 index 3ae01da19..000000000 --- a/extras/doc/html/group__audio__output.js +++ /dev/null @@ -1,5 +0,0 @@ -var group__audio__output = -[ - [ "Basic architecture of audio generation, buffering, and output in Mozzi", "group__audio__output.html#mozzi_audio_output_architecture", "group__audio__output_mozzi_audio_output_architecture_dup" ], - [ "External audio output", "group__audio__output.html#external_audio", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/group__audio__output_mozzi_audio_output_architecture_dup.js b/extras/doc/html/group__audio__output_mozzi_audio_output_architecture_dup.js deleted file mode 100644 index 7c3693b4f..000000000 --- a/extras/doc/html/group__audio__output_mozzi_audio_output_architecture_dup.js +++ /dev/null @@ -1,6 +0,0 @@ -var group__audio__output_mozzi_audio_output_architecture_dup = -[ - [ "Platform specific audio resolution", "group__audio__output.html#audio_shifting", [ - [ "Platform specific audio resolution", "group__audio__output.html#audio_shifting", null ] - ] ] -]; \ No newline at end of file diff --git a/extras/doc/html/group__config.html b/extras/doc/html/group__config.html deleted file mode 100644 index df8386e77..000000000 --- a/extras/doc/html/group__config.html +++ /dev/null @@ -1,446 +0,0 @@ - - - - - - - -Mozzi: Mozzi Configuration options - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
Mozzi Configuration options
-
-
-

Detailed Description

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Macros

#define MOZZI_COMPATIBILITY_LEVEL
 Mozzi generally tries to keep your old sketches working, but we continue to find new (and hopefully better) approaches to old problems. More...
 
#define MOZZI_AUDIO_MODE
 Configure how Mozzi outputs generated sounds. More...
 
#define MOZZI_AUDIO_CHANNELS
 This sets allows to change from a single/mono audio output channel to stereo output. More...
 
#define MOZZI_AUDIO_RATE
 Defines the audio rate, i.e. More...
 
#define MOZZI_CONTROL_RATE
 Control rate setting. More...
 
#define MOZZI_ANALOG_READ
 Whether to compile in support for non-blocking analog reads. More...
 
#define MOZZI_AUDIO_INPUT
 Whether to enable built in audio input feature. More...
 
#define MOZZI_AUDIO_INPUT_PIN
 This sets which analog input channel to use for audio input, if you have enabled MOZZI_AUDIO_INPUT, above. More...
 
#define MOZZI_PWM_RATE
 Only for MOZZI_AUDIO_MODE s MOZZI_OUTPUT_PWM and MOZZI_OUTPUT_2PIN_PWM. More...
 
#define MOZZI_AUDIO_BITS_PER_CHANNEL
 Only for MOZZI_AUDIO_MODE MOZZI_OUTPUT_2PIN_PWM. More...
 
#define MOZZI_AUDIO_PIN_1
 Only for MOZZI_AUDIO_MODE s MOZZI_OUTPUT_PWM and MOZZI_OUTPUT_2PIN_PWM: The IO pin to use as (first) audio output. More...
 
#define MOZZI_AUDIO_BITS
 Output resolution of audio samples. More...
 
- - -

Mozzi Configuration

-Configuring Mozzi

-

Mozzi configuration options include details such as audio rate, number of audio channels (mono or stereo), output generation method and many others, where details on the available options differ between the different platforms (see Hardware and configuration), and may include additional options beyond those listed, here.

-
Note
It is generally safe to leave the Mozzi Configuration unchanged, and that's very much recommended until you have a very specific need to customize something. Contrary to past versions of Mozzi, all configuration options have a (usually sensible) default value, so you do not have to configure anything, unless you actually want to change something.
-

Configuring Mozzi is mostly done using various preprocessor definitions. This approach is used to move as much of the processing involved to compile time, in order to save Flash, RAM, and CPU use at runtime. This section lists various global options, but in addition, most ports allow additional hardware dependent configuration options. See Hardware and configuration.

-

Several configuration examples are provided in the "config" folder of the Mozzi sources. You may want to look at these, first. The general approach is as follows:

-
#include <MozziConfigValues.h> // include this first, for named option values
-
#define MOZZI_AUDIO_CHANNELS MOZZI_STEREO // set to stereo mode
-
-
#include <Mozzi.h> // *after* all configuration options, include the main Mozzi headers
-
This is the main include file in Mozzi.
-
This file keeps a list of named configuration values.
-

Alternatively, if a suitable configuration example exists, use:

#include <config/config_example_avr_stereo.h> // again, do this, before including the main headers
-
Note
Should you include Mozzi headers in more than one compilation unit (i.e. more than one .cpp file) inside the same sketch, you must use identical configuration options at the top of each file!
-

TODO: Fix and complete Doxygen coverage

-

Macro Definition Documentation

- -

◆ MOZZI_ANALOG_READ

- -
-
- - - - -
#define MOZZI_ANALOG_READ
-
- -

Whether to compile in support for non-blocking analog reads.

-

This is enabled by default on platforms that support it, but may be disabled, explicitly, to save resources, or in order to implement custom read schemes (e.g. with IO multiplexing).

-

For simplicity, mozziAnalogRead() is always defined, but when MOZZI_ANALOG_READ s are disabled or unsupported, it simply relays to Arduino's regular analogRead(). It is thus quite recommended not to depend on mozziAnalogRead() when disabling this.

-

As a rough estimate (your numbers may differ a bit, depending on compiler version, etc.), on an ATMEGA328P (aka Arduino Uno), disabling analog reads saves 33 bytes of RAM and 340 bytes of FLASH. The performance savings are theorized to be neglegible, however.

-

Currently allowed values are:

    -
  • MOZZI_ANALOG_READ_NONE Disabled
  • -
  • MOZZI_ANALOG_READ_STANDARD Analog read implementation enabled (currently there is only the "standard" method, but future versions might allow additional choice, here).
  • -
- -

Definition at line 169 of file mozzi_config_documentation.h.

- -
-
- -

◆ MOZZI_AUDIO_BITS

- -
-
- - - - -
#define MOZZI_AUDIO_BITS
-
- -

Output resolution of audio samples.

-

In most cases you should leave this value untouched (for the defaults that get applied, see Hardware and configuration . However, for MOZZI_AUDIO_MODE s MOZZI_OUTPUT_EXTERNAL_TIMED and MOZZI_OUTPUT_EXTERNAL_CUSTOM you way wish to customize the default value of 16 bits.

-
Note
At the time of this writng single audio samples are stored as "int", unconditionally. This limits MOZZI_AUDIO_BITS to a maximum of 16 bits on some 8 bit boards!
- -

Definition at line 296 of file mozzi_config_documentation.h.

- -
-
- -

◆ MOZZI_AUDIO_BITS_PER_CHANNEL

- -
-
- - - - -
#define MOZZI_AUDIO_BITS_PER_CHANNEL
-
- -

Only for MOZZI_AUDIO_MODE MOZZI_OUTPUT_2PIN_PWM.

-

Sample resolution per channel to use in 2 pin output, given in bits (i.e. total resolution is twice as much). Defaults to 7 bits per channel. Note that increasing this requires very, very well matched output resistors.

-

See Mozzi on classic Arduino, Teensy 2.x, Arduino Mega, and other 8 bit "AVR"/ATMEGA architecture boards for a more detailed description.

- -

Definition at line 223 of file mozzi_config_documentation.h.

- -
-
- -

◆ MOZZI_AUDIO_CHANNELS

- -
-
- - - - -
#define MOZZI_AUDIO_CHANNELS
-
- -

This sets allows to change from a single/mono audio output channel to stereo output.

-

To actually generate two channels, your updateAudio()-function should return a StereoOutput(). Sketches returning a MonoOutput() in a stereo config, or vice versa will continue to work, but will generate a warning a compile time.

-
Note
This option superseeds the earlier STEREO_HACK in Mozzi < 1.1
-
-At the time of this writing, only MOZZI_MONO and MOZZI_STEREO are supported. The value of MOZZI_MONO is 1 and the value of MOZZI_STEREO is 2, so future extensions are also expected to set this to the number of available channels, and it's ok to use numerical comparison.
- -

Definition at line 106 of file mozzi_config_documentation.h.

- -
-
- -

◆ MOZZI_AUDIO_INPUT

- -
-
- - - - -
#define MOZZI_AUDIO_INPUT
-
- -

Whether to enable built in audio input feature.

-

This is not supported on all platforms, and on platforms that do support it may come with a considerable performance overhead. Don't enable, unless you need this.

-

Currently allowed values are:

    -
  • MOZZI_AUDIO_INPUT_NONE No audio input
  • -
  • MOZZI_AUDIO_INPUT_STANDARD Audio input enabled (currently there is only the "standard" method, but future versions might allow additional choice, here). This mode implies that MOZZI_ANALOG_READ s are enabled and supported. You may have to call setupFastAnalogReads(FASTEST_ADC) after setupMozzi(), when using this.
  • -
-

Further reading and config: getAudioInput() MOZZI_AUDIO_INPUT_PIN

- -

Definition at line 188 of file mozzi_config_documentation.h.

- -
-
- -

◆ MOZZI_AUDIO_INPUT_PIN

- -
-
- - - - -
#define MOZZI_AUDIO_INPUT_PIN
-
- -

This sets which analog input channel to use for audio input, if you have enabled MOZZI_AUDIO_INPUT, above.

-

Not all pins may be available for this, be sure to check the documentation for your platform.

- -

Definition at line 197 of file mozzi_config_documentation.h.

- -
-
- -

◆ MOZZI_AUDIO_MODE

- -
-
- - - - -
#define MOZZI_AUDIO_MODE
-
- -

Configure how Mozzi outputs generated sounds.

-
Note
Not all options are available on all platforms, and several options require specific wiring or external components to function on top of this! When customizing this, it is highly recommended to start experimenting with a simple and known-to-work sketch (such as a basic sinewave) to verify that your hardware setup is correct. Similarly, if you observe problems running your "real" sketch, it is often a good idea ot test your sketch with the default audio mode, too (by leaving this option, and preferrably all others, unset).
-

Refer to the Hardware and configuration specific documentation for which modes are supported on your hardware, and further details!

-

Supported values:

    -
  • MOZZI_OUTPUT_PWM Output using pulse width modulation (PWM) on a GPIO pin. This is the default on most platforms. On the Arduino Uno (more generally ATMEGA328P), this allows for a sample resolution of 488 (almost 9 bits) on pin 9. Usable pins and resolution will be different on other boards.
  • -
  • MOZZI_OUTPUT_2PIN_PWM Output using pulse width modulation on two GPIO pins, where one pin represents the lower bits, and the other the higer bits of the sample. On the Aduino Uno, this allows for 14 bits of resolution on pins 9 (low) and 10 (high). For further information (wiring etc.) see hardware_avr_2pin.
  • -
  • MOZZI_OUTPUT_EXTERNAL_TIMED Output is not controlled by Mozzi itself, but left to the user sketch. This setting allows to completely customize the audio output, e.g. for connecting to external DACs. For more detail, see External audio output
  • -
  • MOZZI_OUTPUT_EXTERNAL_CUSTOM As above, but additionally bypassing Mozzi's sample buffer. For more detail, see External audio output
  • -
  • MOZZI_OUTPUT_PDM_VIA_I2S Output pulse density modulated (PDM) samples via a (hardware) I2S interface (without a DAC connected to it).
  • -
  • MOZZI_OUTPUT_PDM_VIA_SERIAL Output pulse density modulated (PDM) samples via a hardware serial interface.
  • -
  • MOZZI_OUTPUT_I2S_DAC Output samples to a PT8211 (or compatible) DAC connected to a hardware I2S interface.
  • -
  • MOZZI_OUTPUT_INTERNAL_DAC Output to the interal DAC on boards that support one.
  • -
-

TODO: Adding an R2R-DAC option would be cool, http://blog.makezine.com/2008/05/29/makeit-protodac-shield-fo/ , some discussion on Mozzi-users.

- -

Definition at line 90 of file mozzi_config_documentation.h.

- -
-
- -

◆ MOZZI_AUDIO_PIN_1

- -
-
- - - - -
#define MOZZI_AUDIO_PIN_1
-
- -

Only for MOZZI_AUDIO_MODE s MOZZI_OUTPUT_PWM and MOZZI_OUTPUT_2PIN_PWM: The IO pin to use as (first) audio output.

-

This must be attached to Timer1. When settings this, you alsso need to specify the output compare register responsible for this pin (either OCR1A or OCR1B).

-

Example:

#define MOZZI_AUDIO_PIN_1 TIMER1_B_PIN
-
#define MOZZI_AUDIO_PIN_1_REGISTER OCR1B // must also specify this, when customizing MOZZI_AUDIO_PIN_1
-

Equivalent definitions can be used to control the pin for the right audio channel (in stereo mode), or the low byte channel (in 2 Pin PWM mode):

-
#define MOZZI_AUDIO_PIN_2 [...]
-
#define MOZZI_AUDIO_PIN_2_REGISTER [the matching OCR]
-
// or
-
#define MOZZI_AUDIO_PIN_1_LOW [...]
-
#define MOZZI_AUDIO_PIN_1_LOW_REGISTER [the matching OCR]
-
See also
config/known_16bit_timers.h
- -

Definition at line 250 of file mozzi_config_documentation.h.

- -
-
- -

◆ MOZZI_AUDIO_RATE

- -
-
- - - - -
#define MOZZI_AUDIO_RATE
-
- -

Defines the audio rate, i.e.

-

rate of samples output per second.

-

The default rate on the classis Arduino Uno is 16384 Hz, but can be increased to 32768 Hz, subject to the caveats, detailed below. For most other platforms 32678 Hz is the default, but even higher rates may be supported. Increasing the rate allows for better frequency response, but generally all affects achievable sample bitdepth (especially from PWM output). Also, of course, doubling the sample rate also halves the amount of time available to calculate the each sample, so it may only be useful for relatively simple sketches. The increased frequency response can also make unwanted artefacts of low resolution synthesis calculations more apparent, so it's not always a bonus.

-

It is highly recommended to keep the audio rate a power of two (16384, 32678, 64536, etc.), as some internal calculations can be highly be optimised for speed, this way.

-
Note
For compatibility reasons, the option MOZZI_AUDIO_RATE is automatically set to the same value as this option, and you will find some uses of that in old (pre Mozzi 2.0) code examples. It is advised to use only MOZZI_AUDIO_RATE in new code, however. TODO: Only do the above, for MOZZI_COMPATIBILITY_LEVEL < MOZZI_COMPATIBILITY_2_0?
- -

Definition at line 129 of file mozzi_config_documentation.h.

- -
-
- -

◆ MOZZI_COMPATIBILITY_LEVEL

- -
-
- - - - -
#define MOZZI_COMPATIBILITY_LEVEL
-
- -

Mozzi generally tries to keep your old sketches working, but we continue to find new (and hopefully better) approaches to old problems.

-

Sometimes, keeping API compatibilty with the pre-existing solution may come with a smaller or larger penalty in terms of performance or code size. Therefore - if your sketch supports it - you may be able to get some minor benefit from disabling compatibility code.

-

Currently supported values are:

    -
  • MOZZI_COMPATIBILITY_1_1 - try to support sketches written for Mozzi version 1.1 (or possibly lower); this is the default when including MozziGuts.h
  • -
  • MOZZI_COMPATIBILITY_2_0 - try to support sketches written for Mozzi version 2.0; this is - currently - the default when including Mozzi.h
  • -
  • MOZZI_COMPATIBILITY_LATEST - always live on the bleeding edge
  • -
-
Note
MOZZI_COMPATIBILITY_V1_1 does not guarantee, that everything from Mozzi 1.1 will continue to work, just that we're doing a reasonable effort.
- -

Definition at line 59 of file mozzi_config_documentation.h.

- -
-
- -

◆ MOZZI_CONTROL_RATE

- -
-
- - - - -
#define MOZZI_CONTROL_RATE
-
- -

Control rate setting.

-

Mozzi's MOZZI_CONTROL_RATE sets how many times per second updateControl() is called. MOZZI_CONTROL_RATE has a default of 64 Hz. It is useful to have MOZZI_CONTROL_RATE set at a power of 2 (such as 64,128,256 etc), to have exact timing of audio and control operations. Non-power-of-2 MOZZI_CONTROL_RATE can cause glitches due to audio and control events not lining up precisely. If this happens a power of two MOZZI_CONTROL_RATE might solve it.

-

Try to keep MOZZI_CONTROL_RATE low, for efficiency, though higher rates up to about 1000 can sometimes give smoother results, avoiding the need to interpolate sensitive variables at audio rate in updateAudio().

-

TODO: If a definition of MOZZI_CONTROL_RATE is detected, apply that with a warning.

- -

Definition at line 148 of file mozzi_config_documentation.h.

- -
-
- -

◆ MOZZI_PWM_RATE

- -
-
- - - - -
#define MOZZI_PWM_RATE
-
- -

Only for MOZZI_AUDIO_MODE s MOZZI_OUTPUT_PWM and MOZZI_OUTPUT_2PIN_PWM.

-

On some platforms, the rate at which PWM signals are repeated may be higher than that at with audio signals are produced (i.e. MOZZI_AUDIO_RATE). E.g. for MOZZI_OUTPUT_PWM on the classic Arduino, the pwm defaults to 32768 while the audio rate defaults to 16384. The reasoning behind this is that 16384 Hz audio rate turned out to be te most useful compromise - in most casses - between output quality, and available computing power. However, output at that rate produced high-frequency whine, audible to some people, which could be mitigated by the higher PWM rate.

-

In other words, increasing this improves the signal quality at less cost than doubling the audio rate itself. However, increasing this too far will limit the dynamic resolution of the samples that can be written to the output pin(s): 2 ^ (output bits) * MOZZI_PWM_RATE cannot be higher than the CPU frequency!

- -

Definition at line 212 of file mozzi_config_documentation.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/group__config.js b/extras/doc/html/group__config.js deleted file mode 100644 index 641bc41d6..000000000 --- a/extras/doc/html/group__config.js +++ /dev/null @@ -1,16 +0,0 @@ -var group__config = -[ - [ "Mozzi Configuration", "group__config.html#config_main", "group__config_config_main_dup" ], - [ "MOZZI_ANALOG_READ", "group__config.html#gac4c9e989df7beb3034cc26e571a41569", null ], - [ "MOZZI_AUDIO_BITS", "group__config.html#ga68d4c7210dfdd68ea3eb418a1b7de0a2", null ], - [ "MOZZI_AUDIO_BITS_PER_CHANNEL", "group__config.html#ga9bfd84013cbc04ddb51b31f583178720", null ], - [ "MOZZI_AUDIO_CHANNELS", "group__config.html#ga6ffeecfb574900db4d3161ce0992b8bb", null ], - [ "MOZZI_AUDIO_INPUT", "group__config.html#ga40857197e27e3b4d3ee7177e95f59d6d", null ], - [ "MOZZI_AUDIO_INPUT_PIN", "group__config.html#gac448f990c61e43089f5aab5fdb80d4a6", null ], - [ "MOZZI_AUDIO_MODE", "group__config.html#ga9b14b158a7a469612a89dcc9630933b7", null ], - [ "MOZZI_AUDIO_PIN_1", "group__config.html#ga9b9905f3ee10d6446fa991e463cb63cf", null ], - [ "MOZZI_AUDIO_RATE", "group__config.html#gabc7b46bc3dbe1078f411287572226eff", null ], - [ "MOZZI_COMPATIBILITY_LEVEL", "group__config.html#ga9d4e8e86950fd08173ce6c16bcad0c76", null ], - [ "MOZZI_CONTROL_RATE", "group__config.html#ga947e756a0229e73de0a32ff3ea542013", null ], - [ "MOZZI_PWM_RATE", "group__config.html#ga3a6d77e502b179f2e490f6151e93414e", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/group__config_config_main_dup.js b/extras/doc/html/group__config_config_main_dup.js deleted file mode 100644 index 46a93baeb..000000000 --- a/extras/doc/html/group__config_config_main_dup.js +++ /dev/null @@ -1,6 +0,0 @@ -var group__config_config_main_dup = -[ - [ "Configuring Mozzi", "group__config.html#config_general", [ - [ "Configuring Mozzi", "group__config.html#config_general", null ] - ] ] -]; \ No newline at end of file diff --git a/extras/doc/html/group__core.html b/extras/doc/html/group__core.html deleted file mode 100644 index 2eb4f6e7e..000000000 --- a/extras/doc/html/group__core.html +++ /dev/null @@ -1,393 +0,0 @@ - - - - - - - -Mozzi: Mozzi Core Functions - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
Mozzi Core Functions
-
-
-

Detailed Description

-

The bones of every Mozzi sketch.

-

Sets up the timers for audio and control rate processes, storing the timer registers so they can be restored when Mozzi stops. startMozzi() goes in your sketch's setup() routine.

-

This function intializes the timer(s) needed to move audio samples to the output according to the configured MOZZI_AUDIO_MODE .

-
Parameters
- - -
control_rate_hzSets how often updateControl() is called. It must be a power of 2. If no parameter is provided, control_rate_hz is set to MOZZI_CONTROL_RATE, which has a default value of 64 (you can re-#define it in your sketch). The practical upper limit for control rate depends on how busy the processor is, and you might need to do some tests to find the best setting.
-
-
-
Note
startMozzi calls setupMozziADC(), which calls setupFastAnalogRead() and adcDisconnectAllDigitalIns(), which disables digital inputs on all analog input pins. All in mozzi_analog.h and easy to change if you need to (hack). They are all called automatically and hidden away because it keeps things simple for a STANDARD_PLUS set up, but if it turns out to be confusing, they might need to become visible again.
- - - - - - - - -

-Files

file  MozziHeadersOnly.h
 This file provides declarations of the Mozzi Core Functions Mozzi functions, but no implementation.
 
file  Mozzi.h
 This is the main include file in Mozzi.
 
- - - - -

-Macros

#define CONSTTABLE_STORAGE(X)
 Declare a variable such that it will be stored in flash memory, instead of RAM, on platforms where this is reasonably possible (i.e. More...
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

template<typename T >
mozzi_pgm_read_wrapper (const T *address)
 Helper function to FLASH_OR_RAM_READ(). More...
 
template<typename T >
FLASH_OR_RAM_READ (T *address)
 Read a value from flash or RAM. More...
 
void stopMozzi ()
 Stops audio and control interrupts and restores the timers to the values they had before Mozzi was started. More...
 
AudioOutput updateAudio ()
 This is where you put your audio code. More...
 
void updateControl ()
 This is where you put your control code. More...
 
void audioHook ()
 This is required in Arduino's loop(). More...
 
unsigned long audioTicks ()
 An alternative for Arduino time functions like micros() and millis(). More...
 
unsigned long mozziMicros ()
 An alternative for Arduino time functions like micros() and millis(). More...
 
-

Macro Definition Documentation

- -

◆ CONSTTABLE_STORAGE

- -
-
- - - - - - - - -
#define CONSTTABLE_STORAGE( X)
-
- -

Declare a variable such that it will be stored in flash memory, instead of RAM, on platforms where this is reasonably possible (i.e.

-

not on ESP8266, where random location flash memory access is too slow). To read the variable in a cross-platform compatible way, use FLASH_OR_RAM_READ().

- -

Definition at line 67 of file mozzi_pgmspace.h.

- -
-
-

Function Documentation

- -

◆ audioHook()

- -
-
- - - - - - - -
void audioHook ()
-
- -

This is required in Arduino's loop().

-

If there is room in Mozzi's output buffer, audioHook() calls updateAudio() once and puts the result into the output buffer. Also, if @ref MOZZI_AUDIO_INPUT is enabled in the config, audioHook() takes care of moving audio input from the input buffer so it can be accessed with getAudioInput() in your updateAudio() routine. If other functions are called in loop() along with audioHook(), see if they can be called less often by moving them into updateControl(), to save processing power. Otherwise it may be most efficient to calculate a block of samples at a time by putting audioHook() in a loop of its own, rather than calculating only 1 sample for each time your other functions are called.

- -

Definition at line 313 of file MozziGuts.hpp.

- -
-
- -

◆ audioTicks()

- -
-
- - - - - - - -
unsigned long audioTicks ()
-
- -

An alternative for Arduino time functions like micros() and millis().

-

This is slightly faster than micros(), and also it is synchronized with the currently processed audio sample (which, due to the audio output buffer, could diverge up to 256/MOZZI_AUDIO_RATE seconds from the current time). audioTicks() is updated each time an audio sample is output, so the resolution is 1/MOZZI_AUDIO_RATE microseconds (61 microseconds when MOZZI_AUDIO_RATE is 16384 Hz).

Returns
the number of audio ticks since the program began.
- -

Definition at line 301 of file MozziGuts.hpp.

- -
-
- -

◆ FLASH_OR_RAM_READ()

- -
-
-
-template<typename T >
- - - - - -
- - - - - - - - -
T FLASH_OR_RAM_READ (T * address)
-
-inline
-
- -

Read a value from flash or RAM.

-

The specified address is read from flash, if T is const, and const tables are stored in flash on this platform (i.e. not on ESP8266). It is read from RAM, if T is not-const or tables are always stored in RAM on this platform.

See also
CONSTTABLE_STORAGE .
- -

Definition at line 57 of file mozzi_pgmspace.h.

- -
-
- -

◆ mozzi_pgm_read_wrapper()

- -
-
-
-template<typename T >
- - - - - -
- - - - - - - - -
T mozzi_pgm_read_wrapper (const T * address)
-
-inline
-
- -

Helper function to FLASH_OR_RAM_READ().

-

You do not want to call this, directly.

- -

Definition at line 32 of file mozzi_pgmspace.h.

- -
-
- -

◆ mozziMicros()

- -
-
- - - - - - - -
unsigned long mozziMicros ()
-
- -

An alternative for Arduino time functions like micros() and millis().

-

This is slightly faster than micros(), and also it is synchronized with the currently processed audio sample (which, due to the audio output buffer, could diverge up to 256/MOZZI_AUDIO_RATE seconds from the current time). audioTicks() is updated each time an audio sample is output, so the resolution is 1/MOZZI_AUDIO_RATE microseconds (61 microseconds when MOZZI_AUDIO_RATE is 16384 Hz).

Returns
the approximate number of microseconds since the program began.
- -

Definition at line 300 of file MozziGuts.hpp.

- -
-
- -

◆ stopMozzi()

- -
-
- - - - - - - -
void stopMozzi ()
-
- -

Stops audio and control interrupts and restores the timers to the values they had before Mozzi was started.

-

This could be useful when using sensor libraries which depend on the same timers as Mozzi.

-

A potentially better option for resolving timer conflicts involves using non-blocking methods, such as demonstrated by the twowire_nonblock code in the forked version of Mozzi on github, so sound production can continue while reading sensors.

-

As it is, stopMozzi restores all the Timers used by Mozzi to their previous settings. Another scenario which could be easily hacked in MozziGuts.hpp could involve individually saving and restoring particular Timer registers depending on which one(s) are required for other tasks.

-
Note
This function is not actually implemented on all platforms.
- -

Definition at line 303 of file MozziGuts.hpp.

- -
-
- -

◆ updateAudio()

- -
-
- - - - - - - -
AudioOutput updateAudio ()
-
- -

This is where you put your audio code.

-

updateAudio() has to keep up with the MOZZI_AUDIO_RATE of 16384 or 32768 Hz, so to keep things running smoothly, avoid doing any calculations here which could be done in setup() or updateControl().

Returns
an audio sample.
-

While is possible (in mono sketches) to return a plain unscaled int, it is generally best to return auto-scaled samples using MonoOutput::from8Bit(), MonoOutput::from16Bit(), MonoOutput::fromNbit(), or their StereoOutput equivalents.

- -

Definition at line 5 of file Skeleton_Multi_Unit2.cpp.

- -
-
- -

◆ updateControl()

- -
-
- - - - - - - -
void updateControl ()
-
- -

This is where you put your control code.

-

You need updateControl() somewhere in your sketch, even if it's empty. updateControl() is called at the control rate you set in startMozzi(). To save processor load, avoid any calculations here which could be done in setup().

- -
-
-
-
- - - diff --git a/extras/doc/html/group__core.js b/extras/doc/html/group__core.js deleted file mode 100644 index fd5a234f9..000000000 --- a/extras/doc/html/group__core.js +++ /dev/null @@ -1,14 +0,0 @@ -var group__core = -[ - [ "MozziHeadersOnly.h", "_mozzi_headers_only_8h.html", null ], - [ "Mozzi.h", "_mozzi_8h.html", null ], - [ "CONSTTABLE_STORAGE", "group__core.html#gad03d3ea20c802844460cd1ad636cf6a9", null ], - [ "audioHook", "group__core.html#ga2fca37b988ab369e2f3c3108c683e59d", null ], - [ "audioTicks", "group__core.html#ga55fa9d48f327b646c2f71cef7da7b8f0", null ], - [ "FLASH_OR_RAM_READ", "group__core.html#ga14d8349004d9544dbd01b907c60c08aa", null ], - [ "mozzi_pgm_read_wrapper", "group__core.html#ga6eab513d77c44e4a6e3cc63e95a35d98", null ], - [ "mozziMicros", "group__core.html#gaaa6a42d80c5297407a45ca8bf3c1c7fe", null ], - [ "stopMozzi", "group__core.html#ga8d9307490ec05ad28539d513c73a5c20", null ], - [ "updateAudio", "group__core.html#ga936b78c8ab7a4d7f7075b41e32780d3e", null ], - [ "updateControl", "group__core.html#ga59d187b915b2e366c88489e52801951a", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/group__fixmath.html b/extras/doc/html/group__fixmath.html deleted file mode 100644 index c97ba4bc6..000000000 --- a/extras/doc/html/group__fixmath.html +++ /dev/null @@ -1,3152 +0,0 @@ - - - - - - - -Mozzi: Fast integer based fixed-point arithmetic - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
Fast integer based fixed-point arithmetic
-
-
-

Detailed Description

-
Note
For new sketches it is recommended to utitlize the FixMath library with its typesafe classes UFix and SFix, instead of these typedefs! See https://github.com/tomcombriat/FixMath . These are provided for backwards compatibility, only.
-

Fixed point fractional number types and conversion routines. Fixed point is often best for fast audio code for Arduino, and these can ease some of the pain.

-
-
Note
-

Take care when converting that the important bits of your numbers will fit in the types you choose!

-

Timing: converting between fixed and float 10-12us, converting between fixed types about 1us.

-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

Q7n8 Q7n8_mult (Q7n8 a, Q7n8 b)
 Fast fixed point multiply for Q7n8 fractional numbers. More...
 
-typedef int8_t Q0n7
 signed fractional number using 7 fractional bits, represents -0.5 to 0.496
 
-typedef int8_t Q7n0
 ordinary old signed Q7n0 int8_t with 0 fractional bits, represents -128 to 127
 
-typedef uint8_t Q0n8
 unsigned fractional number using 8 fractional bits, represents 0.0 to 0.996
 
-typedef uint8_t Q8n0
 normal uint8_t with 0 fractional bits, represents 0.0 to 255.0
 
-typedef uint16_t Q0n16
 unsigned fractional number using 16 fractional bits, represents 0.0 to 0.999
 
-typedef uint32_t Q0n31
 signed number using 0 integer bits and 31 fractional bits, represents -0.2147483648 to 0.2147483647
 
-typedef int16_t Q7n8
 signed fractional number using 7 integer bits and 8 fractional bits, represents -127.996 to 127.996
 
-typedef uint16_t Q3n13
 unsigned fractional number using 3 integer bits and 13 fractional bits, represents 0 to 7.999
 
-typedef int16_t Q1n14
 signed fractional number using 1 integer bit and 14 fractional bits, represents -1.999 to 1.999
 
-typedef int16_t Q15n0
 signed number using 15 integer bits and 0 fractional bits, represents -32768 to 32767
 
-typedef uint16_t Q8n8
 unsigned fractional number using 8 integer bits and 8 fractional bits, represents 0 to 255.996
 
-typedef int16_t Q0n15
 signed fractional number using 0 integer bits and 15 fractional bits, represents -0.32768 to 0.32767
 
-typedef uint16_t Q1n15
 unsigned fractional number using 1 integer bit and 15 fractional bits, represents 0 to 1.999
 
-typedef uint16_t Q16n0
 unsigned number using 16 integer bits and 0 fractional bits, represents 0 to 65536.0
 
-typedef int32_t Q23n8
 signed fractional number using 23 integer bits and 8 fractional bits, represents -8388607.996 to 8388607.996
 
-typedef int32_t Q15n16
 signed fractional number using 15 integer bits and 16 fractional bits, represents -32767.999 to 32767.999
 
-typedef int32_t Q31n0
 signed (normal int32_t int16_t) number using 31 integer bits and 0 fractional bits, represents -2147483648 to 2147483647
 
-typedef uint32_t Q32n0
 unsigned (normal uint32_t int16_t) number using 32 integer bits and 0 fractional bits, represents 0 to 4294967295
 
-typedef uint32_t Q0n32
 unsigned fractional number using 0 integer bits and 32 fractional bits, represents 0 to 0.999999999767169
 
-typedef uint32_t Q8n24
 signed fractional number using 8 integer bits and 24 fractional bits, represents 0 to 255.999
 
-typedef uint32_t Q24n8
 unsigned fractional number using 24 integer bits and 8 fractional bits, represents 0 to 16777215
 
-typedef uint32_t Q16n16
 unsigned fractional number using 16 integer bits and 16 fractional bits, represents 0 to 65535.999
 
uint8_t uint8_tMod (uint8_t n, uint8_t d)
 fast uint8_t modulus More...
 
uint8_t uint8_tDiv (uint8_t n, uint8_t d)
 Fast uint8_t division. More...
 
-uint8_t uint8_tRnd (uint8_t min, uint8_t max)
 
-int ipow (int base, int exp)
 
Q16n16 Q16n16_pow2 (Q8n8 exponent)
 fast replacement for pow(2,x), where x is a Q8n8 fractional fixed-point exponent. More...
 
-uint32_t isqrt32 (uint32_t n)
 
-uint16_t isqrt16 (uint16_t n)
 
Q0n7 float_to_Q0n7 (float a)
 Convert float to Q0n7 fix. More...
 
Q0n8 float_to_Q0n8 (float a)
 Convert float to Q0n8 fix. More...
 
Q7n8 float_to_Q7n8 (float a)
 Convert float to Q7n8 fix. More...
 
Q8n8 float_to_Q8n8 (float a)
 Convert float to Q8n8 fix. More...
 
Q1n14 float_to_Q1n14 (float a)
 Convert float to Q1n14 fix. More...
 
Q1n15 float_to_Q1n15 (float a)
 Convert float to Q1n15 fix. More...
 
Q8n24 float_to_Q8n24 (float a)
 Convert float to Q8n24 fix. More...
 
Q23n8 float_to_Q23n8 (float a)
 Convert float to Q23n8 fix. More...
 
Q24n8 float_to_Q24n8 (float a)
 Convert float to Q24n8 fix. More...
 
Q16n16 float_to_Q16n16 (float a)
 Convert float to Q16n16 fix. More...
 
Q0n16 float_to_Q0n16 (float a)
 Convert float to Q0n16 fix. More...
 
Q15n16 float_to_Q15n16 (float a)
 Convert float to Q15n16 fix. More...
 
Q1n14 Q0n7_to_Q1n14 (Q0n7 a)
 Convert Q0n7 int8_t to Q1n14 fix. More...
 
Q15n16 Q0n7_to_Q15n16 (Q0n7 a)
 Convert Q0n7 signed int8_t to Q15n16 fix. More...
 
float Q0n7_to_float (Q0n7 a)
 Convert Q0n7 fix to float. More...
 
Q1n15 Q0n8_to_Q1n15 (Q0n8 a)
 Convert Q0n8 uint8_t to Q1n15 fix. More...
 
Q8n8 Q0n8_to_Q8n8 (Q0n8 a)
 Convert Q0n8 uint8_t to Q8n8 fix. More...
 
Q8n24 Q0n8_to_Q8n24 (Q0n8 a)
 Convert Q0n8 uint8_t to Q8n24 fix. More...
 
Q24n8 Q0n8_to_Q24n8 (Q0n8 a)
 Convert Q0n8 uint8_t to Q24n8 fix. More...
 
Q15n16 Q0n8_to_Q15n16 (Q0n8 a)
 Convert Q0n8 uint8_t to Q15n16 fix. More...
 
Q16n16 Q0n8_to_Q16n16 (Q0n8 a)
 Convert Q0n8 uint8_t to Q16n16 fix. More...
 
float Q0n8_to_float (Q0n8 a)
 Convert Q0n8 fix to float. More...
 
Q7n8 Q7n0_to_Q7n8 (Q7n0 a)
 Convert Q7n0 int8_t to Q7n8 fix. More...
 
Q15n16 Q7n0_to_Q15n16 (Q7n0 a)
 Convert Q7n0 int8_t to Q15n16 fix. More...
 
Q7n8 Q8n0_to_Q7n8 (Q8n0 a)
 Convert Q8n0 uint8_t to Q7n8 fix. More...
 
Q8n8 Q8n0_to_Q8n8 (Q8n0 a)
 Convert uint8_t to Q8n8 fix. More...
 
Q15n16 Q8n0_to_Q15n16 (Q8n0 a)
 Convert Q8n0 uint8_t to Q15n16 fix. More...
 
Q16n16 Q8n0_to_Q16n16 (Q8n0 a)
 Convert Q8n0 uint8_t to Q16n16 fix. More...
 
Q7n0 Q7n8_to_Q7n0 (Q7n8 a)
 Convert Q7n8 fix to Q7n0. More...
 
Q15n16 Q7n8_to_Q15n16 (Q7n8 a)
 Convert Q7n8 fix to Q15n16. More...
 
float Q7n8_to_float (Q7n8 a)
 Convert Q7n8 fix to float. More...
 
Q8n0 Q8n8_to_Q8n0 (Q8n8 a)
 Convert Q8n8 fix to Q8n0 uint8_t. More...
 
Q16n16 Q8n8_to_Q16n16 (Q8n8 a)
 Convert Q8n8 fix to Q16n16 uint32_t. More...
 
float Q8n8_to_float (Q8n8 a)
 Convert Q8n8 fix to float. More...
 
Q0n7 Q1n14_to_Q0n7 (Q1n14 a)
 Convert Q1n14 fixed to Q0n7 int8_t. More...
 
float Q1n14_to_float (Q1n14 a)
 Convert fix to float. More...
 
Q0n8 Q1n15_to_Q0n8 (Q1n15 a)
 Convert Q1n15 fixed to Q0n8 uint8_t. More...
 
float Q1n15_to_float (Q1n15 a)
 Convert fix to float. More...
 
float Q0n16_to_float (Q0n16 a)
 Convert fix to float. More...
 
Q15n16 Q15n0_to_Q15n16 (Q15n0 a)
 Convert Q15n0 int16_t to Q15n16 fix. More...
 
Q15n16 Q16n0_to_Q15n16 (Q16n0 a)
 Convert Q16n0 uint16_t to Q15n16 fix. More...
 
Q23n8 Q16n0_to_Q23n8 (Q16n0 a)
 Convert Q16n0 uint16_t to Q23n8 fixed point signed int32_t. More...
 
Q24n8 Q16n0_to_Q24n8 (Q16n0 a)
 Convert Q16n0 uint16_t to Q24n8 fixed point uint32_t. More...
 
Q16n16 Q16n0_to_Q16n16 (Q16n0 a)
 Convert Q16n0 uint16_t to Q16n16 fixed point uint32_t. More...
 
float Q16n0_to_float (Q16n0 a)
 Convert Q16n0 uint16_t to float. More...
 
Q0n8 Q8n24_to_Q0n8 (Q8n24 a)
 Convert Q8n24 fixed to Q0n8 uint8_t. More...
 
float Q8n24_to_float (Q8n24 a)
 Convert fix to float. More...
 
Q31n0 Q23n8_to_Q31n0 (Q23n8 a)
 Convert Q23n8 fixed to Q31n0 int32_t. More...
 
Q16n0 Q23n8_to_Q16n0 (Q23n8 a)
 Convert Q23n8 fixed to Q16n0 uint16_t. More...
 
Q15n0 Q23n8_to_Q15n0 (Q23n8 a)
 Convert Q23n8 fixed to Q15n0 signed int16_t. More...
 
Q7n8 Q23n8_to_Q7n8 (Q23n8 a)
 Convert Q23n8 fixed to Q7n8 signed int16_t, losing most significant bits. More...
 
float Q23n8_to_float (Q23n8 a)
 Convert fix to float. More...
 
Q0n8 Q24n8_to_Q0n8 (Q24n8 a)
 Convert Q24n8 fixed to Q0n8 uint8_t. More...
 
Q16n16 Q24n8_to_Q16n0 (Q24n8 a)
 Convert Q24n8 fixed to Q16n0 uint16_t. More...
 
Q32n0 Q24n8_to_Q32n0 (Q24n8 a)
 Convert Q24n8 fixed to Q32n0 uint32_t. More...
 
Q16n16 Q24n8_to_Q16n16 (Q24n8 a)
 Convert Q24n8 fixed to Q16n16 uint32_t. More...
 
float Q24n8_to_float (Q24n8 a)
 Convert fix to float. More...
 
Q0n8 Q15n16_to_Q0n8 (Q15n16 a)
 Convert Q15n16 fixed to Q0n8 uint8_t. More...
 
Q8n0 Q15n16_to_Q8n0 (Q15n16 a)
 Convert Q15n16 fixed to Q8n0 uint8_t. More...
 
Q15n0 Q15n16_to_Q15n0 (Q15n16 a)
 Convert Q15n16 fixed to Q15n0 signed int16_t. More...
 
Q7n8 Q15n16_to_Q7n8 (Q15n16 a)
 Convert Q15n16 fixed to Q7n8 signed int16_t, keeping middle bits only. More...
 
Q8n8 Q15n16_to_Q8n8 (Q15n16 a)
 Convert Q15n16 fixed to Q8n8 signed int16_t, keeping middle bits only. More...
 
Q23n8 Q15n16_to_Q23n8 (Q15n16 a)
 Convert Q15n16 fixed to Q23n8 signed int32_t. More...
 
float Q15n16_to_float (Q15n16 a)
 Convert fix to float. More...
 
Q0n8 Q16n16_to_Q0n8 (Q16n16 a)
 Convert Q16n16 fixed to Q0n8 uint8_t. More...
 
Q8n8 Q16n16_to_Q8n8 (Q8n8 a)
 Convert Q16n16 fixed to Q8n8 uint16_t. More...
 
Q16n0 Q16n16_to_Q16n0 (Q16n16 a)
 Convert Q16n16 fixed to Q16n0 uint16_t. More...
 
Q24n8 Q16n16_to_Q24n8 (Q16n16 a)
 Convert Q16n16 fixed to Q24n8 uint32_t. More...
 
float Q16n16_to_float (Q16n16 a)
 Convert fix to float. More...
 
-#define Q0n7_FIX1
 0.992 in Q0n7 format
 
-#define Q7n8_FIX1
 1 in Q7n8 format
 
-#define Q8n8_FIX1
 1 in Q8n8 format
 
-#define Q23n8_FIX1
 1 in Q23n8 format
 
-#define Q1n14_FIX1
 1 in Q1n14 format
 
-#define Q1n15_FIX1
 1 in Q1n15 format
 
-#define Q16n16_FIX1
 1 in Q16n16 format
 
-#define Q0n15_FIX1
 0.999 in Q0n15 format
 
-#define Q0n16_FIX1
 0.999 in Q0n16 format
 
-#define Q15n0_FIX1
 1 in Q15n0 format
 
-#define Q15n16_FIX1
 1 in Q15n16 format
 
-#define Q8n24_FIX1
 1 in Q8n24 format
 
-#define Q0n32_FIX1
 0.999999999767169 in Q0n32 format
 
-#define Q16n16_PI
 PI in Q16n16 format.
 
-#define Q3n13_2PI
 2*PI in Q3n13 format
 
-#define Q16n16_2PI
 2*PI in Q16n16 format
 
-#define low15bits
 Useful for keeping the lower 15 bits of a Q1n15 number, using &.
 
-

Function Documentation

- -

◆ float_to_Q0n16()

- -
-
- - - - - -
- - - - - - - - -
Q0n16 float_to_Q0n16 (float a)
-
-inline
-
- -

Convert float to Q0n16 fix.

-
Parameters
- - -
ais a float
-
-
- -

Definition at line 130 of file mozzi_fixmath.h.

- -
-
- -

◆ float_to_Q0n7()

- -
-
- - - - - -
- - - - - - - - -
Q0n7 float_to_Q0n7 (float a)
-
-inline
-
- -

Convert float to Q0n7 fix.

-
Parameters
- - -
ais a float
-
-
- -

Definition at line 100 of file mozzi_fixmath.h.

- -
-
- -

◆ float_to_Q0n8()

- -
-
- - - - - -
- - - - - - - - -
Q0n8 float_to_Q0n8 (float a)
-
-inline
-
- -

Convert float to Q0n8 fix.

-
Parameters
- - -
ais a float
-
-
- -

Definition at line 103 of file mozzi_fixmath.h.

- -
-
- -

◆ float_to_Q15n16()

- -
-
- - - - - -
- - - - - - - - -
Q15n16 float_to_Q15n16 (float a)
-
-inline
-
- -

Convert float to Q15n16 fix.

-
Parameters
- - -
ais a float
-
-
- -

Definition at line 133 of file mozzi_fixmath.h.

- -
-
- -

◆ float_to_Q16n16()

- -
-
- - - - - -
- - - - - - - - -
Q16n16 float_to_Q16n16 (float a)
-
-inline
-
- -

Convert float to Q16n16 fix.

-
Parameters
- - -
ais a float
-
-
- -

Definition at line 127 of file mozzi_fixmath.h.

- -
-
- -

◆ float_to_Q1n14()

- -
-
- - - - - -
- - - - - - - - -
Q1n14 float_to_Q1n14 (float a)
-
-inline
-
- -

Convert float to Q1n14 fix.

-
Parameters
- - -
ais a float
-
-
- -

Definition at line 112 of file mozzi_fixmath.h.

- -
-
- -

◆ float_to_Q1n15()

- -
-
- - - - - -
- - - - - - - - -
Q1n15 float_to_Q1n15 (float a)
-
-inline
-
- -

Convert float to Q1n15 fix.

-
Parameters
- - -
ais a float
-
-
- -

Definition at line 115 of file mozzi_fixmath.h.

- -
-
- -

◆ float_to_Q23n8()

- -
-
- - - - - -
- - - - - - - - -
Q23n8 float_to_Q23n8 (float a)
-
-inline
-
- -

Convert float to Q23n8 fix.

-
Parameters
- - -
ais a float
-
-
- -

Definition at line 121 of file mozzi_fixmath.h.

- -
-
- -

◆ float_to_Q24n8()

- -
-
- - - - - -
- - - - - - - - -
Q24n8 float_to_Q24n8 (float a)
-
-inline
-
- -

Convert float to Q24n8 fix.

-
Parameters
- - -
ais a float
-
-
- -

Definition at line 124 of file mozzi_fixmath.h.

- -
-
- -

◆ float_to_Q7n8()

- -
-
- - - - - -
- - - - - - - - -
Q7n8 float_to_Q7n8 (float a)
-
-inline
-
- -

Convert float to Q7n8 fix.

-
Parameters
- - -
ais a float
-
-
- -

Definition at line 106 of file mozzi_fixmath.h.

- -
-
- -

◆ float_to_Q8n24()

- -
-
- - - - - -
- - - - - - - - -
Q8n24 float_to_Q8n24 (float a)
-
-inline
-
- -

Convert float to Q8n24 fix.

-
Parameters
- - -
ais a float
-
-
- -

Definition at line 118 of file mozzi_fixmath.h.

- -
-
- -

◆ float_to_Q8n8()

- -
-
- - - - - -
- - - - - - - - -
Q8n8 float_to_Q8n8 (float a)
-
-inline
-
- -

Convert float to Q8n8 fix.

-
Parameters
- - -
ais a float
-
-
- -

Definition at line 109 of file mozzi_fixmath.h.

- -
-
- -

◆ Q0n16_to_float()

- -
-
- - - - - -
- - - - - - - - -
float Q0n16_to_float (Q0n16 a)
-
-inline
-
- -

Convert fix to float.

-
Parameters
- - -
ais a Q0n16 uint16_t
-
-
- -

Definition at line 214 of file mozzi_fixmath.h.

- -
-
- -

◆ Q0n7_to_float()

- -
-
- - - - - -
- - - - - - - - -
float Q0n7_to_float (Q0n7 a)
-
-inline
-
- -

Convert Q0n7 fix to float.

-
Parameters
- - -
ais a Q0n7 int8_t
-
-
- -

Definition at line 142 of file mozzi_fixmath.h.

- -
-
- -

◆ Q0n7_to_Q15n16()

- -
-
- - - - - -
- - - - - - - - -
Q15n16 Q0n7_to_Q15n16 (Q0n7 a)
-
-inline
-
- -

Convert Q0n7 signed int8_t to Q15n16 fix.

-
Parameters
- - -
ais a Q0n7 signed int8_t
-
-
- -

Definition at line 139 of file mozzi_fixmath.h.

- -
-
- -

◆ Q0n7_to_Q1n14()

- -
-
- - - - - -
- - - - - - - - -
Q1n14 Q0n7_to_Q1n14 (Q0n7 a)
-
-inline
-
- -

Convert Q0n7 int8_t to Q1n14 fix.

-
Parameters
- - -
ais a Q0n7 int8_t
-
-
- -

Definition at line 136 of file mozzi_fixmath.h.

- -
-
- -

◆ Q0n8_to_float()

- -
-
- - - - - -
- - - - - - - - -
float Q0n8_to_float (Q0n8 a)
-
-inline
-
- -

Convert Q0n8 fix to float.

-
Parameters
- - -
ais a Q0n8 uint8_t
-
-
- -

Definition at line 163 of file mozzi_fixmath.h.

- -
-
- -

◆ Q0n8_to_Q15n16()

- -
-
- - - - - -
- - - - - - - - -
Q15n16 Q0n8_to_Q15n16 (Q0n8 a)
-
-inline
-
- -

Convert Q0n8 uint8_t to Q15n16 fix.

-
Parameters
- - -
ais a Q0n8 uint8_t
-
-
- -

Definition at line 157 of file mozzi_fixmath.h.

- -
-
- -

◆ Q0n8_to_Q16n16()

- -
-
- - - - - -
- - - - - - - - -
Q16n16 Q0n8_to_Q16n16 (Q0n8 a)
-
-inline
-
- -

Convert Q0n8 uint8_t to Q16n16 fix.

-
Parameters
- - -
ais a Q0n8 uint8_t
-
-
- -

Definition at line 160 of file mozzi_fixmath.h.

- -
-
- -

◆ Q0n8_to_Q1n15()

- -
-
- - - - - -
- - - - - - - - -
Q1n15 Q0n8_to_Q1n15 (Q0n8 a)
-
-inline
-
- -

Convert Q0n8 uint8_t to Q1n15 fix.

-
Parameters
- - -
ais a Q0n8 uint8_t
-
-
- -

Definition at line 145 of file mozzi_fixmath.h.

- -
-
- -

◆ Q0n8_to_Q24n8()

- -
-
- - - - - -
- - - - - - - - -
Q24n8 Q0n8_to_Q24n8 (Q0n8 a)
-
-inline
-
- -

Convert Q0n8 uint8_t to Q24n8 fix.

-
Parameters
- - -
ais a Q0n8 uint8_t
-
-
- -

Definition at line 154 of file mozzi_fixmath.h.

- -
-
- -

◆ Q0n8_to_Q8n24()

- -
-
- - - - - -
- - - - - - - - -
Q8n24 Q0n8_to_Q8n24 (Q0n8 a)
-
-inline
-
- -

Convert Q0n8 uint8_t to Q8n24 fix.

-
Parameters
- - -
ais a Q0n8 uint8_t
-
-
- -

Definition at line 151 of file mozzi_fixmath.h.

- -
-
- -

◆ Q0n8_to_Q8n8()

- -
-
- - - - - -
- - - - - - - - -
Q8n8 Q0n8_to_Q8n8 (Q0n8 a)
-
-inline
-
- -

Convert Q0n8 uint8_t to Q8n8 fix.

-
Parameters
- - -
ais a Q0n8 uint8_t
-
-
- -

Definition at line 148 of file mozzi_fixmath.h.

- -
-
- -

◆ Q15n0_to_Q15n16()

- -
-
- - - - - -
- - - - - - - - -
Q15n16 Q15n0_to_Q15n16 (Q15n0 a)
-
-inline
-
- -

Convert Q15n0 int16_t to Q15n16 fix.

-
Parameters
- - -
ais a Q15n0 int16_t
-
-
- -

Definition at line 217 of file mozzi_fixmath.h.

- -
-
- -

◆ Q15n16_to_float()

- -
-
- - - - - -
- - - - - - - - -
float Q15n16_to_float (Q15n16 a)
-
-inline
-
- -

Convert fix to float.

-
Parameters
- - -
ais a Q15n16 signed int32_t
-
-
- -

Definition at line 291 of file mozzi_fixmath.h.

- -
-
- -

◆ Q15n16_to_Q0n8()

- -
-
- - - - - -
- - - - - - - - -
Q0n8 Q15n16_to_Q0n8 (Q15n16 a)
-
-inline
-
- -

Convert Q15n16 fixed to Q0n8 uint8_t.

-

Only for positive values!

Parameters
- - -
ais a Q15n16 signed int32_t
-
-
- -

Definition at line 273 of file mozzi_fixmath.h.

- -
-
- -

◆ Q15n16_to_Q15n0()

- -
-
- - - - - -
- - - - - - - - -
Q15n0 Q15n16_to_Q15n0 (Q15n16 a)
-
-inline
-
- -

Convert Q15n16 fixed to Q15n0 signed int16_t.

-
Parameters
- - -
ais a Q15n16 signed int32_t
-
-
- -

Definition at line 279 of file mozzi_fixmath.h.

- -
-
- -

◆ Q15n16_to_Q23n8()

- -
-
- - - - - -
- - - - - - - - -
Q23n8 Q15n16_to_Q23n8 (Q15n16 a)
-
-inline
-
- -

Convert Q15n16 fixed to Q23n8 signed int32_t.

-
Parameters
- - -
ais a Q15n16 signed int32_t.
-
-
- -

Definition at line 288 of file mozzi_fixmath.h.

- -
-
- -

◆ Q15n16_to_Q7n8()

- -
-
- - - - - -
- - - - - - - - -
Q7n8 Q15n16_to_Q7n8 (Q15n16 a)
-
-inline
-
- -

Convert Q15n16 fixed to Q7n8 signed int16_t, keeping middle bits only.

-
Parameters
- - -
ais a Q15n16 signed int32_t.
-
-
- -

Definition at line 282 of file mozzi_fixmath.h.

- -
-
- -

◆ Q15n16_to_Q8n0()

- -
-
- - - - - -
- - - - - - - - -
Q8n0 Q15n16_to_Q8n0 (Q15n16 a)
-
-inline
-
- -

Convert Q15n16 fixed to Q8n0 uint8_t.

-

Only for positive values!

Parameters
- - -
ais a Q15n16 signed int32_t
-
-
- -

Definition at line 276 of file mozzi_fixmath.h.

- -
-
- -

◆ Q15n16_to_Q8n8()

- -
-
- - - - - -
- - - - - - - - -
Q8n8 Q15n16_to_Q8n8 (Q15n16 a)
-
-inline
-
- -

Convert Q15n16 fixed to Q8n8 signed int16_t, keeping middle bits only.

-
Parameters
- - -
ais a Q15n16 signed int32_t.
-
-
- -

Definition at line 285 of file mozzi_fixmath.h.

- -
-
- -

◆ Q16n0_to_float()

- -
-
- - - - - -
- - - - - - - - -
float Q16n0_to_float (Q16n0 a)
-
-inline
-
- -

Convert Q16n0 uint16_t to float.

-
Parameters
- - -
ais a Q16n0 uint16_t
-
-
- -

Definition at line 232 of file mozzi_fixmath.h.

- -
-
- -

◆ Q16n0_to_Q15n16()

- -
-
- - - - - -
- - - - - - - - -
Q15n16 Q16n0_to_Q15n16 (Q16n0 a)
-
-inline
-
- -

Convert Q16n0 uint16_t to Q15n16 fix.

-
Parameters
- - -
ais a Q16n0 uint16_t
-
-
- -

Definition at line 220 of file mozzi_fixmath.h.

- -
-
- -

◆ Q16n0_to_Q16n16()

- -
-
- - - - - -
- - - - - - - - -
Q16n16 Q16n0_to_Q16n16 (Q16n0 a)
-
-inline
-
- -

Convert Q16n0 uint16_t to Q16n16 fixed point uint32_t.

-
Parameters
- - -
ais a Q16n0 uint16_t
-
-
- -

Definition at line 229 of file mozzi_fixmath.h.

- -
-
- -

◆ Q16n0_to_Q23n8()

- -
-
- - - - - -
- - - - - - - - -
Q23n8 Q16n0_to_Q23n8 (Q16n0 a)
-
-inline
-
- -

Convert Q16n0 uint16_t to Q23n8 fixed point signed int32_t.

-
Parameters
- - -
ais a Q16n0 uint16_t
-
-
- -

Definition at line 223 of file mozzi_fixmath.h.

- -
-
- -

◆ Q16n0_to_Q24n8()

- -
-
- - - - - -
- - - - - - - - -
Q24n8 Q16n0_to_Q24n8 (Q16n0 a)
-
-inline
-
- -

Convert Q16n0 uint16_t to Q24n8 fixed point uint32_t.

-
Parameters
- - -
ais a Q16n0 uint16_t
-
-
- -

Definition at line 226 of file mozzi_fixmath.h.

- -
-
- -

◆ Q16n16_pow2()

- -
-
- - - - - - - - -
Q16n16 Q16n16_pow2 (Q8n8 exponent)
-
- -

fast replacement for pow(2,x), where x is a Q8n8 fractional fixed-point exponent.

-

It's less accurate than pow(2,x), but useful where a tradeoff between accuracy and speed is required to keep audio from glitching.

Parameters
- - -
exponentin Q8n8 format.
-
-
-
Returns
pow(2,x) in Q16n16 format.
- -

Definition at line 116 of file mozzi_fixmath.cpp.

- -
-
- -

◆ Q16n16_to_float()

- -
-
- - - - - -
- - - - - - - - -
float Q16n16_to_float (Q16n16 a)
-
-inline
-
- -

Convert fix to float.

-
Parameters
- - -
ais a Q16n16 uint32_t
-
-
- -

Definition at line 306 of file mozzi_fixmath.h.

- -
-
- -

◆ Q16n16_to_Q0n8()

- -
-
- - - - - -
- - - - - - - - -
Q0n8 Q16n16_to_Q0n8 (Q16n16 a)
-
-inline
-
- -

Convert Q16n16 fixed to Q0n8 uint8_t.

-
Parameters
- - -
ais a Q16n16 uint32_t
-
-
- -

Definition at line 294 of file mozzi_fixmath.h.

- -
-
- -

◆ Q16n16_to_Q16n0()

- -
-
- - - - - -
- - - - - - - - -
Q16n0 Q16n16_to_Q16n0 (Q16n16 a)
-
-inline
-
- -

Convert Q16n16 fixed to Q16n0 uint16_t.

-
Parameters
- - -
ais a Q16n16 uint32_t
-
-
- -

Definition at line 300 of file mozzi_fixmath.h.

- -
-
- -

◆ Q16n16_to_Q24n8()

- -
-
- - - - - -
- - - - - - - - -
Q24n8 Q16n16_to_Q24n8 (Q16n16 a)
-
-inline
-
- -

Convert Q16n16 fixed to Q24n8 uint32_t.

-
Parameters
- - -
ais a Q16n16 uint32_t
-
-
- -

Definition at line 303 of file mozzi_fixmath.h.

- -
-
- -

◆ Q16n16_to_Q8n8()

- -
-
- - - - - -
- - - - - - - - -
Q8n8 Q16n16_to_Q8n8 (Q8n8 a)
-
-inline
-
- -

Convert Q16n16 fixed to Q8n8 uint16_t.

-
Parameters
- - -
ais a Q16n16 uint32_t
-
-
- -

Definition at line 297 of file mozzi_fixmath.h.

- -
-
- -

◆ Q1n14_to_float()

- -
-
- - - - - -
- - - - - - - - -
float Q1n14_to_float (Q1n14 a)
-
-inline
-
- -

Convert fix to float.

-
Parameters
- - -
ais an int16_t
-
-
- -

Definition at line 205 of file mozzi_fixmath.h.

- -
-
- -

◆ Q1n14_to_Q0n7()

- -
-
- - - - - -
- - - - - - - - -
Q0n7 Q1n14_to_Q0n7 (Q1n14 a)
-
-inline
-
- -

Convert Q1n14 fixed to Q0n7 int8_t.

-
Parameters
- - -
ais a Q1n14 int16_t
-
-
- -

Definition at line 202 of file mozzi_fixmath.h.

- -
-
- -

◆ Q1n15_to_float()

- -
-
- - - - - -
- - - - - - - - -
float Q1n15_to_float (Q1n15 a)
-
-inline
-
- -

Convert fix to float.

-
Parameters
- - -
ais a Q1n15 uint16_t
-
-
- -

Definition at line 211 of file mozzi_fixmath.h.

- -
-
- -

◆ Q1n15_to_Q0n8()

- -
-
- - - - - -
- - - - - - - - -
Q0n8 Q1n15_to_Q0n8 (Q1n15 a)
-
-inline
-
- -

Convert Q1n15 fixed to Q0n8 uint8_t.

-

Only for positive values!

Parameters
- - -
ais a Q1n15 uint16_t
-
-
- -

Definition at line 208 of file mozzi_fixmath.h.

- -
-
- -

◆ Q23n8_to_float()

- -
-
- - - - - -
- - - - - - - - -
float Q23n8_to_float (Q23n8 a)
-
-inline
-
- -

Convert fix to float.

-
Parameters
- - -
ais a Q23n8 signed int32_t
-
-
- -

Definition at line 255 of file mozzi_fixmath.h.

- -
-
- -

◆ Q23n8_to_Q15n0()

- -
-
- - - - - -
- - - - - - - - -
Q15n0 Q23n8_to_Q15n0 (Q23n8 a)
-
-inline
-
- -

Convert Q23n8 fixed to Q15n0 signed int16_t.

-
Parameters
- - -
ais a Q23n8 int32_t
-
-
- -

Definition at line 248 of file mozzi_fixmath.h.

- -
-
- -

◆ Q23n8_to_Q16n0()

- -
-
- - - - - -
- - - - - - - - -
Q16n0 Q23n8_to_Q16n0 (Q23n8 a)
-
-inline
-
- -

Convert Q23n8 fixed to Q16n0 uint16_t.

-

Positive values only.

Parameters
- - -
ais a Q23n8 int32_t
-
-
- -

Definition at line 245 of file mozzi_fixmath.h.

- -
-
- -

◆ Q23n8_to_Q31n0()

- -
-
- - - - - -
- - - - - - - - -
Q31n0 Q23n8_to_Q31n0 (Q23n8 a)
-
-inline
-
- -

Convert Q23n8 fixed to Q31n0 int32_t.

-
Parameters
- - -
ais a Q23n8 int32_t
-
-
- -

Definition at line 242 of file mozzi_fixmath.h.

- -
-
- -

◆ Q23n8_to_Q7n8()

- -
-
- - - - - -
- - - - - - - - -
Q7n8 Q23n8_to_Q7n8 (Q23n8 a)
-
-inline
-
- -

Convert Q23n8 fixed to Q7n8 signed int16_t, losing most significant bits.

-
Parameters
- - -
ais a Q23n8 signed int32_t.
-
-
- -

Definition at line 251 of file mozzi_fixmath.h.

- -
-
- -

◆ Q24n8_to_float()

- -
-
- - - - - -
- - - - - - - - -
float Q24n8_to_float (Q24n8 a)
-
-inline
-
- -

Convert fix to float.

-
Parameters
- - -
ais a Q24n8 uint32_t
-
-
- -

Definition at line 270 of file mozzi_fixmath.h.

- -
-
- -

◆ Q24n8_to_Q0n8()

- -
-
- - - - - -
- - - - - - - - -
Q0n8 Q24n8_to_Q0n8 (Q24n8 a)
-
-inline
-
- -

Convert Q24n8 fixed to Q0n8 uint8_t.

-
Parameters
- - -
ais a Q24n8 uint32_t
-
-
- -

Definition at line 258 of file mozzi_fixmath.h.

- -
-
- -

◆ Q24n8_to_Q16n0()

- -
-
- - - - - -
- - - - - - - - -
Q16n16 Q24n8_to_Q16n0 (Q24n8 a)
-
-inline
-
- -

Convert Q24n8 fixed to Q16n0 uint16_t.

-
Parameters
- - -
ais a Q24n8 uint32_t
-
-
- -

Definition at line 261 of file mozzi_fixmath.h.

- -
-
- -

◆ Q24n8_to_Q16n16()

- -
-
- - - - - -
- - - - - - - - -
Q16n16 Q24n8_to_Q16n16 (Q24n8 a)
-
-inline
-
- -

Convert Q24n8 fixed to Q16n16 uint32_t.

-
Parameters
- - -
ais a Q24n8 uint32_t
-
-
- -

Definition at line 267 of file mozzi_fixmath.h.

- -
-
- -

◆ Q24n8_to_Q32n0()

- -
-
- - - - - -
- - - - - - - - -
Q32n0 Q24n8_to_Q32n0 (Q24n8 a)
-
-inline
-
- -

Convert Q24n8 fixed to Q32n0 uint32_t.

-
Parameters
- - -
ais a Q24n8 uint32_t
-
-
- -

Definition at line 264 of file mozzi_fixmath.h.

- -
-
- -

◆ Q7n0_to_Q15n16()

- -
-
- - - - - -
- - - - - - - - -
Q15n16 Q7n0_to_Q15n16 (Q7n0 a)
-
-inline
-
- -

Convert Q7n0 int8_t to Q15n16 fix.

-
Parameters
- - -
ais a int8_t
-
-
- -

Definition at line 169 of file mozzi_fixmath.h.

- -
-
- -

◆ Q7n0_to_Q7n8()

- -
-
- - - - - -
- - - - - - - - -
Q7n8 Q7n0_to_Q7n8 (Q7n0 a)
-
-inline
-
- -

Convert Q7n0 int8_t to Q7n8 fix.

-
Parameters
- - -
ais a int8_t
-
-
- -

Definition at line 166 of file mozzi_fixmath.h.

- -
-
- -

◆ Q7n8_mult()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
Q7n8 Q7n8_mult (Q7n8 a,
Q7n8 b 
)
-
-inline
-
- -

Fast fixed point multiply for Q7n8 fractional numbers.

-
Parameters
- - - -
aQ7n8 format multiplicand
bQ7n8 format multiplier
-
-
-
Returns
a Q7n8 format product
- -

Definition at line 346 of file mozzi_fixmath.h.

- -
-
- -

◆ Q7n8_to_float()

- -
-
- - - - - -
- - - - - - - - -
float Q7n8_to_float (Q7n8 a)
-
-inline
-
- -

Convert Q7n8 fix to float.

-
Parameters
- - -
ais a Q7n8 int16_t
-
-
- -

Definition at line 190 of file mozzi_fixmath.h.

- -
-
- -

◆ Q7n8_to_Q15n16()

- -
-
- - - - - -
- - - - - - - - -
Q15n16 Q7n8_to_Q15n16 (Q7n8 a)
-
-inline
-
- -

Convert Q7n8 fix to Q15n16.

-
Parameters
- - -
ais a Q7n8 int16_t
-
-
- -

Definition at line 187 of file mozzi_fixmath.h.

- -
-
- -

◆ Q7n8_to_Q7n0()

- -
-
- - - - - -
- - - - - - - - -
Q7n0 Q7n8_to_Q7n0 (Q7n8 a)
-
-inline
-
- -

Convert Q7n8 fix to Q7n0.

-
Parameters
- - -
ais a Q7n8 int16_t
-
-
- -

Definition at line 184 of file mozzi_fixmath.h.

- -
-
- -

◆ Q8n0_to_Q15n16()

- -
-
- - - - - -
- - - - - - - - -
Q15n16 Q8n0_to_Q15n16 (Q8n0 a)
-
-inline
-
- -

Convert Q8n0 uint8_t to Q15n16 fix.

-
Parameters
- - -
ais a Q8n0 uint8_t
-
-
- -

Definition at line 178 of file mozzi_fixmath.h.

- -
-
- -

◆ Q8n0_to_Q16n16()

- -
-
- - - - - -
- - - - - - - - -
Q16n16 Q8n0_to_Q16n16 (Q8n0 a)
-
-inline
-
- -

Convert Q8n0 uint8_t to Q16n16 fix.

-
Parameters
- - -
ais a Q8n0 uint8_t
-
-
- -

Definition at line 181 of file mozzi_fixmath.h.

- -
-
- -

◆ Q8n0_to_Q7n8()

- -
-
- - - - - -
- - - - - - - - -
Q7n8 Q8n0_to_Q7n8 (Q8n0 a)
-
-inline
-
- -

Convert Q8n0 uint8_t to Q7n8 fix.

-
Parameters
- - -
ais a Q8n0 uint8_t*. Beware of overflow.
-
-
- -

Definition at line 172 of file mozzi_fixmath.h.

- -
-
- -

◆ Q8n0_to_Q8n8()

- -
-
- - - - - -
- - - - - - - - -
Q8n8 Q8n0_to_Q8n8 (Q8n0 a)
-
-inline
-
- -

Convert uint8_t to Q8n8 fix.

-
Parameters
- - -
ais a Q8n0 uint8_t
-
-
- -

Definition at line 175 of file mozzi_fixmath.h.

- -
-
- -

◆ Q8n24_to_float()

- -
-
- - - - - -
- - - - - - - - -
float Q8n24_to_float (Q8n24 a)
-
-inline
-
- -

Convert fix to float.

-
Parameters
- - -
ais a Q8n24 uint32_t
-
-
- -

Definition at line 238 of file mozzi_fixmath.h.

- -
-
- -

◆ Q8n24_to_Q0n8()

- -
-
- - - - - -
- - - - - - - - -
Q0n8 Q8n24_to_Q0n8 (Q8n24 a)
-
-inline
-
- -

Convert Q8n24 fixed to Q0n8 uint8_t.

-
Parameters
- - -
ais a Q8n24 uint32_t
-
-
- -

Definition at line 235 of file mozzi_fixmath.h.

- -
-
- -

◆ Q8n8_to_float()

- -
-
- - - - - -
- - - - - - - - -
float Q8n8_to_float (Q8n8 a)
-
-inline
-
- -

Convert Q8n8 fix to float.

-
Parameters
- - -
ais a Q8n8 uint16_t
-
-
- -

Definition at line 199 of file mozzi_fixmath.h.

- -
-
- -

◆ Q8n8_to_Q16n16()

- -
-
- - - - - -
- - - - - - - - -
Q16n16 Q8n8_to_Q16n16 (Q8n8 a)
-
-inline
-
- -

Convert Q8n8 fix to Q16n16 uint32_t.

-
Parameters
- - -
ais a Q8n8 uint16_t
-
-
- -

Definition at line 196 of file mozzi_fixmath.h.

- -
-
- -

◆ Q8n8_to_Q8n0()

- -
-
- - - - - -
- - - - - - - - -
Q8n0 Q8n8_to_Q8n0 (Q8n8 a)
-
-inline
-
- -

Convert Q8n8 fix to Q8n0 uint8_t.

-
Parameters
- - -
ais a Q8n8 uint16_t
-
-
- -

Definition at line 193 of file mozzi_fixmath.h.

- -
-
- -

◆ uint8_tDiv()

- -
-
- - - - - - - - - - - - - - - - - - -
uint8_t uint8_tDiv (uint8_t n,
uint8_t d 
)
-
- -

Fast uint8_t division.

-
Parameters
- - - -
nnumerator
ddenominator
-
-
-
Returns
quotient
- -

Definition at line 48 of file mozzi_fixmath.cpp.

- -
-
- -

◆ uint8_tMod()

- -
-
- - - - - - - - - - - - - - - - - - -
uint8_t uint8_tMod (uint8_t n,
uint8_t d 
)
-
- -

fast uint8_t modulus

-
Parameters
- - - -
nnumerator
ddenominator
-
-
-
Returns
modulus
- -

Definition at line 36 of file mozzi_fixmath.cpp.

- -
-
-
-
- - - diff --git a/extras/doc/html/group__fixmath.js b/extras/doc/html/group__fixmath.js deleted file mode 100644 index 79d2cc7fd..000000000 --- a/extras/doc/html/group__fixmath.js +++ /dev/null @@ -1,115 +0,0 @@ -var group__fixmath = -[ - [ "low15bits", "group__fixmath.html#gac357561cf7360f82a264d90096d0126b", null ], - [ "Q0n15_FIX1", "group__fixmath.html#ga38ec011e7e3e08f5df091b608ce621e2", null ], - [ "Q0n16_FIX1", "group__fixmath.html#gaa1e02cbcdc65171103653df03fec3b76", null ], - [ "Q0n32_FIX1", "group__fixmath.html#gacb7fad10f1c2b67504271149f8f1215f", null ], - [ "Q0n7_FIX1", "group__fixmath.html#ga42c55269acbc41ca1fbcbb7aea5e8767", null ], - [ "Q15n0_FIX1", "group__fixmath.html#gafa16db677f958c243a826695b2c14c3c", null ], - [ "Q15n16_FIX1", "group__fixmath.html#ga7933033ba3cd84a4d09c0bd652378a38", null ], - [ "Q16n16_2PI", "group__fixmath.html#ga4bf1124c7bdac767263b2037211933e3", null ], - [ "Q16n16_FIX1", "group__fixmath.html#gaa4538a17e7e75b14a5826405ad06acef", null ], - [ "Q16n16_PI", "group__fixmath.html#gafd4492673766377d6d9202e43bb3d8dd", null ], - [ "Q1n14_FIX1", "group__fixmath.html#ga6f99802ebadd6b1b3ee707892e36cab9", null ], - [ "Q1n15_FIX1", "group__fixmath.html#ga8124fb8d1bcb111532f22726dbf3e5cc", null ], - [ "Q23n8_FIX1", "group__fixmath.html#gaad55b32c6590a3e4bb07972a7acec4a9", null ], - [ "Q3n13_2PI", "group__fixmath.html#gac065d8a968cb7c4dd713458682ee1308", null ], - [ "Q7n8_FIX1", "group__fixmath.html#ga1a04e29b3420231fc54039caf460a88c", null ], - [ "Q8n24_FIX1", "group__fixmath.html#ga5083b2bbeeb968258e2da31d3af26a25", null ], - [ "Q8n8_FIX1", "group__fixmath.html#ga00d3299412f5460cae3af8f0c58b2db1", null ], - [ "Q0n15", "group__fixmath.html#ga7b0aeeb726b5790b7b181f4f1ba08ee4", null ], - [ "Q0n16", "group__fixmath.html#ga38b7537c31ebeb6a2aba2ea34d23f230", null ], - [ "Q0n31", "group__fixmath.html#ga8f4b2d87d5b697b3625c347618fa64c4", null ], - [ "Q0n32", "group__fixmath.html#gae32cb6df74dc8053c5da2a7b6378583b", null ], - [ "Q0n7", "group__fixmath.html#ga9a64ce80fa7c320187d2cf2104a96daa", null ], - [ "Q0n8", "group__fixmath.html#ga36659a8cbbf0b380fa7bb2355e32db51", null ], - [ "Q15n0", "group__fixmath.html#ga97de6e3641b7638093a53cd137c8568c", null ], - [ "Q15n16", "group__fixmath.html#ga3e1cab88474edfa08535402573125cae", null ], - [ "Q16n0", "group__fixmath.html#ga50af2aa1b7d33bba0b6e1a88c350adfa", null ], - [ "Q16n16", "group__fixmath.html#gab3127fd8ac279e1d8dda0292bc1fc8dc", null ], - [ "Q1n14", "group__fixmath.html#ga856876974bff2af13e507f42af0c4925", null ], - [ "Q1n15", "group__fixmath.html#gadefb02e4d84cdb085fbc6251b8f4e8be", null ], - [ "Q23n8", "group__fixmath.html#gaa43a54806ef427491497cc1762480d13", null ], - [ "Q24n8", "group__fixmath.html#ga940a116ff2bfbd1b013b41b1be73f70f", null ], - [ "Q31n0", "group__fixmath.html#ga5979e4e6ca93e368ee8c042a526b3b73", null ], - [ "Q32n0", "group__fixmath.html#gafc3e7e5a9ddd997abe8e815ba91f3c4e", null ], - [ "Q3n13", "group__fixmath.html#ga2ca0a65f5b9ddef56756b4a75b3b8a68", null ], - [ "Q7n0", "group__fixmath.html#gabc933ab043f14dfee980811b2a103594", null ], - [ "Q7n8", "group__fixmath.html#ga65001bd29222d896ae9256fd7a415d41", null ], - [ "Q8n0", "group__fixmath.html#gadec626a60cce3a7fec144d2505b79dda", null ], - [ "Q8n24", "group__fixmath.html#ga5ce3f8456c6ea996029b8ea0d96fb3e8", null ], - [ "Q8n8", "group__fixmath.html#ga8dcb8a23bfed3b8404f7a0d73f300c8a", null ], - [ "float_to_Q0n16", "group__fixmath.html#ga4d20591828f0189963f1190f7197ba68", null ], - [ "float_to_Q0n7", "group__fixmath.html#ga1e0eab490ffe9a47fd78bcc449e3b995", null ], - [ "float_to_Q0n8", "group__fixmath.html#ga00e21c6b9d75ed26cd3bf1b9f4f9482e", null ], - [ "float_to_Q15n16", "group__fixmath.html#ga0e76f24ef8dfe0fa7510c4eea2608d5c", null ], - [ "float_to_Q16n16", "group__fixmath.html#ga041d3ba65c131b9aa01b9f34ec439b71", null ], - [ "float_to_Q1n14", "group__fixmath.html#ga1aab8b66d6d6f370cc66d82968884d18", null ], - [ "float_to_Q1n15", "group__fixmath.html#ga447e25c2d6c9bf14d8e324df0cc02753", null ], - [ "float_to_Q23n8", "group__fixmath.html#ga2ca980a6d71eb894b07534b30d9b7a06", null ], - [ "float_to_Q24n8", "group__fixmath.html#gaf91bc6123ecaff1441660d3abb20bf2e", null ], - [ "float_to_Q7n8", "group__fixmath.html#ga2a28dc262b3e79e0f67e4089cccaab45", null ], - [ "float_to_Q8n24", "group__fixmath.html#ga33ecb8a512f7d4eff5047d4ad65f5423", null ], - [ "float_to_Q8n8", "group__fixmath.html#ga36132b5f8f95223749b410ca235eef16", null ], - [ "Q0n16_to_float", "group__fixmath.html#ga0440dbc7692a88dca7b1173f020c9b0d", null ], - [ "Q0n7_to_float", "group__fixmath.html#ga8b01eb695e8d8c197e4e83a76d391a6a", null ], - [ "Q0n7_to_Q15n16", "group__fixmath.html#gac8b6733abac81f36cf8075a4d3c04e49", null ], - [ "Q0n7_to_Q1n14", "group__fixmath.html#ga468ddaa38e178b45a77e0c103da22b7c", null ], - [ "Q0n8_to_float", "group__fixmath.html#gade631f0534cf54fadbff65911809d927", null ], - [ "Q0n8_to_Q15n16", "group__fixmath.html#gad224b917b591bfa3554a958e84f8fadf", null ], - [ "Q0n8_to_Q16n16", "group__fixmath.html#gab13c5f790423d9a0cf10445b366933fe", null ], - [ "Q0n8_to_Q1n15", "group__fixmath.html#gaa9c85bc32475856ed07c3780a237ba31", null ], - [ "Q0n8_to_Q24n8", "group__fixmath.html#ga77edd2a4cd49df42e7145da9bdb799ae", null ], - [ "Q0n8_to_Q8n24", "group__fixmath.html#gac864675855d95314dd015ea52dc80135", null ], - [ "Q0n8_to_Q8n8", "group__fixmath.html#ga07cdd6c75045759d9d11116f5caea4bf", null ], - [ "Q15n0_to_Q15n16", "group__fixmath.html#ga8ef5b17eaddb22228824829204ee71bb", null ], - [ "Q15n16_to_float", "group__fixmath.html#ga4096449c3f0598a1534255de789d2ee5", null ], - [ "Q15n16_to_Q0n8", "group__fixmath.html#gaf8dd8621335948f9048742f0a59dc795", null ], - [ "Q15n16_to_Q15n0", "group__fixmath.html#gaa2ec03187910e9c6418298ef55655c36", null ], - [ "Q15n16_to_Q23n8", "group__fixmath.html#ga67b0f3ae70755ed8891e510b02813c08", null ], - [ "Q15n16_to_Q7n8", "group__fixmath.html#ga21d72d50bd41022755514c96c2d11901", null ], - [ "Q15n16_to_Q8n0", "group__fixmath.html#ga13bc20d9c470ccac803d53f3ebf7d861", null ], - [ "Q15n16_to_Q8n8", "group__fixmath.html#gaf62905baa27fd9ec0cbf5ed054ebd08a", null ], - [ "Q16n0_to_float", "group__fixmath.html#ga990f68566b105bc35ed718ad5ef93d72", null ], - [ "Q16n0_to_Q15n16", "group__fixmath.html#ga720cdc234e4d0979753e5aef22a93e11", null ], - [ "Q16n0_to_Q16n16", "group__fixmath.html#gac193b97057ac01de898db661cb6d1c5d", null ], - [ "Q16n0_to_Q23n8", "group__fixmath.html#gaab7cd08af1c66dd48873f9a5645cc95e", null ], - [ "Q16n0_to_Q24n8", "group__fixmath.html#ga779f365fbc3378a0e8cc167d44fd7aad", null ], - [ "Q16n16_pow2", "group__fixmath.html#ga2e1d9d0fe4ba7edb9830efb7887c36bd", null ], - [ "Q16n16_to_float", "group__fixmath.html#gafcb57f2d0fdcce65b60401f47b871d14", null ], - [ "Q16n16_to_Q0n8", "group__fixmath.html#ga1315b4f68a57d26fbedc88d5b30a44d8", null ], - [ "Q16n16_to_Q16n0", "group__fixmath.html#ga89bdabdfd59a8ec3f06aedbbab087527", null ], - [ "Q16n16_to_Q24n8", "group__fixmath.html#ga17dd8cb80ef87b6573926e411618105a", null ], - [ "Q16n16_to_Q8n8", "group__fixmath.html#gaef6ce2a93fe5862ac373772e994713a9", null ], - [ "Q1n14_to_float", "group__fixmath.html#gad3fe2bc17bed17cd159a9c030145b6ca", null ], - [ "Q1n14_to_Q0n7", "group__fixmath.html#ga5f3733fb89e77693e54328375226f5e9", null ], - [ "Q1n15_to_float", "group__fixmath.html#ga9ed5a6a2041f490ffa52b5a5fa95d3e5", null ], - [ "Q1n15_to_Q0n8", "group__fixmath.html#ga67c11990c9288aa762c708d3a48ba7fc", null ], - [ "Q23n8_to_float", "group__fixmath.html#ga47738704056a272968e80b399e06e82b", null ], - [ "Q23n8_to_Q15n0", "group__fixmath.html#ga1b21d30a04f07940dc4ea206533b9dd8", null ], - [ "Q23n8_to_Q16n0", "group__fixmath.html#gaa6a3087e0119ed233a3256f8fa25e146", null ], - [ "Q23n8_to_Q31n0", "group__fixmath.html#ga8f3d1181dc6802782b9ff9aa59ca96a2", null ], - [ "Q23n8_to_Q7n8", "group__fixmath.html#gac243a1fd2154b115e4ba39a70125675e", null ], - [ "Q24n8_to_float", "group__fixmath.html#gab495892ee3db6cbce186fbb7c7246088", null ], - [ "Q24n8_to_Q0n8", "group__fixmath.html#ga94dd6fe8594b171881ade98431dfda28", null ], - [ "Q24n8_to_Q16n0", "group__fixmath.html#gaefdfa391a9fef0f17d1f9df16fd9a9f0", null ], - [ "Q24n8_to_Q16n16", "group__fixmath.html#ga2b445681d56f8693c3d98d5ff19b51d4", null ], - [ "Q24n8_to_Q32n0", "group__fixmath.html#ga9f28b2310c92ecac72960d9bd0aff80f", null ], - [ "Q7n0_to_Q15n16", "group__fixmath.html#ga64d943b21ef783f34135630a5c80be46", null ], - [ "Q7n0_to_Q7n8", "group__fixmath.html#ga81b0b1f295a6a724c100e600d6b4ce28", null ], - [ "Q7n8_mult", "group__fixmath.html#ga306932c4fb32b1352c24b7602a696fee", null ], - [ "Q7n8_to_float", "group__fixmath.html#gaad3cbbc6a772d246d26fd98b5a079382", null ], - [ "Q7n8_to_Q15n16", "group__fixmath.html#ga958d671aeefb66c2492b84bf299f8d13", null ], - [ "Q7n8_to_Q7n0", "group__fixmath.html#gaa8be90cc674fc9ac72a2faafb11d6a5e", null ], - [ "Q8n0_to_Q15n16", "group__fixmath.html#gac0b4678c510db93302efb15497911907", null ], - [ "Q8n0_to_Q16n16", "group__fixmath.html#ga589b5c022b59a72fc3fb39061048d193", null ], - [ "Q8n0_to_Q7n8", "group__fixmath.html#ga4baa8569c241630ddd25d798d0a89b3d", null ], - [ "Q8n0_to_Q8n8", "group__fixmath.html#ga90a5d59d5a529f4caaf408730230a156", null ], - [ "Q8n24_to_float", "group__fixmath.html#ga6f0e36938a7dfae4ab399f17642c2bcd", null ], - [ "Q8n24_to_Q0n8", "group__fixmath.html#ga0c5065bc7c71ac750acde1c7ce216d87", null ], - [ "Q8n8_to_float", "group__fixmath.html#gabc9c251c25fa7a239d704ea3998e7e39", null ], - [ "Q8n8_to_Q16n16", "group__fixmath.html#gab88fd86b4f226f0e2614b0ac813e4cad", null ], - [ "Q8n8_to_Q8n0", "group__fixmath.html#gad68e3b4d1bf65e997d5e709eb4153572", null ], - [ "uint8_tDiv", "group__fixmath.html#ga1717d922e241ef368b81def7fd6c2446", null ], - [ "uint8_tMod", "group__fixmath.html#ga0cb78c87959d2f8cef9e2ec1bd000414", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/group__midi.html b/extras/doc/html/group__midi.html deleted file mode 100644 index 5a917a05e..000000000 --- a/extras/doc/html/group__midi.html +++ /dev/null @@ -1,405 +0,0 @@ - - - - - - - -Mozzi: Midi note number to frequency conversions - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
Midi note number to frequency conversions
-
-
- -

Useful if you like playing notes in tune. -More...

-

Detailed Description

-

Useful if you like playing notes in tune.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

float mtof (float midival)
 Converts midi note number to frequency. More...
 
int mtof (uint8_t midi_note)
 A good choice if you're using whole note values, want speed and simplicity, and accuracy isn't important. More...
 
int mtof (int midi_note)
 A good choice if you're using whole note values, want speed and simplicity, and accuracy isn't important. More...
 
Q16n16 Q16n16_mtof (Q16n16 midival_fractional)
 Converts midi note number to frequency with speed and accuracy. More...
 
template<uint64_t RANGE>
UFix< 16, 16 > mtof (UFix< 16, 16, RANGE > midival)
 Converts midi note number with speed and accuracy from a UFix<16,16>. More...
 
template<int8_t NI, int8_t NF, uint64_t RANGE>
UFix< 16, 16 > mtof (UFix< NI, NF, RANGE > midival)
 Converts midi note number with speed and accuracy from any UFix. More...
 
template<int8_t NI, int8_t NF, uint64_t RANGE>
UFix< 16, 16 > mtof (SFix< NI, NF, RANGE > midival)
 Converts midi note number with speed and accuracy from any SFix. More...
 
-template<int8_t NI, uint64_t RANGE>
UFix< 16, 16 > mtof (UFix< NI, 0, RANGE > midival)
 Converts whole midi note number with speed and accuracy (more accurate that mtof(uint8_t))
 
-template<int8_t NI, uint64_t RANGE>
UFix< 16, 16 > mtof (SFix< NI, 0, RANGE > midival)
 Converts whole midi note number with speed and accuracy (more accurate that mtof(uint8_t))
 
-

Function Documentation

- -

◆ mtof() [1/6]

- -
-
- - - - - -
- - - - - - - - -
float mtof (float midival)
-
-inline
-
- -

Converts midi note number to frequency.

-

Caution: this can take up to 400 microseconds to run. It can seriously mess up the audio output if you use it in updateControl() or updateAudio(). This is a good choice in setup(), or where you need precise midi-pitch conversion and aren't doing much other audio calculation.

Note
Beware this returns an invalid result for midi note 0.
-
-Timing: ~350 us
-
Parameters
- - -
midivala midi note number, 1.0 or greater. Like the mtof object in Pd, midi values can have fractions.
-
-
-
Returns
the frequency represented by the input midi note number..
- -

Definition at line 75 of file mozzi_midi.h.

- -
-
- -

◆ mtof() [2/6]

- -
-
- - - - - -
- - - - - - - - -
int mtof (int midi_note)
-
-inline
-
- -

A good choice if you're using whole note values, want speed and simplicity, and accuracy isn't important.

-
Parameters
- - -
midi_notea midi note number.
-
-
-
Returns
an integer approximation of the midi note's frequency.
- -

Definition at line 102 of file mozzi_midi.h.

- -
-
- -

◆ mtof() [3/6]

- -
-
-
-template<int8_t NI, int8_t NF, uint64_t RANGE>
- - - - - -
- - - - - - - - -
UFix<16,16> mtof (SFix< NI, NF, RANGE > midival)
-
-inline
-
- -

Converts midi note number with speed and accuracy from any SFix.

-

Uses Q16n16_mtof internally.

- -

Definition at line 163 of file mozzi_midi.h.

- -
-
- -

◆ mtof() [4/6]

- -
-
-
-template<uint64_t RANGE>
- - - - - -
- - - - - - - - -
UFix<16,16> mtof (UFix< 16, 16, RANGE > midival)
-
-inline
-
- -

Converts midi note number with speed and accuracy from a UFix<16,16>.

-

Uses Q16n16_mtof internally.

- -

Definition at line 143 of file mozzi_midi.h.

- -
-
- -

◆ mtof() [5/6]

- -
-
-
-template<int8_t NI, int8_t NF, uint64_t RANGE>
- - - - - -
- - - - - - - - -
UFix<16,16> mtof (UFix< NI, NF, RANGE > midival)
-
-inline
-
- -

Converts midi note number with speed and accuracy from any UFix.

-

Uses Q16n16_mtof internally.

- -

Definition at line 153 of file mozzi_midi.h.

- -
-
- -

◆ mtof() [6/6]

- -
-
- - - - - -
- - - - - - - - -
int mtof (uint8_t midi_note)
-
-inline
-
- -

A good choice if you're using whole note values, want speed and simplicity, and accuracy isn't important.

-
Parameters
- - -
midi_notea midi note number.
-
-
-
Returns
an integer approximation of the midi note's frequency.
- -

Definition at line 93 of file mozzi_midi.h.

- -
-
- -

◆ Q16n16_mtof()

- -
-
- - - - - -
- - - - - - - - -
Q16n16 Q16n16_mtof (Q16n16 midival_fractional)
-
-inline
-
- -

Converts midi note number to frequency with speed and accuracy.

-

Q16n16_mtofLookup() is a fast alternative to (float) mtof(), and more accurate than (uint8_t) mtof(), using Q16n16 fixed-point format instead of floats or uint8_t values. Q16n16_mtof() uses cheap linear interpolation between whole midi-note frequency equivalents stored in a lookup table, so is less accurate than the float version, mtof(), for non-whole midi values.

Note
Timing: ~8 us.
-
Parameters
- - -
midival_fractionala midi note number in Q16n16 format, for fractional values.
-
-
-
Returns
the frequency represented by the input midi note number, in Q16n16 fixed point fractional integer format, where the lower word is a fractional value.
- -

Definition at line 119 of file mozzi_midi.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/group__midi.js b/extras/doc/html/group__midi.js deleted file mode 100644 index 728e1162b..000000000 --- a/extras/doc/html/group__midi.js +++ /dev/null @@ -1,12 +0,0 @@ -var group__midi = -[ - [ "mtof", "group__midi.html#gafacb8849f96270644ea79184fde7db37", null ], - [ "mtof", "group__midi.html#ga08102facf170648591b2ca24a3c39712", null ], - [ "mtof", "group__midi.html#ga20e0e7d5b710097134f129b27902b188", null ], - [ "mtof", "group__midi.html#ga94801ebe89ccc9a49675ec414887f6d4", null ], - [ "mtof", "group__midi.html#gabf0b21f8700b5ab84617028f1f9d59fa", null ], - [ "mtof", "group__midi.html#ga25d24d0b734826a924266bda90e61db2", null ], - [ "mtof", "group__midi.html#gaa16e3e2de7e214303dc1b3145dbc87e9", null ], - [ "mtof", "group__midi.html#ga07d1ca985403df63f75aa5d143477206", null ], - [ "Q16n16_mtof", "group__midi.html#ga45bd3f3abd7ae5fa509eac3d3931a5b2", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/group__random.html b/extras/doc/html/group__random.html deleted file mode 100644 index a087660ad..000000000 --- a/extras/doc/html/group__random.html +++ /dev/null @@ -1,748 +0,0 @@ - - - - - - - -Mozzi: Fast random number generator functions - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
Fast random number generator functions
-
-
- -

These replace Arduino random() which is so slow it will stop your audio. -More...

-

Detailed Description

-

These replace Arduino random() which is so slow it will stop your audio.

-

They can even be used to generate audio noise.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

uint32_t xorshift96 ()
 Random number generator. More...
 
void randSeed (uint32_t seed)
 Initialises Mozzi's (pseudo)random number generator xorshift96(), which is used in Mozzi's rand() function. More...
 
void randSeed ()
 Initialises Mozzi's (pseudo)random number generator xorshift96(), which is used in Mozzi's rand() function. More...
 
void xorshiftSeed (uint32_t seed)
 Initialises Mozzi's (pseudo)random number generator xorshift96() with a chosen seed number. More...
 
int8_t rand (int8_t minval, int8_t maxval)
 Ranged random number generator, faster than Arduino's built-in random function, which is too slow for generating at audio rate with Mozzi. More...
 
int8_t rand (int8_t maxval)
 Ranged random number generator, faster than Arduino's built-in random function, which is too slow for generating at audio rate with Mozzi. More...
 
uint8_t rand (uint8_t minval, uint8_t maxval)
 Ranged random number generator, faster than Arduino's built-in random function, which is too slow for generating at audio rate with Mozzi. More...
 
uint8_t rand (uint8_t maxval)
 Ranged random number generator, faster than Arduino's built-in random function, which is too slow for generating at audio rate with Mozzi. More...
 
int rand (int minval, int maxval)
 Ranged random number generator, faster than Arduino's built-in random function, which is too slow for generating at audio rate with Mozzi. More...
 
int rand (int maxval)
 Ranged random number generator, faster than Arduino's built-in random function, which is too slow for generating at audio rate with Mozzi. More...
 
unsigned int rand (unsigned int minval, unsigned int maxval)
 Ranged random number generator, faster than Arduino's built-in random function, which is too slow for generating at audio rate with Mozzi. More...
 
unsigned int rand (unsigned int maxval)
 Ranged random number generator, faster than Arduino's built-in random function, which is too slow for generating at audio rate with Mozzi. More...
 
uint8_t randMidiNote ()
 Generates a random number in the range for midi notes. More...
 
unsigned int randPrime (unsigned int n)
 Generates a random prime number between 0 and the n-1th prime number. More...
 
unsigned int randPrimeUpTo (unsigned int n)
 Generates a random prime number between 0 and the given input number inclusive. More...
 
-

Function Documentation

- -

◆ rand() [1/8]

- -
-
- - - - - -
- - - - - - - - -
int rand (int maxval)
-
-inline
-
- -

Ranged random number generator, faster than Arduino's built-in random function, which is too slow for generating at audio rate with Mozzi.

-
Parameters
- - -
maxvalthe maximum signed int value of the range to be chosen from. Maxval-1 will be the largest value possibly returned by the function.
-
-
-
Returns
a random int between 0 and maxval-1 inclusive.
-
Note
The returned value is always in the 16 bit range, even on platforms where int is wider. If you need 32 bits, call xorshift96(), directly.
- -

Definition at line 130 of file mozzi_rand.h.

- -
-
- -

◆ rand() [2/8]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
int rand (int minval,
int maxval 
)
-
-inline
-
- -

Ranged random number generator, faster than Arduino's built-in random function, which is too slow for generating at audio rate with Mozzi.

-
Parameters
- - - -
minvalthe minimum signed int value of the range to be chosen from. Minval will be the minimum value possibly returned by the function.
maxvalthe maximum signed int value of the range to be chosen from. Maxval-1 will be the largest value possibly returned by the function.
-
-
-
Returns
a random int between minval and maxval-1 inclusive.
-
Note
The returned value is always in the 16 bit range, even on platforms where int is wider. If you need 32 bits, call xorshift96(), directly.
- -

Definition at line 118 of file mozzi_rand.h.

- -
-
- -

◆ rand() [3/8]

- -
-
- - - - - -
- - - - - - - - -
int8_t rand (int8_t maxval)
-
-inline
-
- -

Ranged random number generator, faster than Arduino's built-in random function, which is too slow for generating at audio rate with Mozzi.

-
Parameters
- - -
maxvalthe maximum signed byte value of the range to be chosen from. Maxval-1 will be the largest value possibly returned by the function.
-
-
-
Returns
a random signed byte between 0 and maxval-1 inclusive.
- -

Definition at line 84 of file mozzi_rand.h.

- -
-
- -

◆ rand() [4/8]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
int8_t rand (int8_t minval,
int8_t maxval 
)
-
-inline
-
- -

Ranged random number generator, faster than Arduino's built-in random function, which is too slow for generating at audio rate with Mozzi.

-
Parameters
- - - -
minvalthe minimum signed byte value of the range to be chosen from. Minval will be the minimum value possibly returned by the function.
maxvalthe maximum signed byte value of the range to be chosen from. Maxval-1 will be the largest value possibly returned by the function.
-
-
-
Returns
a random signed byte between minval and maxval-1 inclusive.
- -

Definition at line 74 of file mozzi_rand.h.

- -
-
- -

◆ rand() [5/8]

- -
-
- - - - - -
- - - - - - - - -
uint8_t rand (uint8_t maxval)
-
-inline
-
- -

Ranged random number generator, faster than Arduino's built-in random function, which is too slow for generating at audio rate with Mozzi.

-
Parameters
- - -
maxvalthe maximum unsigned byte value of the range to be chosen from. Maxval-1 will be the largest value possibly returned by the function.
-
-
-
Returns
a random unsigned byte between 0 and maxval-1 inclusive.
- -

Definition at line 105 of file mozzi_rand.h.

- -
-
- -

◆ rand() [6/8]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
uint8_t rand (uint8_t minval,
uint8_t maxval 
)
-
-inline
-
- -

Ranged random number generator, faster than Arduino's built-in random function, which is too slow for generating at audio rate with Mozzi.

-
Parameters
- - - -
minvalthe minimum unsigned byte value of the range to be chosen from. Minval will be the minimum value possibly returned by the function.
maxvalthe maximum unsigned byte value of the range to be chosen from. Maxval-1 will be the largest value possibly returned by the function.
-
-
-
Returns
a random unsigned byte between minval and maxval-1 inclusive.
- -

Definition at line 95 of file mozzi_rand.h.

- -
-
- -

◆ rand() [7/8]

- -
-
- - - - - -
- - - - - - - - -
unsigned int rand (unsigned int maxval)
-
-inline
-
- -

Ranged random number generator, faster than Arduino's built-in random function, which is too slow for generating at audio rate with Mozzi.

-
Parameters
- - -
maxvalthe maximum unsigned int value of the range to be chosen from. Maxval-1 will be the largest value possibly returned by the function.
-
-
-
Returns
a random unsigned int between 0 and maxval-1 inclusive.
-
Note
The returned value is always in the 16 bit range, even on platforms where int is wider. If you need 32 bits, call xorshift96(), directly.
- -

Definition at line 153 of file mozzi_rand.h.

- -
-
- -

◆ rand() [8/8]

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
unsigned int rand (unsigned int minval,
unsigned int maxval 
)
-
-inline
-
- -

Ranged random number generator, faster than Arduino's built-in random function, which is too slow for generating at audio rate with Mozzi.

-
Parameters
- - - -
minvalthe minimum unsigned int value of the range to be chosen from. Minval will be the minimum value possibly returned by the function.
maxvalthe maximum unsigned int value of the range to be chosen from. Maxval-1 will be the largest value possibly returned by the function.
-
-
-
Returns
a random unsigned int between minval and maxval-1 inclusive.
- -

Definition at line 141 of file mozzi_rand.h.

- -
-
- -

◆ randMidiNote()

- -
-
- - - - - -
- - - - - - - -
uint8_t randMidiNote ()
-
-inline
-
- -

Generates a random number in the range for midi notes.

-
Returns
a random value between 0 and 127 inclusive
- -

Definition at line 162 of file mozzi_rand.h.

- -
-
- -

◆ randPrime()

- -
-
- - - - - -
- - - - - - - - -
unsigned int randPrime (unsigned int n)
-
-inline
-
- -

Generates a random prime number between 0 and the n-1th prime number.

-

This uses a stored array of primes, which takes about 2.5k of progmem.

Parameters
- - -
nthe maximum index in the series of primes up to which numbers will be returned. The maximum is 1128.
-
-
-
Returns
random prime number between 0 and n-1th index in the series of primes.
-
Note
This isn't included automatically with mozzi_rand.h, because it takes up memory which might be needed for other things. You need to "#include <primes.h>" separately to mozzi_rand.h.
- -

Definition at line 49 of file primes.h.

- -
-
- -

◆ randPrimeUpTo()

- -
-
- - - - - -
- - - - - - - - -
unsigned int randPrimeUpTo (unsigned int n)
-
-inline
-
- -

Generates a random prime number between 0 and the given input number inclusive.

-

This uses a stored array of primes up to 10000, which takes about 2.5k of progmem.

Parameters
- - -
nthe upper limit of the random prime number to be generated. The maximum is 10000.
-
-
-
Returns
random prime number between 0 and n.
-
Note
This isn't included automatically with mozzi_utils.h, because it takes up memory which might be needed for other things. You need to "#include <primes.h>" separately to mozzi_utils.h.
- -

Definition at line 64 of file primes.h.

- -
-
- -

◆ randSeed() [1/2]

- -
-
- - - - - -
- - - - - - - -
void randSeed ()
-
-inline
-
- -

Initialises Mozzi's (pseudo)random number generator xorshift96(), which is used in Mozzi's rand() function.

-

This can be useful if you want random sequences to be different on each run of a sketch, by seeding with a fairly random input. randSeed() called without a parameter uses noise from reading the Arduino's internal temperature as the seed, a technique discussed at http://arduino.cc/forum/index.php/topic,38091.0.html, borrowing code put there by Rob Tillaart.

-
Note
Intialization of the random seed is done differently on different MCUs, but is nowhere near perfect for most (and for some it is not even implemented at all). Many implementations (e.g. on AVR, STM32) simply rely on reading a (hopefully noisy) internal temperature sensor. You will often get better results by calling analogRead() - not mozziAnalogRead(0), in this case! - on one or two floating (non-connected) analog pins.
- -

Definition at line 59 of file mozzi_rand.h.

- -
-
- -

◆ randSeed() [2/2]

- -
-
- - - - - -
- - - - - - - - -
void randSeed (uint32_t seed)
-
-inline
-
- -

Initialises Mozzi's (pseudo)random number generator xorshift96(), which is used in Mozzi's rand() function.

-

This can be useful if you want random sequences to be different on each run of a sketch, by seeding with fairly random input, such as analogRead() on an unconnected pin (as explained in the Arduino documentation for randomSeed(). randSeed is the same as xorshift96Seed(), but easier to remember.

Parameters
- - -
seeda number to use as a seed.
-
-
- -

Definition at line 41 of file mozzi_rand.h.

- -
-
- -

◆ xorshift96()

- -
-
- - - - - -
- - - - - - - -
uint32_t xorshift96 ()
-
-inline
-
- -

Random number generator.

-

A faster replacement for Arduino's random function, which is too slow to use with Mozzi. Based on Marsaglia, George. (2003). Xorshift RNGs. http://www.jstatsoft.org/v08/i14/xorshift.pdf

Returns
a random 32 bit integer.
- -

Definition at line 30 of file mozzi_rand.h.

- -
-
- -

◆ xorshiftSeed()

- -
-
- - - - - -
- - - - - - - - -
void xorshiftSeed (uint32_t seed)
-
-inline
-
- -

Initialises Mozzi's (pseudo)random number generator xorshift96() with a chosen seed number.

-
Parameters
- - -
seeda number to use as a seed. TODO: duplicate deprecate / remove
-
-
- -

Definition at line 66 of file mozzi_rand.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/group__random.js b/extras/doc/html/group__random.js deleted file mode 100644 index b5b15e930..000000000 --- a/extras/doc/html/group__random.js +++ /dev/null @@ -1,18 +0,0 @@ -var group__random = -[ - [ "rand", "group__random.html#ga1182cb74988d9c8510959149adc63762", null ], - [ "rand", "group__random.html#ga4c69deb53afb886b26c76b343513b340", null ], - [ "rand", "group__random.html#ga99dee852111a97e20a64582de8e79ab1", null ], - [ "rand", "group__random.html#gabe026433bdf21da516984d35730672fc", null ], - [ "rand", "group__random.html#ga904cf092c2b014dc6c99f7844bd3723e", null ], - [ "rand", "group__random.html#ga13bc207ecda4f92e2be2fb585a5cce2b", null ], - [ "rand", "group__random.html#ga4ad4ab94c8b0e8a4d4be925490378733", null ], - [ "rand", "group__random.html#ga95de742b529d5965461f1d3f6f576e18", null ], - [ "randMidiNote", "group__random.html#ga15ff4da0bec0272bf728ea7de2d78006", null ], - [ "randPrime", "group__random.html#gab6c2b444d462461b82997e04105d0398", null ], - [ "randPrimeUpTo", "group__random.html#gaead8db89e2403d5ef7842f894552c629", null ], - [ "randSeed", "group__random.html#ga83ff6b4e38c84713e0d67aa1ec06af66", null ], - [ "randSeed", "group__random.html#ga477030e3875a6dd400012c3a431e486a", null ], - [ "xorshift96", "group__random.html#ga68ed69ece800f0c1e5819c05aed8d398", null ], - [ "xorshiftSeed", "group__random.html#ga0a39ef54631e47a5bf6493bba1f6133c", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/group__sensortools.html b/extras/doc/html/group__sensortools.html deleted file mode 100644 index d253a9893..000000000 --- a/extras/doc/html/group__sensortools.html +++ /dev/null @@ -1,1064 +0,0 @@ - - - - - - - -Mozzi: Automatic range adjustment - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
Automatic range adjustment
-
-
-

Detailed Description

- - - - - - - - - - - - - - - - - -

-Classes

class  AutoMap
 Automatically map an input value to an output range without knowing the precise range of inputs beforehand. More...
 
class  AutoRange< T >
 Keeps a running calculation of the range of the input values it receives. More...
 
class  OverSample< T, RESOLUTION_INCREASE_BITS >
 Enables the resolution of analog inputs to be increased by oversampling and decimation. More...
 
class  RollingAverage< T, WINDOW_LENGTH >
 Calculates a running average over a specified number of the most recent readings. More...
 
class  RollingStat< T, WINDOW_LENGTH >
 WARNING: this class is work in progress, don't use it yet. More...
 
-

Class Documentation

- -

◆ AutoMap

- -
-
- - - - -
class AutoMap
-
-

Automatically map an input value to an output range without knowing the precise range of inputs beforehand.

- -

Definition at line 29 of file AutoMap.h.

-
- + Inheritance diagram for AutoMap:
-
-
- - - - - - - - - - - - - - - - - - - - - -

Public Member Functions

 AutoMap (int min_expected, int max_expected, int map_to_min, int map_to_max)
 Constructor. More...
 
int next (int n)
 Process the next value and return it mapped to the range which was set in the constructor. More...
 
int operator() (int n)
 Process the next value and return it mapped to the range which was set in the constructor. More...
 
int getMin ()
 Returns the current minimum. More...
 
int getMax ()
 Returns the current maximum. More...
 
int getRange ()
 Returns the current range. More...
 
-

Constructor & Destructor Documentation

- -

◆ AutoMap()

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
AutoMap::AutoMap (int min_expected,
int max_expected,
int map_to_min,
int map_to_max 
)
-
-inline
-
- -

Constructor.

-
Parameters
- - - -
min_expectedthe minimum possible input value.
max_expectedthe maximum possible input value.
-
-
- -

Definition at line 36 of file AutoMap.h.

- -
-
-

Member Function Documentation

- -

◆ getMax()

- -
-
- - - - - -
- - - - - - - -
int AutoRange< int >::getMax ()
-
-inlineinherited
-
- -

Returns the current maximum.

-
Returns
maximum
- -

Definition at line 65 of file AutoRange.h.

- -
-
- -

◆ getMin()

- -
-
- - - - - -
- - - - - - - -
int AutoRange< int >::getMin ()
-
-inlineinherited
-
- -

Returns the current minimum.

-
Returns
minimum
- -

Definition at line 56 of file AutoRange.h.

- -
-
- -

◆ getRange()

- -
-
- - - - - -
- - - - - - - -
int AutoRange< int >::getRange ()
-
-inlineinherited
-
- -

Returns the current range.

-
Returns
range
- -

Definition at line 74 of file AutoRange.h.

- -
-
- -

◆ next()

- -
-
- - - - - -
- - - - - - - - -
int AutoMap::next (int n)
-
-inline
-
- -

Process the next value and return it mapped to the range which was set in the constructor.

-

Can use the operator instead if you prefer, eg. myMap(n) instead of myMap.next(n).

Parameters
- - -
nthe next value to process.
-
-
-
Returns
the input value mapped to the range which was set in the constructor.
- -

Definition at line 48 of file AutoMap.h.

- -
-
- -

◆ operator()()

- -
-
- - - - - -
- - - - - - - - -
int AutoMap::operator() (int n)
-
-inline
-
- -

Process the next value and return it mapped to the range which was set in the constructor.

-

This is an alternative to next() if you prefer, eg. myMap(n) instead of myMap.next(n).

Parameters
- - -
nthe next value to process.
-
-
-
Returns
the input value mapped to the range which was set in the constructor.
- -

Definition at line 60 of file AutoMap.h.

- -
-
- -
-
- -

◆ AutoRange

- -
-
- - - - -
class AutoRange
-
-

template<class T>
-class AutoRange< T >

- -

Keeps a running calculation of the range of the input values it receives.

- -

Definition at line 19 of file AutoRange.h.

-
- - - - - - - - - - - - - - - - -

Public Member Functions

 AutoRange (T min_expected, T max_expected)
 Constructor. More...
 
void next (T n)
 Updates the current range. More...
 
getMin ()
 Returns the current minimum. More...
 
getMax ()
 Returns the current maximum. More...
 
getRange ()
 Returns the current range. More...
 
-

Constructor & Destructor Documentation

- -

◆ AutoRange()

- -
-
-
-template<class T >
- - - - - -
- - - - - - - - - - - - - - - - - - -
AutoRange< T >::AutoRange (min_expected,
max_expected 
)
-
-inline
-
- -

Constructor.

-
Template Parameters
- - -
Tthe type of numbers to to use, eg. int, unsigned int, float etc.
-
-
-
Parameters
- - - -
min_expectedthe minimum possible input value.
max_expectedthe maximum possible input value.
-
-
- -

Definition at line 28 of file AutoRange.h.

- -
-
-

Member Function Documentation

- -

◆ getMax()

- -
-
-
-template<class T >
- - - - - -
- - - - - - - -
T AutoRange< T >::getMax ()
-
-inline
-
- -

Returns the current maximum.

-
Returns
maximum
- -

Definition at line 65 of file AutoRange.h.

- -
-
- -

◆ getMin()

- -
-
-
-template<class T >
- - - - - -
- - - - - - - -
T AutoRange< T >::getMin ()
-
-inline
-
- -

Returns the current minimum.

-
Returns
minimum
- -

Definition at line 56 of file AutoRange.h.

- -
-
- -

◆ getRange()

- -
-
-
-template<class T >
- - - - - -
- - - - - - - -
T AutoRange< T >::getRange ()
-
-inline
-
- -

Returns the current range.

-
Returns
range
- -

Definition at line 74 of file AutoRange.h.

- -
-
- -

◆ next()

- -
-
-
-template<class T >
- - - - - -
- - - - - - - - -
void AutoRange< T >::next (n)
-
-inline
-
- -

Updates the current range.

-
Parameters
- - -
nthe next value to include in the range calculation.
-
-
- -

Definition at line 36 of file AutoRange.h.

- -
-
- -
-
- -

◆ OverSample

- -
-
- - - - -
class OverSample
-
-

template<class T, const uint8_t RESOLUTION_INCREASE_BITS>
-class OverSample< T, RESOLUTION_INCREASE_BITS >

- -

Enables the resolution of analog inputs to be increased by oversampling and decimation.

-

Noise should be added to the input before it's digitised, then a succession of input readings are summed and finally divided to give a number with greater resolution than the ADC.
- Often, noise in the Arduino system will be enough, but there are other practical methods described in Enhancing ADC Resolution by Oversampling, as well as an explanation of the overall approach.

Template Parameters
- - -
RESOLUTION_INCREASE_BITShow many extra bits of resolution to produce. The window length and the memory it needs increases quickly as the oversampling resolution increases.
- 1 bit = 4 unsigned ints (analog input between 0-1023) = 8 uint8_ts, 2 bits = 16 unsigned ints = 32 uint8_ts,
- 3 bits = 64 unsigned ints = 128 uint8_ts, More than 3 bits increase in resolution would require either using longs to store the readings, which would need 1024 uint8_ts for a 4 bit increase and 4096 uint8_ts for 5 bits (do any avr's have that much room?), or the average reading would have to be no more than 128 (for 4 bits increase), because 256 readings would be needed, and the sum of all 256 readings would have to fit into an int. (32767 / 256 = 128). Changing OverSample to use unsigned ints could enable an average reading of 256, but isn't tested properly yet.
-
-
-
Note
The higher the resolution, the more lag there will be. It's almost a RollingAverage filter, with the difference that OverSample doesn't divide by as much as you would for an average.
- -

Definition at line 42 of file OverSample.h.

-
- + Inheritance diagram for OverSample< T, RESOLUTION_INCREASE_BITS >:
-
-
- - - - - - -

Public Member Functions

next (T input)
 Oversample and decimate the input to increase resolution by RESOLUTION_INCREASE_BITS;. More...
 
-

Member Function Documentation

- -

◆ next()

- -
-
-
-template<class T , const uint8_t RESOLUTION_INCREASE_BITS>
- - - - - -
- - - - - - - - -
T OverSample< T, RESOLUTION_INCREASE_BITS >::next (input)
-
-inline
-
- -

Oversample and decimate the input to increase resolution by RESOLUTION_INCREASE_BITS;.

-
Parameters
- - -
inputan analog input to oversample.
-
-
-
Returns
the higher resolution result.
-
Note
timing 5.7us
- -

Definition at line 53 of file OverSample.h.

- -
-
- -
-
- -

◆ RollingAverage

- -
-
- - - - -
class RollingAverage
-
-

template<class T, int WINDOW_LENGTH>
-class RollingAverage< T, WINDOW_LENGTH >

- -

Calculates a running average over a specified number of the most recent readings.

-


- Like Smooth(), this is good for smoothing analog inputs in updateControl().

Template Parameters
- - -
WINDOW_LENGTHthe number of readings to include in the rolling average. It must be a power of two (unless you're averaging floats). The higher the number, the more the readings will be smoothed, but the slower the output will respond to the input.
-
-
- -

Definition at line 36 of file RollingAverage.h.

-
- - - - - - - - - - -

Public Member Functions

 RollingAverage ()
 Constructor. More...
 
next (T input)
 Give the average of the last WINDOW_LENGTH. More...
 

Protected Member Functions

-T add (T input)
 
-

Constructor & Destructor Documentation

- -

◆ RollingAverage()

- -
-
-
-template<class T , int WINDOW_LENGTH>
- - - - - -
- - - - - - - -
RollingAverage< T, WINDOW_LENGTH >::RollingAverage ()
-
-inline
-
- -

Constructor.

-
Template Parameters
- - - -
Tthe type of numbers to average, eg. int, unsigned int, float etc. It will be relatively slow with floating point numbers, as it will use a divide operation for the averaging. Nevertheless, there might be a time when it's useful.
WINDOW_LENGTHthe number of readings to keep track of. It must be a power of two (unless you're averaging floats). The higher the number, the more the readings will be smoothed, but the slower the output will respond to the input.
-
-
-
Note
Watch out for overflows!
- -

Definition at line 50 of file RollingAverage.h.

- -
-
-

Member Function Documentation

- -

◆ next()

- -
-
-
-template<class T , int WINDOW_LENGTH>
- - - - - -
- - - - - - - - -
T RollingAverage< T, WINDOW_LENGTH >::next (input)
-
-inline
-
- -

Give the average of the last WINDOW_LENGTH.

-
Parameters
- - -
inputa control signal such as an analog input which needs smoothing.
-
-
-
Returns
the smoothed result.
-
Note
unsigned int timing 5.7us
- -

Definition at line 63 of file RollingAverage.h.

- -
-
- -
-
- -

◆ RollingStat

- -
-
- - - - -
class RollingStat
-
-

template<class T, int WINDOW_LENGTH>
-class RollingStat< T, WINDOW_LENGTH >

- -

WARNING: this class is work in progress, don't use it yet.

-

Calculates an approximation of the variance and standard deviation for a window of recent inputs.

Template Parameters
- - - -
Tthe type of numbers to use. Choose unsigned int, int , uint8_t, int8_t, or float
WINDOW_LENGTHhow many recent input values to include in the calculations.
-
-
- -

Definition at line 27 of file RollingStat.h.

-
- - - - - - - - - - - - - - - - - - - -

Public Member Functions

RollingStat ()
 Constructor.
 
void update (T x)
 Update the mean and variance given a new input value. More...
 
void update (int8_t x)
 Update the mean and variance given a new input value. More...
 
getMean () const
 Return the mean of the last WINDOW_LENGTH number of inputs. More...
 
getVariance () const
 Return the approximate variance of the last WINDOW_LENGTH number of inputs. More...
 
getStandardDeviation () const
 Return the approximate standard deviation of the last WINDOW_LENGTH number of inputs. More...
 
-

Member Function Documentation

- -

◆ getMean()

- -
-
-
-template<class T , int WINDOW_LENGTH>
- - - - - -
- - - - - - - -
T RollingStat< T, WINDOW_LENGTH >::getMean () const
-
-inline
-
- -

Return the mean of the last WINDOW_LENGTH number of inputs.

-
Returns
mean
- -

Definition at line 60 of file RollingStat.h.

- -
-
- -

◆ getStandardDeviation()

- -
-
-
-template<class T , int WINDOW_LENGTH>
- - - - - -
- - - - - - - -
T RollingStat< T, WINDOW_LENGTH >::getStandardDeviation () const
-
-inline
-
- -

Return the approximate standard deviation of the last WINDOW_LENGTH number of inputs.

-
Returns
standard deviation.
- -

Definition at line 77 of file RollingStat.h.

- -
-
- -

◆ getVariance()

- -
-
-
-template<class T , int WINDOW_LENGTH>
- - - - - -
- - - - - - - -
T RollingStat< T, WINDOW_LENGTH >::getVariance () const
-
-inline
-
- -

Return the approximate variance of the last WINDOW_LENGTH number of inputs.

-
Returns
variance
-
Note
This should really be calculated using WINDOW_LENGTH-1, but sacrificing accuracy for speed we use the power of two value of WINDOW_LENGTH.
- -

Definition at line 70 of file RollingStat.h.

- -
-
- -

◆ update() [1/2]

- -
-
-
-template<class T , int WINDOW_LENGTH>
- - - - - -
- - - - - - - - -
void RollingStat< T, WINDOW_LENGTH >::update (int8_t x)
-
-inline
-
- -

Update the mean and variance given a new input value.

-
Parameters
- - -
xthe next input value
-
-
- -

Definition at line 50 of file RollingStat.h.

- -
-
- -

◆ update() [2/2]

- -
-
-
-template<class T , int WINDOW_LENGTH>
- - - - - -
- - - - - - - - -
void RollingStat< T, WINDOW_LENGTH >::update (x)
-
-inline
-
- -

Update the mean and variance given a new input value.

-
Parameters
- - -
xthe next input value
-
-
-
Note
timing for unsigned int 10us, int 22us
- -

Definition at line 40 of file RollingStat.h.

- -
-
- -
-
-
-
- - - diff --git a/extras/doc/html/group__sensortools.js b/extras/doc/html/group__sensortools.js deleted file mode 100644 index b3fc12e42..000000000 --- a/extras/doc/html/group__sensortools.js +++ /dev/null @@ -1,34 +0,0 @@ -var group__sensortools = -[ - [ "AutoMap", "group__sensortools.html#class_auto_map", [ - [ "AutoMap", "group__sensortools.html#aec125f071bd83180ff0d0a71446725f3", null ], - [ "getMax", "group__sensortools.html#a4d27e5fe43f9b376b537def88ac74119", null ], - [ "getMin", "group__sensortools.html#acd1dae6e6ffb288efc1618e2453ad5ef", null ], - [ "getRange", "group__sensortools.html#a75c842b27ad3917be6d29e3d35b485f3", null ], - [ "next", "group__sensortools.html#a34bc821f4f662e54383dd9d61db782df", null ], - [ "operator()", "group__sensortools.html#afd49885d3f05ca0a2f417199a9e7cf10", null ] - ] ], - [ "AutoRange", "group__sensortools.html#class_auto_range", [ - [ "AutoRange", "group__sensortools.html#a2f0638f4d8e2937080b67fc0614c8d6d", null ], - [ "getMax", "group__sensortools.html#a4d27e5fe43f9b376b537def88ac74119", null ], - [ "getMin", "group__sensortools.html#acd1dae6e6ffb288efc1618e2453ad5ef", null ], - [ "getRange", "group__sensortools.html#a75c842b27ad3917be6d29e3d35b485f3", null ], - [ "next", "group__sensortools.html#a788fca4c9f1e6699eb1990582015c0e3", null ] - ] ], - [ "OverSample", "group__sensortools.html#class_over_sample", [ - [ "next", "group__sensortools.html#a413ca7de0dbf3d2afafd84aa75857442", null ] - ] ], - [ "RollingAverage", "group__sensortools.html#class_rolling_average", [ - [ "RollingAverage", "group__sensortools.html#a11cf7b9e1278648b1eb10e5534fe3e29", null ], - [ "add", "group__sensortools.html#a9c9f4083b726ed046c97a91535486317", null ], - [ "next", "group__sensortools.html#a23c4b93258faace0c7ee60eb395d2c4b", null ] - ] ], - [ "RollingStat", "group__sensortools.html#class_rolling_stat", [ - [ "RollingStat", "group__sensortools.html#a98c3f767391db80b8ad59ca53c1e6a94", null ], - [ "getMean", "group__sensortools.html#a8521a53cde7c5d28ac9c375aaee3a972", null ], - [ "getStandardDeviation", "group__sensortools.html#a234ab1d244e4b392056fcaa1fc1e4fc4", null ], - [ "getVariance", "group__sensortools.html#a3e7e5f706e3b5ac2496f14b7b639775d", null ], - [ "update", "group__sensortools.html#a6f7b384ab338da5ba10200fbce7f2eb0", null ], - [ "update", "group__sensortools.html#a85750e78ac282caec24408dce6e78201", null ] - ] ] -]; \ No newline at end of file diff --git a/extras/doc/html/group__sensortools.png b/extras/doc/html/group__sensortools.png deleted file mode 100644 index ae117d46e..000000000 Binary files a/extras/doc/html/group__sensortools.png and /dev/null differ diff --git a/extras/doc/html/group__sensortools_class_auto_map.js b/extras/doc/html/group__sensortools_class_auto_map.js deleted file mode 100644 index d558b6ac6..000000000 --- a/extras/doc/html/group__sensortools_class_auto_map.js +++ /dev/null @@ -1,9 +0,0 @@ -var group__sensortools_class_auto_map = -[ - [ "AutoMap", "group__sensortools.html#aec125f071bd83180ff0d0a71446725f3", null ], - [ "getMax", "group__sensortools.html#a4d27e5fe43f9b376b537def88ac74119", null ], - [ "getMin", "group__sensortools.html#acd1dae6e6ffb288efc1618e2453ad5ef", null ], - [ "getRange", "group__sensortools.html#a75c842b27ad3917be6d29e3d35b485f3", null ], - [ "next", "group__sensortools.html#a34bc821f4f662e54383dd9d61db782df", null ], - [ "operator()", "group__sensortools.html#afd49885d3f05ca0a2f417199a9e7cf10", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/group__sensortools_class_auto_range.js b/extras/doc/html/group__sensortools_class_auto_range.js deleted file mode 100644 index ecc88f5c9..000000000 --- a/extras/doc/html/group__sensortools_class_auto_range.js +++ /dev/null @@ -1,8 +0,0 @@ -var group__sensortools_class_auto_range = -[ - [ "AutoRange", "group__sensortools.html#a2f0638f4d8e2937080b67fc0614c8d6d", null ], - [ "getMax", "group__sensortools.html#a4d27e5fe43f9b376b537def88ac74119", null ], - [ "getMin", "group__sensortools.html#acd1dae6e6ffb288efc1618e2453ad5ef", null ], - [ "getRange", "group__sensortools.html#a75c842b27ad3917be6d29e3d35b485f3", null ], - [ "next", "group__sensortools.html#a788fca4c9f1e6699eb1990582015c0e3", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/group__sensortools_class_over_sample.js b/extras/doc/html/group__sensortools_class_over_sample.js deleted file mode 100644 index 479ad2af5..000000000 --- a/extras/doc/html/group__sensortools_class_over_sample.js +++ /dev/null @@ -1,4 +0,0 @@ -var group__sensortools_class_over_sample = -[ - [ "next", "group__sensortools.html#a413ca7de0dbf3d2afafd84aa75857442", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/group__sensortools_class_rolling_average.js b/extras/doc/html/group__sensortools_class_rolling_average.js deleted file mode 100644 index 82f0f1fcd..000000000 --- a/extras/doc/html/group__sensortools_class_rolling_average.js +++ /dev/null @@ -1,6 +0,0 @@ -var group__sensortools_class_rolling_average = -[ - [ "RollingAverage", "group__sensortools.html#a11cf7b9e1278648b1eb10e5534fe3e29", null ], - [ "add", "group__sensortools.html#a9c9f4083b726ed046c97a91535486317", null ], - [ "next", "group__sensortools.html#a23c4b93258faace0c7ee60eb395d2c4b", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/group__sensortools_class_rolling_stat.js b/extras/doc/html/group__sensortools_class_rolling_stat.js deleted file mode 100644 index 17d492971..000000000 --- a/extras/doc/html/group__sensortools_class_rolling_stat.js +++ /dev/null @@ -1,9 +0,0 @@ -var group__sensortools_class_rolling_stat = -[ - [ "RollingStat", "group__sensortools.html#a98c3f767391db80b8ad59ca53c1e6a94", null ], - [ "getMean", "group__sensortools.html#a8521a53cde7c5d28ac9c375aaee3a972", null ], - [ "getStandardDeviation", "group__sensortools.html#a234ab1d244e4b392056fcaa1fc1e4fc4", null ], - [ "getVariance", "group__sensortools.html#a3e7e5f706e3b5ac2496f14b7b639775d", null ], - [ "update", "group__sensortools.html#a6f7b384ab338da5ba10200fbce7f2eb0", null ], - [ "update", "group__sensortools.html#a85750e78ac282caec24408dce6e78201", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/group__soundtables.html b/extras/doc/html/group__soundtables.html deleted file mode 100644 index 525d3b0b5..000000000 --- a/extras/doc/html/group__soundtables.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - -Mozzi: Look-up-tables and python scripts to generate tables or convert sounds. - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Look-up-tables and python scripts to generate tables or convert sounds.
-
-
- -

Look-up-tables and python scripts to generate tables or convert sounds. -

-

Look-up-tables and python scripts to generate tables or convert sounds.

-

Includes ready-to-use wave tables and a few example samples which are in the Mozzi/tables and Mozzi/samples folders. You can convert your own sounds from a program like Audacity to tables for Mozzi with a script called char2mozzi.py, in Mozzi/python. Read the int8_t2mozzi.py file for instructions. Also check out the other scripts in the python folder for templates to use if you want to do your own thing.

-
-
- - - diff --git a/extras/doc/html/group__util.html b/extras/doc/html/group__util.html deleted file mode 100644 index 113415682..000000000 --- a/extras/doc/html/group__util.html +++ /dev/null @@ -1,247 +0,0 @@ - - - - - - - -Mozzi: Utility functions, and debugging - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
Utility functions, and debugging
-
-
- -

Utility functions. -More...

-

Detailed Description

-

Utility functions.

-

Includes functions for debugging and profiling high frequency code with an oscilloscope when serial is too slow, some miscellaneous functions used internally by Mozzi, python scripts for converting or generating sound tables, and assorted meta-programming utils.

- - - - - -

-Files

file  char2mozzi.py
 A script for converting raw 8 bit sound data files to wavetables for Mozzi.
 
- - - - - - - -

-Classes

struct  IntegerType< BYTES >
 Provides appropriate integer types that can bit the given number of bytes on this platform (at most 64). More...
 
struct  Int2Type< I >
 Enables you to instantiate a template based on an integer value. More...
 
- - - - - - - - - - - - - -

-Functions

-void setPin13Out ()
 Set digital pin 13 to output for testing timing with an oscilloscope.
 
-void setPin13High ()
 Set pin 13 high for testing timing with an oscilloscope.
 
-void setPin13Low ()
 Set pin 13 low for testing timing with an oscilloscope.
 
constexpr uint8_t trailingZerosConst (unsigned long v)
 Given a power of 2, work out the number to shift right by to do a divide by the number, or shift left to multiply. More...
 
-

Class Documentation

- -

◆ IntegerType

- -
-
- - - - -
struct IntegerType
-
-

template<uint8_t BYTES>
-struct IntegerType< BYTES >

- -

Provides appropriate integer types that can bit the given number of bytes on this platform (at most 64).

- -

Definition at line 20 of file IntegerType.h.

-
- - - - - -

Public Types

-typedef IntegerType<(BYTES< 8) ?(BYTES+1) :8 >::unsigned_type unsigned_type
 
-typedef IntegerType<(BYTES< 8) ?(BYTES+1) :8 >::signed_type signed_type
 
- -
-
- -

◆ Int2Type

- -
-
- - - - -
struct Int2Type
-
-

template<int I>
-struct Int2Type< I >

- -

Enables you to instantiate a template based on an integer value.

-

For example, this is used in StateVariable.h to choose a different next() function for each kind of filter, LOWPASS, BANDPASS, HIGHPASS or NOTCH, which are simple integer values 0,1,2,3 provided to the StateVariable template on instantiation. Fantastic! It's in C++11, but not yet available in avr-gcc. See "c++ enable_if"

- -

Definition at line 40 of file meta.h.

-
- - - -

Public Types

enum  { value - }
 
- -
-
-

Function Documentation

- -

◆ trailingZerosConst()

- -
-
- - - - - -
- - - - - - - - -
constexpr uint8_t trailingZerosConst (unsigned long v)
-
-constexpr
-
- -

Given a power of 2, work out the number to shift right by to do a divide by the number, or shift left to multiply.

-
Parameters
- - -
apower of 2, or any other number for that matter
-
-
-
Returns
the number of trailing zeros on the right hand end
- -

Definition at line 73 of file mozzi_utils.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/group__util.js b/extras/doc/html/group__util.js deleted file mode 100644 index 794d1c322..000000000 --- a/extras/doc/html/group__util.js +++ /dev/null @@ -1,13 +0,0 @@ -var group__util = -[ - [ "char2mozzi.py", "char2mozzi_8py.html", null ], - [ "IntegerType", "group__util.html#struct_integer_type", [ - [ "signed_type", "group__util.html#aaa3ae934adeb6283050b67466d9115fd", null ], - [ "unsigned_type", "group__util.html#a3cbf76c03272c875c8e7b172060726ef", null ] - ] ], - [ "Int2Type", "group__util.html#struct_int2_type", null ], - [ "setPin13High", "group__util.html#gaea7ee11e335eb2d6b891b886c5f3f942", null ], - [ "setPin13Low", "group__util.html#ga4c87d0211135fd33a8697350235b50b4", null ], - [ "setPin13Out", "group__util.html#gad1725ef17b234c4df9cc64a9bf561435", null ], - [ "trailingZerosConst", "group__util.html#ga886894a381e3569d040262831ca9292a", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/group__util_struct_integer_type.js b/extras/doc/html/group__util_struct_integer_type.js deleted file mode 100644 index de7a954b9..000000000 --- a/extras/doc/html/group__util_struct_integer_type.js +++ /dev/null @@ -1,5 +0,0 @@ -var group__util_struct_integer_type = -[ - [ "signed_type", "group__util.html#aaa3ae934adeb6283050b67466d9115fd", null ], - [ "unsigned_type", "group__util.html#a3cbf76c03272c875c8e7b172060726ef", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/hardware.html b/extras/doc/html/hardware.html deleted file mode 100644 index 4e0891627..000000000 --- a/extras/doc/html/hardware.html +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - - -Mozzi: Hardware and configuration - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- - - - - diff --git a/extras/doc/html/hardware.js b/extras/doc/html/hardware.js deleted file mode 100644 index 616239e2a..000000000 --- a/extras/doc/html/hardware.js +++ /dev/null @@ -1,75 +0,0 @@ -var hardware = -[ - [ "Platform specific audio resolution", "group__audio__output.html#audio_shifting", null ], - [ "Configuring Mozzi", "group__config.html#config_general", null ], - [ "Mozzi on classic Arduino, Teensy 2.x, Arduino Mega, and other 8 bit \"AVR\"/ATMEGA architecture boards", "hardware_avr.html", [ - [ "Port status and notes", "hardware_avr.html#avr_status", null ], - [ "Output modes", "hardware_avr.html#avr_output", null ], - [ "MOZZI_OUTPUT_PWM", "hardware_avr.html#avr_pwm", null ], - [ "MOZZI_OUTPUT_2PIN_PWM", "hardware_avr.html#avr_2pin_pwm", null ], - [ "MOZZI_OUTPUT_EXTERNAL_TIMED and MOZZI_OUTPUT_EXTERNAL_CUSTOM", "hardware_avr.html#avr_external", null ] - ] ], - [ "Mozzi on ESP32-based boards.", "hardware_esp32.html", [ - [ "Port status and notes", "hardware_esp32.html#esp32_status", null ], - [ "Output modes", "hardware_esp32.html#esp32_output", null ], - [ "MOZZI_OUTPUT_INTERNAL_DAC", "hardware_esp32.html#esp32_internal_dac", null ], - [ "MOZZI_OUTPUT_I2S_DAC", "hardware_esp32.html#esp32_i2s_dac", null ], - [ "MOZZI_OUTPUT_PDM_VIA_I2S", "hardware_esp32.html#esp32_pdm_via_i2s", null ], - [ "MOZZI_OUTPUT_EXTERNAL_TIMED and MOZZI_OUTPUT_EXTERNAL_CUSTOM", "hardware_esp32.html#esp32_external", null ] - ] ], - [ "Mozzi on ESP8266-based boards.", "hardware_esp8266.html", [ - [ "Port status and notes", "hardware_esp8266.html#esp8266_status", null ], - [ "Output modes", "hardware_esp8266.html#esp8266_output", null ], - [ "MOZZI_OUTPUT_PDM_VIA_SERIAL", "hardware_esp8266.html#esp8266_pdm_via_serial", null ], - [ "MOZZI_OUTPUT_I2S_DAC", "hardware_esp8266.html#esp8266_i2s_dac", null ], - [ "MOZZI_OUTPUT_EXTERNAL_TIMED and MOZZI_OUTPUT_EXTERNAL_CUSTOM", "hardware_esp8266.html#esp8266_external", null ] - ] ], - [ "Mozzi on MBED-based boards (Arduino Giga / Portenta).", "hardware_mbed.html", [ - [ "Port status and notes", "hardware_mbed.html#mbed_status", null ], - [ "Output modes", "hardware_mbed.html#mbed_output", null ], - [ "MOZZI_OUTPUT_INTERNAL_DAC", "hardware_mbed.html#mbed_internal_dac", null ], - [ "MOZZI_PDM_VIA_SERIAL", "hardware_mbed.html#mbed_pdm_via_serial", null ], - [ "MOZZI_OUTPUT_EXTERNAL_TIMED and MOZZI_OUTPUT_EXTERNAL_CUSTOM", "hardware_mbed.html#mbed_external", null ] - ] ], - [ "Mozzi on Arduino Uno R4 - Renesas.", "hardware_renesas.html", [ - [ "Port status and notes", "hardware_renesas.html#renesas_status", null ], - [ "Output modes", "hardware_renesas.html#rensesas_output", null ], - [ "MOZZI_OUTPUT_INTERNAL_DAC", "hardware_renesas.html#renesas_internal_dac", null ], - [ "MOZZI_OUTPUT_EXTERNAL_TIMED and MOZZI_OUTPUT_EXTERNAL_CUSTOM", "hardware_renesas.html#renesas_external", null ] - ] ], - [ "Mozzi on RP2040 (Raspberry Pi Pico)", "hardware_rp2040.html", [ - [ "Port status and notes", "hardware_rp2040.html#rp2040_status", null ], - [ "Output modes", "hardware_rp2040.html#rp2040_output", null ], - [ "MOZZI_OUTPUT_PWM", "hardware_rp2040.html#rp2040_pwm", null ], - [ "MOZZI_OUTPUT_I2S_DAC", "hardware_rp2040.html#rp2040_i2s_dac", null ], - [ "MOZZI_OUTPUT_EXTERNAL_TIMED and MOZZI_OUTPUT_EXTERNAL_CUSTOM", "hardware_rp2040.html#rp2040_external", null ] - ] ], - [ "Mozzi on SAMD21 based boards (Arduino Circuitplayground M0 and others)", "hardware_samd.html", [ - [ "Port status and notes", "hardware_samd.html#samd_status", null ] - ] ], - [ "Mozzi on STM32duino-based boards.", "hardware_stm32duino.html", [ - [ "Port status and usage notes", "hardware_stm32duino.html#stm32duino_status", null ], - [ "Output modes", "hardware_stm32duino.html#stm32duino_output_modes", null ], - [ "MOZZI_OUTPUT_PWM", "hardware_stm32duino.html#stm32duino_pwm", null ], - [ "MOZZI_OUTPUT_EXTERNAL_TIMED and MOZZI_OUTPUT_EXTERNAL_CUSTOM", "hardware_stm32duino.html#stm32duino_external", null ] - ] ], - [ "Mozzi on STM32-boards with libmaple based core.", "hardware_stm32_maple.html", [ - [ "Status and peculiarities of this port", "hardware_stm32_maple.html#stm32_maple_status", null ], - [ "Output modes", "hardware_stm32_maple.html#stm32_output_modes", null ], - [ "MOZZI_OUTPUT_PWM", "hardware_stm32_maple.html#stm32_maple_pwm", null ], - [ "MOZZI_OUTPUT_2PIN_PWM", "hardware_stm32_maple.html#stm32_maple_2pin_pwm", null ], - [ "MOZZI_OUTPUT_EXTERNAL_TIMED and MOZZI_OUTPUT_EXTERNAL_CUSTOM", "hardware_stm32_maple.html#stm32_maple_external", null ] - ] ], - [ "Mozzi on STM32-based boards - disambiguation", "hardware_stm32_disambiguation.html", null ], - [ "Mozzi on Teensy 3.0/3.1/3.2/3.4/3.5/LC boards.", "hardware_teensy3.html", [ - [ "Port status and ussage notes", "hardware_teensy3.html#teensy3_status", null ], - [ "Output modes", "hardware_teensy3.html#teensy3_output", null ], - [ "MOZZI_OUTPUT_INTERNAL_DAC", "hardware_teensy3.html#teensy3_internal_dac", null ], - [ "MOZZI_OUTPUT_EXTERNAL_TIMED and MOZZI_OUTPUT_EXTERNAL_CUSTOM", "hardware_teensy3.html#teensy3_external", null ] - ] ], - [ "Mozzi on Teensy 4.x boards.", "hardware_teensy4.html", [ - [ "Port status and ussage notes", "hardware_teensy4.html#teensy4_status", null ], - [ "MOZZI_OUTPUT_PWM", "hardware_teensy4.html#teensy4_pwm", null ], - [ "MOZZI_OUTPUT_EXTERNAL_TIMED and MOZZI_OUTPUT_EXTERNAL_CUSTOM", "hardware_teensy4.html#teensy4_external", null ] - ] ] -]; \ No newline at end of file diff --git a/extras/doc/html/hardware__defines_8h_source.html b/extras/doc/html/hardware__defines_8h_source.html deleted file mode 100644 index bb130c1db..000000000 --- a/extras/doc/html/hardware__defines_8h_source.html +++ /dev/null @@ -1,237 +0,0 @@ - - - - - - - -Mozzi: hardware_defines.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
hardware_defines.h
-
-
-
1 /*
-
2  * hardware_defines.h.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2023-2024 Thomas Friedrichsmeier and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 
-
13 #ifndef HARDWARE_DEFINES_H_
-
14 #define HARDWARE_DEFINES_H_
-
15 
-
16 #include "Arduino.h"
-
17 
-
18 /* Macros to tell apart the supported platforms. The advantages of using these are, rather than the underlying defines
-
19 - Easier to read and write
-
20 - Compiler protection against typos
-
21 - Easy to extend for new but compatible boards */
-
22 
-
23 // "Classic" Arduino boards
-
24 #if (defined(__AVR__))
-
25 #define IS_AVR() 1
-
26 #else
-
27 #define IS_AVR() 0
-
28 #endif
-
29 
-
30 // SAMD
-
31 #if (defined(ARDUINO_ARCH_SAMD))
-
32 #define IS_SAMD21() 1
-
33 #else
-
34 #define IS_SAMD21() 0
-
35 #endif
-
36 
-
37 // 32bit arm-based Teensy
-
38 #if (defined(__MK20DX128__) || defined(__MK20DX256__) || defined(__MK64FX512__) || defined(__MK66FX1M0__) || defined(__MKL26Z64__))
-
39 #define IS_TEENSY3() 1
-
40 #else
-
41 #define IS_TEENSY3() 0
-
42 #endif
-
43 
-
44 // Teensy4 (no DAC)
-
45 #if (defined(__IMXRT1062__))
-
46 #define IS_TEENSY4() 1
-
47 #else
-
48 #define IS_TEENSY4() 0
-
49 #endif
-
50 
-
51 // RP2040 (Raspberry Pi Pico and friends)
-
52 #if (defined(ARDUINO_ARCH_RP2040))
-
53 #define IS_RP2040() 1
-
54 #else
-
55 #define IS_RP2040() 0
-
56 #endif
-
57 
-
58 // STM32 boards (libmaple based)
-
59 // https://github.com/stevstrong/Arduino_STM32
-
60 #if (defined(__arm__) && !IS_TEENSY3() && !IS_TEENSY4() && __has_include("libmaple/libmaple.h"))
-
61 #define IS_STM32MAPLE() 1
-
62 #else
-
63 #define IS_STM32MAPLE() 0
-
64 #endif
-
65 
-
66 // Mbed OS based boards
-
67 #if (defined(ARDUINO_ARCH_MBED))
-
68 #define IS_MBED() 1
-
69 #else
-
70 #define IS_MBED() 0
-
71 #endif
-
72 
-
73 // Arduino Giga
-
74 #if (IS_MBED() && defined(ARDUINO_GIGA))
-
75 #define IS_GIGA() 1
-
76 #else
-
77 #define IS_GIGA() 0
-
78 #endif
-
79 
-
80 // Arduino Uno R4 (Renesas arch)
-
81 #if (defined(ARDUINO_FSP))
-
82 #define IS_RENESAS() 1
-
83 #else
-
84 #define IS_RENESAS() 0
-
85 #endif
-
86 
-
87 #if (defined(__arm__) && !IS_STM32MAPLE() && !IS_TEENSY3() && !IS_TEENSY4() && !IS_RP2040() && !IS_SAMD21() && !IS_MBED() && !IS_RENESAS())
-
88 #define IS_STM32DUINO() 1
-
89 #else
-
90 #define IS_STM32DUINO() 0
-
91 #endif
-
92 
-
93 #if (defined(ESP8266))
-
94 #define IS_ESP8266() 1
-
95 #else
-
96 #define IS_ESP8266() 0
-
97 #endif
-
98 
-
99 #if (defined(ESP32))
-
100 #define IS_ESP32() 1
-
101 #else
-
102 #define IS_ESP32() 0
-
103 #endif
-
104 
-
105 #if !(IS_AVR() || IS_TEENSY3() || IS_TEENSY4() || IS_STM32MAPLE() || IS_STM32DUINO() || IS_ESP8266() || IS_SAMD21() || IS_ESP32() || IS_RP2040() || IS_MBED() || IS_RENESAS())
-
106 // TODO: add an exception for MOZZI_OUTPUT_EXTERNAL_CUSTOM
-
107 #error Your hardware is not supported by Mozzi or not recognized. Edit hardware_defines.h to proceed.
-
108 #endif
-
109 
-
110 // Hardware detail defines
-
111 #if IS_STM32MAPLE()
-
112 #define NUM_ANALOG_INPUTS 16 // probably wrong, but mostly needed to allocate an array of readings
-
113 #elif IS_ESP8266()
-
114 #define NUM_ANALOG_INPUTS 1
-
115 #endif
-
116 
-
117 #if IS_ESP8266() || IS_ESP32()
-
118 #define CACHED_FUNCTION_ATTR IRAM_ATTR
-
119 #else
-
120 #define CACHED_FUNCTION_ATTR
-
121 #endif
-
122 
-
123 #if IS_STM32MAPLE()
-
124 // This is a little silly, but with Arduino 1.8.13, including this header inside MozziGuts.cpp does not work (fails to detect the proper include path).
-
125 // Putting it here, instead, seem to work.
-
126 #include <STM32ADC.h>
-
127 #endif
-
128 
-
129 #endif /* HARDWARE_DEFINES_H_ */
-
-
- - - diff --git a/extras/doc/html/hardware_avr.html b/extras/doc/html/hardware_avr.html deleted file mode 100644 index d40910cc0..000000000 --- a/extras/doc/html/hardware_avr.html +++ /dev/null @@ -1,156 +0,0 @@ - - - - - - - -Mozzi: Mozzi on classic Arduino, Teensy 2.x, Arduino Mega, and other 8 bit "AVR"/ATMEGA architecture boards - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Mozzi on classic Arduino, Teensy 2.x, Arduino Mega, and other 8 bit "AVR"/ATMEGA architecture boards
-
-
-

-Port status and notes

-

This is the original "port" of Mozzi, and thus very elaborate. The main challenges on this platform, compared to other MCUs, are limitations in flash, RAM, and CPU power.

-

-Output modes

-

The following audio modes (see MOZZI_AUDIO_MODE) are currently supported on this hardware:

    -
  • MOZZI_OUTPUT_PWM
  • -
  • MOZZI_OUTPUT_2PIN_PWM
  • -
  • MOZZI_OUTPUT_EXTERNAL_TIMED
  • -
  • MOZZI_OUTPUT_EXTERNAL_CUSTOM
  • -
-

In all modes, except MOZZI_OUTPUT_EXTERNAL_CUSTOM, Timer 1 is claimed, and is not available for any other purpose. This means, among other things, that pins 9 and 10 cannot be used for analogWrite(), while pins 3 and 11 should still be available except in MOZZI_OUTPUT_2PIN_PWM mode (as Timer2 is also claimed, then; for definite info on which pin is connected to which timer, check a suitable reference, as your board may differ). See Mozzi>examples>11.Communication>Sinewave_PWM_pins_HIFI. for an example of emulating analogWrite() on any digital pin, without the need for a hardware timer.

-

-MOZZI_OUTPUT_PWM

-

For MOZZI_OUTPUT_PWM, output is restricted to pins that are hardware-attached to Timer 1, but can be configured within this tight limit. In particular, the default setup on the Arduino UNO is:

    -
  • Mono: Pin 9 -> configurable using MOZZI_AUDIO_PIN_1
  • -
  • Stereo: Pin 9 (left) and Pin 10 (right) -> configurable using MOZZI_AUDIO_PIN_1 and MOZZI_AUDIO_PIN_2 For pinouts on other boards, refer to config/known_16bit_timers.
  • -
-

Rate of the PWM output can be controlled separately from MOZZI_AUDIO_RATE: MOZZI_PWM_RATE.

-

The available sample resolution is 488, i.e. almost 9 bits, providing some headroom above the 8 bit table resolution currently used by the oscillators. You can look at the TimerOne library for more info about how interrupt rate and pwm resolution relate.

-

-MOZZI_OUTPUT_2PIN_PWM

-

In this mode, output is split across two pins (again, both connected to Timer 1), with each outputting 7 bits for a total of 14. This allows for much better dynamic range, providing much more definition than can be achieved using MOZZI_OUTPUT_PWM , while using only modestly more processing power. Further, it allows for a much higher PWM carrier rate can be much higher (125 kHz by default; see MOZZI_PWM_RATE), which is well beyond the audible range.

-

On the downside, this mode requires an extra hardware timer (Timer2 in addition to Timer1), which may increase compatibility problems with other Arduino libraries that also require a timer. Further, a more elaborate hardware setup is needed, making it less convenient for rapid prototyping. For circuit details, see https://sensorium.github.io/Mozzi/learn/output/ .

-

On the classic Arduino Uno, the default pinout in this mode is:

    -
  • Pin 9 (high bits) and Pin 10 (low bits) -> configurable using MOZZI_AUDIO_PIN_1 and MOZZI_AUDIO_PIN_1_LOW
  • -
-

Here is table of the default pins on some other boards. Rows with an x on it have actually been tested (and importantly, the outcome recoreded; input welcome on further boards.)

-

resistor.....3.9k......499k
-x................9..........10...............Arduino Uno
-x................9..........10...............Arduino Duemilanove
-x................9..........10...............Arduino Nano
-x................9..........10...............Arduino Leonardo
-x................9..........10...............Ardweeny
-x................9..........10...............Boarduino
-x...............11.........12...............Freetronics EtherMega
-.................11.........12...............Arduino Mega
-.................14.........15...............Teensy
-.............B5(14)...B6(15)...........Teensy2
-x...........B5(25)...B6(26)...........Teensy2++
-.................13.........12...............Sanguino
- For pinouts on other AVR boards, config/known_16bit_timers might contain some hints.

-

Rate of the PWM output can be controlled separately from MOZZI_AUDIO_RATE, and is much higher (125kHz), by default: MOZZI_PWM_RATE.

-

The default sample resolution is 7 bits per pin, for a total of 14 bits. This can be configured within hardware limits (MOZZI_PWM_RATE) using MOZZI_AUDIO_BITS_PER_CHANNEL, but beware that increasing this will require even more accuracy in our output resistors (see the linked documentation, above).

-

-MOZZI_OUTPUT_EXTERNAL_TIMED and MOZZI_OUTPUT_EXTERNAL_CUSTOM

-

See External audio output

-
-
-
- - - diff --git a/extras/doc/html/hardware_esp32.html b/extras/doc/html/hardware_esp32.html deleted file mode 100644 index d1f641c8a..000000000 --- a/extras/doc/html/hardware_esp32.html +++ /dev/null @@ -1,151 +0,0 @@ - - - - - - - -Mozzi: Mozzi on ESP32-based boards. - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Mozzi on ESP32-based boards.
-
-
-

port by Dieter Vandoren and Thomas Friedrichsmeier

-

-Port status and notes

-
    -
  • Since flash memory is not built into the ESP32, but connected, externally, it is much too slow for keeping wave tables, audio samples, etc. Instead, these are kept in RAM on this platform.
  • -
  • Asynchronous analog reads are not implemented. mozziAnalogRead() relays to analogRead(). MOZZI_AUDIO_INPUT is not implemented
  • -
  • twi_nonblock is not ported
  • -
  • WIFI-activity not yet tested, but likely the same notes as for ESP8266 apply, i.e. any Wifi activity is likely to introdcue considerable nose. Consider turning off WIFI.
  • -
  • The implementation of audioTicks() may be slightly inaccurate on this platform.
  • -
-

-Output modes

-

The following audio modes (see MOZZI_AUDIO_MODE) are currently supported on this hardware:

    -
  • MOZZI_OUTPUT_EXTERNAL_TIMED
  • -
  • MOZZI_OUTPUT_EXTERNAL_CUSTOM
  • -
  • MOZZI_OUTPUT_PDM_VIA_I2S
  • -
  • MOZZI_OUTPUT_I2S_DAC
  • -
  • MOZZI_OUTPUT_INTERNAL_DAC
  • -
-

The default mode is MOZZI_OUTPUT_INTERNAL_DAC .

-

-MOZZI_OUTPUT_INTERNAL_DAC

-

The internal DAC has 8 bit resolution, and outputs to GPIO pins 25 and 26 (non-configurable). For simplicity of code, both pins are always used. In a mono configuration, both pins output the same sample.

-

TODO: We could really use this to hack in a 2 PIN mode!

-
Note
The number 25 refers to "GPIO 25" or sometimes labelled "D25". Confusingly, many boards come with an additional, totally different numbering scheme on top of that. Check a detailed pinout diagram, if in any doubt.
-

Internally, the inbuilt DAC is connected via an I2S interface. Which interface number to use can be configured using:

-
#define MOZZI_I2S_PORT ... // (default: I2S_NUM_0)
-

-MOZZI_OUTPUT_I2S_DAC

-

This mode outputs to a PT8211 (or compatible) I2S DAC, which allows for very high quality (mono or stereo) output. Communication needs the BCK, WS, and DATA(out) pins of one I2S interface. Presumably, any pins qualify, and you can configure this using:

#define MOZZI_I2S_PIN_BCK ... // (default: 26)
-
#define MOZZI_I2S_PIN_WS ... // (default: 15)
-
#define MOZZI_I2S_PIN_DATA ... // (default: 33)
-
#define MOZZI_I2S_PORT ... // (default: I2S_NUM_0)
-

See the note above (esp_internal_dac) regarding pin numbering. Also, please always test the default pinout, should a custom setting fail!

-

As a technical note, I2S support in the ESP32 SDK has been reworked since this was implemented in Mozzi, and Mozzi uses the "legacy" implementation "i2s.h". This should not be an issue, unless you want to connect additional I2S components, yourself. In which case contributions are certainly welcome!

-

-MOZZI_OUTPUT_PDM_VIA_I2S

-

This mode uses the same setup as MOZZI_OUTPUT_I2S_DAC, but rather than using an external DAC, the communication signal itself is modulated in PDM (pulse density modulation) encoded form. Thus not extra hardware is needed, and the signal is output on the DATA pin (see above). The BCK and WS pins are also claimed, but should be left non-connected, and do not produce anything meaningful. This can only be used in mono mode.

-

Output resolution may be adjusted by defining MOZZI_PDM_RESOLUTION , where the default value of 4 means that each audio sample is encoded into four 32 bit blocks of ones and zeros. Obviously, more is potentially better, but at the cost of considerable computation power.

-

-MOZZI_OUTPUT_EXTERNAL_TIMED and MOZZI_OUTPUT_EXTERNAL_CUSTOM

-

See External audio output

-
-
-
- - - diff --git a/extras/doc/html/hardware_esp8266.html b/extras/doc/html/hardware_esp8266.html deleted file mode 100644 index 952c0dade..000000000 --- a/extras/doc/html/hardware_esp8266.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - - - - -Mozzi: Mozzi on ESP8266-based boards. - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Mozzi on ESP8266-based boards.
-
-
-

port by Thomas Friedrichsmeier

-

-Port status and notes

-
    -
  • Since flash memory is not built into the ESP8266, but connected, externally, it is much too slow for keeping wave tables, audio samples, etc. Instead, these are kept in RAM on this platform.
  • -
  • Asynchronous analog reads are not implemented. mozziAnalogRead() relays to analogRead(). MOZZI_AUDIO_INPUT is not available
  • -
  • twi_nonblock is not ported
  • -
  • Note that the ESP8266 pins can output less current than the other supported CPUs. The maximum is 12mA, with a recommendation to stay below 6mA.
      -
    • WHEN CONNECTING A HEADPHONE, DIRECTLY, USE APPROPRIATE CURRENT LIMITING RESISTORS (>= 500Ohms).
    • -
    -
  • -
  • Any WiFi-activity can cause severe spikes in power consumption. This can cause audible "ticking" artifacts, long before any other symptoms.
      -
    • If you do not require WiFi in your sketch, you should turn it off, explicitly, using
      WiFi.mode(WIFI_OFF)
      -
      .
    • -
    -
  • -
  • A juicy enough, well regulated power supply, and a stabilizing capacitor between VCC and Gnd can help a lot.
  • -
  • As the (PDM) output signal is digital, a single (fast!) transistor can be used to amplify it to an independent voltage level.
  • -
  • audioHook() calls yield() once for every audio sample generated. Thus, as long as your audio output buffer does not run empty, you should not need any additional yield()s inside loop().
  • -
-

-Output modes

-

The following audio modes (see MOZZI_AUDIO_MODE) are currently supported on this hardware:

    -
  • MOZZI_OUTPUT_EXTERNAL_TIMED
  • -
  • MOZZI_OUTPUT_EXTERNAL_CUSTOM
  • -
  • MOZZI_OUTPUT_PDM_VIA_I2S
  • -
  • MOZZI_OUTPUT_PDM_VIA_SERIAL
  • -
  • MOZZI_OUTPUT_I2S_DAC
  • -
-

The default mode is MOZZI_OUTPUT_PDM_VIA_SERIAL .

-
Note
This port really does not currently come with a PWM mode!
-

-MOZZI_OUTPUT_PDM_VIA_SERIAL

-

Output is coded using pulse density modulation, and sent via GPIO2 (Serial1 TX).

    -
  • This output mode uses timer1 for queuing audio sample, so that timer is not available for other uses.
  • -
  • Note that this mode has slightly lower effective analog output range than esp8266_pdm_via_i2s, due to start/stop bits being added to the output stream.
  • -
  • Supports mono output, only, pins not configurable.
  • -
-

The option MOZZI_PDM_RESOLTUON (default value 2, corresponding to 64 ones and zeros per audio sample) can be used to adjust the output resolution. Obviously higher values demand more computation power.

-

-MOZZI_OUTPUT_PDM_VIA_SERIAL

-

Output is coded using pulse density modulation, and sent via the I2S pins. The I2S data out pin (GPIO3, which is also "RX") will have the output, but all I2S output pins (RX, GPIO2 and GPIO15) will be affected. Mozzi tries to set GPIO2 and GPIO15 to input mode, and at the time of this writing, this allows I2S output on RX even on boards such as the ESP01 (where GPIO15 is tied to Ground). However, it seems safest to assume that this mode may not be useable on boards where GPIO2 or GPIO15 are not available as output pins.

-

Supports mono output, only, pins not configurable.

-

Resolution may be controlled using MOZZI_PDM_RESOLUTION (see above; default value is 2).

-

-MOZZI_OUTPUT_I2S_DAC

-

Output is sent to an external DAC (such as a PT8211), digitally coded. This is the only mode that supports stereo (MOZZI_AUDIO_CHANNELS). It also needs the least processing power. The pins cannot be configured (GPIO3/RX, GPIO2, and GPIO15).

-

-MOZZI_OUTPUT_EXTERNAL_TIMED and MOZZI_OUTPUT_EXTERNAL_CUSTOM

-

See External audio output

-
-
-
- - - diff --git a/extras/doc/html/hardware_mbed.html b/extras/doc/html/hardware_mbed.html deleted file mode 100644 index 8c19c68dc..000000000 --- a/extras/doc/html/hardware_mbed.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - - -Mozzi: Mozzi on MBED-based boards (Arduino Giga / Portenta). - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Mozzi on MBED-based boards (Arduino Giga / Portenta).
-
-
-

port by Thomas Friedrichsmeier & Thomas Combriat

-

-Port status and notes

-

Compiles and runs using Arduino's standard and Arduino_AdvancedAnalog libraries. This port is still experimental, testing reveals some instabilities for some configurations (in particular with MOZZI_AUDIO_INPUT) that are under active investigations.

-

This port is not complete yet, in particular:

    -
  • Asynchroneous analog reads are not implemented (yet), mozziAnalogRead() relays to analogRead(). (Note that MOZZI_AUDIO_INPUT is implemented!)
  • -
  • This port should support other MBED based Arduino boards like the Arduino Portenta, in theory, but the developer have only tested it on the Giga. Feedback welcome!
  • -
-

-Output modes

-

The following audio modes (see MOZZI_AUDIO_MODE) are currently supported on this hardware:

    -
  • MOZZI_OUTPUT_EXTERNAL_TIMED
  • -
  • MOZZI_OUTPUT_EXTERNAL_CUSTOM
  • -
  • MOZZI_OUTPUT_PDM_VIA_SERIAL
  • -
  • MOZZI_OUTPUT_INTERNAL_DAC
  • -
-

The default mode is MOZZI_OUTPUT_INTERNAL_DAC .

-

-MOZZI_OUTPUT_INTERNAL_DAC

-

This uses the inbuild DAC on the board. The default is setting is appropriate for the Arduino Giga: 12 bits going to A13 (3.5mm jack connector's tip), and in stereo mode to pin A12 (3.5mm jack connector's first ring) additionally.

-

For other boards is may be appropriate to customize:

#define MOZZI_AUDIO_PIN_1 ... // mono / left channel; default: A13
-
#define MOZZI_AUDIO_PIN_2 ... // stereo only: right channel; default: A12
-
#define MOZZI_AUDIO_BITS ... // default is 12
-

-MOZZI_PDM_VIA_SERIAL

-

Returns a pulse-density modulated (mono only) signal on one of the hardware UARTs of the board (Serial ports). Default is using the SERIAL2, on pin D18. You can confiugre the pins to use, but it must be connected to a hardware UART. Output is written to the TX pin, only, but the RX pin needs to be claimed as well. Beware of confusing pinout labelling, for instance SERIAL2_TX iss labelled "TX1" on the Arduino Giga. The audio resolution can be enhanced using MOZZI_PDM_RESOLUTION, which is described in more detail here: @esp32_pdm_via_i2s .

-

Configuration options:

#define MOZZI_SERIAL_PIN_TX ... // default: SERIAL2_TX
-
#define MOZZI_SERIAL_PIN_RX ... // *must* specify the matching one, if customizing the above; default: SERIAL2_RX
-
#define MOZZI_PDM_RESOLUTION ... // default value is 2, for 2*32 ones and zeros per audio sample
-

-MOZZI_OUTPUT_EXTERNAL_TIMED and MOZZI_OUTPUT_EXTERNAL_CUSTOM

-

See External audio output

-
-
-
- - - diff --git a/extras/doc/html/hardware_renesas.html b/extras/doc/html/hardware_renesas.html deleted file mode 100644 index 662080b3b..000000000 --- a/extras/doc/html/hardware_renesas.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - - -Mozzi: Mozzi on Arduino Uno R4 - Renesas. - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Mozzi on Arduino Uno R4 - Renesas.
-
-
-

port by Thomas Combriat

-

-Port status and notes

-

Compiles and runs using Arduino's standard library (Renesas 0.8.7 at the time of this writing).

-

A few particularities:

    -
  • Because this board has an on-board DAC (A0), but only one, STEREO is not implemented and Mozzi uses this pin. Usage of other pins using PWM for instance is not implemented yet.
  • -
  • getAudioInput() and mozziAnalogRead() return values in the Renesas' full ADC resolution of 0-16384 rather than AVR's 0-1023. This might change in the near future for speed purposes.
  • -
-

-Output modes

-

The following audio modes (see MOZZI_AUDIO_MODE) are currently supported on this hardware:

    -
  • MOZZI_OUTPUT_EXTERNAL_TIMED
  • -
  • MOZZI_OUTPUT_EXTERNAL_CUSTOM
  • -
  • MOZZI_OUTPUT_INTERNAL_DAC
  • -
-

The default mode is MOZZI_OUTPUT_INTERNAL_DAC. Further modes may be added in the future.

-

-MOZZI_OUTPUT_INTERNAL_DAC

-

This uses the inbuild DAC on the board on pin A0. Mono output only, and the pin is not configurable. Audio resolution is also fixed at 12 bits (which is what the board supports).

-

This mode claims two timers (but it is not hardcoded, which ones).

-

-MOZZI_OUTPUT_EXTERNAL_TIMED and MOZZI_OUTPUT_EXTERNAL_CUSTOM

-

MOZZI_OUTPUT_EXTERNAL_TIMED claimes one timer, MOZZI_OUTPUT_EXTERNAL_CUSTOM does not claim any timer. See External audio output

-
-
-
- - - diff --git a/extras/doc/html/hardware_rp2040.html b/extras/doc/html/hardware_rp2040.html deleted file mode 100644 index 20bacd00c..000000000 --- a/extras/doc/html/hardware_rp2040.html +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - - -Mozzi: Mozzi on RP2040 (Raspberry Pi Pico) - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Mozzi on RP2040 (Raspberry Pi Pico)
-
-
-

port by Thomas Friedrichsmeier

-

-Port status and notes

-

Compiles and runs using this core. Can probably be ported to the Mbed core for RP2040, relatively easily, as it relies mostly on the RP2040 SDK API. Tested on a Pi Pico.

-
    -
  • This is a recent addition, implementation details may still change (currently just PWM driven by a timer; this may be worth changing to a DMA driven output)
  • -
  • Wavetables and samples are not kept in progmem on this platform. While apparently speed (of the external flash) is not much of an issue, the data always seems to be copied into RAM, anyway.
  • -
  • Note that getAudioInput() and mozziAnalogRead() return values in the RP2040's full ADC resolution of 0-4095 rather than AVR's 0-1023.
  • -
  • twi_nonblock is not ported
  • -
  • Code uses only one CPU core
  • -
-

-Output modes

-

The following audio modes (see MOZZI_AUDIO_MODE) are currently supported on this hardware:

    -
  • MOZZI_OUTPUT_EXTERNAL_TIMED
  • -
  • MOZZI_OUTPUT_EXTERNAL_CUSTOM
  • -
  • MOZZI_OUTPUT_PWM
  • -
  • MOZZI_OUTPUT_I2S_DAC
  • -
-

The default mode is MOZZI_OUTPUT_PWM .

-

-MOZZI_OUTPUT_PWM

-

Audio output is written to pin 0 (mono) or 0 and 1 (stereo), by default, with 11 bits of ouput resolution. One hardware timer interrupt and one DMA channel are claimed (number not hardcoded), a non-exclusive handler is installed on DMA_IRQ_0.

-

Configuration options:

#define MOZZI_AUDIO_PIN_1 ... // default is 0
-
#define MOZZI_AUDIO_BITS ... // output resolution (bits); default is 11
-
// additionally, for stereo:
-
#define MOZZI_AUDIO_PIN_2 ... // default is 1; this must be on the same PWM slice as the first pin (i.e. neighboring)
-

-MOZZI_OUTPUT_I2S_DAC

-

Output to an external DAC, connected via I2S. This uses 16 bit (per audio channel), but can be changed to 8, 16, 24 (left aligned) and 32 resolution. Both plain I2S and LSBJ format (PT8211 needs this, for instance) are available. Plain format is used by default. The GPIO pins to use can be configured,

    -
  • almost - freely (see below). Two DMA channels are claimed (numbers not hardcoded), non-exclusive handlers are installed on DMA_IRQ_0.
  • -
-

Configuration options:

#define MOZZI_AUDIO_BITS ... // available values are 8, 16 (default), 24 (LEFT ALIGN in 32 bits type!!) and 32 bits
-
#define MOZZI_I2S_PIN_BCK ... // /BLCK) default is 20
-
//#define MOZZI_I2S_PIN_WS (MOZZI_I2S_PIN_BCK+1) ... // CANNOT BE CHANGED, HAS TO BE NEXT TO pBCLK, i.e. default is 21
-
#define MOZZI_I2S_PIN_DATA ... // (DOUT) default is 22
-
#define MOZZI_I2S_FORMAT ... // may be MOZZI_I2S_FORMAT_LSBJ or MOZZI_I2S_FORMAT_PLAIN (default)
-
Note
The MOZZI_I2S_FORMAT_LSBJ option may require a relatively recent git-hub checkout of the arduino-pico core.
-

-MOZZI_OUTPUT_EXTERNAL_TIMED and MOZZI_OUTPUT_EXTERNAL_CUSTOM

-

See External audio output

-
-
-
- - - diff --git a/extras/doc/html/hardware_samd.html b/extras/doc/html/hardware_samd.html deleted file mode 100644 index 81c0dfd9a..000000000 --- a/extras/doc/html/hardware_samd.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - -Mozzi: Mozzi on SAMD21 based boards (Arduino Circuitplayground M0 and others) - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Mozzi on SAMD21 based boards (Arduino Circuitplayground M0 and others)
-
-
-

port by Adrian Freed

-

-Port status and notes

-
    -
  • -
-
-
-
- - - diff --git a/extras/doc/html/hardware_stm32_disambiguation.html b/extras/doc/html/hardware_stm32_disambiguation.html deleted file mode 100644 index d6c4bbdf6..000000000 --- a/extras/doc/html/hardware_stm32_disambiguation.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - -Mozzi: Mozzi on STM32-based boards - disambiguation - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Mozzi on STM32-based boards - disambiguation
-
-
-
    -
  • The situation on STM32-based boards is rather confusing, as there are several competing Arduino cores. Importantly:
      -
    • Some boards use dedicated cores (e.g. Arduino Giga / Portenta Mozzi on MBED-based boards (Arduino Giga / Portenta).) etc. For those, see the relevant sections (if we support them).
    • -
    • There is a series of libmaple-based cores, including Roger Clark's libmaple-based core. These are highly optimized, and provide very complete support, but only for a limited number of boards. Unfortunately, at the time of this writing (2023/04), they are not available for installation via the Arduino Board Manager, and they do not currently seem actively maintained. For using these with Mozzi, see Mozzi on STM32-boards with libmaple based core.
    • -
    • A generic Arduino core for STM32 is the STM32duino core. It supports a huge set of boards, and seems to have offical backing by STM, but some features of the libmaple based cores are still lacking. To complete confusion, this core now uses the label "STM32duino", which used to be what the libmaple cores above were known by (don't blame Mozzi for this mess!). For using this with Mozzi, see Mozzi on STM32duino-based boards.
    • -
    -
  • -
-
-
-
- - - diff --git a/extras/doc/html/hardware_stm32_maple.html b/extras/doc/html/hardware_stm32_maple.html deleted file mode 100644 index 9dd7f7755..000000000 --- a/extras/doc/html/hardware_stm32_maple.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - - -Mozzi: Mozzi on STM32-boards with libmaple based core. - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Mozzi on STM32-boards with libmaple based core.
-
-
-

port by Thomas Friedrichsmeier

-
Note
Be sure to understand the info given at Mozzi on STM32-based boards - disambiguation . This page is about using Mozzi with the STM32 "libmaple based" core.
-
-This port may look similar to, but uses a different default GPIO pinout than @hardware_stm32duino !
-

-Status and peculiarities of this port

-

Compiles for and runs on a STM32F103C8T6 blue pill board, with a bunch of caveats (see below), i.e. on a board without a real DAC. Should probably run on any other board supported by Roger Clark's libmaple-based core (although this theory is untested).

-
Note
that at the time of this writing, Stev Strong's slightliy more recent fork of this core does not work with Mozzi, apparently due to a bug in pwmWrite().
-
    -
  • If you want to use MIDI, be sure to replace "MIDI_CREATE_DEFAULT_INSTANCE()" with "MIDI_CREATE_INSTANCE(HardwareSerial, Serial1, MIDI)" (or Serial2)
  • -
  • MOZZI_AUDIO_INPUT_STANDARD is implemented in theory, but untested (feedback welcome)
  • -
  • getAudioInput() and mozziAnalogRead() return values in the STM32's full ADC resolution of 0-4095 rather than AVR's 0-1023.
  • -
-

twi_nonblock is not ported

-

-Output modes

-

The following audio modes (see MOZZI_AUDIO_MODE) are currently supported on this hardware:

    -
  • MOZZI_OUTPUT_EXTERNAL_TIMED
  • -
  • MOZZI_OUTPUT_EXTERNAL_CUSTOM
  • -
  • MOZZI_OUTPUT_PWM
  • -
  • MOZZI_OUTPUT_PWM_2PIN
  • -
-

The default mode is MOZZI_OUTPUT_PWM .

-

-MOZZI_OUTPUT_PWM

-

Standard pulse width modulated output to one (mono) or two (stereo, see MOZZI_AUDIO_CHANNELS) GPIO pins. Default pinout: PB8 (mono/left), PB9 (right channel in stereo). This mode uses two hardware timers: One for the PWM (Timer 4 when using the default pin configuration), and a second for updating the output at audio rate. The default audio resolution is 10 bits, which results in a carrier frequency of ~70kHz on a 72MHz CPU. On slower boards you will have to descrease this. The following settings may be costumized, if desired:

-
#define MOZZI_AUDIO_PIN_1 ... // Left / mono output pin. Default: PB8
-
#define MOZZI_AUDIO_PWM_TIMER ... // Must be set ot the hardware timer connected to the above pin. Default: 4
-
#define MOZZI_AUDIO_UPDATE_TIMER ... // Second hardware timer to claim. Default 2
-
#define MOZZI_AUDIO_BITS ... // Output resolution in bits. Default is 10
-
// For stereo, only:
-
#define MOZZI_AUDIO_PIN_2 ... // Right channel output pin. This *must* be connected to the same hardware timer as MOZZI_AUDIO_PIN_1 ! Default: PB9
-

-MOZZI_OUTPUT_2PIN_PWM

-

This mode is very similar to MOZZI_OUTPUT_PWM, but splitting output for a single channel across two GPIO pins for better resolution. For details on the required hardware setup, and configuration tradeoffs, see MOZZI_OUTPUT_2PIN_PWM . Stereo output is not available in this mode. Output is at 2*7 bits at up to 560kHz carrier frequency (but limited to 5 times audio rate).

-

Customizable configuration options:

#define MOZZI_AUDIO_PIN_1 ... // High byte of the output. Default: PB8
-
#define MOZZI_AUDIO_PIN_2 ... // Low byte of the output. Default: PB9
-
#define MOZZI_AUDIO_PWM_TIMER ... // Must be set to the number of the hardware timer connect to the above pins. Default: 4
-
#define MOZZI_AUDIO_UPDATE_TIMER ... // Second hardware timer to claim. Default TIM2
-
#define MOZZI_AUDIO_BITS_PER_CHANNEL ... // Bits per pin. Default is 7
-

-MOZZI_OUTPUT_EXTERNAL_TIMED and MOZZI_OUTPUT_EXTERNAL_CUSTOM

-

See External audio output The (single) hardware timer claimed for MOZZI_OUTPUT_EXTERNAL_TIMED may be configured using "MOZZI_AUDIO_UPDATE_TIMER" (default: TIM2).

-
-
-
- - - diff --git a/extras/doc/html/hardware_stm32duino.html b/extras/doc/html/hardware_stm32duino.html deleted file mode 100644 index 739b9dad1..000000000 --- a/extras/doc/html/hardware_stm32duino.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - - - - -Mozzi: Mozzi on STM32duino-based boards. - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Mozzi on STM32duino-based boards.
-
-
-

port by Thomas Friedrichsmeier

-
Note
Be sure to understand the info given at Mozzi on STM32-based boards - disambiguation . This page is about using Mozzi with the STM32duino core.
-

-Port status and usage notes

-

Tested on a STM32F103C8T6 blue pill board as well as an STM32F411CE black pill board, i.e. on sboards without a real DAC. Compiles and runs, with a bunch of caveats (see below). Should probably run on any other board supported by the STM32duino core (although this theory is untested). When trying any other board, you probably want to check the platform specific settings (see below), carefully, importantly, whether the desired output resolution is achievable, and whether the desired output pins are PWM capable.

-
    -
  • MOZZI_ANALOG_READ input implementation is somewhat experimental, and may not be able to service a whole lot of pins (contributions welcome)
  • -
  • MOZZI_AUDIO_INPUT is completely untested (but implemented in theory; feedback welcome!)
  • -
  • getAudioInput() and mozziAnalogRead() return values in the STM32's full ADC resolution (the exact range depending on the board in use) rather than AVR's 0-1023.
  • -
  • twi_nonblock is not ported
  • -
-

-Output modes

-

The following audio modes (see MOZZI_AUDIO_MODE) are currently supported on this hardware:

    -
  • MOZZI_OUTPUT_EXTERNAL_TIMED
  • -
  • MOZZI_OUTPUT_EXTERNAL_CUSTOM
  • -
  • MOZZI_OUTPUT_PWM
  • -
  • MOZZI_OUTPUT_PWM_2PIN
  • -
-

The default mode is MOZZI_OUTPUT_PWM .

-
Note
This port may look similar to, but uses a different default GPIO pinout than @hardware_stm32_maple !
-

-MOZZI_OUTPUT_PWM

-

Standard pulse width modulated output to one (mono) or two (stereo, see MOZZI_AUDIO_CHANNELS) GPIO pins. Default pinout: PA8 (mono/left), PA9 (right channel in stereo). This mode uses two hardware timers: One for the PWM (Timer 3 when using the default pin configuration), and a second for updating the output at audio rate. The default audio resolution is 10 bits, which results in a carrier frequency of ~70kHz on a 72MHz CPU. On slower boards you will have to descrease this. The following settings may be costumized, if desired:

-
#define MOZZI_AUDIO_PIN_1 ... // Left / mono output pin. Default: PA8
-
#define MOZZI_AUDIO_UPDATE_TIMER ... // Second hardware timer to claim, must not be the same of the timer for the above pin. Default TIM2
-
#define MOZZI_AUDIO_BITS ... // Output resolution in bits. Default is 10
-
// For stereo, only:
-
#define MOZZI_AUDIO_PIN_2 ... // Right channel output pin. This *must* be connected to the same hardware timer as MOZZI_AUDIO_PIN_1 ! Default: PA9
-

-MOZZI_OUTPUT_PWM

-

This mode is very similar to MOZZI_OUTPUT_PWM, but splitting output for a single channel across two GPIO pins for better resolution. For details on the required hardware setup, and configuration tradeoffs, see MOZZI_OUTPUT_2PIN_PWM . Stereo output is not available in this mode. Output is at 2*7 bits at up to 560kHz carrier frequency (but limited to 5 times audio rate).

-

Customizable configuration options:

#define MOZZI_AUDIO_PIN_1 ... // High byte of the output. Default: PA8
-
#define MOZZI_AUDIO_PIN_1_LOW ... // Low byte of the output. Default: PA9
-
#define MOZZI_AUDIO_UPDATE_TIMER ... // Second hardware timer to claim. Default TIM2
-
#define MOZZI_AUDIO_BITS_PER_CHANNEL ... // Bits per pin. Default is 7
-

-MOZZI_OUTPUT_EXTERNAL_TIMED and MOZZI_OUTPUT_EXTERNAL_CUSTOM

-

See External audio output . The (single) hardware timer claimed for MOZZI_OUTPUT_EXTERNAL_TIMED may be configured using "MOZZI_AUDIO_UPDATE_TIMER" (default: TIM2).

-
-
-
- - - diff --git a/extras/doc/html/hardware_teensy3.html b/extras/doc/html/hardware_teensy3.html deleted file mode 100644 index db0d0c682..000000000 --- a/extras/doc/html/hardware_teensy3.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - - -Mozzi: Mozzi on Teensy 3.0/3.1/3.2/3.4/3.5/LC boards. - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Mozzi on Teensy 3.0/3.1/3.2/3.4/3.5/LC boards.
-
-
-

port by Tim Barrass

-
Note
For Teensy 4.x see Mozzi on Teensy 4.x boards.
-

-Port status and ussage notes

-

This port requires the following two libraries (which should be part of a default installtion, however):

-

Some of the differences for Teensy 3.* which will affect users include:

    -
  • twi_nonblock code by Marije Baalman for non-blocking I2C is not compatible with Teensy 3.0/3.1/3.2.
  • -
-

-Output modes

-

The following audio modes (see MOZZI_AUDIO_MODE) are currently supported on this hardware:

    -
  • MOZZI_OUTPUT_EXTERNAL_TIMED
  • -
  • MOZZI_OUTPUT_EXTERNAL_CUSTOM
  • -
  • MOZZI_OUTPUT_INTERNAL_DAC
  • -
-

The default mode is MOZZI_OUTPUT_INTERNAL_DAC .

-

-MOZZI_OUTPUT_INTERNAL_DAC

-

Output is to the inbuilt DAC. Output resolution is 12 bits. Mono, only. The DAC output pin differs from board to boards. In most cases the appropriate pin will be set outmatically. If needed, you can specify the DAC pin, explicitly:

-
#define MOZZI_AUDIO_PIN_1 ... // Default: A14, A12, or A21, depending on board
-

-MOZZI_OUTPUT_EXTERNAL_TIMED and MOZZI_OUTPUT_EXTERNAL_CUSTOM

-

See External audio output

-
-
-
- - - diff --git a/extras/doc/html/hardware_teensy4.html b/extras/doc/html/hardware_teensy4.html deleted file mode 100644 index b4a6ae195..000000000 --- a/extras/doc/html/hardware_teensy4.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - - -Mozzi: Mozzi on Teensy 4.x boards. - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Mozzi on Teensy 4.x boards.
-
-
-

port by Thomas Combriat

-
Note
For Teensy 3.x see Mozzi on Teensy 3.0/3.1/3.2/3.4/3.5/LC boards.
-

-Port status and ussage notes

-

This port requires the following two libraries (which should be part of a default installtion, however):

-

Contrary to the Teensy 3, the Teensy 4 do not have any DAC. The output is done on pin A8 (PWM) by default (see below). twi_nonblock is not ported.

-

-Output modes

-

The following audio modes (see MOZZI_AUDIO_MODE) are currently supported on this hardware:

    -
  • MOZZI_OUTPUT_EXTERNAL_TIMED
  • -
  • MOZZI_OUTPUT_EXTERNAL_CUSTOM
  • -
  • MOZZI_OUTPUT_PWM
  • -
-

The default mode is MOZZI_OUTPUT_PWM .

-

-MOZZI_OUTPUT_PWM

-

Output is to a GPIO pin (or two in stereo). The output resolution is fixed at 10 bits, and a 146484 kHz carrier frequency. The output pins can be configured as:

-
#define MOZZI_AUDIO_PIN_1 ... // Left / mono output pin. Default: A8
-
// For stereo, only:
-
#define MOZZI_AUDIO_PIN_2 ... // Right channel output pin. Default: A9
-

-MOZZI_OUTPUT_EXTERNAL_TIMED and MOZZI_OUTPUT_EXTERNAL_CUSTOM

-

See External audio output

-
-
-
- - - diff --git a/extras/doc/html/hierarchy.html b/extras/doc/html/hierarchy.html deleted file mode 100644 index 60b047d03..000000000 --- a/extras/doc/html/hierarchy.html +++ /dev/null @@ -1,184 +0,0 @@ - - - - - - - -Mozzi: Class Hierarchy - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Class Hierarchy
-
-
-
This inheritance list is sorted roughly, but not completely, alphabetically:
-
[detail level 12]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 CADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >A simple ADSR envelope generator
 CADSR< MOZZI_CONTROL_RATE, MOZZI_AUDIO_RATE >
 CADSR< MOZZI_CONTROL_RATE, MOZZI_CONTROL_RATE >
 CAudioDelay< NUM_BUFFER_SAMPLES, T >Audio delay line for comb filter, flange, chorus and short echo effects
 CAudioDelay< 128 >
 CAudioDelay< 128, int >
 CAudioDelay< 256, int >
 CAudioDelay< NUM_BUFFER_SAMPLES, int >
 CControlDelay< NUM_BUFFER_SAMPLES, T >Control-rate delay line for delaying control signals
 CAudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE, su >Audio delay line with feedback for comb filter, flange, chorus and short echo effects
 CAutoRange< T >Keeps a running calculation of the range of the input values it receives
 CAutoRange< int >
 CAutoMapAutomatically map an input value to an output range without knowing the precise range of inputs beforehand
 CCapPoll< SENSOR_PIN, SEND_PIN >A class for reading voltage on a digital pin, derived from http://arduino.cc/en/Tutorial/RCtime
 CCircularBuffer< ITEM_TYPE >Circular buffer object
 CDCfilterA DC-blocking filter useful for highlighting changes in control signals
 CEadExponential attack decay envelope
 CEventDelayA non-blocking replacement for Arduino's delay() function
 CMetronomeA metronome class which is like an EventDelay which retriggers itself when the delay time is up, to produce a repeating beat
 CInt2Type< I >Enables you to instantiate a template based on an integer value
 CIntegerType< BYTES >Provides appropriate integer types that can bit the given number of bytes on this platform (at most 64)
 CIntegerType< 1 >
 CIntegerType< 2 >
 CIntegerType< 4 >
 CIntegerType< 8 >
 CIntegerType< sizeof(AudioOutputStorage_t)>
 CIntegerType< sizeof(int8_t)+sizeof(int8_t)>
 CIntegerType< sizeof(uint8_t)+sizeof(uint8_t)>
 CIntMapA faster version of Arduino's map() function
 CLine< T >For linear changes with a minimum of calculation at each step
 CLine< Q15n16 >
 CLine< Q16n16 >
 CLine< SFix< NI, NF > >
 CLine< UFix< NI, NF > >
 CLine< unsigned char >
 CLine< unsigned int >
 CLine< unsigned long >
 CMetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >MetaOscil is a wrapper for several Oscil
 CMidiToFreqPrivateInternal
 CMonoOutputThis struct encapsulates one frame of mono audio output
 CMozziPrivate::MozziRandPrivate
 COscil< NUM_TABLE_CELLS, UPDATE_RATE >Oscil plays a wavetable, cycling through the table to generate an audio or control signal
 COscil< 8192, MOZZI_AUDIO_RATE >
 COscil< COS8192_NUM_CELLS, MOZZI_AUDIO_RATE >
 COscil< SIN2048_NUM_CELLS, MOZZI_AUDIO_RATE >
 CPDResonantPDResonant is a simple midi instrument using Phase distortion used to simulate resonant filter, based on https://en.wikipedia.org/wiki/Phase_distortion_synthesis
 CPhasor< UPDATE_RATE >Phasor repeatedly generates a high resolution ramp at a variable frequency
 CPhasor< MOZZI_AUDIO_RATE >
 CPortamento< CONTROL_UPDATE_RATE >A simple portamento (pitch slide from one note to the next) effect, useful for note-based applications
 CRCpoll< SENSOR_PIN >A class for reading voltage on a digital pin, derived from http://arduino.cc/en/Tutorial/RCtime
 CResonantFilter< FILTER_TYPE, su >A generic resonant filter for audio signals
 CResonantFilter< LOWPASS, uint8_t >
 CMultiResonantFilter< su >A generic filter for audio signals that can produce lowpass, highpass, bandpass and notch outputs at runtime
 CReverbTankA reverb which sounds like the inside of a tin can
 CRollingAverage< T, WINDOW_LENGTH >Calculates a running average over a specified number of the most recent readings
 CRollingAverage< T,(1<<(RESOLUTION_INCREASE_BITS *2))>
 COverSample< T, RESOLUTION_INCREASE_BITS >Enables the resolution of analog inputs to be increased by oversampling and decimation
 CRollingStat< T, WINDOW_LENGTH >WARNING: this class is work in progress, don't use it yet
 CSample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >Sample is like Oscil, it plays a wavetable
 CSampleHuffmanA sample player for samples encoded with Huffman compression
 CSmooth< T >A simple infinite impulse response low pass filter for smoothing control or audio signals
 CSmooth< SFix< NI, NF > >
 CSmooth< UFix< NI, NF > >
 CStack< T, NUM_ITEMS >A simple stack, used internally for keeping track of analog input channels as they are read
 CStateVariable< FILTER_TYPE >State Variable Filter (approximation of Chamberlin version) Informed by pseudocode at http://www.musicdsp.org/showone.php?id=23 and
 CStereoOutputThis struct encapsulates one frame of mono audio output
 CWaveFolder< T >A simple wavefolder
 CWavePacket< ALGORITHM >Wavepacket synthesis, with two overlapping streams of wave packets
 CWavePacketSample< ALGORITHM >A WavePacket which allows a custom table to be set as the audio source for the wavepackets (or grains)
 CWaveShaper< T >WaveShaper maps values from its input to values in a table, which are returned as output
 CWaveShaper< char >Int8_t specialisation of WaveShaper template
 CWaveShaper< int >Int specialisation of WaveShaper template
-
-
-
- - - diff --git a/extras/doc/html/hierarchy.js b/extras/doc/html/hierarchy.js deleted file mode 100644 index ba8198a19..000000000 --- a/extras/doc/html/hierarchy.js +++ /dev/null @@ -1,81 +0,0 @@ -var hierarchy = -[ - [ "ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >", "class_a_d_s_r.html", null ], - [ "ADSR< MOZZI_CONTROL_RATE, MOZZI_AUDIO_RATE >", "class_a_d_s_r.html", null ], - [ "ADSR< MOZZI_CONTROL_RATE, MOZZI_CONTROL_RATE >", "class_a_d_s_r.html", null ], - [ "AudioDelay< NUM_BUFFER_SAMPLES, T >", "class_audio_delay.html", null ], - [ "AudioDelay< 128 >", "class_audio_delay.html", null ], - [ "AudioDelay< 128, int >", "class_audio_delay.html", null ], - [ "AudioDelay< 256, int >", "class_audio_delay.html", null ], - [ "AudioDelay< NUM_BUFFER_SAMPLES, int >", "class_audio_delay.html", [ - [ "ControlDelay< NUM_BUFFER_SAMPLES, T >", "class_control_delay.html", null ] - ] ], - [ "AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE, su >", "class_audio_delay_feedback.html", null ], - [ "AutoRange< T >", "group__sensortools.html#class_auto_range", null ], - [ "AutoRange< int >", "group__sensortools.html", [ - [ "AutoMap", "group__sensortools.html#class_auto_map", null ] - ] ], - [ "CapPoll< SENSOR_PIN, SEND_PIN >", "class_cap_poll.html", null ], - [ "CircularBuffer< ITEM_TYPE >", "class_circular_buffer.html", null ], - [ "DCfilter", "class_d_cfilter.html", null ], - [ "Ead", "class_ead.html", null ], - [ "EventDelay", "class_event_delay.html", [ - [ "Metronome", "class_metronome.html", null ] - ] ], - [ "Int2Type< I >", "group__util.html#struct_int2_type", null ], - [ "IntegerType< BYTES >", "group__util.html#struct_integer_type", null ], - [ "IntegerType< 1 >", "struct_integer_type_3_011_01_4.html", null ], - [ "IntegerType< 2 >", "struct_integer_type_3_012_01_4.html", null ], - [ "IntegerType< 4 >", "struct_integer_type_3_014_01_4.html", null ], - [ "IntegerType< 8 >", "struct_integer_type_3_018_01_4.html", null ], - [ "IntegerType< sizeof(AudioOutputStorage_t)>", "group__util.html", null ], - [ "IntegerType< sizeof(int8_t)+sizeof(int8_t)>", "group__util.html", null ], - [ "IntegerType< sizeof(uint8_t)+sizeof(uint8_t)>", "group__util.html", null ], - [ "IntMap", "class_int_map.html", null ], - [ "Line< T >", "class_line.html", null ], - [ "Line< Q15n16 >", "class_line.html", null ], - [ "Line< Q16n16 >", "class_line.html", null ], - [ "Line< SFix< NI, NF > >", "class_line_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html", null ], - [ "Line< UFix< NI, NF > >", "class_line_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html", null ], - [ "Line< unsigned char >", "class_line_3_01unsigned_01char_01_4.html", null ], - [ "Line< unsigned int >", "class_line_3_01unsigned_01int_01_4.html", null ], - [ "Line< unsigned long >", "class_line_3_01unsigned_01long_01_4.html", null ], - [ "MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >", "class_meta_oscil.html", null ], - [ "MidiToFreqPrivate", "class_midi_to_freq_private.html", null ], - [ "MonoOutput", "struct_mono_output.html", null ], - [ "MozziPrivate::MozziRandPrivate", "class_mozzi_private_1_1_mozzi_rand_private.html", null ], - [ "Oscil< NUM_TABLE_CELLS, UPDATE_RATE >", "class_oscil.html", null ], - [ "Oscil< 8192, MOZZI_AUDIO_RATE >", "class_oscil.html", null ], - [ "Oscil< COS8192_NUM_CELLS, MOZZI_AUDIO_RATE >", "class_oscil.html", null ], - [ "Oscil< SIN2048_NUM_CELLS, MOZZI_AUDIO_RATE >", "class_oscil.html", null ], - [ "PDResonant", "class_p_d_resonant.html", null ], - [ "Phasor< UPDATE_RATE >", "class_phasor.html", null ], - [ "Phasor< MOZZI_AUDIO_RATE >", "class_phasor.html", null ], - [ "Portamento< CONTROL_UPDATE_RATE >", "class_portamento.html", null ], - [ "RCpoll< SENSOR_PIN >", "class_r_cpoll.html", null ], - [ "ResonantFilter< FILTER_TYPE, su >", "class_resonant_filter.html", null ], - [ "ResonantFilter< LOWPASS, uint8_t >", "class_resonant_filter.html", [ - [ "MultiResonantFilter< su >", "class_multi_resonant_filter.html", null ] - ] ], - [ "ReverbTank", "class_reverb_tank.html", null ], - [ "RollingAverage< T, WINDOW_LENGTH >", "group__sensortools.html#class_rolling_average", null ], - [ "RollingAverage< T,(1<<(RESOLUTION_INCREASE_BITS *2))>", null, [ - [ "OverSample< T, RESOLUTION_INCREASE_BITS >", "group__sensortools.html#class_over_sample", null ] - ] ], - [ "RollingStat< T, WINDOW_LENGTH >", "group__sensortools.html#class_rolling_stat", null ], - [ "Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >", "class_sample.html", null ], - [ "SampleHuffman", "class_sample_huffman.html", null ], - [ "Smooth< T >", "class_smooth.html", null ], - [ "Smooth< SFix< NI, NF > >", "class_smooth_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html", null ], - [ "Smooth< UFix< NI, NF > >", "class_smooth_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html", null ], - [ "Stack< T, NUM_ITEMS >", "class_stack.html", null ], - [ "StateVariable< FILTER_TYPE >", "class_state_variable.html", null ], - [ "StereoOutput", "struct_stereo_output.html", null ], - [ "WaveFolder< T >", "class_wave_folder.html", null ], - [ "WavePacket< ALGORITHM >", "class_wave_packet.html", [ - [ "WavePacketSample< ALGORITHM >", "class_wave_packet_sample.html", null ] - ] ], - [ "WaveShaper< T >", "class_wave_shaper.html", null ], - [ "WaveShaper< char >", "class_wave_shaper_3_01char_01_4.html", null ], - [ "WaveShaper< int >", "class_wave_shaper_3_01int_01_4.html", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/index.html b/extras/doc/html/index.html deleted file mode 100644 index 7efa0361e..000000000 --- a/extras/doc/html/index.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - - -Mozzi: Main Page - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Mozzi Documentation
-
- -
- - - diff --git a/extras/doc/html/jquery.js b/extras/doc/html/jquery.js deleted file mode 100644 index 103c32d79..000000000 --- a/extras/doc/html/jquery.js +++ /dev/null @@ -1,35 +0,0 @@ -/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0a;a++)for(i in o[a])n=o[a][i],o[a].hasOwnProperty(i)&&void 0!==n&&(e[i]=t.isPlainObject(n)?t.isPlainObject(e[i])?t.widget.extend({},e[i],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,i){var n=i.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=s.call(arguments,1),h=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(h=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):h=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new i(o,this))})),h}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,(i>0||u>a(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var n=!1;t(document).on("mouseup",function(){n=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!n){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,o="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),n=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,n=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("
").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("
"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidtht.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("
"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element -},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),m&&(p-=l),g&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable});/** - * Copyright (c) 2007 Ariel Flesler - aflesler ○ gmail • com | https://github.com/flesler - * Licensed under MIT - * @author Ariel Flesler - * @version 2.1.2 - */ -;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 - * http://www.smartmenus.org/ - * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file diff --git a/extras/doc/html/known__16bit__timers_8h_source.html b/extras/doc/html/known__16bit__timers_8h_source.html deleted file mode 100644 index 026e4a2f2..000000000 --- a/extras/doc/html/known__16bit__timers_8h_source.html +++ /dev/null @@ -1,196 +0,0 @@ - - - - - - - -Mozzi: known_16bit_timers.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
known_16bit_timers.h
-
-
-
1 #ifndef known_16bit_timers_header_
-
2 #define known_16bit_timers_header_
-
3 /*
-
4 Part of TimerOne library, modified by Paul S. for Teensy boards.
-
5 TB2012 added Leonardo section.
-
6 */
-
7 
-
8 // Wiring-S
-
9 //
-
10 #if defined(__AVR_ATmega644P__) && defined(WIRING)
-
11  #define TIMER1_A_PIN 5
-
12  #define TIMER1_B_PIN 4
-
13  #define TIMER1_ICP_PIN 6
-
14 
-
15 
-
16 // Teensy 2.0
-
17 //
-
18 #elif defined(__AVR_ATmega32U4__) && defined(CORE_TEENSY)
-
19  #define TIMER1_A_PIN 14
-
20  #define TIMER1_B_PIN 15
-
21  #define TIMER1_C_PIN 4
-
22  #define TIMER1_ICP_PIN 22
-
23  #define TIMER1_CLK_PIN 11
-
24  #define TIMER3_A_PIN 9
-
25  #define TIMER3_ICP_PIN 10
-
26 
-
27 
-
28 // Leonardo - Make sure this is after the (__AVR_ATmega32U4__) && defined(CORE_TEENSY) entry
-
29  #elif defined(__AVR_ATmega32U4__)
-
30  #define TIMER1_A_PIN 9
-
31  #define TIMER1_B_PIN 10
-
32  #define TIMER1_C_PIN 11
-
33 
-
34 
-
35 // Teensy++ 2.0
-
36 #elif defined(__AVR_AT90USB1286__) && defined(CORE_TEENSY)
-
37  #define TIMER1_A_PIN 25
-
38  #define TIMER1_B_PIN 26
-
39  #define TIMER1_C_PIN 27
-
40  #define TIMER1_ICP_PIN 4
-
41  #define TIMER1_CLK_PIN 6
-
42  #define TIMER3_A_PIN 16
-
43  #define TIMER3_B_PIN 15
-
44  #define TIMER3_C_PIN 14
-
45  #define TIMER3_ICP_PIN 17
-
46  #define TIMER3_CLK_PIN 13
-
47 
-
48 
-
49 // Arduino Mega
-
50 //
-
51 #elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
-
52  #define TIMER1_A_PIN 11
-
53  #define TIMER1_B_PIN 12
-
54  #define TIMER1_C_PIN 13
-
55  #define TIMER3_A_PIN 5
-
56  #define TIMER3_B_PIN 2
-
57  #define TIMER3_C_PIN 3
-
58  #define TIMER4_A_PIN 6
-
59  #define TIMER4_B_PIN 7
-
60  #define TIMER4_C_PIN 8
-
61  #define TIMER4_ICP_PIN 49
-
62  #define TIMER5_A_PIN 46
-
63  #define TIMER5_B_PIN 45
-
64  #define TIMER5_C_PIN 44
-
65  #define TIMER3_ICP_PIN 48
-
66  #define TIMER3_CLK_PIN 47
-
67 
-
68 
-
69 // Arduino Uno, Duemilanove, LilyPad, etc
-
70 //
-
71 #elif defined (__AVR_ATmega168__) || defined (__AVR_ATmega328P__) || defined (__AVR_ATmega328PB__)
-
72  #define TIMER1_A_PIN 9
-
73  #define TIMER1_B_PIN 10
-
74  #define TIMER1_ICP_PIN 8
-
75  #define TIMER1_CLK_PIN 5
-
76 
-
77 
-
78 // Sanguino
-
79 //
-
80 #elif defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644__)
-
81  #define TIMER1_A_PIN 13
-
82  #define TIMER1_B_PIN 12
-
83  #define TIMER1_ICP_PIN 14
-
84  #define TIMER1_CLK_PIN 1
-
85 
-
86 #endif
-
87 
-
88 #endif
-
-
- - - diff --git a/extras/doc/html/meta_8h_source.html b/extras/doc/html/meta_8h_source.html deleted file mode 100644 index c356dcf0f..000000000 --- a/extras/doc/html/meta_8h_source.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - - -Mozzi: meta.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
meta.h
-
-
-
1 /*
-
2  * meta.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 /*
-
13 http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Int-To-Type
-
14 Template meta-programming extras.
-
15 */
-
16 
-
17 #ifndef META_H_
-
18 #define META_H_
-
19 
-
20 /** @defgroup soundtables Look-up-tables and python scripts to generate tables or convert sounds.
-
21 
-
22 Look-up-tables and python scripts to generate tables or convert sounds. Includes ready-to-use wave tables and a few example samples which are in the Mozzi/tables and Mozzi/samples folders. You can convert your own sounds from a program like Audacity to tables for Mozzi with a script called char2mozzi.py, in Mozzi/python. Read the int8_t2mozzi.py file for instructions. Also check out the other scripts in the python folder for templates to use if you want to do your own thing.
-
23 */
-
24 
-
25 /** @defgroup util Utility functions, and debugging
-
26 
-
27 Utility functions. Includes functions for debugging and profiling high frequency code with an oscilloscope when serial is too slow, some miscellaneous functions used internally by Mozzi, python scripts for converting or generating sound tables, and assorted meta-programming utils.
-
28 */
-
29 
-
30 /** @ingroup util
-
31 Enables you to instantiate a template based on an integer value.
-
32 For example, this is used in StateVariable.h to choose a different next()
-
33 function for each kind of filter, LOWPASS, BANDPASS, HIGHPASS or NOTCH, which are simple
-
34 integer values 0,1,2,3 provided to the StateVariable template on instantiation.
-
35 Fantastic!
-
36 It's in C++11, but not yet available in avr-gcc.
-
37 See "c++ enable_if"
-
38 */
-
39 template <int I>
-
40 struct Int2Type
-
41 {
-
42  enum {
-
43  value = I };
-
44 };
-
45 
-
46 
-
47 /*
-
48 //from http://en.wikibooks.org/wiki/C%2B%2B_Programming/Templates/Template_Meta-Programming#Compile-time_programming
-
49 
-
50 //First, the general (unspecialized) template says that factorial<n>::value is given by n*factorial<n-1>::value:
-
51 template <unsigned n>
-
52 struct factorial
-
53 {
-
54  enum { value = n * factorial<n-1>::value };
-
55 };
-
56 
-
57 
-
58 //Next, the specialization for zero says that factorial<0>::value evaluates to 1:
-
59 template <>
-
60 struct factorial<0>
-
61 {
-
62  enum { value = 1 };
-
63 };
-
64 
-
65 
-
66 //And now some code that "calls" the factorial template at compile-time:
-
67 // Because calculations are done at compile-time, they can be
-
68 // used for things such as array sizes, eg.
-
69 // int array[ factorial<7>::value ];
-
70 
-
71 */
-
72 
-
73 #endif /* META_H_ */
-
-
- - - diff --git a/extras/doc/html/modules.html b/extras/doc/html/modules.html deleted file mode 100644 index 5ca130e80..000000000 --- a/extras/doc/html/modules.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - - -Mozzi: Modules - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Modules
-
-
-
Here is a list of all modules:
- - - - - - - - - - - -
 Fast integer based fixed-point arithmetic
 Audio Output and Buffering
 Automatic range adjustment
 Mozzi Configuration options
 Look-up-tables and python scripts to generate tables or convert sounds.Look-up-tables and python scripts to generate tables or convert sounds
 Utility functions, and debuggingUtility functions
 AnalogEfficient analog input functions for sensors and audio
 Midi note number to frequency conversionsUseful if you like playing notes in tune
 Fast random number generator functionsThese replace Arduino random() which is so slow it will stop your audio
 Mozzi Core Functions
-
-
-
- - - diff --git a/extras/doc/html/modules.js b/extras/doc/html/modules.js deleted file mode 100644 index 5a5407190..000000000 --- a/extras/doc/html/modules.js +++ /dev/null @@ -1,13 +0,0 @@ -var modules = -[ - [ "Fast integer based fixed-point arithmetic", "group__fixmath.html", "group__fixmath" ], - [ "Audio Output and Buffering", "group__audio__output.html", "group__audio__output" ], - [ "Automatic range adjustment", "group__sensortools.html", "group__sensortools" ], - [ "Mozzi Configuration options", "group__config.html", "group__config" ], - [ "Look-up-tables and python scripts to generate tables or convert sounds.", "group__soundtables.html", null ], - [ "Utility functions, and debugging", "group__util.html", "group__util" ], - [ "Analog", "group__analog.html", "group__analog" ], - [ "Midi note number to frequency conversions", "group__midi.html", "group__midi" ], - [ "Fast random number generator functions", "group__random.html", "group__random" ], - [ "Mozzi Core Functions", "group__core.html", "group__core" ] -]; \ No newline at end of file diff --git a/extras/doc/html/mozzi-circle.png b/extras/doc/html/mozzi-circle.png deleted file mode 100644 index 90b431eda..000000000 Binary files a/extras/doc/html/mozzi-circle.png and /dev/null differ diff --git a/extras/doc/html/mozzi__analog_8h_source.html b/extras/doc/html/mozzi__analog_8h_source.html deleted file mode 100644 index a5c854063..000000000 --- a/extras/doc/html/mozzi__analog_8h_source.html +++ /dev/null @@ -1,290 +0,0 @@ - - - - - - - -Mozzi: mozzi_analog.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
mozzi_analog.h
-
-
-
1 /*
-
2  * mozzi_analog.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 
-
13 #ifndef MOZZI_ANALOG_H_
-
14 #define MOZZI_ANALOG_H_
-
15 
-
16 #include "Arduino.h"
-
17 
-
18 #include "hardware_defines.h"
-
19 
-
20 // for setupFastAnalogRead()
-
21 enum ANALOG_READ_SPEED {FAST_ADC,FASTER_ADC,FASTEST_ADC};
-
22 
-
23 /** @defgroup analog
-
24 
-
25 @brief Efficient analog input functions for sensors and audio.
-
26 
-
27 Helps produce glitch-free audio by allowing analog input functions which normally block processing to be performed in the background.
-
28 */
-
29 
-
30 /**
-
31 @ingroup analog
-
32 This is automatically called in startMozzi.
-
33 It makes mozziAnalogRead() happen faster than the standard Arduino analogRead(), changing the
-
34 duration from about 105 in unmodified Arduino to about 16 microseconds for a
-
35 dependable read with the default speed parameter FAST_ADC.
-
36 If you want to set on of the faster modes (see params) you can call this after startMozzi().
-
37 See: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1208715493/11, and
-
38 http://www.marulaberry.co.za/index.php/tutorials/code/arduino-adc/
-
39 @param speed FAST_ADC, FASTER_ADC or FASTEST_ADC. If no parameter is supplied, the
-
40 default is FAST_ADC, which sets the analog conversion clock predivide rate to
-
41 16, giving 1Mhz on a 16MHz board, the fastest rate for which behaviour is
-
42 defined (~16us per sample). However, divisors of 8 and 4 also show usable
-
43 results in the graphs in this paper:
-
44 http://dam.mellis.org/Mellis%20-%20Sensor%20Library%20for%20Arduino%20-%20Paper.pdf,
-
45 so you can also try FASTER_ADC or FASTEST_ADC for divide rates of 8 or 4, giving
-
46 times of about 8us or 4us per sample. Beware, reliable results will depend on
-
47 the sort of input signal you have. Only use FASTER_ADC or FASTEST_ADC if you
-
48 know what you're doing.
-
49 */
-
50 void setupFastAnalogRead(int8_t speed=FAST_ADC);
-
51 
-
52 
-
53 
-
54 /* @ingroup analog
-
55 Set up for asynchronous analog input, which enables analog reads to take
-
56 place in the background without blocking the processor.
-
57 @param speed FAST_ADC, FASTER_ADC or FASTEST_ADC. See setupFastAnalogRead();
-
58 */
-
59 void setupMozziADC(int8_t speed=FAST_ADC);
-
60 
-
61 
-
62 
-
63 /** @ingroup analog
-
64 Prepare an analog input channel by turning off its digital input buffer.
-
65 This helps to reduce noise, increase analog reading speed, and save power.
-
66 
-
67 Here's more detail from http://www.openmusiclabs.com/learning/digital/atmega-adc/:
-
68 
-
69 The DIDR (Data Input Disable Register) disconnects the digital inputs from
-
70 whichever ADC channels you are using. This is important for 2 reasons. First
-
71 off, an analog input will be floating all over the place, and causing the
-
72 digital input to constantly toggle high and low. This creates excessive noise
-
73 near the ADC, and burns extra power. Secondly, the digital input and associated
-
74 DIDR switch have a capacitance associated with them which will slow down your
-
75 input signal if you are sampling a highly resistive load.
-
76 
-
77 And from the ATmega328p datasheet, p266:
-
78 
-
79 When an analog signal is applied to the ADC pin and the digital input from
-
80 this pin is not needed, this bit should be written logic one to reduce power
-
81 consumption in the digital input buffer. Note that ADC named_pins ADC7
-
82 and ADC6 do not have digital input buffers, and therefore do not require
-
83 Digital Input Disable bits.
-
84 @param channel_num the analog input channel you wish to use.
-
85 */
-
86 inline void disconnectDigitalIn(uint8_t channel_num) {
-
87 #if IS_AVR()
-
88  DIDR0 |= 1<<channel_num;
-
89 #else
-
90  (void) channel_num; // unused, suppress warning
-
91 #endif
-
92 }
-
93 
-
94 /** @ingroup analog
-
95 Reconnect the digital input buffer for an analog input channel which has
-
96 been set for analog input with disconnectDigitalIn().
-
97 @param channel_num the analog input channel you wish to reconnect.
-
98 */
-
99 inline void reconnectDigitalIn(uint8_t channel_num) {
-
100 #if IS_AVR()
-
101  DIDR0 &= ~(1<<channel_num);
-
102 #else
-
103  (void) channel_num; // unused, suppress warning
-
104 #endif
-
105 }
-
106 
-
107 /** @ingroup analog
-
108 Prepare all analog input channels by turning off their digital input buffers.
-
109 This helps to reduce noise, increase analog reading speed, and save power.
-
110 */
-
111 inline void adcDisconnectAllDigitalIns() {
-
112 #if IS_AVR()
-
113  for (uint8_t i = 0; i<NUM_ANALOG_INPUTS; i++){
-
114  DIDR0 |= 1<<i;
-
115  }
-
116 #endif
-
117 }
-
118 
-
119 
-
120 /** @ingroup analog
-
121 Reconnect the digital input buffers for analog input channels which have
-
122 been set for analog input with disconnectDigitalIn().
-
123 */
-
124 inline void adcReconnectAllDigitalIns() {
-
125 #if IS_AVR()
-
126  for (uint8_t i = 0; i<NUM_ANALOG_INPUTS; i++){
-
127  DIDR0 &= ~(1<<i);
-
128  }
-
129 #endif
-
130 }
-
131 
-
132 /* @ingroup analog
-
133 Starts an analog to digital conversion of the voltage on a specified channel. Unlike
-
134 Arduino's analogRead() function which waits until a conversion is complete before
-
135 returning, adcStartConversion() only sets the conversion to begin, so you can use
-
136 the cpu for other things and call for the result later with adcGetResult().
-
137 @param channel is the analog channel number (0 to ....), which is not necessarily the same as the pin number
-
138 Use adcPinToChannelNum() to convert the pin number to its channel number.
-
139 @note Timing: about 1us when used in updateControl() with MOZZI_CONTROL_RATE 64.
-
140 */
-
141 void adcStartConversion(uint8_t channel);
-
142 
-
143 /** @ingroup analog
-
144 See mozziAnalogRead(). The template parameter RES specifies the number of bits to return.
-
145 */
-
146 template<byte RES> uint16_t mozziAnalogRead(uint8_t pin);
-
147 
-
148 /** @ingroup analog
-
149 See mozziAnalogRead() but always returns the value shifted to 16 bit range. THis is exactly
-
150 equivalent to mozziAnalogRead<16>(pin);
-
151 */
-
152 inline uint16_t mozziAnalogRead16(uint8_t pin) { return mozziAnalogRead<16>(pin); };
-
153 
-
154 #if defined(FOR_DOXYGEN_ONLY) || defined(MOZZI_ANALOG_READ_RESOLUTION)
-
155 /** @ingroup analog
-
156 Reads the analog input of a chosen channel, without blocking other operations from running.
-
157 It actually returns the most recent analog reading and puts the chosen pin or channel
-
158 on the stack of channels to be read in the background before the next control
-
159 interrupt.
-
160 
-
161 @note Analog reads have different hardware resolution on different platforms. E.g. an analog read
-
162  on an Arduino Uno R3 will return a value in the range 0-1023 (10 bits), on a Raspberry Pi Pico
-
163  it will return 0-4095 (12 bits). For portable code, it is thus necessary to specify the desired
-
164  resolution of reads. This can be done by setting MOZZI_ANALOG_READ_RESOLUTION to the resolution
-
165  in bits, near the top of your sketch. All reads will then be adjusted to that range, automatically
-
166  (using a simple bit-shift). Alternatively, the templated version of mozziAanalogRead() allows
-
167  to specifiy the target resolution per read.
-
168  If MOZZI_ANALOG_READ_RESOLUTION is not defined, this (non-templated) function returns a value
-
169  in the default hardware resolution, with a warning.
-
170 
-
171 @param pin_or_channel the analog pin or channel number.
-
172 @return the digitised value of the voltage on the chosen channel. See the note above regarding the output range!
-
173 */
-
174 inline uint16_t mozziAnalogRead(uint8_t pin) { return mozziAnalogRead<MOZZI_ANALOG_READ_RESOLUTION>(pin); }
-
175 #else
-
176 MOZZI_DEPRECATED("2.0", "This use of mozziAnalogRead() is not portable. Refer to the API documentation for suggested alternatives.") inline uint16_t mozziAnalogRead(uint8_t pin) { return mozziAnalogRead<MOZZI__INTERNAL_ANALOG_READ_RESOLUTION>(pin); }
-
177 #endif
-
178 
-
179 uint8_t adcPinToChannelNum(uint8_t pin);
-
180 
-
181 
-
182 #endif /* MOZZI_ANALOG_H_ */
-
-
- - - diff --git a/extras/doc/html/mozzi__config__documentation_8h.html b/extras/doc/html/mozzi__config__documentation_8h.html deleted file mode 100644 index fca4fd3b7..000000000 --- a/extras/doc/html/mozzi__config__documentation_8h.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - - -Mozzi: mozzi_config_documentation.h File Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
mozzi_config_documentation.h File Reference
-
-
- -

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Macros

#define MOZZI_COMPATIBILITY_LEVEL
 Mozzi generally tries to keep your old sketches working, but we continue to find new (and hopefully better) approaches to old problems. More...
 
#define MOZZI_AUDIO_MODE
 Configure how Mozzi outputs generated sounds. More...
 
#define MOZZI_AUDIO_CHANNELS
 This sets allows to change from a single/mono audio output channel to stereo output. More...
 
#define MOZZI_AUDIO_RATE
 Defines the audio rate, i.e. More...
 
#define MOZZI_CONTROL_RATE
 Control rate setting. More...
 
#define MOZZI_ANALOG_READ
 Whether to compile in support for non-blocking analog reads. More...
 
#define MOZZI_AUDIO_INPUT
 Whether to enable built in audio input feature. More...
 
#define MOZZI_AUDIO_INPUT_PIN
 This sets which analog input channel to use for audio input, if you have enabled MOZZI_AUDIO_INPUT, above. More...
 
#define MOZZI_PWM_RATE
 Only for MOZZI_AUDIO_MODE s MOZZI_OUTPUT_PWM and MOZZI_OUTPUT_2PIN_PWM. More...
 
#define MOZZI_AUDIO_BITS_PER_CHANNEL
 Only for MOZZI_AUDIO_MODE MOZZI_OUTPUT_2PIN_PWM. More...
 
#define MOZZI_AUDIO_PIN_1
 Only for MOZZI_AUDIO_MODE s MOZZI_OUTPUT_PWM and MOZZI_OUTPUT_2PIN_PWM: The IO pin to use as (first) audio output. More...
 
#define MOZZI_AUDIO_BITS
 Output resolution of audio samples. More...
 
-
-
- - - diff --git a/extras/doc/html/mozzi__config__documentation_8h.js b/extras/doc/html/mozzi__config__documentation_8h.js deleted file mode 100644 index b13c86082..000000000 --- a/extras/doc/html/mozzi__config__documentation_8h.js +++ /dev/null @@ -1,15 +0,0 @@ -var mozzi__config__documentation_8h = -[ - [ "MOZZI_ANALOG_READ", "group__config.html#gac4c9e989df7beb3034cc26e571a41569", null ], - [ "MOZZI_AUDIO_BITS", "group__config.html#ga68d4c7210dfdd68ea3eb418a1b7de0a2", null ], - [ "MOZZI_AUDIO_BITS_PER_CHANNEL", "group__config.html#ga9bfd84013cbc04ddb51b31f583178720", null ], - [ "MOZZI_AUDIO_CHANNELS", "group__config.html#ga6ffeecfb574900db4d3161ce0992b8bb", null ], - [ "MOZZI_AUDIO_INPUT", "group__config.html#ga40857197e27e3b4d3ee7177e95f59d6d", null ], - [ "MOZZI_AUDIO_INPUT_PIN", "group__config.html#gac448f990c61e43089f5aab5fdb80d4a6", null ], - [ "MOZZI_AUDIO_MODE", "group__config.html#ga9b14b158a7a469612a89dcc9630933b7", null ], - [ "MOZZI_AUDIO_PIN_1", "group__config.html#ga9b9905f3ee10d6446fa991e463cb63cf", null ], - [ "MOZZI_AUDIO_RATE", "group__config.html#gabc7b46bc3dbe1078f411287572226eff", null ], - [ "MOZZI_COMPATIBILITY_LEVEL", "group__config.html#ga9d4e8e86950fd08173ce6c16bcad0c76", null ], - [ "MOZZI_CONTROL_RATE", "group__config.html#ga947e756a0229e73de0a32ff3ea542013", null ], - [ "MOZZI_PWM_RATE", "group__config.html#ga3a6d77e502b179f2e490f6151e93414e", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/mozzi__config__documentation_8h_source.html b/extras/doc/html/mozzi__config__documentation_8h_source.html deleted file mode 100644 index d63854520..000000000 --- a/extras/doc/html/mozzi__config__documentation_8h_source.html +++ /dev/null @@ -1,406 +0,0 @@ - - - - - - - -Mozzi: mozzi_config_documentation.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
mozzi_config_documentation.h
-
-
-Go to the documentation of this file.
1 #ifdef FOR_DOXYGEN_ONLY
-
2 /** @file */
-
3 
-
4 /*! @defgroup config Mozzi Configuration options */
-
5 
-
6 /** @ingroup config
-
7  * @page config_main Mozzi Configuration
-
8  *
-
9  * @section config_general Configuring Mozzi
-
10  *
-
11  * Mozzi configuration options include details such as audio rate, number of audio channels (mono or stereo), output generation method and many others,
-
12  * where details on the available options differ between the different platforms (see @ref hardware), and may include additional options beyond those listed, here.
-
13  *
-
14  * @note
-
15  * It is generally safe to leave the Mozzi Configuration unchanged, and that's very much recommended _until_ you have a very specific need to customize something.
-
16  * Contrary to past versions of Mozzi, all configuration options have a (usually sensible) default value, so you do not have to configure _anything_, unless you
-
17  * actually want to change something.
-
18  *
-
19  * Configuring Mozzi is mostly done using various preprocessor definitions. This approach is used to move as much of the processing involved to compile time, in order
-
20  * to save Flash, RAM, and CPU use at runtime. This section lists various global options, but in addition, most ports allow additional hardware dependent
-
21  * configuration options. See @ref hardware.
-
22  *
-
23  * Several configuration examples are provided in the "config" folder of the Mozzi sources. You may want to look at these, first. The general approach is as follows:
-
24  *
-
25  * @code
-
26  * #include <MozziConfigValues.h> // include this first, for named option values
-
27  * #define MOZZI_AUDIO_CHANNELS MOZZI_STEREO // set to stereo mode
-
28  *
-
29  * #include <Mozzi.h> // *after* all configuration options, include the main Mozzi headers
-
30  * @endcode
-
31  *
-
32  * Alternatively, if a suitable configuration example exists, use:
-
33  * @code
-
34  * #include <config/config_example_avr_stereo.h> // again, do this, before including the main headers
-
35  * @endcode
-
36  *
-
37  * @note
-
38  * Should you include Mozzi headers in more than one compilation unit (i.e. more than one .cpp file) inside the same sketch, you *must* use identical
-
39  * configuration options at the top of each file!
-
40  *
-
41  * TODO: Fix and complete Doxygen coverage
-
42 */
-
43 
-
44 /** @ingroup config
-
45  * @def MOZZI_COMPATIBILITY_LEVEL
-
46  *
-
47  * Mozzi generally tries to keep your old sketches working, but we continue to find new (and hopefully better) approaches to old problems.
-
48  * Sometimes, keeping API compatibilty with the pre-existing solution may come with a smaller or larger penalty in terms of performance or code size.
-
49  * Therefore - if your sketch supports it - you may be able to get some minor benefit from disabling compatibility code.
-
50  *
-
51  * Currently supported values are:
-
52  * - MOZZI_COMPATIBILITY_1_1 - try to support sketches written for Mozzi version 1.1 (or possibly lower); this is the default when including MozziGuts.h
-
53  * - MOZZI_COMPATIBILITY_2_0 - try to support sketches written for Mozzi version 2.0; this is - currently - the default when including Mozzi.h
-
54  * - MOZZI_COMPATIBILITY_LATEST - always live on the bleeding edge
-
55  *
-
56  * @note
-
57  * MOZZI_COMPATIBILITY_V1_1 does not guarantee, that *everything* from Mozzi 1.1 will continue to work, just that we're doing a reasonable effort.
-
58 */
-
59 #define MOZZI_COMPATIBILITY_LEVEL FOR_DOXYGEN_ONLY
-
60 
-
61 /** @ingroup config
-
62  * @def MOZZI_AUDIO_MODE
-
63  *
-
64  * @brief Configure how Mozzi outputs generated sounds.
-
65  *
-
66  * @note
-
67  * Not all options are available on all platforms, and several options require specific wiring or external components to function on top of this!
-
68  * When customizing this, it is highly recommended to start experimenting with a simple and known-to-work sketch (such as a basic sinewave) to verify that your
-
69  * hardware setup is correct. Similarly, if you observe problems running your "real" sketch, it is often a good idea ot test your sketch with the default audio mode,
-
70  * too (by leaving this option, and preferrably all others, unset).
-
71  *
-
72  * Refer to the @ref hardware specific documentation for which modes are supported on your hardware, and further details!
-
73  *
-
74  * Supported values:
-
75  * - MOZZI_OUTPUT_PWM Output using pulse width modulation (PWM) on a GPIO pin. This is the default on most platforms.
-
76  * On the Arduino Uno (more generally ATMEGA328P), this allows for a sample resolution of 488 (almost 9 bits) on pin 9.
-
77  * Usable pins and resolution will be different on other boards.
-
78  * - MOZZI_OUTPUT_2PIN_PWM Output using pulse width modulation on two GPIO pins, where one pin represents the lower bits, and the other the higer bits of the sample.
-
79  * On the Aduino Uno, this allows for 14 bits of resolution on pins 9 (low) and 10 (high). For further information (wiring etc.) see @ref hardware_avr_2pin.
-
80  * - MOZZI_OUTPUT_EXTERNAL_TIMED Output is not controlled by Mozzi itself, but left to the user sketch. This setting allows to completely customize the audio output, e.g.
-
81  * for connecting to external DACs. For more detail, see @ref external_audio
-
82  * - MOZZI_OUTPUT_EXTERNAL_CUSTOM As above, but additionally bypassing Mozzi's sample buffer. For more detail, see @ref external_audio
-
83  * - MOZZI_OUTPUT_PDM_VIA_I2S Output pulse density modulated (PDM) samples via a (hardware) I2S interface (without a DAC connected to it).
-
84  * - MOZZI_OUTPUT_PDM_VIA_SERIAL Output pulse density modulated (PDM) samples via a hardware serial interface.
-
85  * - MOZZI_OUTPUT_I2S_DAC Output samples to a PT8211 (or compatible) DAC connected to a hardware I2S interface.
-
86  * - MOZZI_OUTPUT_INTERNAL_DAC Output to the interal DAC on boards that support one.
-
87  *
-
88  * TODO: Adding an R2R-DAC option would be cool, http://blog.makezine.com/2008/05/29/makeit-protodac-shield-fo/ , some discussion on Mozzi-users.
-
89 */
-
90 #define MOZZI_AUDIO_MODE FOR_DOXYGEN_ONLY
-
91 
-
92 /** @ingroup config
-
93  * @def MOZZI_AUDIO_CHANNELS
-
94  *
-
95  * This sets allows to change from a single/mono audio output channel to
-
96  * stereo output. To actually generate two channels, your updateAudio()-function
-
97  * should return a StereoOutput(). Sketches returning a MonoOutput() in a stereo
-
98  * config, or vice versa will continue to work, but will generate a warning a
-
99  * compile time.
-
100  *
-
101  * @note This option superseeds the earlier STEREO_HACK in Mozzi < 1.1
-
102  *
-
103  * @note At the time of this writing, only MOZZI_MONO and MOZZI_STEREO are supported. The value of
-
104  * MOZZI_MONO is 1 and the value of MOZZI_STEREO is 2, so future extensions are also expected
-
105  * to set this to the number of available channels, and it's ok to use numerical comparison. */
-
106 #define MOZZI_AUDIO_CHANNELS FOR_DOXYGEN_ONLY
-
107 
-
108 
-
109 /** @ingroup config
-
110  * @def MOZZI_AUDIO_RATE
-
111  *
-
112  * @brief Defines the audio rate, i.e. rate of samples output per second.
-
113  *
-
114  * The default rate on the classis Arduino Uno is 16384 Hz, but can be increased to 32768 Hz, subject to the caveats, detailed below. For most other platforms 32678 Hz
-
115  * is the default, but even higher rates may be supported.
-
116  *.
-
117  * Increasing the rate allows for better frequency response, but generally all affects achievable sample bitdepth (especially from PWM output).
-
118  * Also, of course, doubling the sample rate also halves the amount of time available to calculate the each sample, so it
-
119  * may only be useful for relatively simple sketches. The increased frequency response can also make
-
120  * unwanted artefacts of low resolution synthesis calculations more apparent, so it's not always a bonus.
-
121  *
-
122  * It is highly recommended to keep the audio rate a power of two (16384, 32678, 64536, etc.), as some internal calculations can be highly be optimised for speed, this way.
-
123  *
-
124  * @note
-
125  * For compatibility reasons, the option MOZZI_AUDIO_RATE is automatically set to the same value as this option, and you will find some uses of that in old (pre Mozzi 2.0) code examples.
-
126  * It is advised to use only MOZZI_AUDIO_RATE in new code, however.
-
127  * TODO: Only do the above, for MOZZI_COMPATIBILITY_LEVEL < MOZZI_COMPATIBILITY_2_0?
-
128  */
-
129 #define MOZZI_AUDIO_RATE FOR_DOXYGEN_ONLY
-
130 
-
131 
-
132 /** @ingroup config
-
133  * @def MOZZI_CONTROL_RATE
-
134  *
-
135  * @brief Control rate setting.
-
136  *
-
137  * Mozzi's MOZZI_CONTROL_RATE sets how many times per second updateControl() is called.
-
138  * MOZZI_CONTROL_RATE has a default of 64 Hz. It is useful to have MOZZI_CONTROL_RATE set at a power of 2 (such as 64,128,256 etc),
-
139  * to have exact timing of audio and control operations. Non-power-of-2 MOZZI_CONTROL_RATE can cause glitches due to audio and control
-
140  * events not lining up precisely. If this happens a power of two MOZZI_CONTROL_RATE might solve it.
-
141  *
-
142  * Try to keep MOZZI_CONTROL_RATE low, for efficiency, though higher rates up to about 1000
-
143  * can sometimes give smoother results, avoiding the need to interpolate
-
144  * sensitive variables at audio rate in updateAudio().
-
145  *
-
146  * TODO: If a definition of MOZZI_CONTROL_RATE is detected, apply that with a warning.
-
147 */
-
148 #define MOZZI_CONTROL_RATE FOR_DOXYGEN_ONLY
-
149 
-
150 
-
151 /** @ingroup config
-
152  * @def MOZZI_ANALOG_READ
-
153  *
-
154  * Whether to compile in support for non-blocking analog reads. This is enabled by default on platforms that support it, but may be
-
155  * disabled, explicitly, to save resources, or in order to implement custom read schemes (e.g. with IO multiplexing).
-
156  *
-
157  * For simplicity, mozziAnalogRead() is always defined, but when MOZZI_ANALOG_READ s are disabled or unsupported, it simply relays
-
158  * to Arduino's regular analogRead(). It is thus quite recommended _not_ to depend on mozziAnalogRead() when disabling this.
-
159  *
-
160  * As a rough estimate (your numbers may differ a bit, depending on compiler version, etc.), on an ATMEGA328P (aka Arduino Uno),
-
161  * disabling analog reads saves 33 bytes of RAM and 340 bytes of FLASH. The performance savings are theorized to be neglegible, however.
-
162  *
-
163  * Currently allowed values are:
-
164  * - MOZZI_ANALOG_READ_NONE
-
165  * Disabled
-
166  * - MOZZI_ANALOG_READ_STANDARD
-
167  * Analog read implementation enabled (currently there is only the "standard" method, but future versions might allow additional choice, here).
-
168 */
-
169 #define MOZZI_ANALOG_READ FOR_DOXYGEN_ONLY
-
170 
-
171 
-
172 /** @ingroup config
-
173  * @def MOZZI_AUDIO_INPUT
-
174  *
-
175  * Whether to enable built in audio input feature. This is not supported on all platforms, and
-
176  * on platforms that do support it may come with a considerable performance overhead. Don't enable, unless you need this.
-
177  *
-
178  * Currently allowed values are:
-
179  * - MOZZI_AUDIO_INPUT_NONE
-
180  * No audio input
-
181  * - MOZZI_AUDIO_INPUT_STANDARD
-
182  * Audio input enabled (currently there is only the "standard" method, but future versions might allow additional choice, here).
-
183  * This mode implies that MOZZI_ANALOG_READ s are enabled and supported. You may have to call setupFastAnalogReads(FASTEST_ADC)
-
184  * after setupMozzi(), when using this.
-
185  *
-
186  * Further reading and config: @ref getAudioInput() @ref MOZZI_AUDIO_INPUT_PIN
-
187 */
-
188 #define MOZZI_AUDIO_INPUT FOR_DOXYGEN_ONLY
-
189 
-
190 
-
191 /** @ingroup config
-
192  * @def MOZZI_AUDIO_INPUT_PIN
-
193  *
-
194  * This sets which analog input channel to use for audio input, if you have enabled MOZZI_AUDIO_INPUT, above.
-
195  * Not all pins may be available for this, be sure to check the documentation for your platform.
-
196 */
-
197 #define MOZZI_AUDIO_INPUT_PIN FOR_DOXYGEN_ONLY
-
198 
-
199 
-
200 /** @ingroup config
-
201  * @def MOZZI_PWM_RATE
-
202  *
-
203  * <em>Only for MOZZI_AUDIO_MODE s MOZZI_OUTPUT_PWM and MOZZI_OUTPUT_2PIN_PWM</em>. On some platforms, the rate at which PWM signals are repeated may be higher
-
204  * than that at with audio signals are produced (i.e. MOZZI_AUDIO_RATE). E.g. for MOZZI_OUTPUT_PWM on the classic Arduino, the pwm defaults to 32768 while the
-
205  * audio rate defaults to 16384. The reasoning behind this is that 16384 Hz audio rate turned out to be te most useful compromise - in most casses - between
-
206  * output quality, and available computing power. However, output at that rate produced high-frequency whine, audible to some people, which could be mitigated
-
207  * by the higher PWM rate.
-
208  *
-
209  * In other words, increasing this improves the signal quality at less cost than doubling the audio rate itself. However, increasing this too far will limit the dynamic resolution of the samples that can be
-
210  * written to the output pin(s): 2 ^ (output bits) * MOZZI_PWM_RATE cannot be higher than the CPU frequency!
-
211 */
-
212 #define MOZZI_PWM_RATE FOR_DOXYGEN_ONLY
-
213 
-
214 
-
215 /** @ingroup config
-
216  * @def MOZZI_AUDIO_BITS_PER_CHANNEL
-
217  *
-
218  * <em>Only for MOZZI_AUDIO_MODE MOZZI_OUTPUT_2PIN_PWM</em>. Sample resolution per channel to use in 2 pin output, given in bits (i.e. total resolution is twice as much).
-
219  * Defaults to 7 bits per channel. Note that increasing this requires very, very well matched output resistors.
-
220  *
-
221  * See @ref hardware_avr for a more detailed description.
-
222 */
-
223 #define MOZZI_AUDIO_BITS_PER_CHANNEL FOR_DOXYGEN_ONLY
-
224 
-
225 
-
226 /** @ingroup config
-
227  * @def MOZZI_AUDIO_PIN_1
-
228  *
-
229  * Only for MOZZI_AUDIO_MODE s MOZZI_OUTPUT_PWM and MOZZI_OUTPUT_2PIN_PWM: The IO pin to use as (first) audio output. This **must** be attached to Timer1.
-
230  * When settings this, you alsso need to specify the output compare register responsible for this pin (either OCR1A or OCR1B).
-
231  *
-
232  * Example:
-
233  * @code
-
234  * #define MOZZI_AUDIO_PIN_1 TIMER1_B_PIN
-
235  * #define MOZZI_AUDIO_PIN_1_REGISTER OCR1B // must also specify this, when customizing MOZZI_AUDIO_PIN_1
-
236  * @endcode
-
237  *
-
238  * Equivalent definitions can be used to control the pin for the right audio channel (in stereo mode), or the low byte channel (in 2 Pin PWM mode):
-
239  *
-
240  * @code
-
241  * #define MOZZI_AUDIO_PIN_2 [...]
-
242  * #define MOZZI_AUDIO_PIN_2_REGISTER [the matching OCR]
-
243  * // or
-
244  * #define MOZZI_AUDIO_PIN_1_LOW [...]
-
245  * #define MOZZI_AUDIO_PIN_1_LOW_REGISTER [the matching OCR]
-
246  * @endcode
-
247  *
-
248  * @see config/known_16bit_timers.h
-
249  * */
-
250 #define MOZZI_AUDIO_PIN_1 FOR_DOXYGEN_ONLY
-
251 
-
252 
-
253 /***************************************** ADVANCED SETTTINGS -- External audio output ******************************************
-
254  *
-
255  * The settings in the following section applies to MOZZI_OUTPUT_EXTERNAL_TIMED, and MOZZI_OUTPUT_EXTERNAL_CUSTOM, only.
-
256  *
-
257 ********************************************************************************************************************************/
-
258 
-
259 /** @ingroup audio_output
-
260  *
-
261  * @page external_audio External audio output
-
262  * @details
-
263  * <em>Only for @ref MOZZI_AUDIO_MODE set to MOZZI_OUTPUT_EXTERNAL_TIMED or MOZZI_OUTPUT_EXTERNAL_CUSTOM</em>. Most (all?) platforms support
-
264  * output using an "external" function. When using this option, you will need to provide a suitable definition for audioOutput() in
-
265  * your own sketch, yourself. Some understanding of the general Mozzi audio output architecture may be recommendable, when using this
-
266  * mode: See @ref AudioOutput .
-
267  *
-
268  * In the more simple case (MOZZI_OUTPUT_EXTERNAL_TIMED), Mozzi will still take care of buffering the samples, and calling this function
-
269  * at audio rate (hence "timed"). This generally involves use of a timer, which should be detailed in the @ref hardware details for
-
270  * your platform.
-
271  *
-
272  * Should you desire even more control - perhaps because your board, or your external DAC already comes with a rate controlled DMA buffer -
-
273  * using MOZZI_OUTPUT_EXTERNAL_CUSTOM also bypasses Mozzis sample buffer. In addition to audioOutput(), you will then need to provide
-
274  * a definition for canBufferAudioOutput(), which will control the rate at which samples are produced. In essence, whenever
-
275  * canBufferAudioOutput() returns true, Mozzi will call updateAudio(), and pass the produced sample to audioOutput(), unbuffered. It is
-
276  * entirely your job to make sure that this actually happens at MOZZI_AUDIO_RATE, and / or an appropriate buffer gets used.
-
277  *
-
278  * One additional configuration setting is MOZZI_AUDIO_BITS, which defaults to 16 bits for this mode, but might be set higher, if your
-
279  * hardware supports it.
-
280  *
-
281  * @see config
-
282 */
-
283 
-
284 
-
285 /** @ingroup config
-
286  * @def MOZZI_AUDIO_BITS
-
287  *
-
288  * Output resolution of audio samples. In most cases you should leave this value untouched (for the defaults that get applied, see @ref hardware .
-
289  * However, for MOZZI_AUDIO_MODE s MOZZI_OUTPUT_EXTERNAL_TIMED and MOZZI_OUTPUT_EXTERNAL_CUSTOM you way wish to customize the default value
-
290  * of 16 bits.
-
291  *
-
292  * @note
-
293  * At the time of this writng single audio samples are stored as "int", unconditionally. This limits MOZZI_AUDIO_BITS to a maximum of 16 bits on
-
294  * some 8 bit boards!
-
295  */
-
296 #define MOZZI_AUDIO_BITS FOR_DOXYGEN_ONLY
-
297 
-
298 #endif
-
-
- - - diff --git a/extras/doc/html/mozzi__fixmath_8cpp_source.html b/extras/doc/html/mozzi__fixmath_8cpp_source.html deleted file mode 100644 index 3eebfffa3..000000000 --- a/extras/doc/html/mozzi__fixmath_8cpp_source.html +++ /dev/null @@ -1,293 +0,0 @@ - - - - - - - -Mozzi: mozzi_fixmath.cpp Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
mozzi_fixmath.cpp
-
-
-
1 /*
-
2  * mozzi_fixmath.cpp
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 #include "mozzi_fixmath.h"
-
13 
-
14 /** @ingroup fixmath
-
15 @{
-
16 */
-
17 
-
18 //Snipped from http://code.google.com/p/ht1632c/wiki/Optimizations
-
19 //TB2012 changed names to not interfere with arduino compilation
-
20 //Fast integer math
-
21 //
-
22 //If you need to include arithmetic operations in you code but you don't need
-
23 //floating point operations, you could use boolean operations instead of arithmetic
-
24 //operations, or use smaller data types and custom functions instead of stdlib functions
-
25 //or C operators (expecially / and %).
-
26 //Look at IntegerCodeSnippets, http://code.google.com/p/ht1632c/wiki/IntegerCodeSnippets
-
27 //
-
28 //Here is some ready to use fast integer 1 uint8_t wide math functions (from ht1632c library).
-
29 
-
30 /**
-
31 fast uint8_t modulus
-
32 @param n numerator
-
33 @param d denominator
-
34 @return modulus
-
35 */
- -
37 {
-
38  while(n >= d)
-
39  n -= d;
-
40  return n;
-
41 }
-
42 
-
43 /** Fast uint8_t division
-
44 @param n numerator
-
45 @param d denominator
-
46 @return quotient
-
47 */
- -
49 {
-
50  uint8_t q = 0;
-
51  while(n >= d)
-
52  {
-
53  n -= d;
-
54  q++;
-
55  }
-
56  return q;
-
57 }
-
58 
-
59 /* fast integer (1 uint8_t) PRNG */
-
60 uint8_t uint8_tRnd(uint8_t min, uint8_t max)
-
61 {
-
62  static uint8_t seed;
-
63  seed = (21 * seed + 21);
-
64  return min + uint8_tMod(seed, --max);
-
65 }
-
66 //WARNING: don't use this uint8_tRnd() function for cryptography!
-
67 
-
68 //} of snip from http://code.google.com/p/ht1632c/wiki/Optimizations
-
69 
-
70 
-
71 
-
72 // from http://stackoverflow.com/questions/101439/the-most-efficient-way-to-implement-an-integer-based-power-function-powint-int
-
73 /* Exponentiation by squaring.
-
74 */
-
75 int ipow(int base, int exp)
-
76 {
-
77  int result = 1;
-
78  while (exp)
-
79  {
-
80  if (exp & 1)
-
81  result *= base;
-
82  exp >>= 1;
-
83  base *= base;
-
84  }
-
85 
-
86  return result;
-
87 }
-
88 
-
89 
-
90 /*
-
91 from: http://objectmix.com/vhdl/189970-2-powerof-x-where-x-fixed-point-value-2.html
-
92 
-
93 to do 2^(x.y) first find
-
94 2^x and 2^(x+1) through bit shifting 1 to the left by x and (x + 1) places
-
95 
-
96 now you do linear interpolation by drawing a line through these two points 2^x,
-
97 2^(x+1), then use f = m*x+b. the slope, m = rise over run
-
98 = (2^(x+1) - 2^x)/((x+1) - (x))
-
99 = 2^(x) * (2 - 1) / 1
-
100 = 2^(x)
-
101 b = 2^x, so to linearly interpolate do....(edited out typo)..
-
102 f = 2^(x) * (y) + 2^x
-
103 = 2^x * (y + 1)
-
104 where x is integer part, y is fractional part
-
105 */
-
106 
-
107 
-
108 /**
-
109 fast replacement for pow(2,x), where x is a Q8n8 fractional
-
110 fixed-point exponent. It's less accurate than pow(2,x), but useful where a
-
111 tradeoff between accuracy and speed is required to keep audio from glitching.
-
112 @param exponent in Q8n8 format.
-
113 @return pow(2,x) in Q16n16 format.
-
114 @todo Q16n16_pow2() accuracy needs more attention.
-
115 */
-
116 Q16n16 Q16n16_pow2(Q8n8 exponent)
-
117 {
-
118  // to do 2^(x.y) first find
-
119  //2^x and 2^(x+1) through bit shifting 1 to the left by x and (x + 1) places
-
120  uint8_t Q = (uint8_t)((Q8n8)exponent>>8); // integer part
-
121  uint8_t n = (uint8_t) exponent; // fractional part
-
122  // f = 2^x * (y + 1)
-
123  return (((Q16n16)Q8n8_FIX1 << Q) * (Q8n8_FIX1 + n));
-
124 }
-
125 
-
126 
-
127 
-
128 
-
129 //http://www.codecodex.com/wiki/Calculate_an_integer_square_root
-
130 //see Integer Square Roots by Jack W. Crenshaw, figure 2, http://www.embedded.com/electronics-blogs/programmer-s-toolbox/4219659/Integer-Square-Roots
-
131 
-
132 uint32_t // OR uint16 OR uint8_t
-
133 isqrt32 (uint32_t n) // OR isqrt16 ( uint16_t n ) OR isqrt8 ( uint8_t n ) - respectively [ OR overloaded as isqrt (uint16_t?? n) in C++ ]
-
134 {
-
135  uint32_t // OR register uint16_t OR register uint8_t - respectively
-
136  root, remainder, place;
-
137 
-
138  root = 0;
-
139  remainder = n;
-
140  place = 0x40000000; // OR place = 0x4000; OR place = 0x40; - respectively
-
141 
-
142  while (place > remainder)
-
143  place = place >> 2;
-
144  while (place)
-
145  {
-
146  if (remainder >= root + place)
-
147  {
-
148  remainder = remainder - root - place;
-
149  root = root + (place << 1);
-
150  }
-
151  root = root >> 1;
-
152  place = place >> 2;
-
153  }
-
154  return root;
-
155 }
-
156 
-
157 
-
158 //http://www.codecodex.com/wiki/Calculate_an_integer_square_root
-
159 uint16_t // OR uint16_t OR uint8_t
-
160 isqrt16 (uint16_t n) // OR isqrt16 ( uint16_t n ) OR isqrt8 ( uint8_t n ) - respectively [ OR overloaded as isqrt (uint16_t?? n) in C++ ]
-
161 {
-
162  uint16_t // OR register uint16_t OR register uint8_t - respectively
-
163  root, remainder, place;
-
164 
-
165  root = 0;
-
166  remainder = n;
-
167  place = 0x4000; // OR place = 0x4000; OR place = 0x40; - respectively
-
168 
-
169  while (place > remainder)
-
170  place = place >> 2;
-
171  while (place)
-
172  {
-
173  if (remainder >= root + place)
-
174  {
-
175  remainder = remainder - root - place;
-
176  root = root + (place << 1);
-
177  }
-
178  root = root >> 1;
-
179  place = place >> 2;
-
180  }
-
181  return root;
-
182 }
-
183 
-
184 
-
185 /** @} */
-
-
- - - diff --git a/extras/doc/html/mozzi__fixmath_8h_source.html b/extras/doc/html/mozzi__fixmath_8h_source.html deleted file mode 100644 index 260a264ba..000000000 --- a/extras/doc/html/mozzi__fixmath_8h_source.html +++ /dev/null @@ -1,527 +0,0 @@ - - - - - - - -Mozzi: mozzi_fixmath.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
mozzi_fixmath.h
-
-
-
1 /*
-
2  * mozzi_fixmath.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 #ifndef FIXEDMATH_H_
-
13 #define FIXEDMATH_H_
-
14 
-
15 #include <Arduino.h>
-
16 
-
17 /** @defgroup fixmath Fast integer based fixed-point arithmetic
-
18 
-
19 @note For new sketches it is recommended to utitlize the FixMath library with its typesafe classes UFix and SFix, instead of these
-
20  typedefs! See https://github.com/tomcombriat/FixMath . These are provided for backwards compatibility, only.
-
21 
-
22 Fixed point fractional number types and conversion routines. Fixed point is often best for fast audio code for Arduino, and these can ease some of the pain. </p><dl class="section note"><dt>Note</dt><dd>Take care when converting that the important bits of your numbers will fit in the types you choose!
-
23 
-
24 Timing: converting between fixed and float 10-12us, converting between fixed types about 1us.
-
25 */
-
26 
-
27 /** @ingroup fixmath
-
28 @{
-
29 */
-
30 // types
-
31 typedef int8_t Q0n7; /**< signed fractional number using 7 fractional bits, represents -0.5 to 0.496*/
-
32 typedef int8_t Q7n0; /**< ordinary old signed Q7n0 int8_t with 0 fractional bits, represents -128 to 127*/
-
33 typedef uint8_t Q0n8; /**< unsigned fractional number using 8 fractional bits, represents 0.0 to 0.996*/
-
34 typedef uint8_t Q8n0; /**< normal uint8_t with 0 fractional bits, represents 0.0 to 255.0*/
-
35 typedef uint16_t Q0n16; /**< unsigned fractional number using 16 fractional bits, represents 0.0 to 0.999*/
-
36 typedef uint32_t Q0n31; /**< signed number using 0 integer bits and 31 fractional bits, represents -0.2147483648 to 0.2147483647*/
-
37 typedef int16_t Q7n8; /**< signed fractional number using 7 integer bits and 8 fractional bits, represents -127.996 to 127.996*/
-
38 typedef uint16_t Q3n13; /**< unsigned fractional number using 3 integer bits and 13 fractional bits, represents 0 to 7.999*/
-
39 typedef int16_t Q1n14; /**< signed fractional number using 1 integer bit and 14 fractional bits, represents -1.999 to 1.999*/
-
40 typedef int16_t Q15n0; /**< signed number using 15 integer bits and 0 fractional bits, represents -32768 to 32767*/
-
41 typedef uint16_t Q8n8; /**< unsigned fractional number using 8 integer bits and 8 fractional bits, represents 0 to 255.996*/
-
42 typedef int16_t Q0n15; /**< signed fractional number using 0 integer bits and 15 fractional bits, represents -0.32768 to 0.32767*/
-
43 typedef uint16_t Q1n15; /**< unsigned fractional number using 1 integer bit and 15 fractional bits, represents 0 to 1.999*/
-
44 typedef uint16_t Q16n0; /**< unsigned number using 16 integer bits and 0 fractional bits, represents 0 to 65536.0*/
-
45 typedef int32_t Q23n8; /**< signed fractional number using 23 integer bits and 8 fractional bits, represents -8388607.996 to 8388607.996*/
-
46 typedef int32_t Q15n16; /**< signed fractional number using 15 integer bits and 16 fractional bits, represents -32767.999 to 32767.999*/
-
47 typedef int32_t Q31n0; /**< signed (normal int32_t int16_t) number using 31 integer bits and 0 fractional bits, represents -2147483648 to 2147483647*/
-
48 typedef uint32_t Q32n0; /**< unsigned (normal uint32_t int16_t) number using 32 integer bits and 0 fractional bits, represents 0 to 4294967295*/
-
49 typedef uint32_t Q0n32; /**< unsigned fractional number using 0 integer bits and 32 fractional bits, represents 0 to 0.999999999767169*/
-
50 typedef uint32_t Q8n24; /**< signed fractional number using 8 integer bits and 24 fractional bits, represents 0 to 255.999*/
-
51 typedef uint32_t Q24n8; /**< unsigned fractional number using 24 integer bits and 8 fractional bits, represents 0 to 16777215*/
-
52 typedef uint32_t Q16n16; /**< unsigned fractional number using 16 integer bits and 16 fractional bits, represents 0 to 65535.999*/
-
53 /** @}*/
-
54 
-
55 /** @ingroup fixmath
-
56 @{
-
57 */
-
58 // macros to save runtime calculations for representations of 1
-
59 #define Q0n7_FIX1 ((Q0n7) 127) /**< 0.992 in Q0n7 format*/
-
60 #define Q7n8_FIX1 ((Q7n8) 256) /**< 1 in Q7n8 format*/
-
61 #define Q8n8_FIX1 ((Q8n8) 256) /**< 1 in Q8n8 format*/
-
62 #define Q23n8_FIX1 ((Q23n8) 256) /**< 1 in Q23n8 format*/
-
63 #define Q1n14_FIX1 ((Q1n14) 16384) /**< 1 in Q1n14 format*/
-
64 #define Q1n15_FIX1 ((Q1n15) 32768) /**< 1 in Q1n15 format*/
-
65 #define Q16n16_FIX1 ((Q16n16) 65536) /**< 1 in Q16n16 format*/
-
66 #define Q0n15_FIX1 ((Q0n15) 32767) /**< 0.999 in Q0n15 format*/
-
67 #define Q0n16_FIX1 ((Q0n16) 65535) /**< 0.999 in Q0n16 format*/
-
68 #define Q15n0_FIX1 ((Q15n0) 16384) /**< 1 in Q15n0 format*/
-
69 #define Q15n16_FIX1 ((Q15n16) 65536) /**< 1 in Q15n16 format*/
-
70 #define Q8n24_FIX1 ((Q8n24) 16777216) /**< 1 in Q8n24 format*/
-
71 #define Q0n32_FIX1 ((Q0n32) 4294967295) /**< 0.999999999767169 in Q0n32 format*/
-
72 
-
73 #define Q16n16_PI ((Q16n16) 205887) /**< PI in Q16n16 format*/
-
74 #define Q3n13_2PI ((Q3n13) 411775) /**< 2*PI in Q3n13 format*/
-
75 #define Q16n16_2PI ((Q16n16) 411775) /**< 2*PI in Q16n16 format*/
-
76 
-
77 #define low15bits ((Q1n15) 32767) /**< Useful for keeping the lower 15 bits of a Q1n15 number, using &*/
-
78 /** @}*/
-
79 
-
80 
-
81 /*
-
82 Type conversions: Float to Q
-
83 
-
84 To convert a number from floating point to Qm.n format:
-
85 
-
86  Multiply the floating point number by 2^n
-
87  Round to the nearest integer
-
88 
-
89 Q to float
-
90 
-
91 To convert a number from Qm.n format to floating point:
-
92 
-
93  Convert the number to floating point as if it were an integer
-
94  Multiply by 2^-n
-
95 */
-
96 /** @ingroup fixmath
-
97 @{
-
98 */
-
99 inline
-
100 Q0n7 float_to_Q0n7(float a) { return static_cast<Q0n7>(a*256); } /**<Convert float to Q0n7 fix. @param a is a float*/
-
101 
-
102 inline
-
103 Q0n8 float_to_Q0n8(float a) { return static_cast<Q0n8>(a*256); } /**<Convert float to Q0n8 fix. @param a is a float*/
-
104 
-
105 inline
-
106 Q7n8 float_to_Q7n8(float a) { return static_cast<Q7n8>(a*256); } /**<Convert float to Q7n8 fix. @param a is a float*/
-
107 
-
108 inline
-
109 Q8n8 float_to_Q8n8(float a) { return static_cast<Q8n8>(a*256); } /**<Convert float to Q8n8 fix. @param a is a float*/
-
110 
-
111 inline
-
112 Q1n14 float_to_Q1n14(float a) { return static_cast<Q1n14>(a*16384); } /**<Convert float to Q1n14 fix. @param a is a float*/
-
113 
-
114 inline
-
115 Q1n15 float_to_Q1n15(float a) { return static_cast<Q1n15>(a*32768); } /**<Convert float to Q1n15 fix. @param a is a float*/
-
116 
-
117 inline
-
118 Q8n24 float_to_Q8n24(float a) { return static_cast<Q8n24>(a*16777216); } /**<Convert float to Q8n24 fix. @param a is a float*/
-
119 
-
120 inline
-
121 Q23n8 float_to_Q23n8(float a) { return static_cast<Q23n8>(a*256); } /**<Convert float to Q23n8 fix. @param a is a float*/
-
122 
-
123 inline
-
124 Q24n8 float_to_Q24n8(float a) { return static_cast<Q24n8>(a*256); } /**<Convert float to Q24n8 fix. @param a is a float*/
-
125 
-
126 inline
-
127 Q16n16 float_to_Q16n16(float a) { return static_cast<Q16n16>(a*65536); } /**<Convert float to Q16n16 fix. @param a is a float*/
-
128 
-
129 inline
-
130 Q0n16 float_to_Q0n16(float a) { return static_cast<Q0n16>(a*65536); } /**<Convert float to Q0n16 fix. @param a is a float*/
-
131 
-
132 inline
-
133 Q15n16 float_to_Q15n16(float a) { return static_cast<Q15n16>(a*65536); } /**<Convert float to Q15n16 fix. @param a is a float*/
-
134 
-
135 inline
-
136 Q1n14 Q0n7_to_Q1n14(Q0n7 a) { return (static_cast<Q1n14>(a))<<7; } /**<Convert Q0n7 int8_t to Q1n14 fix. @param a is a Q0n7 int8_t */
-
137 
-
138 inline
-
139 Q15n16 Q0n7_to_Q15n16(Q0n7 a) { return (static_cast<Q15n16>(a))<<8; } /**<Convert Q0n7 signed int8_t to Q15n16 fix. @param a is a Q0n7 signed int8_t */
-
140 
-
141 inline
-
142 float Q0n7_to_float(Q0n7 a) { return (static_cast<float>(a))/256; } /**<Convert Q0n7 fix to float. @param a is a Q0n7 int8_t*/
-
143 
-
144 inline
-
145 Q1n15 Q0n8_to_Q1n15(Q0n8 a) { return (static_cast<Q1n15>(a))<<7; } /**<Convert Q0n8 uint8_t to Q1n15 fix. @param a is a Q0n8 uint8_t */
-
146 
-
147 inline
-
148 Q8n8 Q0n8_to_Q8n8(Q0n8 a) { return (static_cast<Q8n8>(a))<<8; } /**<Convert Q0n8 uint8_t to Q8n8 fix. @param a is a Q0n8 uint8_t */
-
149 
-
150 inline
-
151 Q8n24 Q0n8_to_Q8n24(Q0n8 a) { return (static_cast<Q8n24>(a))<<16; } /**<Convert Q0n8 uint8_t to Q8n24 fix. @param a is a Q0n8 uint8_t */
-
152 
-
153 inline
-
154 Q24n8 Q0n8_to_Q24n8(Q0n8 a) { return (static_cast<Q24n8>(a))<<8; } /**<Convert Q0n8 uint8_t to Q24n8 fix. @param a is a Q0n8 uint8_t */
-
155 
-
156 inline
-
157 Q15n16 Q0n8_to_Q15n16(Q0n8 a) { return (static_cast<Q15n16>(a))<<8; } /**<Convert Q0n8 uint8_t to Q15n16 fix. @param a is a Q0n8 uint8_t */
-
158 
-
159 inline
-
160 Q16n16 Q0n8_to_Q16n16(Q0n8 a) { return (static_cast<Q16n16>(a))<<8; } /**<Convert Q0n8 uint8_t to Q16n16 fix. @param a is a Q0n8 uint8_t */
-
161 
-
162 inline
-
163 float Q0n8_to_float(Q0n8 a) { return (static_cast<float>(a))/256; } /**<Convert Q0n8 fix to float. @param a is a Q0n8 uint8_t*/
-
164 
-
165 inline
-
166 Q7n8 Q7n0_to_Q7n8(Q7n0 a) { return (static_cast<Q7n8>(a))<<8; } /**<Convert Q7n0 int8_t to Q7n8 fix. @param a is a int8_t*/
-
167 
-
168 inline
-
169 Q15n16 Q7n0_to_Q15n16(Q7n0 a) { return (static_cast<Q15n16>(a))<<16; } /**<Convert Q7n0 int8_t to Q15n16 fix. @param a is a int8_t*/
-
170 
-
171 inline
-
172 Q7n8 Q8n0_to_Q7n8(Q8n0 a) { return (static_cast<Q7n8>(a))<<8; } /**<Convert Q8n0 uint8_t to Q7n8 fix. @param a is a Q8n0 uint8_t*. Beware of overflow. */
-
173 
-
174 inline
-
175 Q8n8 Q8n0_to_Q8n8(Q8n0 a) { return (static_cast<Q8n8>(a))<<8; } /**<Convert uint8_t to Q8n8 fix. @param a is a Q8n0 uint8_t*/
-
176 
-
177 inline
-
178 Q15n16 Q8n0_to_Q15n16(Q8n0 a) { return (static_cast<Q15n16>(a))<<16; } /**<Convert Q8n0 uint8_t to Q15n16 fix. @param a is a Q8n0 uint8_t */
-
179 
-
180 inline
-
181 Q16n16 Q8n0_to_Q16n16(Q8n0 a) { return (static_cast<Q16n16>(a))<<16; } /**<Convert Q8n0 uint8_t to Q16n16 fix. @param a is a Q8n0 uint8_t */
-
182 
-
183 inline
-
184 Q7n0 Q7n8_to_Q7n0(Q7n8 a) { return static_cast<Q7n0>((Q7n8)a>>8); } /**<Convert Q7n8 fix to Q7n0. @param a is a Q7n8 int16_t*/
-
185 
-
186 inline
-
187 Q15n16 Q7n8_to_Q15n16(Q7n8 a) { return (static_cast<Q15n16>(a))<<8; } /**<Convert Q7n8 fix to Q15n16. @param a is a Q7n8 int16_t*/
-
188 
-
189 inline
-
190 float Q7n8_to_float(Q7n8 a) { return (static_cast<float>(a))/256; } /**<Convert Q7n8 fix to float. @param a is a Q7n8 int16_t*/
-
191 
-
192 inline
-
193 Q8n0 Q8n8_to_Q8n0(Q8n8 a) { return static_cast<Q8n0>((Q8n8)a>>8); } /**<Convert Q8n8 fix to Q8n0 uint8_t. @param a is a Q8n8 uint16_t*/
-
194 
-
195 inline
-
196 Q16n16 Q8n8_to_Q16n16(Q8n8 a) { return (static_cast<Q16n16>(a))<<8; } /**<Convert Q8n8 fix to Q16n16 uint32_t. @param a is a Q8n8 uint16_t*/
-
197 
-
198 inline
-
199 float Q8n8_to_float(Q8n8 a) { return (static_cast<float>(a))/256; } /**<Convert Q8n8 fix to float. @param a is a Q8n8 uint16_t*/
-
200 
-
201 inline
-
202 Q0n7 Q1n14_to_Q0n7(Q1n14 a) { return static_cast<Q0n7>((Q1n14)a>>7); } /**<Convert Q1n14 fixed to Q0n7 int8_t. @param a is a Q1n14 int16_t*/
-
203 
-
204 inline
-
205 float Q1n14_to_float(Q1n14 a) { return (static_cast<float>(a))/16384; } /**<Convert fix to float. @param a is an int16_t*/
-
206 
-
207 inline
-
208 Q0n8 Q1n15_to_Q0n8(Q1n15 a) { return static_cast<Q0n8>((Q1n15)a>>7); } /**<Convert Q1n15 fixed to Q0n8 uint8_t. Only for positive values! @param a is a Q1n15 uint16_t*/
-
209 
-
210 inline
-
211 float Q1n15_to_float(Q1n15 a) { return (static_cast<float>(a))/32768; } /**<Convert fix to float. @param a is a Q1n15 uint16_t*/
-
212 
-
213 inline
-
214 float Q0n16_to_float(Q0n16 a) { return (static_cast<float>(a))/65536; } /**<Convert fix to float. @param a is a Q0n16 uint16_t*/
-
215 
-
216 inline
-
217 Q15n16 Q15n0_to_Q15n16(Q15n0 a) { return (static_cast<Q15n16>(a))<<16; } /**<Convert Q15n0 int16_t to Q15n16 fix. @param a is a Q15n0 int16_t */
-
218 
-
219 inline
-
220 Q15n16 Q16n0_to_Q15n16(Q16n0 a) { return (static_cast<Q15n16>(a))<<16; } /**<Convert Q16n0 uint16_t to Q15n16 fix. @param a is a Q16n0 uint16_t */
-
221 
-
222 inline
-
223 Q23n8 Q16n0_to_Q23n8(Q16n0 a) { return (static_cast<Q23n8>(a))<<8; } /**<Convert Q16n0 uint16_t to Q23n8 fixed point signed int32_t. @param a is a Q16n0 uint16_t*/
-
224 
-
225 inline
-
226 Q24n8 Q16n0_to_Q24n8(Q16n0 a) { return (static_cast<Q24n8>(a))<<8; } /**<Convert Q16n0 uint16_t to Q24n8 fixed point uint32_t. @param a is a Q16n0 uint16_t*/
-
227 
-
228 inline
-
229 Q16n16 Q16n0_to_Q16n16(Q16n0 a) { return (static_cast<Q16n16>(a))<<16; } /**<Convert Q16n0 uint16_t to Q16n16 fixed point uint32_t. @param a is a Q16n0 uint16_t*/
-
230 
-
231 inline
-
232 float Q16n0_to_float(Q16n0 a) { return (static_cast<float>(a)); } /**<Convert Q16n0 uint16_t to float. @param a is a Q16n0 uint16_t*/
-
233 
-
234 inline
-
235 Q0n8 Q8n24_to_Q0n8(Q8n24 a) { return static_cast<Q0n8>((Q8n24)a>>16); } /**<Convert Q8n24 fixed to Q0n8 uint8_t. @param a is a Q8n24 uint32_t*/
-
236 
-
237 inline
-
238 float Q8n24_to_float(Q8n24 a) { return (static_cast<float>(a))/16777216; } /**<Convert fix to float. @param a is a Q8n24 uint32_t*/
-
239 
-
240 
-
241 inline
-
242 Q31n0 Q23n8_to_Q31n0(Q23n8 a) { return static_cast<Q31n0>((Q23n8)a>>8); } /**<Convert Q23n8 fixed to Q31n0 int32_t. @param a is a Q23n8 int32_t*/
-
243 
-
244 inline
-
245 Q16n0 Q23n8_to_Q16n0(Q23n8 a) { return static_cast<Q16n0>((Q23n8)a>>8); } /**<Convert Q23n8 fixed to Q16n0 uint16_t. Positive values only. @param a is a Q23n8 int32_t*/
-
246 
-
247 inline
-
248 Q15n0 Q23n8_to_Q15n0(Q23n8 a) { return static_cast<Q15n0>((Q23n8)a>>8); } /**<Convert Q23n8 fixed to Q15n0 signed int16_t. @param a is a Q23n8 int32_t*/
-
249 
-
250 inline
-
251 Q7n8 Q23n8_to_Q7n8(Q23n8 a) { return static_cast<Q7n8>(a); } /**<Convert Q23n8 fixed to Q7n8 signed int16_t, losing most significant bits. @param a is a Q23n8 signed int32_t.*/
-
252 
-
253 
-
254 inline
-
255 float Q23n8_to_float(Q23n8 a) { return (static_cast<float>(a))/256; } /**<Convert fix to float. @param a is a Q23n8 signed int32_t*/
-
256 
-
257 inline
-
258 Q0n8 Q24n8_to_Q0n8(Q24n8 a) { return static_cast<Q0n8>(a); } /**<Convert Q24n8 fixed to Q0n8 uint8_t. @param a is a Q24n8 uint32_t*/
-
259 
-
260 inline
-
261 Q16n16 Q24n8_to_Q16n0(Q24n8 a) { return (static_cast<Q16n0>((Q24n8)a))>>8; } /**<Convert Q24n8 fixed to Q16n0 uint16_t. @param a is a Q24n8 uint32_t*/
-
262 
-
263 inline
-
264 Q32n0 Q24n8_to_Q32n0(Q24n8 a) { return static_cast<Q32n0>((Q24n8)a>>8); } /**<Convert Q24n8 fixed to Q32n0 uint32_t. @param a is a Q24n8 uint32_t*/
-
265 
-
266 inline
-
267 Q16n16 Q24n8_to_Q16n16(Q24n8 a) { return (static_cast<Q16n16>(a))<<8; } /**<Convert Q24n8 fixed to Q16n16 uint32_t. @param a is a Q24n8 uint32_t*/
-
268 
-
269 inline
-
270 float Q24n8_to_float(Q24n8 a) { return (static_cast<float>(a))/256; } /**<Convert fix to float. @param a is a Q24n8 uint32_t*/
-
271 
-
272 inline
-
273 Q0n8 Q15n16_to_Q0n8(Q15n16 a) { return static_cast<Q0n8>((Q15n16)a>>8); } /**<Convert Q15n16 fixed to Q0n8 uint8_t. Only for positive values! @param a is a Q15n16 signed int32_t*/
-
274 
-
275 inline
-
276 Q8n0 Q15n16_to_Q8n0(Q15n16 a) { return static_cast<Q8n0>((Q15n16)a>>16); } /**<Convert Q15n16 fixed to Q8n0 uint8_t. Only for positive values! @param a is a Q15n16 signed int32_t*/
-
277 
-
278 inline
-
279 Q15n0 Q15n16_to_Q15n0(Q15n16 a) { return static_cast<Q15n0>((Q15n16)a>>16); } /**<Convert Q15n16 fixed to Q15n0 signed int16_t. @param a is a Q15n16 signed int32_t*/
-
280 
-
281 inline
-
282 Q7n8 Q15n16_to_Q7n8(Q15n16 a) { return static_cast<Q7n8>((Q15n16)a>>8); } /**<Convert Q15n16 fixed to Q7n8 signed int16_t, keeping middle bits only. @param a is a Q15n16 signed int32_t.*/
-
283 
-
284 inline
-
285 Q8n8 Q15n16_to_Q8n8(Q15n16 a) { return static_cast<Q8n8>((Q15n16)a>>8); } /**<Convert Q15n16 fixed to Q8n8 signed int16_t, keeping middle bits only. @param a is a Q15n16 signed int32_t.*/
-
286 
-
287 inline
-
288 Q23n8 Q15n16_to_Q23n8(Q15n16 a) { return static_cast<Q23n8>((Q15n16)a>>8); } /**<Convert Q15n16 fixed to Q23n8 signed int32_t. @param a is a Q15n16 signed int32_t.*/
-
289 
-
290 inline
-
291 float Q15n16_to_float(Q15n16 a) { return (static_cast<float>(a))/65536; } /**<Convert fix to float. @param a is a Q15n16 signed int32_t*/
-
292 
-
293 inline
-
294 Q0n8 Q16n16_to_Q0n8(Q16n16 a) { return static_cast<Q0n8>((Q16n16)a>>8); } /**<Convert Q16n16 fixed to Q0n8 uint8_t. @param a is a Q16n16 uint32_t*/
-
295 
-
296 inline
-
297 Q8n8 Q16n16_to_Q8n8(Q8n8 a) { return static_cast<Q8n8>((Q16n16)a>>16); } /**<Convert Q16n16 fixed to Q8n8 uint16_t. @param a is a Q16n16 uint32_t*/
-
298 
-
299 inline
-
300 Q16n0 Q16n16_to_Q16n0(Q16n16 a) { return static_cast<Q16n0>((Q16n16)a>>16); } /**<Convert Q16n16 fixed to Q16n0 uint16_t. @param a is a Q16n16 uint32_t*/
-
301 
-
302 inline
-
303 Q24n8 Q16n16_to_Q24n8(Q16n16 a) { return static_cast<Q24n8>((Q16n16)a>>8); } /**<Convert Q16n16 fixed to Q24n8 uint32_t. @param a is a Q16n16 uint32_t*/
-
304 
-
305 inline
-
306 float Q16n16_to_float(Q16n16 a) { return (static_cast<float>(a))/65536; } /**<Convert fix to float. @param a is a Q16n16 uint32_t*/
-
307 /** @}*/
-
308 
-
309 /* @ingroup fixmath
-
310 Fast (?) fixed point multiply for Q7n8 fractional numbers.
-
311 The c version below is 3 times faster, and not subject to the same overflow limitations (+-3.99, or +-2048)
-
312 @param a Q7n8 format multiplicand
-
313 @param b Q7n8 format multiplier
-
314 @return a Q7n8 format product
-
315 */
-
316 /*
-
317 #define Q7n8_mult(a,b) \
-
318 ({ \
-
319 int16_t prod, val1=a, val2=b ; \
-
320 __asm__ __volatile__ ( \
-
321  "muls %B1, %B2 \n\t" \
-
322  "mov %B0, r0 \n\t" \
-
323  "mul %A1, %A2\n\t" \
-
324  "mov %A0, r1 \n\t" \
-
325  "mulsu %B1, %A2 \n\t" \
-
326  "add %A0, r0 \n\t" \
-
327  "adc %B0, r1 \n\t" \
-
328  "mulsu %B2, %A1 \n\t" \
-
329  "add %A0, r0 \n\t" \
-
330  "adc %B0, r1 \n\t" \
-
331  "clr r1 \n\t" \
-
332  : "=&d" (prod) \
-
333  : "a" (val1), "a" (val2) \
-
334  ); \
-
335  prod; \
-
336 })
-
337 */
-
338 
-
339 /** @ingroup fixmath
-
340 Fast fixed point multiply for Q7n8 fractional numbers.
-
341 @param a Q7n8 format multiplicand
-
342 @param b Q7n8 format multiplier
-
343 @return a Q7n8 format product
-
344 */
-
345 inline
-
346 Q7n8 Q7n8_mult(Q7n8 a, Q7n8 b) {
-
347  return ((int16_t)((((int32_t)(a))*(b))>>8));
-
348 }
-
349 
-
350 
-
351 /*
-
352 #define FMULS8(v1, v2) \
-
353 ({ \
-
354  uint8_t res; \
-
355  uint8_t val1 = v1; \
-
356  uint8_t val2 = v2; \
-
357  __asm__ __volatile__ \
-
358  ( \
-
359  "fmuls $1, $2" "\n\t" \
-
360  "mov $0, r1" "\n\t" \
-
361  "clr r1" "\n\t" \
-
362  : "=&d" (res) \
-
363  : "a" (val1), "a" (val2) \
-
364  ); \
-
365  res; \
-
366 }) */
-
367 
-
368 
-
369 /*
-
370 // from octosynth, Joe Marshall 2011:
-
371 
-
372  // multiply 2 16 bit numbers together and shift 8 without precision loss
-
373  // requires assembler really
-
374  volatile uint8_t zeroReg=0;
-
375  volatile uint16_t multipliedCounter=oscillators[c].phaseStep;
-
376  asm volatile
-
377  (
-
378  // high uint8_ts mult together = high uint8_t
-
379  "ldi %A[outVal],0" "\n\t"
-
380  "mul %B[phaseStep],%B[pitchB}]" "\n\t"
-
381  "mov %B[outVal],r0" "\n\t"
-
382  // ignore overflow into r1 (should never overflow)
-
383  // low uint8_t * high uint8_t -> both uint8_ts
-
384  "mul %A[phaseStep],%B[pitchB}]" "\n\t"
-
385  "add %A[outVal],r0" "\n\t"
-
386  // carry into high uint8_t
-
387  "adc %B[outVal],r1" "\n\t"
-
388  // high uint8_t* low uint8_t -> both uint8_ts
-
389  "mul %B[phaseStep],%A[pitchB}]" "\n\t"
-
390  "add %A[outVal],r0" "\n\t"
-
391  // carry into high uint8_t
-
392  "adc %B[outVal],r1" "\n\t"
-
393  // low uint8_t * low uint8_t -> round
-
394  "mul %A[phaseStep],%A[pitchB}]" "\n\t"
-
395  // the adc below is to round up based on high bit of low*low:
-
396  "adc %A[outVal],r1" "\n\t"
-
397  "adc %B[outVal],%[ZERO]" "\n\t"
-
398  "clr r1" "\n\t"
-
399  :[outVal] "=&d" (multipliedCounter)
-
400  :[phaseStep] "d" (oscillators[c].phaseStep),[pitchB}] "d"( pitchB}Multiplier),[ZERO] "d" (zeroReg)
-
401  :"r1","r0"
-
402  );
-
403  oscillators[c].phaseStep=multipliedCounter;
-
404 
-
405  */
-
406 
-
407 
-
408 
-
409 int16_t ipow(int16_t base, int16_t exp); /**< dangerous overflow-prone int16_t power function */
-
410 
-
411 Q16n16 Q16n16_pow2(Q8n8 exponent);
-
412 
- - -
415 uint8_t uint8_tRnd(uint8_t min, uint8_t max);
-
416 uint16_t isqrt16(uint16_t n);
-
417 uint32_t isqrt32(uint32_t n);
-
418 
-
419 #endif /* FIXEDMATH_H_ */
-
-
- - - diff --git a/extras/doc/html/mozzi__macros_8h_source.html b/extras/doc/html/mozzi__macros_8h_source.html deleted file mode 100644 index 373d0e292..000000000 --- a/extras/doc/html/mozzi__macros_8h_source.html +++ /dev/null @@ -1,215 +0,0 @@ - - - - - - - -Mozzi: mozzi_macros.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
mozzi_macros.h
-
-
-
1 /*
-
2  * mozzi_macros.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2023-2024 Thomas Friedrichsmeier and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10 */
-
11 
-
12 /** This file contains some macros used internally inside Mozzi. These are not meant to be useful in user code. */
-
13 
-
14 #ifndef MOZZI_MACROS_H
-
15 #define MOZZI_MACROS_H
-
16 
-
17 
-
18 // internal dummy that should be distinct from any valid config value
-
19 #define MOZZI__INVALID_CONFIG_VALUE 9999976543210
-
20 
-
21 // internal implementation of MOZZI_CHECK_SUPPORTED
-
22 #define MOZZI__CHECK_SUPPORTED(X, M, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, B0, B1, B2, B3, B4, B5, B6, B7, B8, B9, ...)
-
23  static_assert(X != MOZZI__INVALID_CONFIG_VALUE &&
-
24  (X == A0 || X == A1 || X == A2 || X == A3 || X == A4 || X == A5 || X == A6 || X == A7 || X == A8 || X == A9 ||
-
25  X == B0 || X == B1 || X == B2 || X == B3 || X == B4 || X == B5 || X == B6 || X == B7 || X == B8 || X == B9), "Compile time option " M " does not support value " #X " on this platform.");
-
26 
-
27 // MSVC needs this indirection for proper __VA_ARGS__ expansion. I case we ever need to support MSVC...
-
28 #define MOZZI__MACRO_EVAL(...) __VA_ARGS__
-
29 
-
30 /** @file mozzi_internal_macros
-
31  * compile time check whether the given first value (usually specified as a #define) is among the values specified in subsequent args (up to 20)
-
32  *
-
33  * Example: @code MOZZI_CHECK_SUPPORTED(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PWM, MOZZI_OUTPUT_EXTERNAL) @endcode
-
34 */
-
35 #define MOZZI_CHECK_SUPPORTED(X, ...) MOZZI__MACRO_EVAL(MOZZI__CHECK_SUPPORTED(X, #X, __VA_ARGS__,
- - - - -
40 
-
41 /** @file mozzi_internal_macros
-
42  * Compile time check to complain if the given argument is not a power of two */
-
43 #define MOZZI_CHECK_POW2(X) static_assert((X & (X - 1)) == 0, #X " must be a power of two");
-
44 
-
45 #define MOZZI__IS(X, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, B0, B1, B2, B3, B4, B5, B6, B7, B8, B9, ...)
-
46  ((X == A0) || (X == A1) || (X == A2) || (X == A3) || (X == A4) || (X == A5) || (X == A6) || (X == A7) || (X == A8) || (X == A9) || (X == B0) || (X == B1) || (X == B2) || (X == B3) || (X == B4) || (X == B5) || (X == B6) || (X == B7) || (X == B8) || (X == B9))
-
47 
-
48 /** @file mozzi_internal_macros
-
49  * Short-hand to check if given first value is any of the following values (up to 20).
-
50  *
-
51  * (Orgignally, this macro was intended to also produce an error, should any of the values be non-defined (such as because it's a typo), but alas, the preprocessor would
-
52  * let me have that).
-
53  *
-
54  * Example: @code
-
55  * #if MOZZI_IS_ANY(MOZZI_AUDIO_MODE, MOZZI_OUTPUT_PWM, MOZZI_OUTPUT_2PIN_PWM, MOZZI_OUTPUT_EXTERNAL_TIMED)
-
56  * [...]
-
57  * #endif
-
58  * @endcode
-
59  *
-
60  * See also @ref MOZZI_CHECK_SUPPORTED, which throws an error, if the first value is not among the latter values.
-
61  */
-
62 #define MOZZI_IS(X, ...) MOZZI__MACRO_EVAL(MOZZI__IS(X, __VA_ARGS__,
- - - - -
67 
-
68 /** @file mozzi_internal_macros
-
69  * Short-hand for a compile time complaint, if the given define does not have the expected value.
-
70  *
-
71  * Use this to check - and clarify - complex nested logic inside #fidefs.
-
72  *
-
73  * Example: @code
-
74  * #if MOZZI_IS(MOZZI_ANALOG_READ, MOZZI_ANALOG_STANDARD)
-
75  * [long difficult to read logic, with further nested #if's]]
-
76  * #else
-
77  * MOZZI_ASSERT_EQUAL(MOZZI_ANALOG_READ, MOZZI_ANALOG_NONE)
-
78  * [more complex logic]
-
79  * #endif
-
80  * @endcode
-
81  */
-
82 #define MOZZI_ASSERT_EQUAL(X, Y) static_assert(X == Y, "Internal error in preprocessor logic: " #X " != " #Y ".");
-
83 
-
84 /** @file mozzi_internal_macros
-
85  * See MOZZI_ASSERT_EQUAL, but reversed */
-
86 #define MOZZI_ASSERT_NOTEQUAL(X, Y) static_assert(X != Y, "Internal error in preprocessor logic: " #X " == " #Y ".");
-
87 
-
88 
-
89 #if __cplusplus >= 201402L
-
90 /** @file mozzi_internal_macros
-
91  * Document that a function has been deprecated, and when, if possible giving the user an explanatory message */
-
92 #define MOZZI_DEPRECATED(WHEN, WHY) [[deprecated(WHY)]]
-
93 #elif defined(__GNUC__) && __has_cpp_attribute(deprecated)
-
94 #define MOZZI_DEPRECATED(WHEN, WHY) [[deprecated(WHY)]]
-
95 #elif defined(__GNUC__) || defined(__clang__)
-
96 #define MOZZI_DEPRECATED(WHEN, WHY) __attribute__((deprecated))
-
97 #elif defined(_MSC_VER)
-
98 #define MOZZI_DEPRECATED(WHEN, WHY) __declspec(deprecated)
-
99 #else
-
100 #define MOZZI_DEPRECATED(WHEN, WHY)
-
101 #endif
-
102 
-
103 /** @file mozzi_internal_macros
-
104  * Document that a function is not implemented on this platform */
-
105 #define MOZZI_UNIMPLEMENTED() MOZZI_DEPRECATED("n/a", "This feature is not implemented on this platform.")
-
106 
-
107 #endif
-
-
- - - diff --git a/extras/doc/html/mozzi__midi_8h_source.html b/extras/doc/html/mozzi__midi_8h_source.html deleted file mode 100644 index 7e5499979..000000000 --- a/extras/doc/html/mozzi__midi_8h_source.html +++ /dev/null @@ -1,294 +0,0 @@ - - - - - - - -Mozzi: mozzi_midi.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
mozzi_midi.h
-
-
-
1 /*
-
2  * mozzi_midi.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 #ifndef MOZZI_MIDI_H_
-
13 #define MOZZI_MIDI_H_
-
14 
-
15 #include "mozzi_fixmath.h"
-
16 #include "FixMath.h"
-
17 
-
18 #include "mozzi_pgmspace.h"
-
19 
-
20 /** @brief Internal. Do not use in your sketches.
-
21 
-
22 Internal helper class. Not intended for use in your sketches, and details may change without notic. */
- -
24 private:
-
25  friend int mtof(uint8_t);
-
26  friend int mtof(int);
-
27  friend Q16n16 Q16n16_mtof(Q16n16);
-
28  template<int8_t NI, uint64_t RANGE>
-
29  friend UFix<16,16> mtof(UFix<NI,0,RANGE>);
-
30 
-
31  template<int8_t NI, uint64_t RANGE>
-
32  friend UFix<16,16> mtof(SFix<NI,0,RANGE>);
-
33 
- -
35 };
-
36 
-
37 
-
38 CONSTTABLE_STORAGE(uint32_t) MidiToFreqPrivate::midiToFreq[128] =
-
39  {
-
40  0, 567670, 601425, 637188, 675077, 715219, 757748, 802806, 850544, 901120,
-
41  954703, 1011473, 1071618, 1135340, 1202851, 1274376, 1350154, 1430438, 1515497,
-
42  1605613, 1701088, 1802240, 1909406, 2022946, 2143236, 2270680, 2405702, 2548752,
-
43  2700309, 2860877, 3030994, 3211226, 3402176, 3604479, 3818813, 4045892, 4286472,
-
44  4541359, 4811404, 5097504, 5400618, 5721756, 6061988, 6422452, 6804352, 7208959,
-
45  7637627, 8091785, 8572945, 9082719, 9622808, 10195009, 10801235, 11443507,
-
46  12123974, 12844905, 13608704, 14417917, 15275252, 16183563, 17145888, 18165438,
-
47  19245616, 20390018, 21602470, 22887014, 24247948, 25689810, 27217408, 28835834,
-
48  30550514, 32367136, 34291776, 36330876, 38491212, 40780036, 43204940, 45774028,
-
49  48495912, 51379620, 54434816, 57671668, 61101028, 64734272, 68583552, 72661752,
-
50  76982424, 81560072, 86409880, 91548056, 96991792, 102759240, 108869632,
-
51  115343336, 122202056, 129468544, 137167104, 145323504, 153964848, 163120144,
-
52  172819760, 183096224, 193983648, 205518336, 217739200, 230686576, 244403840,
-
53  258937008, 274334112, 290647008, 307929696, 326240288, 345639520, 366192448,
-
54  387967040, 411036672, 435478400, 461373152, 488807680, 517874016, 548668224,
-
55  581294016, 615859392, 652480576, 691279040, 732384896, 775934592, 822073344
-
56  };
-
57 
-
58 
-
59 /** @defgroup midi Midi note number to frequency conversions
-
60 
-
61 Useful if you like playing notes in tune.
-
62 */
-
63 
-
64 /** @ingroup midi
-
65 Converts midi note number to frequency. Caution: this can take up to 400
-
66 microseconds to run. It can seriously mess up the audio output if you use it in
-
67 updateControl() or updateAudio(). This is a good choice in setup(), or where you
-
68 need precise midi-pitch conversion and aren't doing much other audio
-
69 calculation.
-
70 @note Beware this returns an invalid result for midi note 0.
-
71 @note Timing: ~350 us
-
72 @param midival a midi note number, 1.0 or greater. Like the mtof object in Pd, midi values can have fractions.
-
73 @return the frequency represented by the input midi note number..
-
74  */
-
75 inline float mtof(float midival)
-
76 {
-
77  // http://en.wikipedia.org/wiki/Note
-
78  // f = pow(2,(p-69/12) * 440Hz
-
79  // return pow(2.0,(midival-69.0/12.0) * 440.0;
-
80 
-
81  // code from AF_precision_synthesis sketch, copyright 2009, Adrian Freed.
-
82  float f = 0.0;
-
83  if(midival) f = 8.1757989156 * pow(2.0, midival/12.0);
-
84  return f;
-
85 };
-
86 
-
87 
-
88 /** @ingroup midi
-
89 A good choice if you're using whole note values, want speed and simplicity, and accuracy isn't important.
-
90 @param midi_note a midi note number.
-
91 @return an integer approximation of the midi note's frequency.
-
92 */
-
93 inline int mtof(uint8_t midi_note){
-
94  return (FLASH_OR_RAM_READ<const uint32_t>(MidiToFreqPrivate::midiToFreq + midi_note) >> 16);
-
95 };
-
96 
-
97 /** @ingroup midi
-
98 A good choice if you're using whole note values, want speed and simplicity, and accuracy isn't important.
-
99 @param midi_note a midi note number.
-
100 @return an integer approximation of the midi note's frequency.
-
101 */
-
102 inline int mtof(int midi_note){
-
103  return (FLASH_OR_RAM_READ<const uint32_t>(MidiToFreqPrivate::midiToFreq + midi_note) >> 16);
-
104 };
-
105 
-
106 
-
107 /** @ingroup midi
-
108 Converts midi note number to frequency with speed and accuracy. Q16n16_mtofLookup() is a fast
-
109 alternative to (float) mtof(), and more accurate than (uint8_t) mtof(),
-
110 using Q16n16 fixed-point format instead of floats or uint8_t values. Q16n16_mtof()
-
111 uses cheap linear interpolation between whole midi-note frequency equivalents
-
112 stored in a lookup table, so is less accurate than the float version, mtof(),
-
113 for non-whole midi values.
-
114 @note Timing: ~8 us.
-
115 @param midival_fractional a midi note number in Q16n16 format, for fractional values.
-
116 @return the frequency represented by the input midi note number, in Q16n16
-
117 fixed point fractional integer format, where the lower word is a fractional value.
-
118 */
-
119 inline Q16n16 Q16n16_mtof(Q16n16 midival_fractional)
-
120 {
-
121  Q16n16 diff_fraction;
-
122  uint8_t index = midival_fractional >> 16;
-
123  uint16_t fraction = (uint16_t) midival_fractional; // keeps low word
-
124  Q16n16 freq1 = (Q16n16) FLASH_OR_RAM_READ<const uint32_t>(MidiToFreqPrivate::midiToFreq + index);
-
125  Q16n16 freq2 = (Q16n16) FLASH_OR_RAM_READ<const uint32_t>((MidiToFreqPrivate::midiToFreq + 1) + index);
-
126  Q16n16 difference = freq2 - freq1;
-
127  if (difference>=65536)
-
128  {
-
129  diff_fraction = ((difference>>8) * fraction) >> 8;
-
130  }
-
131  else
-
132  {
-
133  diff_fraction = (difference * fraction) >> 16;
-
134  }
-
135  return (Q16n16) (freq1+ diff_fraction);
-
136 };
-
137 
-
138 /** @ingroup midi
-
139 Converts midi note number with speed and accuracy from a UFix<16,16>.
-
140 Uses Q16n16_mtof internally.
-
141 */
-
142 template <uint64_t RANGE>
-
143 inline UFix<16,16> mtof(UFix<16,16,RANGE> midival)
-
144 {
-
145  return UFix<16,16>::fromRaw(Q16n16_mtof(midival.asRaw()));
-
146 };
-
147 
-
148 /** @ingroup midi
-
149 Converts midi note number with speed and accuracy from any UFix.
-
150 Uses Q16n16_mtof internally.
-
151 */
-
152 template<int8_t NI, int8_t NF, uint64_t RANGE>
-
153 inline UFix<16,16> mtof(UFix<NI,NF,RANGE> midival)
-
154 {
-
155  return UFix<16,16>::fromRaw(Q16n16_mtof(UFix<16,16>(midival).asRaw()));
-
156 };
-
157 
-
158 /** @ingroup midi
-
159 Converts midi note number with speed and accuracy from any SFix.
-
160 Uses Q16n16_mtof internally.
-
161 */
-
162 template<int8_t NI, int8_t NF, uint64_t RANGE>
-
163 inline UFix<16,16> mtof(SFix<NI,NF,RANGE> midival)
-
164 {
-
165  return UFix<16,16>::fromRaw(Q16n16_mtof(UFix<16,16>(midival).asRaw()));
-
166 };
-
167 
-
168 /** @ingroup midi
-
169 Converts *whole* midi note number with speed and accuracy (more accurate that mtof(uint8_t))
-
170 */
-
171 template<int8_t NI, uint64_t RANGE>
-
172 inline UFix<16,16> mtof(UFix<NI,0,RANGE> midival)
-
173 {
-
174  return UFix<16,16>::fromRaw((FLASH_OR_RAM_READ<const uint32_t>(MidiToFreqPrivate::midiToFreq + midival.asRaw())));
-
175 };
-
176 
-
177 /** @ingroup midi
-
178 Converts *whole* midi note number with speed and accuracy (more accurate that mtof(uint8_t))
-
179 */
-
180 template<int8_t NI, uint64_t RANGE>
-
181 inline UFix<16,16> mtof(SFix<NI,0,RANGE> midival)
-
182 {
-
183  return UFix<16,16>::fromRaw((FLASH_OR_RAM_READ<const uint32_t>(MidiToFreqPrivate::midiToFreq + midival.asUFix().asRaw())));
-
184 };
-
185 
-
186 #endif /* MOZZI_MIDI_H_ */
-
-
- - - diff --git a/extras/doc/html/mozzi__pgmspace_8h_source.html b/extras/doc/html/mozzi__pgmspace_8h_source.html deleted file mode 100644 index 450325a83..000000000 --- a/extras/doc/html/mozzi__pgmspace_8h_source.html +++ /dev/null @@ -1,178 +0,0 @@ - - - - - - - -Mozzi: mozzi_pgmspace.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
mozzi_pgmspace.h
-
-
-
1 /*
-
2  * mozzi_pgmspace.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2018-2024 Thomas Friedrichsmeier and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 #ifndef MOZZI_PGMSPACE_H
-
13 #define MOZZI_PGMSPACE_H
-
14 
-
15 /* Cross-platform wrapper around avr/pgmspace.h, i.e. macros and functions to
-
16 * store data in and retrieve data from flash memory. */
-
17 
-
18 #include "hardware_defines.h"
-
19 
-
20 #if IS_ESP8266() || IS_ESP32() || IS_RP2040() || IS_RENESAS()
-
21 template<typename T> inline T FLASH_OR_RAM_READ(T* address) {
-
22  return (T) (*address);
-
23 }
-
24 #define CONSTTABLE_STORAGE(X) const X
-
25 #else
-
26 #include <avr/pgmspace.h>
-
27 // work around missing std::is_const
-
28 template<typename T> inline bool mozzi_is_const_pointer(T*) { return false; }
-
29 template<typename T> inline bool mozzi_is_const_pointer(const T*) { return true; }
-
30 /** @ingroup core
-
31  * Helper function to FLASH_OR_RAM_READ(). You do not want to call this, directly. */
-
32 template<typename T> inline T mozzi_pgm_read_wrapper(const T* address) {
-
33  static_assert(sizeof(T) == 1 || sizeof(T) == 2 || sizeof(T) == 4 || sizeof(T) == 8, "Data type not supported");
-
34  switch (sizeof(T)) {
-
35  case 1: return (T) pgm_read_byte_near(address);
-
36  case 2: return (T) pgm_read_word_near(address);
-
37  case 4: return (T) pgm_read_dword_near(address);
-
38  }
-
39  // case 8: AVR-libc does not provide a read function for this, so we combine two 32-bit reads. TODO: is this MSB/LSB safe?
-
40  return (T) (pgm_read_dword_near(address) | (uint64_t) pgm_read_dword_near(((byte*) address) + 4) << 32);
-
41 }
-
42 template<> inline float mozzi_pgm_read_wrapper(const float* address) {
-
43  return pgm_read_float_near(address);
-
44 }
-
45 template<> inline double mozzi_pgm_read_wrapper(const double* address) {
-
46  static_assert(sizeof(uint64_t) == sizeof(double) || sizeof(float) == sizeof(double), "Reading double from pgmspace memory not supported on this architecture");
-
47  if (sizeof(double) == sizeof(uint64_t)) {
-
48  union u { uint64_t i; double d; };
-
49  return u{mozzi_pgm_read_wrapper((uint64_t*) address)}.d;
-
50  }
-
51  return pgm_read_float_near(address);
-
52 }
-
53 /** @ingroup core
-
54  * Read a value from flash or RAM. The specified address is read from flash, if T is const, _and_ const
-
55  * tables are stored in flash on this platform (i.e. not on ESP8266). It is read from RAM, if T is not-const
-
56  * or tables are always stored in RAM on this platform. @see CONSTTABLE_STORAGE . */
-
57 template<typename T> inline T FLASH_OR_RAM_READ(T* address) {
-
58  if(mozzi_is_const_pointer(address)) {
-
59  return mozzi_pgm_read_wrapper(address);
-
60  }
-
61  return (T) *address;
-
62 }
-
63 /** @ingroup core
-
64  * Declare a variable such that it will be stored in flash memory, instead of RAM, on platforms where this
-
65  * is reasonably possible (i.e. not on ESP8266, where random location flash memory access is too slow).
-
66  * To read the variable in a cross-platform compatible way, use FLASH_OR_RAM_READ(). */
-
67 #define CONSTTABLE_STORAGE(X) const X __attribute__((section(".progmem.data")))
-
68 #endif
-
69 
-
70 #endif
-
-
- - - diff --git a/extras/doc/html/mozzi__rand_8h_source.html b/extras/doc/html/mozzi__rand_8h_source.html deleted file mode 100644 index bc6f6a0dd..000000000 --- a/extras/doc/html/mozzi__rand_8h_source.html +++ /dev/null @@ -1,275 +0,0 @@ - - - - - - - -Mozzi: mozzi_rand.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
mozzi_rand.h
-
-
-
1 /*
-
2  * mozzi_rand.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 #ifndef MOZZI_RAND_H_
-
13 #define MOZZI_RAND_H_
-
14 
-
15 #include <Arduino.h>
-
16 #include "internal/mozzi_rand_p.h"
-
17 
-
18 /** @defgroup random Fast random number generator functions
-
19 
-
20 These replace Arduino random() which is so slow it will stop your audio. They can even be used to generate audio noise.
-
21 */
-
22 
-
23 /** @ingroup random
-
24 Random number generator. A faster replacement for Arduino's random function,
-
25 which is too slow to use with Mozzi.
-
26 Based on Marsaglia, George. (2003). Xorshift RNGs. http://www.jstatsoft.org/v08/i14/xorshift.pdf
-
27 @return a random 32 bit integer.
-
28 @todo check timing of xorshift96(), rand() and other PRNG candidates.
-
29  */
-
30 inline uint32_t xorshift96() { return MozziPrivate::MozziRandPrivate::xorshift96(); };
-
31 
-
32 /** @ingroup random
-
33 Initialises Mozzi's (pseudo)random number generator xorshift96(), which is used
-
34 in Mozzi's rand() function. This can be useful if you want random sequences to
-
35 be different on each run of a sketch, by seeding with fairly random input, such
-
36 as analogRead() on an unconnected pin (as explained in the Arduino documentation
-
37 for randomSeed(). randSeed is the same as xorshift96Seed(), but easier to
-
38 remember.
-
39 @param seed a number to use as a seed.
-
40 */
-
41 inline void randSeed(uint32_t seed) { MozziPrivate::randSeed(seed); };
-
42 
-
43 /** @ingroup random
-
44 Initialises Mozzi's (pseudo)random number generator xorshift96(), which is used
-
45 in Mozzi's rand() function. This can be useful if you want random sequences to
-
46 be different on each run of a sketch, by seeding with a fairly random input.
-
47 randSeed() called without a parameter uses noise from reading the Arduino's
-
48 internal temperature as the seed, a technique discussed at
-
49 http://arduino.cc/forum/index.php/topic,38091.0.html, borrowing code put there
-
50 by Rob Tillaart.
-
51 
-
52 @note Intialization of the random seed is done differently on different MCUs,
-
53  but is nowhere near perfect for most (and for some it is not even implemented at all).
-
54  Many implementations (e.g. on AVR, STM32) simply rely on reading a (hopefully noisy)
-
55  internal temperature sensor.
-
56  You will often get better results by calling analogRead() - @em not mozziAnalogRead(0), in this case! -
-
57  on one or two floating (non-connected) analog pins.
-
58 */
-
59 inline void randSeed() { MozziPrivate::MozziRandPrivate::autoSeed(); };
-
60 
-
61 /** @ingroup random
-
62 Initialises Mozzi's (pseudo)random number generator xorshift96() with a chosen seed number.
-
63 @param seed a number to use as a seed.
-
64 // TODO: duplicate deprecate / remove
-
65 */
-
66 inline void xorshiftSeed(uint32_t seed) { randSeed(seed); };
-
67 
-
68 /** @ingroup random
-
69 Ranged random number generator, faster than Arduino's built-in random function, which is too slow for generating at audio rate with Mozzi.
-
70 @param minval the minimum signed byte value of the range to be chosen from. Minval will be the minimum value possibly returned by the function.
-
71 @param maxval the maximum signed byte value of the range to be chosen from. Maxval-1 will be the largest value possibly returned by the function.
-
72 @return a random signed byte between minval and maxval-1 inclusive.
-
73 */
- -
75 {
-
76  return (int8_t) ((((int) (lowByte(xorshift96()))) * (maxval-minval))>>8) + minval;
-
77 }
-
78 
-
79 /** @ingroup random
-
80 Ranged random number generator, faster than Arduino's built-in random function, which is too slow for generating at audio rate with Mozzi.
-
81 @param maxval the maximum signed byte value of the range to be chosen from. Maxval-1 will be the largest value possibly returned by the function.
-
82 @return a random signed byte between 0 and maxval-1 inclusive.
-
83 */
-
84 inline int8_t rand(int8_t maxval)
-
85 {
-
86  return (int8_t) ((((int) (lowByte(xorshift96()))) * maxval)>>8);
-
87 }
-
88 
-
89 /** @ingroup random
-
90 Ranged random number generator, faster than Arduino's built-in random function, which is too slow for generating at audio rate with Mozzi.
-
91 @param minval the minimum unsigned byte value of the range to be chosen from. Minval will be the minimum value possibly returned by the function.
-
92 @param maxval the maximum unsigned byte value of the range to be chosen from. Maxval-1 will be the largest value possibly returned by the function.
-
93 @return a random unsigned byte between minval and maxval-1 inclusive.
-
94 */
- -
96 {
-
97  return (uint8_t) ((((unsigned int) (lowByte(xorshift96()))) * (maxval-minval))>>8) + minval;
-
98 }
-
99 
-
100 /** @ingroup random
-
101 Ranged random number generator, faster than Arduino's built-in random function, which is too slow for generating at audio rate with Mozzi.
-
102 @param maxval the maximum unsigned byte value of the range to be chosen from. Maxval-1 will be the largest value possibly returned by the function.
-
103 @return a random unsigned byte between 0 and maxval-1 inclusive.
-
104 */
-
105 inline uint8_t rand(uint8_t maxval)
-
106 {
-
107  return (uint8_t) ((((unsigned int) (lowByte(xorshift96()))) * maxval)>>8);
-
108 }
-
109 
-
110 /** @ingroup random
-
111 Ranged random number generator, faster than Arduino's built-in random function, which is too slow for generating at audio rate with Mozzi.
-
112 @param minval the minimum signed int value of the range to be chosen from. Minval will be the minimum value possibly returned by the function.
-
113 @param maxval the maximum signed int value of the range to be chosen from. Maxval-1 will be the largest value possibly returned by the function.
-
114 @return a random int between minval and maxval-1 inclusive.
-
115 
-
116 @note The returned value is always in the 16 bit range, even on platforms where int is wider. If you need 32 bits, call xorshift96(), directly.
-
117 */
-
118 inline int rand(int minval, int maxval)
-
119 {
-
120  return (int) ((((xorshift96() & 0xFFFF) * (maxval-minval))>>16) + minval);
-
121 }
-
122 
-
123 /** @ingroup random
-
124 Ranged random number generator, faster than Arduino's built-in random function, which is too slow for generating at audio rate with Mozzi.
-
125 @param maxval the maximum signed int value of the range to be chosen from. Maxval-1 will be the largest value possibly returned by the function.
-
126 @return a random int between 0 and maxval-1 inclusive.
-
127 
-
128 @note The returned value is always in the 16 bit range, even on platforms where int is wider. If you need 32 bits, call xorshift96(), directly.
-
129 */
-
130 inline int rand(int maxval)
-
131 {
-
132  return (int) (((xorshift96() & 0xFFFF) * maxval)>>16);
-
133 }
-
134 
-
135 /** @ingroup random
-
136 Ranged random number generator, faster than Arduino's built-in random function, which is too slow for generating at audio rate with Mozzi.
-
137 @param minval the minimum unsigned int value of the range to be chosen from. Minval will be the minimum value possibly returned by the function.
-
138 @param maxval the maximum unsigned int value of the range to be chosen from. Maxval-1 will be the largest value possibly returned by the function.
-
139 @return a random unsigned int between minval and maxval-1 inclusive.
-
140 */
-
141 inline unsigned int rand(unsigned int minval, unsigned int maxval)
-
142 {
-
143  return (unsigned int) ((((xorshift96() & 0xFFFF) * (maxval-minval))>>16) + minval);
-
144 }
-
145 
-
146 /** @ingroup random
-
147 Ranged random number generator, faster than Arduino's built-in random function, which is too slow for generating at audio rate with Mozzi.
-
148 @param maxval the maximum unsigned int value of the range to be chosen from. Maxval-1 will be the largest value possibly returned by the function.
-
149 @return a random unsigned int between 0 and maxval-1 inclusive.
-
150 
-
151 @note The returned value is always in the 16 bit range, even on platforms where int is wider. If you need 32 bits, call xorshift96(), directly.
-
152 */
-
153 inline unsigned int rand(unsigned int maxval)
-
154 {
-
155  return (unsigned int) (((xorshift96() & 0xFFFF) * maxval)>>16);
-
156 }
-
157 
-
158 /** @ingroup random
-
159 Generates a random number in the range for midi notes.
-
160 @return a random value between 0 and 127 inclusive
-
161 */
-
162 inline uint8_t randMidiNote()
-
163 {
-
164  return lowByte(xorshift96())>>1;
-
165 }
-
166 
-
167 #endif /* MOZZI_RAND_H_ */
-
-
- - - diff --git a/extras/doc/html/mozzi__rand__p_8h_source.html b/extras/doc/html/mozzi__rand__p_8h_source.html deleted file mode 100644 index d09f75f5a..000000000 --- a/extras/doc/html/mozzi__rand__p_8h_source.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - - -Mozzi: mozzi_rand_p.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
mozzi_rand_p.h
-
-
-
1 /*
-
2  * mozzi_rand_p.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10 */
-
11 
-
12 #ifndef MOZZI_RAND_P_H
-
13 #define MOZZI_RAND_P_H
-
14 
-
15 namespace MozziPrivate {
-
16 
- -
18 friend void randSeed();
-
19 friend void randSeed(uint32_t);
-
20 friend uint32_t xorshift96();
-
21  static uint32_t x;
-
22  static uint32_t y;
-
23  static uint32_t z;
-
24 public:
-
25  static uint32_t xorshift96() {
-
26  //period 2^96-1
-
27  uint32_t t;
-
28 
-
29  x ^= x << 16;
-
30  x ^= x >> 5;
-
31  x ^= x << 1;
-
32 
-
33  t = x;
-
34  x = y;
-
35  y = z;
-
36  z = t ^ x ^ y;
-
37 
-
38  return z;
-
39  }
-
40  static void autoSeed(); // defined in hardware specific MozziGuts_impl-files
-
41 };
-
42 
-
43 inline void randSeed(uint32_t seed) { MozziRandPrivate::x = seed; };
-
44 
-
45 }
-
46 
-
47 #endif
-
-
- - - diff --git a/extras/doc/html/mozzi__utils_8h_source.html b/extras/doc/html/mozzi__utils_8h_source.html deleted file mode 100644 index 5dc337172..000000000 --- a/extras/doc/html/mozzi__utils_8h_source.html +++ /dev/null @@ -1,211 +0,0 @@ - - - - - - - -Mozzi: mozzi_utils.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
mozzi_utils.h
-
-
-
1 /*
-
2  * mozzi_utils.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 #ifndef UTILS_H_
-
13 #define UTILS_H_
-
14 
-
15 
-
16 #include <Arduino.h>
-
17 
-
18 #include "hardware_defines.h"
-
19 
-
20 // macros for setting and clearing register bits
-
21 #ifndef cbi
-
22 #define cbi(sfr, bit) (_SFR_UINT8_T(sfr) &= ~_BV(bit))
-
23 #endif
-
24 #ifndef sbi
-
25 #define sbi(sfr, bit) (_SFR_UINT8_T(sfr) |= _BV(bit))
-
26 #endif
-
27 
-
28 
-
29 /** @ingroup util
-
30 Set digital pin 13 to output for testing timing with an oscilloscope.*/
-
31 inline
-
32 void setPin13Out()
-
33 {
-
34 #if IS_AVR()
-
35  DDRB |= B00100000;
-
36 #else
-
37  pinMode(13, OUTPUT);
-
38 #endif
-
39 }
-
40 
-
41 
-
42 /** @ingroup util
-
43 Set pin 13 high for testing timing with an oscilloscope.*/
-
44 inline
-
45 void setPin13High()
-
46 {
-
47 #if IS_AVR()
-
48  PORTB |= B00100000;
-
49 #else
-
50  digitalWrite(13, HIGH);
-
51 #endif
-
52 }
-
53 
-
54 
-
55 /** @ingroup util
-
56 Set pin 13 low for testing timing with an oscilloscope.*/
-
57 inline
-
58 void setPin13Low()
-
59 {
-
60 #if IS_AVR()
-
61  PORTB &= B11011111;
-
62 #else
-
63  digitalWrite(13, LOW);
-
64 #endif
-
65 }
-
66 
-
67 
-
68 /** @ingroup util
-
69 Given a power of 2, work out the number to shift right by to do a divide by the number, or shift left to multiply.
-
70 @param a power of 2, or any other number for that matter
-
71 @return the number of trailing zeros on the right hand end
-
72 */
-
73 constexpr uint8_t trailingZerosConst(unsigned long v) { return ((v % 2) ? 0 : 1+trailingZerosConst(v >> 1)); }
-
74 /* NOTE: previous version of the above is super-nifty, but pulls in software float code on AVR (the platform where it makes a difference), leading to bloat and a compile time warning.
-
75  * Sine the only use-case I could find works on a compile-time constant (template-parameter), I added a constexpr function in mozzi_utils.h, instead. I renamed it, too,
-
76  * so, we'll learn about any use-case outside of this scope. If there are no reports of breakage, the following can probably be removed for good.
-
77 long trailingZeros(unsigned long v) {
-
78  // find the number of trailing zeros in v, from http://graphics.stanford.edu/~seander/bithacks.html#ZerosOnRightFloatCast
-
79  // there are faster methods on the bit twiddling site, but this is short
-
80  float f = (float)(v & -v); // cast the least significant bit in v to a float
-
81  return (*(uint32_t *)&f >> 23) - 0x7f;
-
82 }
-
83 
-
84 Here's an alternate, trivial version:
-
85 uint8_t trailingZeros(uint16_t v) {
-
86  uint8_t ret = 0;
-
87  while ((v % 2) == 0) {
-
88  v = v >> 1;
-
89  ++ret;
-
90  }
-
91  return ret;
-
92 } */
-
93 
-
94 
-
95 /** Convert BPM to milliseconds, which can be used to set the delay between beats for Metronome.
-
96 @param bpm beats per minute
-
97 */
-
98 constexpr uint16_t BPMtoMillis(float bpm){
-
99  //float seconds_per_beat = 60.f/bpm;
-
100  return (uint16_t) (((float) 60.f/bpm)*1000);
-
101 }
-
102 
-
103 #endif /* UTILS_H_ */
-
-
- - - diff --git a/extras/doc/html/mult16x16_8h_source.html b/extras/doc/html/mult16x16_8h_source.html deleted file mode 100644 index 39752594b..000000000 --- a/extras/doc/html/mult16x16_8h_source.html +++ /dev/null @@ -1,351 +0,0 @@ - - - - - - - -Mozzi: mult16x16.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
mult16x16.h
-
-
-
1 
-
2 /*
-
3 Norbert Pozar 2009
-
4 http://mekonik.wordpress.com/2009/03/18/arduino-avr-gcc-multiplication/
-
5 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-
6 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-
7 FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-
8 COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-
9 IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-
10 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.*/
-
11 
-
12 // longRes = intIn1 * intIn2
-
13 #define MultiU16X16to32(longRes, intIn1, intIn2) asm
-
14  volatile ( \
-
15 "clr r26 \n\t"\
-
16 "mul %A1, %A2 \n\t"\
-
17 "movw %A0, r0 \n\t"\
-
18 "mul %B1, %B2 \n\t"\
-
19 "movw %C0, r0 \n\t"\
-
20 "mul %B2, %A1 \n\t"\
-
21 "add %B0, r0 \n\t"\
-
22 "adc %C0, r1 \n\t"\
-
23 "adc %D0, r26 \n\t"\
-
24 "mul %B1, %A2 \n\t"\
-
25 "add %B0, r0 \n\t"\
-
26 "adc %C0, r1 \n\t"\
-
27 "adc %D0, r26 \n\t"\
-
28 "clr r1 \n\t"\
-
29 :\
-
30 "=&r"(longRes) \
-
31 :\
-
32 "a"(intIn1), \
-
33 "a"(intIn2) \
-
34 :\
-
35 "r26"\
-
36 )
-
37 
-
38 // intRes = intIn1 * intIn2 >> 16
-
39 // uses:
-
40 // r26 to store 0
-
41 // r27 to store the uint8_t 1 of the 32bit result
-
42 #define MultiU16X16toH16(intRes, intIn1, intIn2) asm
-
43  volatile ( \
-
44 "clr r26 \n\t"\
-
45 "mul %A1, %A2 \n\t"\
-
46 "mov r27, r1 \n\t"\
-
47 "mul %B1, %B2 \n\t"\
-
48 "movw %A0, r0 \n\t"\
-
49 "mul %B2, %A1 \n\t"\
-
50 "add r27, r0 \n\t"\
-
51 "adc %A0, r1 \n\t"\
-
52 "adc %B0, r26 \n\t"\
-
53 "mul %B1, %A2 \n\t"\
-
54 "add r27, r0 \n\t"\
-
55 "adc %A0, r1 \n\t"\
-
56 "adc %B0, r26 \n\t"\
-
57 "clr r1 \n\t"\
-
58 :\
-
59 "=&r"(intRes) \
-
60 :\
-
61 "a"(intIn1), \
-
62 "a"(intIn2) \
-
63 :\
-
64 "r26", "r27" \
-
65 )
-
66 
-
67 // intRes = intIn1 * intIn2 >> 16 + round
-
68 // uses:
-
69 // r26 to store 0
-
70 // r27 to store the uint8_t 1 of the 32bit result
-
71 // 21 cycles
-
72 #define MultiU16X16toH16Round(intRes, intIn1, intIn2) asm
-
73  volatile ( \
-
74 "clr r26 \n\t"\
-
75 "mul %A1, %A2 \n\t"\
-
76 "mov r27, r1 \n\t"\
-
77 "mul %B1, %B2 \n\t"\
-
78 "movw %A0, r0 \n\t"\
-
79 "mul %B2, %A1 \n\t"\
-
80 "add r27, r0 \n\t"\
-
81 "adc %A0, r1 \n\t"\
-
82 "adc %B0, r26 \n\t"\
-
83 "mul %B1, %A2 \n\t"\
-
84 "add r27, r0 \n\t"\
-
85 "adc %A0, r1 \n\t"\
-
86 "adc %B0, r26 \n\t"\
-
87 "lsl r27 \n\t"\
-
88 "adc %A0, r26 \n\t"\
-
89 "adc %B0, r26 \n\t"\
-
90 "clr r1 \n\t"\
-
91 :\
-
92 "=&r"(intRes) \
-
93 :\
-
94 "a"(intIn1), \
-
95 "a"(intIn2) \
-
96 :\
-
97 "r26", "r27" \
-
98 )
-
99 
-
100 
-
101 // signed16 * signed16
-
102 // 22 cycles
-
103 #define MultiS16X16to32(longRes, intIn1, intIn2) asm
-
104  volatile ( \
-
105 "clr r26 \n\t"\
-
106 "mul %A1, %A2 \n\t"\
-
107 "movw %A0, r0 \n\t"\
-
108 "muls %B1, %B2 \n\t"\
-
109 "movw %C0, r0 \n\t"\
-
110 "mulsu %B2, %A1 \n\t"\
-
111 "sbc %D0, r26 \n\t"\
-
112 "add %B0, r0 \n\t"\
-
113 "adc %C0, r1 \n\t"\
-
114 "adc %D0, r26 \n\t"\
-
115 "mulsu %B1, %A2 \n\t"\
-
116 "sbc %D0, r26 \n\t"\
-
117 "add %B0, r0 \n\t"\
-
118 "adc %C0, r1 \n\t"\
-
119 "adc %D0, r26 \n\t"\
-
120 "clr r1 \n\t"\
-
121 :\
-
122 "=&r"(longRes) \
-
123 :\
-
124 "a"(intIn1), \
-
125 "a"(intIn2) \
-
126 :\
-
127 "r26"\
-
128 )
-
129 
-
130 
-
131 // signed16 * signed 16 >> 16
-
132 #define MultiS16X16toH16(intRes, intIn1, intIn2) asm
-
133  volatile ( \
-
134 "clr r26 \n\t"\
-
135 "mul %A1, %A2 \n\t"\
-
136 "mov r27, r1 \n\t"\
-
137 "muls %B1, %B2 \n\t"\
-
138 "movw %A0, r0 \n\t"\
-
139 "mulsu %B2, %A1 \n\t"\
-
140 "sbc %B0, r26 \n\t"\
-
141 "add r27, r0 \n\t"\
-
142 "adc %A0, r1 \n\t"\
-
143 "adc %B0, r26 \n\t"\
-
144 "mulsu %B1, %A2 \n\t"\
-
145 "sbc %B0, r26 \n\t"\
-
146 "add r27, r0 \n\t"\
-
147 "adc %A0, r1 \n\t"\
-
148 "adc %B0, r26 \n\t"\
-
149 "clr r1 \n\t"\
-
150 :\
-
151 "=&r"(intRes) \
-
152 :\
-
153 "a"(intIn1), \
-
154 "a"(intIn2) \
-
155 :\
-
156 "r26","r27" \
-
157 )
-
158 
-
159 // multiplies a signed and unsigned 16 bit ints with a 32 bit result
-
160 #define MultiSU16X16to32(longRes, intIn1, intIn2) asm
-
161  volatile ( \
-
162 "clr r26 \n\t"\
-
163 "mul %A1, %A2 \n\t"\
-
164 "movw %A0, r0 \n\t"\
-
165 "mulsu %B1, %B2 \n\t"\
-
166 "movw %C0, r0 \n\t"\
-
167 "mul %B2, %A1 \n\t"\
-
168 "add %B0, r0 \n\t"\
-
169 "adc %C0, r1 \n\t"\
-
170 "adc %D0, r26 \n\t"\
-
171 "mulsu %B1, %A2 \n\t"\
-
172 "sbc %D0, r26 \n\t"\
-
173 "add %B0, r0 \n\t"\
-
174 "adc %C0, r1 \n\t"\
-
175 "adc %D0, r26 \n\t"\
-
176 "clr r1 \n\t"\
-
177 :\
-
178 "=&r"(longRes) \
-
179 :\
-
180 "a"(intIn1), \
-
181 "a"(intIn2) \
-
182 :\
-
183 "r26"\
-
184 )
-
185 
-
186 // multiplies signed x unsigned int and returns the highest 16 bits of the result
-
187 #define MultiSU16X16toH16(intRes, intIn1, intIn2) asm
-
188  volatile ( \
-
189 "clr r26 \n\t"\
-
190 "mul %A1, %A2 \n\t"\
-
191 "mov r27, r1 \n\t"\
-
192 "mulsu %B1, %B2 \n\t"\
-
193 "movw %A0, r0 \n\t"\
-
194 "mul %B2, %A1 \n\t"\
-
195 "add r27, r0 \n\t"\
-
196 "adc %A0, r1 \n\t"\
-
197 "adc %B0, r26 \n\t"\
-
198 "mulsu %B1, %A2 \n\t"\
-
199 "sbc %B0, r26 \n\t"\
-
200 "add r27, r0 \n\t"\
-
201 "adc %A0, r1 \n\t"\
-
202 "adc %B0, r26 \n\t"\
-
203 "clr r1 \n\t"\
-
204 :\
-
205 "=&r"(intRes) \
-
206 :\
-
207 "a"(intIn1), \
-
208 "a"(intIn2) \
-
209 :\
-
210 "r26","r27" \
-
211 )
-
212 
-
213 // multiplies signed x unsigned int and returns the highest 16 bits of the result
-
214 // rounds the result based on the MSB of the lower 16 bits
-
215 // 22 cycles
-
216 #define MultiSU16X16toH16Round(intRes, intIn1, intIn2) asm
-
217  volatile ( \
-
218 "clr r26 \n\t"\
-
219 "mul %A1, %A2 \n\t"\
-
220 "mov r27, r1 \n\t"\
-
221 "mulsu %B1, %B2 \n\t"\
-
222 "movw %A0, r0 \n\t"\
-
223 "mul %A1, %B2 \n\t"\
-
224 "add r27, r0 \n\t"\
-
225 "adc %A0, r1 \n\t"\
-
226 "adc %B0, r26 \n\t"\
-
227 "mulsu %B1, %A2 \n\t"\
-
228 "sbc %B0, r26 \n\t"\
-
229 "add r27, r0 \n\t"\
-
230 "adc %A0, r1 \n\t"\
-
231 "adc %B0, r26 \n\t"\
-
232 "lsl r27 \n\t"\
-
233 "adc %A0, r26 \n\t"\
-
234 "adc %B0, r26 \n\t"\
-
235 "clr r1 \n\t"\
-
236 :\
-
237 "=&r"(intRes) \
-
238 :\
-
239 "a"(intIn1), \
-
240 "a"(intIn2) \
-
241 :\
-
242 "r26","r27" \
-
243 )
-
-
- - - diff --git a/extras/doc/html/mult16x8_8h_source.html b/extras/doc/html/mult16x8_8h_source.html deleted file mode 100644 index 6f945f4d3..000000000 --- a/extras/doc/html/mult16x8_8h_source.html +++ /dev/null @@ -1,196 +0,0 @@ - - - - - - - -Mozzi: mult16x8.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
mult16x8.h
-
-
-
1 
-
2 /*
-
3 Norbert Pozar 2009
-
4 http://mekonik.wordpress.com/2009/03/18/arduino-avr-gcc-multiplication/
-
5 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-
6 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-
7 FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-
8 COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-
9 IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-
10 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.*/
-
11 
-
12 // multiplies 16 bit X 8 bit
-
13 // stores lower 16 bits
-
14 #define MultiSU16X8toL16(intRes, int16In, int8In) asm
-
15  volatile ( \
-
16 "mul %A1, %2 \n\t"\
-
17 "movw %A0, r0 \n\t"\
-
18 "mulsu %B1, %2 \n\t"\
-
19 "add %B0, r0 \n\t"\
-
20 "clr r1"\
-
21 :\
-
22 "=&r"(intRes) \
-
23 :\
-
24 "a"(int16In), \
-
25 "a"(int8In) \
-
26 )
-
27 
-
28 // multiplies 16 bit number X 8 bit constant
-
29 // saves lower 16 bit
-
30 // 8 cycles
-
31 #define MultiSU16XConst8toL16(intRes, int16In, int8In) asm
-
32  volatile ( \
-
33 "ldi r22, %2 \n\t"\
-
34 "mul %A1, r22 \n\t"\
-
35 "movw %A0, r0 \n\t"\
-
36 "mulsu %B1, r22 \n\t"\
-
37 "add %B0, r0 \n\t"\
-
38 "clr r1 \n\t"\
-
39 :\
-
40 "=&r"(intRes) \
-
41 :\
-
42 "a"(int16In), \
-
43 "M"(int8In) \
-
44 :\
-
45 "r22"\
-
46 )
-
47 
-
48 // multiplies 16 bit number X 8 bit and stores 2 high uint8_ts
-
49 #define MultiSU16X8toH16(intRes, int16In, int8In) asm
-
50  volatile ( \
-
51 "clr r26 \n\t"\
-
52 "mulsu %B1, %A2 \n\t"\
-
53 "movw %A0, r0 \n\t"\
-
54 "mul %A1, %A2 \n\t"\
-
55 "add %A0, r1 \n\t"\
-
56 "adc %B0, r26 \n\t"\
-
57 "clr r1 \n\t"\
-
58 :\
-
59 "=&r"(intRes) \
-
60 :\
-
61 "a"(int16In), \
-
62 "a"(int8In) \
-
63 :\
-
64 "r26"\
-
65 )
-
66 
-
67 // multiplies 16 bit signed number X 8 bit and stores 2 high uint8_ts
-
68 // rounds the number based on the MSB of the lowest uint8_t
-
69 #define MultiSU16X8toH16Round(intRes, int16In, int8In) asm
-
70  volatile ( \
-
71 "clr r26 \n\t"\
-
72 "mulsu %B1, %A2 \n\t"\
-
73 "movw %A0, r0 \n\t"\
-
74 "mul %A1, %A2 \n\t"\
-
75 "add %A0, r1 \n\t"\
-
76 "adc %B0, r26 \n\t"\
-
77 "lsl r0 \n\t"\
-
78 "adc %A0, r26 \n\t"\
-
79 "adc %B0, r26 \n\t"\
-
80 "clr r1 \n\t"\
-
81 :\
-
82 "=&r"(intRes) \
-
83 :\
-
84 "a"(int16In), \
-
85 "a"(int8In) \
-
86 :\
-
87 "r26"\
-
88 )
-
-
- - - diff --git a/extras/doc/html/mult32x16_8h_source.html b/extras/doc/html/mult32x16_8h_source.html deleted file mode 100644 index 6dfd6304a..000000000 --- a/extras/doc/html/mult32x16_8h_source.html +++ /dev/null @@ -1,187 +0,0 @@ - - - - - - - -Mozzi: mult32x16.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
mult32x16.h
-
-
-
1 
-
2 /*
-
3 Norbert Pozar 2009
-
4 http://mekonik.wordpress.com/2009/03/18/arduino-avr-gcc-multiplication/
-
5 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-
6 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-
7 FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-
8 COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-
9 IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-
10 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
11 */
-
12 
-
13 // multiplies a signed long X unsigned int
-
14 // stores the high 4 uint8_ts of the result
-
15 // rounds the number up if the MSB of the 2 low uint8_ts is set
-
16 // 47 cycles
-
17 #define MultiSU32X16toH32Round(longRes, longIn1, intIn2) asm
-
18  volatile ( \
-
19 "clr r26 \n\t"\
-
20 \
-
21 \
-
22 "mul %A1, %A2 \n\t"\
-
23 "mov r27, r1 \n\t"\
-
24 \
-
25 "mul %B1, %B2 \n\t"\
-
26 "movw %A0, r0 \n\t"\
-
27 \
-
28 "mulsu %D1, %B2 \n\t"\
-
29 "movw %C0, r0 \n\t"\
-
30 \
-
31 "mulsu %D1, %A2 \n\t"\
-
32 "sbc %D0, r26 \n\t"\
-
33 "add %B0, r0 \n\t"\
-
34 "adc %C0, r1 \n\t"\
-
35 "adc %D0, r26 \n\t"\
-
36 \
-
37 \
-
38 "mul %B1, %A2 \n\t"\
-
39 "add r27, r0 \n\t"\
-
40 "adc %A0, r1 \n\t"\
-
41 "adc %B0, r26 \n\t"\
-
42 "adc %C0, r26 \n\t"\
-
43 "adc %D0, r26 \n\t"\
-
44 \
-
45 "mul %A1, %B2 \n\t"\
-
46 "add r27, r0 \n\t"\
-
47 "adc %A0, r1 \n\t"\
-
48 "adc %B0, r26 \n\t"\
-
49 "adc %C0, r26 \n\t"\
-
50 "adc %D0, r26 \n\t"\
-
51 \
-
52 "mul %C1, %A2 \n\t"\
-
53 "adc %A0, r0 \n\t"\
-
54 "adc %B0, r1 \n\t"\
-
55 "adc %C0, r26 \n\t"\
-
56 "adc %D0, r26 \n\t"\
-
57 \
-
58 "mul %C1, %B2 \n\t"\
-
59 "adc %B0, r0 \n\t"\
-
60 "adc %C0, r1 \n\t"\
-
61 "adc %D0, r26 \n\t"\
-
62 \
-
63 \
-
64 "lsl r27 \n\t"\
-
65 "adc %A0, r26 \n\t"\
-
66 "adc %B0, r26 \n\t"\
-
67 "adc %C0, r26 \n\t"\
-
68 "adc %D0, r26 \n\t"\
-
69 \
-
70 \
-
71 "clr r1 \n\t"\
-
72 :\
-
73 "=&r"(longRes) \
-
74 :\
-
75 "a"(longIn1), \
-
76 "a"(intIn2) \
-
77 :\
-
78 "r26","r27"\
-
79 )
-
-
- - - diff --git a/extras/doc/html/namespace_mozzi_private.html b/extras/doc/html/namespace_mozzi_private.html deleted file mode 100644 index abda44c42..000000000 --- a/extras/doc/html/namespace_mozzi_private.html +++ /dev/null @@ -1,208 +0,0 @@ - - - - - - - -Mozzi: MozziPrivate Namespace Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
MozziPrivate Namespace Reference
-
-
- -

Internal. -More...

- - - - -

-Classes

class  MozziRandPrivate
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Functions

-void randSeed (uint32_t seed)
 
-template<byte BITS_IN, byte BITS_OUT, typename T >
constexpr T smartShift (T value)
 
-void bufferAudioOutput (const AudioOutput f)
 
-uint16_t mozziAnalogRead (uint8_t pin)
 
-void advanceControlLoop ()
 
-void audioHook ()
 
-unsigned long audioTicks ()
 
-unsigned long mozziMicros ()
 
-void startMozzi (int control_rate_hz)
 
-void stopMozzi ()
 
-void startScan (int pin)
 
-uint16_t readADC (int pin)
 
-void dac_creation (pin_size_t pinN)
 
-void dac_init ()
 
-void setupFastAnalogRead (int8_t)
 
-bool adc_setup_read (PinName pin, uint32_t resolution)
 
- - - - - - - - - - - - - - - - - - - -

-Variables

-uint64_t samples_written_to_buffer
 
-uint16_t output_buffer_size
 
-FspTimer timer_dac
 
-volatile uint32_t pin
 
-uint8_t dac_bits
 
-dtc_instance_ctrl_t dtc_ctrl
 
-transfer_info_t dtc_info
 
-dtc_extended_cfg_t dtc_cfg_extend
 
-transfer_cfg_t dtc_cfg
 
-

Detailed Description

-

Internal.

-

Do not use function in this namespace in your sketch!

-

This namespace contains various functions that are used by Mozzi, internally, but are not meant to be used in a sketch.

-

The details of these may change without warning. I repeat: Do not use these in your sketch!

-
-
- - - diff --git a/extras/doc/html/nav_f.png b/extras/doc/html/nav_f.png deleted file mode 100644 index d90bb2b40..000000000 Binary files a/extras/doc/html/nav_f.png and /dev/null differ diff --git a/extras/doc/html/nav_g.png b/extras/doc/html/nav_g.png deleted file mode 100644 index 2093a237a..000000000 Binary files a/extras/doc/html/nav_g.png and /dev/null differ diff --git a/extras/doc/html/nav_h.png b/extras/doc/html/nav_h.png deleted file mode 100644 index a68d8d0ff..000000000 Binary files a/extras/doc/html/nav_h.png and /dev/null differ diff --git a/extras/doc/html/navtree.css b/extras/doc/html/navtree.css deleted file mode 100644 index 433a1c411..000000000 --- a/extras/doc/html/navtree.css +++ /dev/null @@ -1,146 +0,0 @@ -#nav-tree .children_ul { - margin:0; - padding:4px; -} - -#nav-tree ul { - list-style:none outside none; - margin:0px; - padding:0px; -} - -#nav-tree li { - white-space:nowrap; - margin:0px; - padding:0px; -} - -#nav-tree .plus { - margin:0px; -} - -#nav-tree .selected { - background-image: url('tab_a.png'); - background-repeat:repeat-x; - color: #fff; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); -} - -#nav-tree img { - margin:0px; - padding:0px; - border:0px; - vertical-align: middle; -} - -#nav-tree a { - text-decoration:none; - padding:0px; - margin:0px; - outline:none; -} - -#nav-tree .label { - margin:0px; - padding:0px; - font: 12px 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; -} - -#nav-tree .label a { - padding:2px; -} - -#nav-tree .selected a { - text-decoration:none; - color:#fff; -} - -#nav-tree .children_ul { - margin:0px; - padding:0px; -} - -#nav-tree .item { - margin:0px; - padding:0px; -} - -#nav-tree { - padding: 0px 0px; - background-color: #FAFAFF; - font-size:14px; - overflow:auto; -} - -#doc-content { - overflow:auto; - display:block; - padding:0px; - margin:0px; - -webkit-overflow-scrolling : touch; /* iOS 5+ */ -} - -#side-nav { - padding:0 6px 0 0; - margin: 0px; - display:block; - position: absolute; - left: 0px; - width: 250px; -} - -.ui-resizable .ui-resizable-handle { - display:block; -} - -.ui-resizable-e { - background-image:url("splitbar.png"); - background-size:100%; - background-repeat:repeat-y; - background-attachment: scroll; - cursor:ew-resize; - height:100%; - right:0; - top:0; - width:6px; -} - -.ui-resizable-handle { - display:none; - font-size:0.1px; - position:absolute; - z-index:1; -} - -#nav-tree-contents { - margin: 6px 0px 0px 0px; -} - -#nav-tree { - background-image:url('nav_h.png'); - background-repeat:repeat-x; - background-color: #F6F8F0; - -webkit-overflow-scrolling : touch; /* iOS 5+ */ -} - -#nav-sync { - position:absolute; - top:5px; - right:24px; - z-index:0; -} - -#nav-sync img { - opacity:0.3; -} - -#nav-sync img:hover { - opacity:0.9; -} - -@media print -{ - #nav-tree { display: none; } - div.ui-resizable-handle { display: none; position: relative; } -} - diff --git a/extras/doc/html/navtree.js b/extras/doc/html/navtree.js deleted file mode 100644 index 1e272d31d..000000000 --- a/extras/doc/html/navtree.js +++ /dev/null @@ -1,546 +0,0 @@ -/* - @licstart The following is the entire license notice for the JavaScript code in this file. - - The MIT License (MIT) - - Copyright (C) 1997-2020 by Dimitri van Heesch - - Permission is hereby granted, free of charge, to any person obtaining a copy of this software - and associated documentation files (the "Software"), to deal in the Software without restriction, - including without limitation the rights to use, copy, modify, merge, publish, distribute, - sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or - substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - @licend The above is the entire license notice for the JavaScript code in this file - */ -var navTreeSubIndices = new Array(); -var arrowDown = '▼'; -var arrowRight = '►'; - -function getData(varName) -{ - var i = varName.lastIndexOf('/'); - var n = i>=0 ? varName.substring(i+1) : varName; - return eval(n.replace(/\-/g,'_')); -} - -function stripPath(uri) -{ - return uri.substring(uri.lastIndexOf('/')+1); -} - -function stripPath2(uri) -{ - var i = uri.lastIndexOf('/'); - var s = uri.substring(i+1); - var m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/); - return m ? uri.substring(i-6) : s; -} - -function hashValue() -{ - return $(location).attr('hash').substring(1).replace(/[^\w\-]/g,''); -} - -function hashUrl() -{ - return '#'+hashValue(); -} - -function pathName() -{ - return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;\(\)]/g, ''); -} - -function localStorageSupported() -{ - try { - return 'localStorage' in window && window['localStorage'] !== null && window.localStorage.getItem; - } - catch(e) { - return false; - } -} - -function storeLink(link) -{ - if (!$("#nav-sync").hasClass('sync') && localStorageSupported()) { - window.localStorage.setItem('navpath',link); - } -} - -function deleteLink() -{ - if (localStorageSupported()) { - window.localStorage.setItem('navpath',''); - } -} - -function cachedLink() -{ - if (localStorageSupported()) { - return window.localStorage.getItem('navpath'); - } else { - return ''; - } -} - -function getScript(scriptName,func,show) -{ - var head = document.getElementsByTagName("head")[0]; - var script = document.createElement('script'); - script.id = scriptName; - script.type = 'text/javascript'; - script.onload = func; - script.src = scriptName+'.js'; - head.appendChild(script); -} - -function createIndent(o,domNode,node,level) -{ - var level=-1; - var n = node; - while (n.parentNode) { level++; n=n.parentNode; } - if (node.childrenData) { - var imgNode = document.createElement("span"); - imgNode.className = 'arrow'; - imgNode.style.paddingLeft=(16*level).toString()+'px'; - imgNode.innerHTML=arrowRight; - node.plus_img = imgNode; - node.expandToggle = document.createElement("a"); - node.expandToggle.href = "javascript:void(0)"; - node.expandToggle.onclick = function() { - if (node.expanded) { - $(node.getChildrenUL()).slideUp("fast"); - node.plus_img.innerHTML=arrowRight; - node.expanded = false; - } else { - expandNode(o, node, false, false); - } - } - node.expandToggle.appendChild(imgNode); - domNode.appendChild(node.expandToggle); - } else { - var span = document.createElement("span"); - span.className = 'arrow'; - span.style.width = 16*(level+1)+'px'; - span.innerHTML = ' '; - domNode.appendChild(span); - } -} - -var animationInProgress = false; - -function gotoAnchor(anchor,aname,updateLocation) -{ - var pos, docContent = $('#doc-content'); - var ancParent = $(anchor.parent()); - if (ancParent.hasClass('memItemLeft') || - ancParent.hasClass('memtitle') || - ancParent.hasClass('fieldname') || - ancParent.hasClass('fieldtype') || - ancParent.is(':header')) - { - pos = ancParent.position().top; - } else if (anchor.position()) { - pos = anchor.position().top; - } - if (pos) { - var dist = Math.abs(Math.min( - pos-docContent.offset().top, - docContent[0].scrollHeight- - docContent.height()-docContent.scrollTop())); - animationInProgress=true; - docContent.animate({ - scrollTop: pos + docContent.scrollTop() - docContent.offset().top - },Math.max(50,Math.min(500,dist)),function(){ - if (updateLocation) window.location.href=aname; - animationInProgress=false; - }); - } -} - -function newNode(o, po, text, link, childrenData, lastNode) -{ - var node = new Object(); - node.children = Array(); - node.childrenData = childrenData; - node.depth = po.depth + 1; - node.relpath = po.relpath; - node.isLast = lastNode; - - node.li = document.createElement("li"); - po.getChildrenUL().appendChild(node.li); - node.parentNode = po; - - node.itemDiv = document.createElement("div"); - node.itemDiv.className = "item"; - - node.labelSpan = document.createElement("span"); - node.labelSpan.className = "label"; - - createIndent(o,node.itemDiv,node,0); - node.itemDiv.appendChild(node.labelSpan); - node.li.appendChild(node.itemDiv); - - var a = document.createElement("a"); - node.labelSpan.appendChild(a); - node.label = document.createTextNode(text); - node.expanded = false; - a.appendChild(node.label); - if (link) { - var url; - if (link.substring(0,1)=='^') { - url = link.substring(1); - link = url; - } else { - url = node.relpath+link; - } - a.className = stripPath(link.replace('#',':')); - if (link.indexOf('#')!=-1) { - var aname = '#'+link.split('#')[1]; - var srcPage = stripPath(pathName()); - var targetPage = stripPath(link.split('#')[0]); - a.href = srcPage!=targetPage ? url : "javascript:void(0)"; - a.onclick = function(){ - storeLink(link); - if (!$(a).parent().parent().hasClass('selected')) - { - $('.item').removeClass('selected'); - $('.item').removeAttr('id'); - $(a).parent().parent().addClass('selected'); - $(a).parent().parent().attr('id','selected'); - } - var anchor = $(aname); - gotoAnchor(anchor,aname,true); - }; - } else { - a.href = url; - a.onclick = function() { storeLink(link); } - } - } else { - if (childrenData != null) - { - a.className = "nolink"; - a.href = "javascript:void(0)"; - a.onclick = node.expandToggle.onclick; - } - } - - node.childrenUL = null; - node.getChildrenUL = function() { - if (!node.childrenUL) { - node.childrenUL = document.createElement("ul"); - node.childrenUL.className = "children_ul"; - node.childrenUL.style.display = "none"; - node.li.appendChild(node.childrenUL); - } - return node.childrenUL; - }; - - return node; -} - -function showRoot() -{ - var headerHeight = $("#top").height(); - var footerHeight = $("#nav-path").height(); - var windowHeight = $(window).height() - headerHeight - footerHeight; - (function (){ // retry until we can scroll to the selected item - try { - var navtree=$('#nav-tree'); - navtree.scrollTo('#selected',100,{offset:-windowHeight/2}); - } catch (err) { - setTimeout(arguments.callee, 0); - } - })(); -} - -function expandNode(o, node, imm, showRoot) -{ - if (node.childrenData && !node.expanded) { - if (typeof(node.childrenData)==='string') { - var varName = node.childrenData; - getScript(node.relpath+varName,function(){ - node.childrenData = getData(varName); - expandNode(o, node, imm, showRoot); - }, showRoot); - } else { - if (!node.childrenVisited) { - getNode(o, node); - } - $(node.getChildrenUL()).slideDown("fast"); - node.plus_img.innerHTML = arrowDown; - node.expanded = true; - } - } -} - -function glowEffect(n,duration) -{ - n.addClass('glow').delay(duration).queue(function(next){ - $(this).removeClass('glow');next(); - }); -} - -function highlightAnchor() -{ - var aname = hashUrl(); - var anchor = $(aname); - if (anchor.parent().attr('class')=='memItemLeft'){ - var rows = $('.memberdecls tr[class$="'+hashValue()+'"]'); - glowEffect(rows.children(),300); // member without details - } else if (anchor.parent().attr('class')=='fieldname'){ - glowEffect(anchor.parent().parent(),1000); // enum value - } else if (anchor.parent().attr('class')=='fieldtype'){ - glowEffect(anchor.parent().parent(),1000); // struct field - } else if (anchor.parent().is(":header")) { - glowEffect(anchor.parent(),1000); // section header - } else { - glowEffect(anchor.next(),1000); // normal member - } -} - -function selectAndHighlight(hash,n) -{ - var a; - if (hash) { - var link=stripPath(pathName())+':'+hash.substring(1); - a=$('.item a[class$="'+link+'"]'); - } - if (a && a.length) { - a.parent().parent().addClass('selected'); - a.parent().parent().attr('id','selected'); - highlightAnchor(); - } else if (n) { - $(n.itemDiv).addClass('selected'); - $(n.itemDiv).attr('id','selected'); - } - if ($('#nav-tree-contents .item:first').hasClass('selected')) { - $('#nav-sync').css('top','30px'); - } else { - $('#nav-sync').css('top','5px'); - } - showRoot(); -} - -function showNode(o, node, index, hash) -{ - if (node && node.childrenData) { - if (typeof(node.childrenData)==='string') { - var varName = node.childrenData; - getScript(node.relpath+varName,function(){ - node.childrenData = getData(varName); - showNode(o,node,index,hash); - },true); - } else { - if (!node.childrenVisited) { - getNode(o, node); - } - $(node.getChildrenUL()).css({'display':'block'}); - node.plus_img.innerHTML = arrowDown; - node.expanded = true; - var n = node.children[o.breadcrumbs[index]]; - if (index+11) hash = '#'+parts[1].replace(/[^\w\-]/g,''); - else hash=''; - } - if (hash.match(/^#l\d+$/)) { - var anchor=$('a[name='+hash.substring(1)+']'); - glowEffect(anchor.parent(),1000); // line number - hash=''; // strip line number anchors - } - var url=root+hash; - var i=-1; - while (NAVTREEINDEX[i+1]<=url) i++; - if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index - if (navTreeSubIndices[i]) { - gotoNode(o,i,root,hash,relpath) - } else { - getScript(relpath+'navtreeindex'+i,function(){ - navTreeSubIndices[i] = eval('NAVTREEINDEX'+i); - if (navTreeSubIndices[i]) { - gotoNode(o,i,root,hash,relpath); - } - },true); - } -} - -function showSyncOff(n,relpath) -{ - n.html(''); -} - -function showSyncOn(n,relpath) -{ - n.html(''); -} - -function toggleSyncButton(relpath) -{ - var navSync = $('#nav-sync'); - if (navSync.hasClass('sync')) { - navSync.removeClass('sync'); - showSyncOff(navSync,relpath); - storeLink(stripPath2(pathName())+hashUrl()); - } else { - navSync.addClass('sync'); - showSyncOn(navSync,relpath); - deleteLink(); - } -} - -var loadTriggered = false; -var readyTriggered = false; -var loadObject,loadToRoot,loadUrl,loadRelPath; - -$(window).on('load',function(){ - if (readyTriggered) { // ready first - navTo(loadObject,loadToRoot,loadUrl,loadRelPath); - showRoot(); - } - loadTriggered=true; -}); - -function initNavTree(toroot,relpath) -{ - var o = new Object(); - o.toroot = toroot; - o.node = new Object(); - o.node.li = document.getElementById("nav-tree-contents"); - o.node.childrenData = NAVTREE; - o.node.children = new Array(); - o.node.childrenUL = document.createElement("ul"); - o.node.getChildrenUL = function() { return o.node.childrenUL; }; - o.node.li.appendChild(o.node.childrenUL); - o.node.depth = 0; - o.node.relpath = relpath; - o.node.expanded = false; - o.node.isLast = true; - o.node.plus_img = document.createElement("span"); - o.node.plus_img.className = 'arrow'; - o.node.plus_img.innerHTML = arrowRight; - - if (localStorageSupported()) { - var navSync = $('#nav-sync'); - if (cachedLink()) { - showSyncOff(navSync,relpath); - navSync.removeClass('sync'); - } else { - showSyncOn(navSync,relpath); - } - navSync.click(function(){ toggleSyncButton(relpath); }); - } - - if (loadTriggered) { // load before ready - navTo(o,toroot,hashUrl(),relpath); - showRoot(); - } else { // ready before load - loadObject = o; - loadToRoot = toroot; - loadUrl = hashUrl(); - loadRelPath = relpath; - readyTriggered=true; - } - - $(window).bind('hashchange', function(){ - if (window.location.hash && window.location.hash.length>1){ - var a; - if ($(location).attr('hash')){ - var clslink=stripPath(pathName())+':'+hashValue(); - a=$('.item a[class$="'+clslink.replace(/ - - - - - - -Mozzi: Related Pages - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
Related Pages
-
-
-
Here is a list of all related documentation pages:
-
[detail level 12]
- - - - - - - - - - - - - - -
 Hardware and configurationMozzi works on many different platforms, but not the same output modes are available on all hardware
 Mozzi on classic Arduino, Teensy 2.x, Arduino Mega, and other 8 bit "AVR"/ATMEGA architecture boards
 Mozzi on ESP32-based boards.Port by Dieter Vandoren and Thomas Friedrichsmeier
 Mozzi on ESP8266-based boards.Port by Thomas Friedrichsmeier
 Mozzi on MBED-based boards (Arduino Giga / Portenta).Port by Thomas Friedrichsmeier & Thomas Combriat
 Mozzi on Arduino Uno R4 - Renesas.Port by Thomas Combriat
 Mozzi on RP2040 (Raspberry Pi Pico)Port by Thomas Friedrichsmeier
 Mozzi on SAMD21 based boards (Arduino Circuitplayground M0 and others)Port by Adrian Freed
 Mozzi on STM32duino-based boards.Port by Thomas Friedrichsmeier
 Mozzi on STM32-boards with libmaple based core.Port by Thomas Friedrichsmeier
 Mozzi on STM32-based boards - disambiguation
 Mozzi on Teensy 3.0/3.1/3.2/3.4/3.5/LC boards.Port by Tim Barrass
 Mozzi on Teensy 4.x boards.Port by Thomas Combriat
 Getting StartedYou are currently looking at the Mozzi API documentation
-
-
-
- - - diff --git a/extras/doc/html/primes_8h_source.html b/extras/doc/html/primes_8h_source.html deleted file mode 100644 index b6ba7a851..000000000 --- a/extras/doc/html/primes_8h_source.html +++ /dev/null @@ -1,180 +0,0 @@ - - - - - - - -Mozzi: primes.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
primes.h
-
-
-
1 /*
-
2  * primes.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12  /*
-
13 Inspired by PrimeSieve by Paul Badger 2009
-
14 http://playground.arduino.cc/Main/PrimeSieve
-
15 
-
16 Generates random primes up to 10000.
-
17 Takes up about 2.5k of progmem
-
18 */
-
19 
-
20 #ifndef PRIMES_H
-
21 #define PRIMES_H
-
22 
-
23 #include "mozzi_rand.h" // for rand()
-
24 #include "mozzi_pgmspace.h"
-
25 
-
26 static CONSTTABLE_STORAGE(unsigned int) primes[]={
-
27  2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523,
-
28  541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997, 1009, 1013, 1019, 1021, 1031, 1033, 1039, 1049, 1051, 1061, 1063, 1069, 1087, 1091, 1093, 1097, 1103, 1109, 1117, 1123, 1129, 1151, 1153, 1163, 1171, 1181, 1187, 1193, 1201, 1213, 1217, 1223, 1229, 1231, 1237, 1249, 1259, 1277, 1279, 1283, 1289, 1291, 1297, 1301, 1303, 1307, 1319, 1321, 1327, 1361, 1367, 1373, 1381, 1399, 1409, 1423, 1427, 1429, 1433, 1439, 1447, 1451, 1453, 1459, 1471, 1481, 1483, 1487, 1489, 1493, 1499, 1511, 1523, 1531, 1543, 1549, 1553, 1559, 1567, 1571, 1579, 1583, 1597, 1601, 1607, 1609, 1613, 1619, 1621, 1627, 1637, 1657, 1663, 1667, 1669, 1693, 1697, 1699, 1709, 1721, 1723, 1733, 1741, 1747, 1753, 1759, 1777, 1783, 1787, 1789, 1801, 1811, 1823, 1831, 1847, 1861, 1867, 1871, 1873, 1877, 1879, 1889, 1901, 1907, 1913, 1931, 1933, 1949, 1951, 1973, 1979, 1987, 1993, 1997, 1999, 2003, 2011, 2017, 2027, 2029, 2039, 2053, 2063, 2069, 2081, 2083, 2087, 2089, 2099, 2111, 2113, 2129, 2131, 2137, 2141, 2143, 2153, 2161, 2179, 2203, 2207, 2213, 2221, 2237, 2239, 2243, 2251, 2267, 2269, 2273, 2281, 2287, 2293, 2297, 2309, 2311, 2333, 2339, 2341, 2347, 2351, 2357, 2371, 2377, 2381, 2383, 2389, 2393, 2399, 2411, 2417, 2423, 2437, 2441, 2447, 2459, 2467, 2473, 2477, 2503, 2521, 2531, 2539, 2543, 2549, 2551, 2557, 2579, 2591, 2593, 2609, 2617, 2621, 2633, 2647, 2657, 2659, 2663, 2671, 2677, 2683, 2687, 2689, 2693, 2699, 2707, 2711, 2713, 2719, 2729, 2731, 2741, 2749, 2753, 2767, 2777, 2789, 2791, 2797, 2801, 2803, 2819, 2833, 2837, 2843, 2851, 2857, 2861, 2879, 2887, 2897, 2903, 2909, 2917, 2927, 2939, 2953, 2957, 2963, 2969, 2971, 2999, 3001, 3011, 3019, 3023, 3037, 3041, 3049, 3061, 3067, 3079, 3083, 3089, 3109, 3119, 3121, 3137, 3163, 3167, 3169, 3181, 3187, 3191, 3203, 3209, 3217, 3221, 3229, 3251, 3253, 3257, 3259, 3271, 3299, 3301, 3307, 3313, 3319, 3323, 3329, 3331, 3343, 3347, 3359, 3361, 3371, 3373, 3389, 3391, 3407, 3413, 3433, 3449, 3457, 3461, 3463, 3467, 3469, 3491, 3499, 3511, 3517, 3527, 3529, 3533, 3539, 3541, 3547, 3557, 3559, 3571, 3581, 3583, 3593, 3607, 3613, 3617, 3623, 3631, 3637, 3643, 3659, 3671, 3673, 3677, 3691, 3697, 3701, 3709, 3719, 3727, 3733, 3739, 3761, 3767, 3769, 3779, 3793, 3797, 3803, 3821, 3823, 3833, 3847, 3851, 3853, 3863, 3877, 3881, 3889, 3907, 3911, 3917, 3919, 3923, 3929, 3931, 3943, 3947, 3967, 3989, 4001, 4003, 4007, 4013, 4019, 4021, 4027, 4049, 4051, 4057, 4073, 4079, 4091, 4093, 4099, 4111, 4127, 4129, 4133, 4139, 4153, 4157, 4159, 4177, 4201, 4211, 4217, 4219, 4229, 4231, 4241, 4243, 4253, 4259, 4261, 4271, 4273, 4283, 4289, 4297, 4327, 4337, 4339, 4349, 4357, 4363, 4373, 4391, 4397, 4409, 4421, 4423, 4441, 4447, 4451, 4457, 4463, 4481, 4483, 4493, 4507, 4513, 4517, 4519, 4523, 4547, 4549, 4561, 4567, 4583, 4591, 4597, 4603, 4621, 4637, 4639, 4643, 4649, 4651, 4657, 4663, 4673, 4679, 4691, 4703, 4721, 4723, 4729, 4733, 4751, 4759, 4783, 4787, 4789, 4793, 4799, 4801, 4813, 4817, 4831, 4861, 4871, 4877, 4889, 4903, 4909, 4919, 4931, 4933, 4937, 4943, 4951, 4957, 4967, 4969, 4973, 4987, 4993, 4999, 5003, 5009, 5011, 5021, 5023, 5039, 5051, 5059, 5077, 5081, 5087, 5099, 5101, 5107, 5113, 5119, 5147, 5153, 5167, 5171, 5179, 5189, 5197, 5209, 5227, 5231, 5233, 5237, 5261, 5273, 5279, 5281, 5297, 5303, 5309, 5323, 5333, 5347, 5351, 5381, 5387, 5393, 5399, 5407, 5413, 5417, 5419, 5431, 5437, 5441, 5443, 5449, 5471, 5477, 5479, 5483, 5501, 5503, 5507, 5519, 5521, 5527, 5531, 5557, 5563, 5569, 5573, 5581, 5591, 5623, 5639, 5641, 5647, 5651, 5653, 5657, 5659, 5669, 5683, 5689, 5693, 5701, 5711, 5717, 5737, 5741, 5743, 5749, 5779, 5783, 5791, 5801, 5807, 5813, 5821, 5827, 5839, 5843, 5849, 5851, 5857, 5861, 5867, 5869, 5879, 5881, 5897, 5903, 5923, 5927, 5939, 5953, 5981, 5987, 6007, 6011, 6029, 6037, 6043, 6047, 6053, 6067, 6073, 6079, 6089, 6091, 6101, 6113, 6121, 6131, 6133, 6143, 6151, 6163, 6173, 6197, 6199, 6203, 6211, 6217, 6221, 6229, 6247, 6257, 6263, 6269, 6271, 6277, 6287, 6299, 6301, 6311, 6317, 6323, 6329, 6337, 6343, 6353, 6359, 6361, 6367, 6373, 6379, 6389, 6397, 6421, 6427, 6449, 6451, 6469, 6473, 6481, 6491, 6521, 6529, 6547, 6551, 6553, 6563, 6569, 6571, 6577, 6581, 6599, 6607, 6619, 6637, 6653, 6659, 6661, 6673, 6679, 6689, 6691, 6701, 6703, 6709, 6719, 6733, 6737, 6761, 6763, 6779, 6781, 6791, 6793, 6803, 6823, 6827, 6829, 6833, 6841, 6857, 6863, 6869, 6871, 6883, 6899, 6907, 6911, 6917, 6947, 6949, 6959, 6961, 6967, 6971, 6977, 6983, 6991, 6997, 7001, 7013, 7019, 7027, 7039, 7043, 7057, 7069, 7079, 7103, 7109, 7121, 7127, 7129, 7151, 7159, 7177, 7187, 7193, 7207, 7211, 7213, 7219, 7229, 7237, 7243, 7247, 7253, 7283, 7297, 7307, 7309, 7321, 7331, 7333, 7349, 7351, 7369, 7393, 7411, 7417, 7433, 7451, 7457, 7459, 7477, 7481, 7487, 7489, 7499, 7507, 7517, 7523, 7529, 7537, 7541, 7547, 7549, 7559, 7561, 7573, 7577, 7583, 7589, 7591, 7603, 7607, 7621, 7639, 7643, 7649, 7669, 7673, 7681, 7687, 7691, 7699, 7703, 7717, 7723, 7727, 7741, 7753, 7757, 7759, 7789, 7793, 7817, 7823, 7829, 7841, 7853, 7867, 7873, 7877, 7879, 7883, 7901, 7907, 7919, 7927, 7933, 7937, 7949, 7951, 7963, 7993, 8009, 8011, 8017, 8039, 8053, 8059, 8069, 8081, 8087, 8089, 8093, 8101, 8111, 8117, 8123, 8147, 8161, 8167, 8171, 8179, 8191, 8209, 8219, 8221, 8231, 8233, 8237, 8243, 8263, 8269, 8273, 8287, 8291, 8293, 8297, 8311, 8317, 8329, 8353, 8363, 8369, 8377, 8387, 8389, 8419, 8423, 8429, 8431, 8443, 8447, 8461, 8467, 8501, 8513, 8521, 8527, 8537, 8539, 8543, 8563, 8573, 8581, 8597, 8599, 8609, 8623, 8627, 8629, 8641, 8647, 8663, 8669, 8677, 8681, 8689, 8693, 8699, 8707, 8713, 8719, 8731, 8737, 8741, 8747, 8753, 8761, 8779, 8783, 8803, 8807, 8819, 8821, 8831, 8837, 8839, 8849, 8861, 8863, 8867, 8887, 8893, 8923, 8929, 8933, 8941, 8951, 8963, 8969, 8971, 8999, 9001, 9007, 9011, 9013, 9029, 9041, 9043, 9049, 9059, 9067, 9091, 9103, 9109, 9127, 9133, 9137, 9151, 9157, 9161, 9173, 9181, 9187, 9199, 9203, 9209, 9221, 9227, 9239, 9241, 9257, 9277, 9281, 9283, 9293, 9311, 9319, 9323, 9337, 9341, 9343, 9349, 9371, 9377, 9391, 9397, 9403, 9413, 9419, 9421, 9431, 9433, 9437, 9439, 9461, 9463, 9467, 9473, 9479, 9491, 9497, 9511, 9521, 9533, 9539, 9547, 9551, 9587, 9601, 9613, 9619, 9623, 9629, 9631, 9643, 9649, 9661, 9677, 9679, 9689, 9697, 9719, 9721, 9733, 9739, 9743, 9749, 9767, 9769, 9781, 9787, 9791, 9803, 9811, 9817, 9829, 9833, 9839, 9851, 9857, 9859, 9871, 9883, 9887, 9901, 9907, 9923, 9929, 9931, 9941, 9949, 9967, 9973,};
-
29 
-
30 static const unsigned int TOP_PRIME_INDEX = (sizeof(primes)/2);// - 1; //1228
-
31 
-
32 /*
-
33 unsigned int prime(){
-
34  return primes[rand(TOP_PRIME_INDEX)];
-
35 }
-
36 */
-
37 
-
38 /** @ingroup random
-
39 Generates a random prime number between 0 and the n-1th prime number.
-
40 This uses a stored array of primes, which takes about 2.5k of progmem.
-
41 @param n the maximum index in the series of primes up to which numbers will be returned.
-
42 The maximum is 1128.
-
43 @return random prime number between 0 and n-1th index in the series of primes.
-
44 @note This isn't included automatically with mozzi_rand.h,
-
45 because it takes up memory which might be needed for other things.
-
46 You need to "#include <primes.h>" separately to mozzi_rand.h.
-
47 */
-
48 inline
-
49 unsigned int randPrime(unsigned int n){
-
50  return FLASH_OR_RAM_READ<const unsigned int>(primes+rand(n));
-
51 }
-
52 
-
53 /** @ingroup random
-
54 Generates a random prime number between 0 and the given input number inclusive.
-
55 This uses a stored array of primes up to 10000, which takes about 2.5k of progmem.
-
56 @param n the upper limit of the random prime number to be generated.
-
57 The maximum is 10000.
-
58 @return random prime number between 0 and n.
-
59 @note This isn't included automatically with mozzi_utils.h,
-
60 because it takes up memory which might be needed for other things.
-
61 You need to "#include <primes.h>" separately to mozzi_utils.h.
-
62 */
-
63 inline
-
64 unsigned int randPrimeUpTo(unsigned int n){
-
65  unsigned int p;
-
66  do {
-
67  p = FLASH_OR_RAM_READ<const unsigned int>(primes+rand(TOP_PRIME_INDEX));
-
68  } while (p > n);
-
69  return p;
-
70 }
-
71 
-
72 #endif // #ifndef PRIMES_H
-
-
- - - diff --git a/extras/doc/html/resize.js b/extras/doc/html/resize.js deleted file mode 100644 index e1ad0fe3b..000000000 --- a/extras/doc/html/resize.js +++ /dev/null @@ -1,140 +0,0 @@ -/* - @licstart The following is the entire license notice for the JavaScript code in this file. - - The MIT License (MIT) - - Copyright (C) 1997-2020 by Dimitri van Heesch - - Permission is hereby granted, free of charge, to any person obtaining a copy of this software - and associated documentation files (the "Software"), to deal in the Software without restriction, - including without limitation the rights to use, copy, modify, merge, publish, distribute, - sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or - substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - @licend The above is the entire license notice for the JavaScript code in this file - */ -function initResizable() -{ - var cookie_namespace = 'doxygen'; - var sidenav,navtree,content,header,collapsed,collapsedWidth=0,barWidth=6,desktop_vp=768,titleHeight; - - function readCookie(cookie) - { - var myCookie = cookie_namespace+"_"+cookie+"="; - if (document.cookie) { - var index = document.cookie.indexOf(myCookie); - if (index != -1) { - var valStart = index + myCookie.length; - var valEnd = document.cookie.indexOf(";", valStart); - if (valEnd == -1) { - valEnd = document.cookie.length; - } - var val = document.cookie.substring(valStart, valEnd); - return val; - } - } - return 0; - } - - function writeCookie(cookie, val, expiration) - { - if (val==undefined) return; - if (expiration == null) { - var date = new Date(); - date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week - expiration = date.toGMTString(); - } - document.cookie = cookie_namespace + "_" + cookie + "=" + val + "; expires=" + expiration+"; path=/"; - } - - function resizeWidth() - { - var windowWidth = $(window).width() + "px"; - var sidenavWidth = $(sidenav).outerWidth(); - content.css({marginLeft:parseInt(sidenavWidth)+"px"}); - writeCookie('width',sidenavWidth-barWidth, null); - } - - function restoreWidth(navWidth) - { - var windowWidth = $(window).width() + "px"; - content.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); - sidenav.css({width:navWidth + "px"}); - } - - function resizeHeight() - { - var headerHeight = header.outerHeight(); - var footerHeight = footer.outerHeight(); - var windowHeight = $(window).height() - headerHeight - footerHeight; - content.css({height:windowHeight + "px"}); - navtree.css({height:windowHeight + "px"}); - sidenav.css({height:windowHeight + "px"}); - var width=$(window).width(); - if (width!=collapsedWidth) { - if (width=desktop_vp) { - if (!collapsed) { - collapseExpand(); - } - } else if (width>desktop_vp && collapsedWidth0) { - restoreWidth(0); - collapsed=true; - } - else { - var width = readCookie('width'); - if (width>200 && width<$(window).width()) { restoreWidth(width); } else { restoreWidth(200); } - collapsed=false; - } - } - - header = $("#top"); - sidenav = $("#side-nav"); - content = $("#doc-content"); - navtree = $("#nav-tree"); - footer = $("#nav-path"); - $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } }); - $(sidenav).resizable({ minWidth: 0 }); - $(window).resize(function() { resizeHeight(); }); - var device = navigator.userAgent.toLowerCase(); - var touch_device = device.match(/(iphone|ipod|ipad|android)/); - if (touch_device) { /* wider split bar for touch only devices */ - $(sidenav).css({ paddingRight:'20px' }); - $('.ui-resizable-e').css({ width:'20px' }); - $('#nav-sync').css({ right:'34px' }); - barWidth=20; - } - var width = readCookie('width'); - if (width) { restoreWidth(width); } else { resizeWidth(); } - resizeHeight(); - var url = location.href; - var i=url.indexOf("#"); - if (i>=0) window.location.hash=url.substr(i); - var _preventDefault = function(evt) { evt.preventDefault(); }; - $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); - $(".ui-resizable-handle").dblclick(collapseExpand); - $(window).on('load',resizeHeight); -} -/* @license-end */ diff --git a/extras/doc/html/search/all_0.html b/extras/doc/html/search/all_0.html deleted file mode 100644 index 1ec5b2d59..000000000 --- a/extras/doc/html/search/all_0.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/all_0.js b/extras/doc/html/search/all_0.js deleted file mode 100644 index 26168af25..000000000 --- a/extras/doc/html/search/all_0.js +++ /dev/null @@ -1,23 +0,0 @@ -var searchData= -[ - ['adcdisconnectalldigitalins_0',['adcDisconnectAllDigitalIns',['../group__analog.html#ga5042e7c576dd0307be38eb70efdb69fe',1,'mozzi_analog.h']]], - ['adcreconnectalldigitalins_1',['adcReconnectAllDigitalIns',['../group__analog.html#gabad497d1f8c8026e81849be0b65bf38f',1,'mozzi_analog.h']]], - ['adsr_2',['ADSR',['../class_a_d_s_r.html',1,'ADSR< CONTROL_UPDATE_RATE, LERP_RATE, T >'],['../class_a_d_s_r.html#a4bd943baa8c5b68d3ee7b3d385e77221',1,'ADSR::ADSR()']]], - ['adsr_3c_20mozzi_5fcontrol_5frate_2c_20mozzi_5faudio_5frate_20_3e_3',['ADSR< MOZZI_CONTROL_RATE, MOZZI_AUDIO_RATE >',['../class_a_d_s_r.html',1,'']]], - ['adsr_3c_20mozzi_5fcontrol_5frate_2c_20mozzi_5fcontrol_5frate_20_3e_4',['ADSR< MOZZI_CONTROL_RATE, MOZZI_CONTROL_RATE >',['../class_a_d_s_r.html',1,'']]], - ['analog_5',['Analog',['../group__analog.html',1,'']]], - ['atindex_6',['atIndex',['../class_meta_oscil.html#ab74ebc6bde8fa15288df547c41e9206b',1,'MetaOscil::atIndex()'],['../class_oscil.html#a97f2c0f28751641417202fee2a0776d3',1,'Oscil::atIndex()'],['../class_sample.html#a86948f48dcdc0cb19f6e256ece70149d',1,'Sample::atIndex()']]], - ['audio_20output_20and_20buffering_7',['Audio Output and Buffering',['../group__audio__output.html',1,'']]], - ['audiodelay_8',['AudioDelay',['../class_audio_delay.html',1,'AudioDelay< NUM_BUFFER_SAMPLES, T >'],['../class_audio_delay.html#a688f69088f96bf3976a8555d3026365f',1,'AudioDelay::AudioDelay()'],['../class_audio_delay.html#a79be253fcb5709624c8fb708e54f069f',1,'AudioDelay::AudioDelay(unsigned int delaytime_cells)']]], - ['audiodelay_3c_20128_20_3e_9',['AudioDelay< 128 >',['../class_audio_delay.html',1,'']]], - ['audiodelay_3c_20128_2c_20int_20_3e_10',['AudioDelay< 128, int >',['../class_audio_delay.html',1,'']]], - ['audiodelay_3c_20256_2c_20int_20_3e_11',['AudioDelay< 256, int >',['../class_audio_delay.html',1,'']]], - ['audiodelay_3c_20num_5fbuffer_5fsamples_2c_20int_20_3e_12',['AudioDelay< NUM_BUFFER_SAMPLES, int >',['../class_audio_delay.html',1,'']]], - ['audiodelayfeedback_13',['AudioDelayFeedback',['../class_audio_delay_feedback.html#a0412c5d62f72a881d95504d9d0018245',1,'AudioDelayFeedback::AudioDelayFeedback(uint16_t delaytime_cells)'],['../class_audio_delay_feedback.html#a61f3c90f752d8b15c0f7a19e03bc4f03',1,'AudioDelayFeedback::AudioDelayFeedback(uint16_t delaytime_cells, int8_t feedback_level)'],['../class_audio_delay_feedback.html#adbc1ecd0dffe273cac87b8fc888e28f0',1,'AudioDelayFeedback::AudioDelayFeedback()'],['../class_audio_delay_feedback.html',1,'AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE, su >']]], - ['audiohook_14',['audioHook',['../group__core.html#ga2fca37b988ab369e2f3c3108c683e59d',1,'audioHook(): MozziGuts.hpp'],['../group__core.html#ga2fca37b988ab369e2f3c3108c683e59d',1,'audioHook(): MozziGuts.hpp']]], - ['audioticks_15',['audioTicks',['../group__core.html#ga55fa9d48f327b646c2f71cef7da7b8f0',1,'audioTicks(): MozziGuts.hpp'],['../group__core.html#ga55fa9d48f327b646c2f71cef7da7b8f0',1,'audioTicks(): MozziGuts.hpp']]], - ['automap_16',['AutoMap',['../group__sensortools.html#aec125f071bd83180ff0d0a71446725f3',1,'AutoMap::AutoMap()'],['../group__sensortools.html#class_auto_map',1,'AutoMap']]], - ['automatic_20range_20adjustment_17',['Automatic range adjustment',['../group__sensortools.html',1,'']]], - ['autorange_18',['AutoRange',['../group__sensortools.html#a2f0638f4d8e2937080b67fc0614c8d6d',1,'AutoRange::AutoRange()'],['../group__sensortools.html#class_auto_range',1,'AutoRange< T >']]], - ['autorange_3c_20int_20_3e_19',['AutoRange< int >',['../group__sensortools.html',1,'']]] -]; diff --git a/extras/doc/html/search/all_1.html b/extras/doc/html/search/all_1.html deleted file mode 100644 index 9f80e9043..000000000 --- a/extras/doc/html/search/all_1.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/all_1.js b/extras/doc/html/search/all_1.js deleted file mode 100644 index 551791045..000000000 --- a/extras/doc/html/search/all_1.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['band_20',['band',['../class_multi_resonant_filter.html#a93c35829c63addc2f54f42ca3b30b37e',1,'MultiResonantFilter']]], - ['basic_20architecture_20of_20audio_20generation_2c_20buffering_2c_20and_20output_20in_20mozzi_21',['Basic architecture of audio generation, buffering, and output in Mozzi',['../group__audio__output.html',1,'']]] -]; diff --git a/extras/doc/html/search/all_10.html b/extras/doc/html/search/all_10.html deleted file mode 100644 index 3bf11961f..000000000 --- a/extras/doc/html/search/all_10.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/all_10.js b/extras/doc/html/search/all_10.js deleted file mode 100644 index 17b3a58f9..000000000 --- a/extras/doc/html/search/all_10.js +++ /dev/null @@ -1,68 +0,0 @@ -var searchData= -[ - ['sample_267',['Sample',['../class_sample.html',1,'Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >'],['../class_sample.html#ac9a043d47ab143f7a4d9370cf9f2f02d',1,'Sample::Sample()'],['../class_sample.html#a0a22d5d06e5665853432fe1949e9d514',1,'Sample::Sample(const int8_t *TABLE_NAME)']]], - ['samplehuffman_268',['SampleHuffman',['../class_sample_huffman.html',1,'SampleHuffman'],['../class_sample_huffman.html#a8587f641949024cd5aad7bfc1715adff',1,'SampleHuffman::SampleHuffman()']]], - ['set_269',['set',['../class_line_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#af1f74c0f6b411ff356b4594ee22e3379',1,'Line< SFix< NI, NF > >::set(internal_type startvalue, internal_type targetvalue, T num_steps)'],['../class_line_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#ab8668f3e9062c89262b48c12ed03e686',1,'Line< SFix< NI, NF > >::set(internal_type targetvalue, UFix< _NI, 0 > num_steps)'],['../class_line_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#a654ccdab0a5d269f5959ae08f9c6ede8',1,'Line< SFix< NI, NF > >::set(internal_type value)'],['../class_phasor.html#ad9e0eceb175bca6b2b79130fd9c4f4ef',1,'Phasor::set()'],['../class_wave_packet.html#ac693b3d676b583584a8cfc6b9cc0f37f',1,'WavePacket::set()'],['../class_line_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#a659f6a1cfbb9f49c16442dd7690baf53',1,'Line< SFix< NI, NF > >::set()'],['../class_line_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#aa541b9351288682cfc84b771c9c8c4d4',1,'Line< UFix< NI, NF > >::set(internal_type startvalue, internal_type targetvalue, T num_steps)'],['../class_line_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#a4509fd68271cdc459d59f80144ca4fe0',1,'Line< UFix< NI, NF > >::set(internal_type targetvalue, T num_steps)'],['../class_line_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#a7b5f07b204b41abd4750c4ddb5b64872',1,'Line< UFix< NI, NF > >::set(internal_type targetvalue, UFix< _NI, 0 > num_steps)'],['../class_line_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#a8fc856bd02be694d54a1f0d459e9f578',1,'Line< UFix< NI, NF > >::set(internal_type value)'],['../class_line_3_01unsigned_01long_01_4.html#a199dd187d87c9941515b21aea0c52a0f',1,'Line< unsigned long >::set(unsigned long startvalue, unsigned long targetvalue, unsigned long num_steps)'],['../class_line_3_01unsigned_01long_01_4.html#abb89855ea745a453262cd2aeb31e2ec7',1,'Line< unsigned long >::set(unsigned long targetvalue, unsigned long num_steps)'],['../class_line_3_01unsigned_01long_01_4.html#abb246fabacbefbd6d88ddce719f74b0e',1,'Line< unsigned long >::set(unsigned long value)'],['../class_line_3_01unsigned_01int_01_4.html#a1677277eb5f3eb56e47a6e7dde0c1558',1,'Line< unsigned int >::set(unsigned int startvalue, unsigned int targetvalue, unsigned int num_steps)'],['../class_line_3_01unsigned_01int_01_4.html#a002bf2ae8e48467fd2d45072b8328e65',1,'Line< unsigned int >::set(unsigned int targetvalue, unsigned int num_steps)'],['../class_line_3_01unsigned_01char_01_4.html#ad14e98651035d75c89270c6f0d5e5c46',1,'Line< unsigned char >::set()'],['../class_line_3_01unsigned_01int_01_4.html#a157b1887464b81ed8388a8f73173338d',1,'Line< unsigned int >::set()'],['../class_audio_delay.html#a7bd0a07f7803afda1a71b50e3f66827b',1,'AudioDelay::set()'],['../class_ead.html#af203c82721ab832c653a23ff219c040e',1,'Ead::set()'],['../class_event_delay.html#a937c86f3b05ccb6138ff7927713820da',1,'EventDelay::set()'],['../class_line.html#a6bad32d527e0d931c99e9b72c2a75c80',1,'Line::set(T value)'],['../class_line.html#a7378d526cf07c42c0792868c749dee6e',1,'Line::set(T targetvalue, T num_steps)'],['../class_line.html#a24ad85c17562e97b6823a010a5ba04c6',1,'Line::set(T startvalue, T targetvalue, T num_steps)'],['../class_line_3_01unsigned_01char_01_4.html#a6129febcfd57d32a5c771c8f730b6b7a',1,'Line< unsigned char >::set(unsigned char value)'],['../class_line_3_01unsigned_01char_01_4.html#a2b90896c1357a45daca74498f17b4909',1,'Line< unsigned char >::set(unsigned char targetvalue, unsigned char num_steps)']]], - ['setadlevels_270',['setADLevels',['../class_a_d_s_r.html#a48aa75585d0ff96c87b4b232ee3df753',1,'ADSR']]], - ['setallupdatesteps_271',['setAllUpdateSteps',['../class_a_d_s_r.html#a9cd0d4d6fefdd58d81acb2a76b9fc4c0',1,'ADSR']]], - ['setattack_272',['setAttack',['../class_ead.html#a6bae0e92e6709c3fcd31fccd41212bac',1,'Ead']]], - ['setattacklevel_273',['setAttackLevel',['../class_a_d_s_r.html#a8a54760cfc0fee1b02983aa4c0331aa1',1,'ADSR']]], - ['setattacktime_274',['setAttackTime',['../class_a_d_s_r.html#aaf4131de0c02e4f154a97e3e9d95c199',1,'ADSR']]], - ['setattackupdatesteps_275',['setAttackUpdateSteps',['../class_a_d_s_r.html#a01cf549d19416288d604a02d95c31f21',1,'ADSR']]], - ['setbandwidth_276',['setBandwidth',['../class_wave_packet.html#abce5b3ca4c559473c199744753fb75aa',1,'WavePacket']]], - ['setbpm_277',['setBPM',['../class_metronome.html#aab384673719ebd552dd72d474ed58556',1,'Metronome']]], - ['setcentrefreq_278',['setCentreFreq',['../class_state_variable.html#a47e7ddad76db7009e370fa91ea5d4d3d',1,'StateVariable::setCentreFreq()'],['../class_wave_packet.html#adbbbf8b6b9eaae18ef381ff04be3eb5b',1,'WavePacket::setCentreFreq()']]], - ['setcutofffreq_279',['setCutoffFreq',['../class_meta_oscil.html#aceb617c02ea3a693a8ec48b32247a355',1,'MetaOscil::setCutoffFreq()'],['../class_resonant_filter.html#a906d49cb7d195dd0ac2185e3064fb25b',1,'ResonantFilter::setCutoffFreq(su cutoff)']]], - ['setcutofffreqandresonance_280',['setCutoffFreqAndResonance',['../class_resonant_filter.html#ab6f35bf0b8dd435b501931cef941e4a6',1,'ResonantFilter']]], - ['setcutofffreqs_281',['setCutoffFreqs',['../class_meta_oscil.html#a7567da1ff25347c8d44fad66efe28af1',1,'MetaOscil']]], - ['setdecay_282',['setDecay',['../class_ead.html#aa99e6dc2d5448b4de0764c6208e5c2fc',1,'Ead']]], - ['setdecaylevel_283',['setDecayLevel',['../class_a_d_s_r.html#a0ad21cb6ed8fa44bb24134f2b5b4f296',1,'ADSR']]], - ['setdecaytime_284',['setDecayTime',['../class_a_d_s_r.html#a1a0cb7fbf47f65dc81df7b5eb21ae4ec',1,'ADSR']]], - ['setdecayupdatesteps_285',['setDecayUpdateSteps',['../class_a_d_s_r.html#ae9a0d338581d3aaf6c4a89c4cfe19f5b',1,'ADSR']]], - ['setdelaytimecells_286',['setDelayTimeCells',['../class_audio_delay_feedback.html#ab6fb7260a540416018ebfac7aeac32f1',1,'AudioDelayFeedback::setDelayTimeCells(float delaytime_cells)'],['../class_audio_delay_feedback.html#a2c5c805eb4d62e4650b08400409863a9',1,'AudioDelayFeedback::setDelayTimeCells(Q16n16 delaytime_cells)'],['../class_audio_delay_feedback.html#a3f49d5e601799487237266621245c7a4',1,'AudioDelayFeedback::setDelayTimeCells(uint16_t delaytime_cells)']]], - ['setearlyreflections_287',['setEarlyReflections',['../class_reverb_tank.html#a6d27d8a02ec9551a5338bb1ba4bf9af2',1,'ReverbTank']]], - ['setend_288',['setEnd',['../class_sample.html#a9713e2d38b94e629c06916a7543ef48f',1,'Sample']]], - ['setfeebacklevel_289',['setFeebackLevel',['../class_reverb_tank.html#a91eeb601e42df576737f0d44dc73c653',1,'ReverbTank']]], - ['setfeedbacklevel_290',['setFeedbackLevel',['../class_audio_delay_feedback.html#a1408da9125a0d6c38ce89b11d7d93113',1,'AudioDelayFeedback']]], - ['setfreq_291',['setFreq',['../class_oscil.html#a7dbb7386be70efdda01bda5c280b15ee',1,'Oscil::setFreq(UFix< 24, 8, RANGE > frequency)'],['../class_oscil.html#a078e9b56769b96a2e9a6a645b3c49596',1,'Oscil::setFreq(UFix< NI, NF, RANGE > frequency)'],['../class_sample.html#aa0c37457f99def5c7036c6b6d9ee43fc',1,'Sample::setFreq()'],['../class_oscil.html#aa342e74f8e73edda0b0f042770e3fba4',1,'Oscil::setFreq(float frequency)'],['../class_oscil.html#a5161b31eea29b634f530d37c8f552685',1,'Oscil::setFreq(UFix< 16, 16, RANGE > frequency)'],['../class_oscil.html#a47bd8774216331e1c3ab62b8c9f92e8a',1,'Oscil::setFreq(SFix< NI, NF, RANGE > frequency)'],['../class_sample.html#a4d5840157e98024537ae10cd27ff9f9e',1,'Sample::setFreq()'],['../class_phasor.html#afc6106c648bddb5f2f084b8f34216b0f',1,'Phasor::setFreq(int frequency)'],['../class_phasor.html#a81f1976ebb4a91f66f26674efca52072',1,'Phasor::setFreq(float frequency)'],['../class_meta_oscil.html#aafb4c01a8ce6b4d880fd1ecf59bd3bfd',1,'MetaOscil::setFreq()'],['../class_oscil.html#a23121f22ea447918088a79c7f9748b3d',1,'Oscil::setFreq()'],['../class_meta_oscil.html#a1960b7c4012424058876085c76d1dfd9',1,'MetaOscil::setFreq(int frequency, bool apply=true)'],['../class_meta_oscil.html#a3a1bf4af017c5c39d736f78d3c3e1bee',1,'MetaOscil::setFreq(float frequency)']]], - ['setfreq_5fq16n16_292',['setFreq_Q16n16',['../class_meta_oscil.html#a98794f84684b257079e79bd9f92d0892',1,'MetaOscil::setFreq_Q16n16()'],['../class_oscil.html#a73b52741178ed490463d9ff471cebef3',1,'Oscil::setFreq_Q16n16()']]], - ['setfreq_5fq24n8_293',['setFreq_Q24n8',['../class_sample.html#a903c2d634b10ac531c3c9f6a35fcb046',1,'Sample::setFreq_Q24n8()'],['../class_oscil.html#abc8a4ee236f7fd45dda9dece7292b6e7',1,'Oscil::setFreq_Q24n8()'],['../class_meta_oscil.html#adcadf4935c390cd8d2eea9623365bf70',1,'MetaOscil::setFreq_Q24n8()']]], - ['setfundamental_294',['setFundamental',['../class_wave_packet.html#af87c37ffd274eee91aa93c0f7d560be2',1,'WavePacket']]], - ['sethighlimit_295',['setHighLimit',['../class_wave_folder.html#a2103be1ef91d0a3e4d896eabdad83fc7',1,'WaveFolder']]], - ['setlevels_296',['setLevels',['../class_a_d_s_r.html#a4ef5dfa5c71809737c3e614b09775203',1,'ADSR']]], - ['setlimits_297',['setLimits',['../class_wave_folder.html#af06cfae975014be2651966519df0f0cd',1,'WaveFolder']]], - ['setloopdelays_298',['setLoopDelays',['../class_reverb_tank.html#a0b348b630007a5cbda8b314d0c8dd604',1,'ReverbTank']]], - ['setloopingoff_299',['setLoopingOff',['../class_sample.html#accfdc762cd47425824179bff4cd2a78f',1,'Sample::setLoopingOff()'],['../class_sample_huffman.html#a040bfc55c19bbaa6cc42331be3646c8a',1,'SampleHuffman::setLoopingOff()']]], - ['setloopingon_300',['setLoopingOn',['../class_sample.html#a40e76011d841b84d2d54bf2cec6c4d5f',1,'Sample::setLoopingOn()'],['../class_sample_huffman.html#a01f9bfb513da0374fe78c12300b69760',1,'SampleHuffman::setLoopingOn()']]], - ['setlowlimit_301',['setLowLimit',['../class_wave_folder.html#ae8522fd82e949e8115193905bcf5b01c',1,'WaveFolder']]], - ['setoscils_302',['setOscils',['../class_meta_oscil.html#a3390f39fbaa06276398624bd14a639ad',1,'MetaOscil']]], - ['setpdenv_303',['setPDEnv',['../class_p_d_resonant.html#a7c921c18d37b0625beab9e4f06c69ca4',1,'PDResonant']]], - ['setphase_304',['setPhase',['../class_oscil.html#ab7b740eec56740426a47508562ed4dd5',1,'Oscil::setPhase()'],['../class_meta_oscil.html#a889ea6de8595838ef735f8237a0abc51',1,'MetaOscil::setPhase()']]], - ['setphasefractional_305',['setPhaseFractional',['../class_oscil.html#a9befaff8a21a4915b647636e821435f9',1,'Oscil::setPhaseFractional()'],['../class_meta_oscil.html#ab3c61548e9b48714d1e0900532e99408',1,'MetaOscil::setPhaseFractional(unsigned long phase)']]], - ['setphaseinc_306',['setPhaseInc',['../class_meta_oscil.html#a3bed37fc800a93ff95af445d25eaf57d',1,'MetaOscil::setPhaseInc()'],['../class_oscil.html#aced127a46f0e45c259f1a788b6c31074',1,'Oscil::setPhaseInc()'],['../class_sample.html#aaff03b2a14f8f0f79c13840948151a1d',1,'Sample::setPhaseInc()'],['../class_phasor.html#adf134d4e4ce960e4c773830fd8467e4b',1,'Phasor::setPhaseInc()']]], - ['setpin13high_307',['setPin13High',['../group__util.html#gaea7ee11e335eb2d6b891b886c5f3f942',1,'mozzi_utils.h']]], - ['setpin13low_308',['setPin13Low',['../group__util.html#ga4c87d0211135fd33a8697350235b50b4',1,'mozzi_utils.h']]], - ['setpin13out_309',['setPin13Out',['../group__util.html#gad1725ef17b234c4df9cc64a9bf561435',1,'mozzi_utils.h']]], - ['setreleaselevel_310',['setReleaseLevel',['../class_a_d_s_r.html#a8f67baf632be737cbae5a1d62edc4e23',1,'ADSR']]], - ['setreleasetime_311',['setReleaseTime',['../class_a_d_s_r.html#aabd0af40f4676bde840f6c83bbe302b2',1,'ADSR']]], - ['setreleaseupdatesteps_312',['setReleaseUpdateSteps',['../class_a_d_s_r.html#a0de6df796f56e97a4c6c44a9692251eb',1,'ADSR']]], - ['setresonance_313',['setResonance',['../class_resonant_filter.html#a68ff331edeba47b0c8e561c7ad7a8223',1,'ResonantFilter::setResonance()'],['../class_state_variable.html#a992e23a80b611b72e3e764c14d5ee188',1,'StateVariable::setResonance()']]], - ['setsmoothness_314',['setSmoothness',['../class_smooth_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#a24a2eb8633ce6a2a0da4e527c0186784',1,'Smooth< UFix< NI, NF > >::setSmoothness()'],['../class_smooth_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#a1c440ce813507ccb32bd9a2f19aeb643',1,'Smooth< SFix< NI, NF > >::setSmoothness(float smoothness)'],['../class_smooth_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#a6fb0f2216e29f946dfb8befafaf9d5fc',1,'Smooth< SFix< NI, NF > >::setSmoothness(UFix< 0, _NF > smoothness)'],['../class_smooth_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#aa4fb9cdb86f67bfc3e310920418329b7',1,'Smooth< UFix< NI, NF > >::setSmoothness()'],['../class_smooth.html#aac44bbf7a9bc6b9bae80eecc1be6e188',1,'Smooth::setSmoothness()']]], - ['setstart_315',['setStart',['../class_sample.html#a01836f7624ea574e966e775377d5bf11',1,'Sample']]], - ['setsustainlevel_316',['setSustainLevel',['../class_a_d_s_r.html#aec7ac1290688214a934c3b9f78ca43e9',1,'ADSR']]], - ['setsustaintime_317',['setSustainTime',['../class_a_d_s_r.html#ad0c7bd5b53f4b5c2d4ff3b5116d5c40f',1,'ADSR']]], - ['setsustainupdatesteps_318',['setSustainUpdateSteps',['../class_a_d_s_r.html#aec9c57671f1dfae7aa529dcc51b98e40',1,'ADSR']]], - ['settable_319',['setTable',['../class_meta_oscil.html#afa39a5e42b7f82619ca1b898bdafced5',1,'MetaOscil::setTable()'],['../class_oscil.html#a0b22d79fb2d6c7fb50b19c00f249ed84',1,'Oscil::setTable()'],['../class_sample.html#ade1401f231c920576b1eea2776ac591f',1,'Sample::setTable()'],['../class_wave_packet_sample.html#af50b8ef715a86bcdf417961b585c170d',1,'WavePacketSample::setTable()']]], - ['settime_320',['setTime',['../class_portamento.html#af19c3b3c189e111079f54211ff5a4ebe',1,'Portamento']]], - ['settimes_321',['setTimes',['../class_a_d_s_r.html#a5e16aa54a82fc6f907a7560e035adf2b',1,'ADSR']]], - ['setupfastanalogread_322',['setupFastAnalogRead',['../group__analog.html#gae909f8857d71ed79f277ee024de52574',1,'mozzi_analog.h']]], - ['smooth_323',['Smooth',['../class_smooth.html',1,'Smooth< T >'],['../class_smooth_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#aa34d3186fcabc7a245c4b47e1f1dc135',1,'Smooth< SFix< NI, NF > >::Smooth()'],['../class_smooth_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#aa28affdd0ec1fb3d2b8519dce1bd62b1',1,'Smooth< SFix< NI, NF > >::Smooth(T smoothness)'],['../class_smooth_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#abc93c181f47511887d1275757b3c2c70',1,'Smooth< UFix< NI, NF > >::Smooth()'],['../class_smooth_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#a2ea0479e484a72f477f8dc56726cf933',1,'Smooth< UFix< NI, NF > >::Smooth(T smoothness)'],['../class_smooth.html#ae57139ceccee7527013ec2297dbc79ad',1,'Smooth::Smooth()'],['../class_smooth.html#ac6626aae94eb7a22024e2054c1bbbb26',1,'Smooth::Smooth(float smoothness)']]], - ['smooth_3c_20sfix_3c_20ni_2c_20nf_20_3e_20_3e_324',['Smooth< SFix< NI, NF > >',['../class_smooth_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html',1,'']]], - ['smooth_3c_20ufix_3c_20ni_2c_20nf_20_3e_20_3e_325',['Smooth< UFix< NI, NF > >',['../class_smooth_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html',1,'']]], - ['sr_326',['SR',['../namespacemake__standard__tables.html#a92a95fdec2596c9b917780cc234c72b5',1,'make_standard_tables']]], - ['stack_327',['Stack',['../class_stack.html#ab034b819e2382f80d952cf8527dc6e6c',1,'Stack::Stack()'],['../class_stack.html',1,'Stack< T, NUM_ITEMS >']]], - ['start_328',['start',['../class_ead.html#ac385679b58e2f9755029b7da7405b233',1,'Ead::start()'],['../class_sample_huffman.html#a15ead859261d3d916d700b75f4626f15',1,'SampleHuffman::start()'],['../class_sample.html#abb7084b95a6141843ede8025cdd726ac',1,'Sample::start(unsigned int startpos)'],['../class_sample.html#a49ab98acdfb4f81a8860ad21876bdc18',1,'Sample::start()'],['../class_portamento.html#af70701abfdd9f3d788f3b313e38017d0',1,'Portamento::start(Q16n16 note)'],['../class_portamento.html#aae67a74be47cb2e8a6ffbb90786221af',1,'Portamento::start(uint8_t note)'],['../class_metronome.html#ad5670c748042846b02cb33c613c50422',1,'Metronome::start(unsigned int delay_milliseconds)'],['../class_metronome.html#ab85d2f5bdc5cb00d5056b0c2c6eed987',1,'Metronome::start()'],['../class_event_delay.html#a0943cb52a1ee36fda1156f8dd762a105',1,'EventDelay::start(unsigned int delay_milliseconds)'],['../class_event_delay.html#a97a07c9371040d6388b8369352b08d83',1,'EventDelay::start()'],['../class_ead.html#a146b205e70f4b2293e643ea063f2b38f',1,'Ead::start()']]], - ['statevariable_329',['StateVariable',['../class_state_variable.html#a9950b71a16f63654552d3e15774d6638',1,'StateVariable::StateVariable()'],['../class_state_variable.html',1,'StateVariable< FILTER_TYPE >']]], - ['stereooutput_330',['StereoOutput',['../struct_stereo_output.html#a21de1439b838982ab5cb6663bef94498',1,'StereoOutput::StereoOutput(AudioOutputStorage_t l, AudioOutputStorage_t r)'],['../struct_stereo_output.html#a78371f79ab53e2b7c6ec5e0e04fc5062',1,'StereoOutput::StereoOutput()'],['../struct_stereo_output.html',1,'StereoOutput']]], - ['stopmozzi_331',['stopMozzi',['../group__core.html#ga8d9307490ec05ad28539d513c73a5c20',1,'stopMozzi(): MozziGuts.hpp'],['../group__core.html#ga8d9307490ec05ad28539d513c73a5c20',1,'stopMozzi(): MozziGuts.hpp']]] -]; diff --git a/extras/doc/html/search/all_11.html b/extras/doc/html/search/all_11.html deleted file mode 100644 index c9f79d289..000000000 --- a/extras/doc/html/search/all_11.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/all_11.js b/extras/doc/html/search/all_11.js deleted file mode 100644 index 685f6553c..000000000 --- a/extras/doc/html/search/all_11.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['trailingzerosconst_332',['trailingZerosConst',['../group__util.html#ga886894a381e3569d040262831ca9292a',1,'mozzi_utils.h']]] -]; diff --git a/extras/doc/html/search/all_12.html b/extras/doc/html/search/all_12.html deleted file mode 100644 index ab934722c..000000000 --- a/extras/doc/html/search/all_12.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/all_12.js b/extras/doc/html/search/all_12.js deleted file mode 100644 index 4179552ef..000000000 --- a/extras/doc/html/search/all_12.js +++ /dev/null @@ -1,9 +0,0 @@ -var searchData= -[ - ['uint8_5ftdiv_333',['uint8_tDiv',['../group__fixmath.html#ga1717d922e241ef368b81def7fd6c2446',1,'mozzi_fixmath.cpp']]], - ['uint8_5ftmod_334',['uint8_tMod',['../group__fixmath.html#ga0cb78c87959d2f8cef9e2ec1bd000414',1,'uint8_tMod(uint8_t n, uint8_t d): mozzi_fixmath.cpp'],['../group__fixmath.html#ga0cb78c87959d2f8cef9e2ec1bd000414',1,'uint8_tMod(uint8_t n, uint8_t d): mozzi_fixmath.cpp']]], - ['update_335',['update',['../class_a_d_s_r.html#a1bef7104c263fc1f0df28809a788ee23',1,'ADSR::update()'],['../class_p_d_resonant.html#ae604c6401c636ab32757913f21c6dbe6',1,'PDResonant::update()'],['../group__sensortools.html#a85750e78ac282caec24408dce6e78201',1,'RollingStat::update(T x)'],['../group__sensortools.html#a6f7b384ab338da5ba10200fbce7f2eb0',1,'RollingStat::update(int8_t x)']]], - ['updateaudio_336',['updateAudio',['../group__core.html#ga936b78c8ab7a4d7f7075b41e32780d3e',1,'updateAudio(): Skeleton_Multi_Unit2.cpp'],['../group__core.html#ga936b78c8ab7a4d7f7075b41e32780d3e',1,'updateAudio(): Skeleton_Multi_Unit2.cpp']]], - ['updatecontrol_337',['updateControl',['../group__core.html#ga59d187b915b2e366c88489e52801951a',1,'MozziGuts.h']]], - ['utility_20functions_2c_20and_20debugging_338',['Utility functions, and debugging',['../group__util.html',1,'']]] -]; diff --git a/extras/doc/html/search/all_13.html b/extras/doc/html/search/all_13.html deleted file mode 100644 index 51172c2f3..000000000 --- a/extras/doc/html/search/all_13.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/all_13.js b/extras/doc/html/search/all_13.js deleted file mode 100644 index 071d1d9d3..000000000 --- a/extras/doc/html/search/all_13.js +++ /dev/null @@ -1,11 +0,0 @@ -var searchData= -[ - ['wavefolder_339',['WaveFolder',['../class_wave_folder.html',1,'WaveFolder< T >'],['../class_wave_folder.html#a3be0f0b5ee86082e44b0b88cf5b9ac2f',1,'WaveFolder::WaveFolder()']]], - ['wavepacket_340',['WavePacket',['../class_wave_packet.html',1,'WavePacket< ALGORITHM >'],['../class_wave_packet.html#a09afa3b26d61c97e24ccbae9cba2fd57',1,'WavePacket::WavePacket()']]], - ['wavepacketsample_341',['WavePacketSample',['../class_wave_packet_sample.html',1,'']]], - ['waveshaper_342',['WaveShaper',['../class_wave_shaper.html',1,'WaveShaper< T >'],['../class_wave_shaper_3_01char_01_4.html#a6364609248c42174f9f7e4974585e301',1,'WaveShaper< char >::WaveShaper()'],['../class_wave_shaper_3_01int_01_4.html#a9cc7f4f6a7493172cdc94411ac09275a',1,'WaveShaper< int >::WaveShaper()']]], - ['waveshaper_3c_20char_20_3e_343',['WaveShaper< char >',['../class_wave_shaper_3_01char_01_4.html',1,'']]], - ['waveshaper_3c_20int_20_3e_344',['WaveShaper< int >',['../class_wave_shaper_3_01int_01_4.html',1,'']]], - ['write_345',['write',['../class_audio_delay_feedback.html#a5197399a986922eee160a455069dc93e',1,'AudioDelayFeedback::write(su input)'],['../class_audio_delay_feedback.html#a93231df73010a40da2d4092b94a99f9d',1,'AudioDelayFeedback::write(su input, uint16_t offset)']]], - ['writefeedback_346',['writeFeedback',['../class_audio_delay_feedback.html#ae83d67ec86483bae489a6a17e8d0e5e3',1,'AudioDelayFeedback']]] -]; diff --git a/extras/doc/html/search/all_14.html b/extras/doc/html/search/all_14.html deleted file mode 100644 index afecf5634..000000000 --- a/extras/doc/html/search/all_14.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/all_14.js b/extras/doc/html/search/all_14.js deleted file mode 100644 index 06332b277..000000000 --- a/extras/doc/html/search/all_14.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['xorshift96_347',['xorshift96',['../class_mozzi_private_1_1_mozzi_rand_private.html#a68ed69ece800f0c1e5819c05aed8d398',1,'MozziPrivate::MozziRandPrivate::xorshift96()'],['../group__random.html#ga68ed69ece800f0c1e5819c05aed8d398',1,'xorshift96(): mozzi_rand.h']]], - ['xorshiftseed_348',['xorshiftSeed',['../group__random.html#ga0a39ef54631e47a5bf6493bba1f6133c',1,'mozzi_rand.h']]] -]; diff --git a/extras/doc/html/search/all_2.html b/extras/doc/html/search/all_2.html deleted file mode 100644 index 02cfffc2e..000000000 --- a/extras/doc/html/search/all_2.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/all_2.js b/extras/doc/html/search/all_2.js deleted file mode 100644 index 54b9b162b..000000000 --- a/extras/doc/html/search/all_2.js +++ /dev/null @@ -1,9 +0,0 @@ -var searchData= -[ - ['cappoll_22',['CapPoll',['../class_cap_poll.html',1,'CapPoll< SENSOR_PIN, SEND_PIN >'],['../class_cap_poll.html#a4f691e78391a306d9ee89cdb1026096f',1,'CapPoll::CapPoll()']]], - ['char2mozzi_2epy_23',['char2mozzi.py',['../char2mozzi_8py.html',1,'']]], - ['circularbuffer_24',['CircularBuffer',['../class_circular_buffer.html',1,'CircularBuffer< ITEM_TYPE >'],['../class_circular_buffer.html#a6789c0d6d73594fdd412a39445b5cd67',1,'CircularBuffer::CircularBuffer()']]], - ['clip_25',['clip',['../struct_mono_output.html#a0e641cbab9732214c696cd1071e45de5',1,'MonoOutput::clip()'],['../struct_stereo_output.html#ac949f14e2d88f3c4e11986675addb228',1,'StereoOutput::clip()']]], - ['consttable_5fstorage_26',['CONSTTABLE_STORAGE',['../group__core.html#gad03d3ea20c802844460cd1ad636cf6a9',1,'mozzi_pgmspace.h']]], - ['controldelay_27',['ControlDelay',['../class_control_delay.html',1,'']]] -]; diff --git a/extras/doc/html/search/all_3.html b/extras/doc/html/search/all_3.html deleted file mode 100644 index 39767b85b..000000000 --- a/extras/doc/html/search/all_3.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/all_3.js b/extras/doc/html/search/all_3.js deleted file mode 100644 index e5f33dec2..000000000 --- a/extras/doc/html/search/all_3.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['dcfilter_28',['DCfilter',['../class_d_cfilter.html',1,'DCfilter'],['../class_d_cfilter.html#ab55e871fc9d11dfb9231e44627181c2c',1,'DCfilter::DCfilter()']]], - ['disconnectdigitalin_29',['disconnectDigitalIn',['../group__analog.html#ga532fe99fe78e34d4e6ae0ae2c7528353',1,'mozzi_analog.h']]] -]; diff --git a/extras/doc/html/search/all_4.html b/extras/doc/html/search/all_4.html deleted file mode 100644 index fc40463c8..000000000 --- a/extras/doc/html/search/all_4.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/all_4.js b/extras/doc/html/search/all_4.js deleted file mode 100644 index 990eff00e..000000000 --- a/extras/doc/html/search/all_4.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['ead_30',['Ead',['../class_ead.html',1,'Ead'],['../class_ead.html#a4862282805c2ac3255a34a99a31564d5',1,'Ead::Ead()']]], - ['eventdelay_31',['EventDelay',['../class_event_delay.html',1,'EventDelay'],['../class_event_delay.html#acd7b63341732ac4c23bce04d81316017',1,'EventDelay::EventDelay()']]], - ['external_20audio_20output_32',['External audio output',['../group__audio__output.html',1,'']]] -]; diff --git a/extras/doc/html/search/all_5.html b/extras/doc/html/search/all_5.html deleted file mode 100644 index 9dd9344b0..000000000 --- a/extras/doc/html/search/all_5.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/all_5.js b/extras/doc/html/search/all_5.js deleted file mode 100644 index 69b947c90..000000000 --- a/extras/doc/html/search/all_5.js +++ /dev/null @@ -1,23 +0,0 @@ -var searchData= -[ - ['fast_20integer_20based_20fixed_2dpoint_20arithmetic_33',['Fast integer based fixed-point arithmetic',['../group__fixmath.html',1,'']]], - ['fast_20random_20number_20generator_20functions_34',['Fast random number generator functions',['../group__random.html',1,'']]], - ['flash_5for_5fram_5fread_35',['FLASH_OR_RAM_READ',['../group__core.html#ga14d8349004d9544dbd01b907c60c08aa',1,'mozzi_pgmspace.h']]], - ['float_5fto_5fq0n16_36',['float_to_Q0n16',['../group__fixmath.html#ga4d20591828f0189963f1190f7197ba68',1,'mozzi_fixmath.h']]], - ['float_5fto_5fq0n7_37',['float_to_Q0n7',['../group__fixmath.html#ga1e0eab490ffe9a47fd78bcc449e3b995',1,'mozzi_fixmath.h']]], - ['float_5fto_5fq0n8_38',['float_to_Q0n8',['../group__fixmath.html#ga00e21c6b9d75ed26cd3bf1b9f4f9482e',1,'mozzi_fixmath.h']]], - ['float_5fto_5fq15n16_39',['float_to_Q15n16',['../group__fixmath.html#ga0e76f24ef8dfe0fa7510c4eea2608d5c',1,'mozzi_fixmath.h']]], - ['float_5fto_5fq16n16_40',['float_to_Q16n16',['../group__fixmath.html#ga041d3ba65c131b9aa01b9f34ec439b71',1,'mozzi_fixmath.h']]], - ['float_5fto_5fq1n14_41',['float_to_Q1n14',['../group__fixmath.html#ga1aab8b66d6d6f370cc66d82968884d18',1,'mozzi_fixmath.h']]], - ['float_5fto_5fq1n15_42',['float_to_Q1n15',['../group__fixmath.html#ga447e25c2d6c9bf14d8e324df0cc02753',1,'mozzi_fixmath.h']]], - ['float_5fto_5fq23n8_43',['float_to_Q23n8',['../group__fixmath.html#ga2ca980a6d71eb894b07534b30d9b7a06',1,'mozzi_fixmath.h']]], - ['float_5fto_5fq24n8_44',['float_to_Q24n8',['../group__fixmath.html#gaf91bc6123ecaff1441660d3abb20bf2e',1,'mozzi_fixmath.h']]], - ['float_5fto_5fq7n8_45',['float_to_Q7n8',['../group__fixmath.html#ga2a28dc262b3e79e0f67e4089cccaab45',1,'mozzi_fixmath.h']]], - ['float_5fto_5fq8n24_46',['float_to_Q8n24',['../group__fixmath.html#ga33ecb8a512f7d4eff5047d4ad65f5423',1,'mozzi_fixmath.h']]], - ['float_5fto_5fq8n8_47',['float_to_Q8n8',['../group__fixmath.html#ga36132b5f8f95223749b410ca235eef16',1,'mozzi_fixmath.h']]], - ['from16bit_48',['from16Bit',['../struct_stereo_output.html#a971c9597ec68cc46b831c9aaee020431',1,'StereoOutput::from16Bit()'],['../struct_mono_output.html#a67ed90efb5e8c00ae880f2d15b1ce0bd',1,'MonoOutput::from16Bit()']]], - ['from8bit_49',['from8Bit',['../struct_stereo_output.html#a3cdc76d522f2b290dc1b64a504373a4f',1,'StereoOutput::from8Bit()'],['../struct_mono_output.html#a7478d3111845040f553a965e7e54a539',1,'MonoOutput::from8Bit(int16_t l)']]], - ['fromalmostnbit_50',['fromAlmostNBit',['../struct_mono_output.html#aaaa9d580d583ff2bd961a98768fe9b15',1,'MonoOutput::fromAlmostNBit()'],['../struct_stereo_output.html#a132016fd745ea97426eaf29510f1be0f',1,'StereoOutput::fromAlmostNBit(A bits, B l, B r)']]], - ['fromnbit_51',['fromNBit',['../struct_stereo_output.html#aba322189d188eb977cc74a8c6ae909c1',1,'StereoOutput::fromNBit()'],['../struct_mono_output.html#a02f9adf531ab61ce96ed80a8319bdeea',1,'MonoOutput::fromNBit()']]], - ['fromsfix_52',['fromSFix',['../struct_stereo_output.html#aee0cca31f4aefc6c625d71be3a188192',1,'StereoOutput::fromSFix()'],['../struct_mono_output.html#ac6c0012c63037af58861b86d9f5dae22',1,'MonoOutput::fromSFix()']]] -]; diff --git a/extras/doc/html/search/all_6.html b/extras/doc/html/search/all_6.html deleted file mode 100644 index f1e516d75..000000000 --- a/extras/doc/html/search/all_6.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/all_6.js b/extras/doc/html/search/all_6.js deleted file mode 100644 index 2f2b9c52d..000000000 --- a/extras/doc/html/search/all_6.js +++ /dev/null @@ -1,13 +0,0 @@ -var searchData= -[ - ['getaudioinput_53',['getAudioInput',['../group__analog.html#gacd5e655ae9057843ade0d7647f909663',1,'MozziGuts.h']]], - ['getaudioinput16_54',['getAudioInput16',['../group__analog.html#gabb22bb94b66c6b2e583d745820cfac93',1,'MozziGuts.h']]], - ['getmax_55',['getMax',['../group__sensortools.html#a4d27e5fe43f9b376b537def88ac74119',1,'AutoRange']]], - ['getmean_56',['getMean',['../group__sensortools.html#a8521a53cde7c5d28ac9c375aaee3a972',1,'RollingStat']]], - ['getmin_57',['getMin',['../group__sensortools.html#acd1dae6e6ffb288efc1618e2453ad5ef',1,'AutoRange']]], - ['getphasefractional_58',['getPhaseFractional',['../class_meta_oscil.html#a20f0dcb30669eee21bfaa237f038c35d',1,'MetaOscil::getPhaseFractional()'],['../class_oscil.html#aefafa92dd2065243a164c1d824f292d7',1,'Oscil::getPhaseFractional()']]], - ['getrange_59',['getRange',['../group__sensortools.html#a75c842b27ad3917be6d29e3d35b485f3',1,'AutoRange']]], - ['getstandarddeviation_60',['getStandardDeviation',['../group__sensortools.html#a234ab1d244e4b392056fcaa1fc1e4fc4',1,'RollingStat']]], - ['getting_20started_61',['Getting Started',['../basic_info.html',1,'']]], - ['getvariance_62',['getVariance',['../group__sensortools.html#a3e7e5f706e3b5ac2496f14b7b639775d',1,'RollingStat']]] -]; diff --git a/extras/doc/html/search/all_7.html b/extras/doc/html/search/all_7.html deleted file mode 100644 index 8ddbf6c8e..000000000 --- a/extras/doc/html/search/all_7.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/all_7.js b/extras/doc/html/search/all_7.js deleted file mode 100644 index ffd267a26..000000000 --- a/extras/doc/html/search/all_7.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['hardware_20and_20configuration_63',['Hardware and configuration',['../hardware.html',1,'']]], - ['high_64',['high',['../class_multi_resonant_filter.html#a1a624bcfa3ad251c2e4af27a6a453006',1,'MultiResonantFilter']]] -]; diff --git a/extras/doc/html/search/all_8.html b/extras/doc/html/search/all_8.html deleted file mode 100644 index 83c55ae22..000000000 --- a/extras/doc/html/search/all_8.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/all_8.js b/extras/doc/html/search/all_8.js deleted file mode 100644 index d5cf9a842..000000000 --- a/extras/doc/html/search/all_8.js +++ /dev/null @@ -1,14 +0,0 @@ -var searchData= -[ - ['int2type_65',['Int2Type',['../group__util.html#struct_int2_type',1,'']]], - ['integertype_66',['IntegerType',['../group__util.html#struct_integer_type',1,'']]], - ['integertype_3c_201_20_3e_67',['IntegerType< 1 >',['../struct_integer_type_3_011_01_4.html',1,'']]], - ['integertype_3c_202_20_3e_68',['IntegerType< 2 >',['../struct_integer_type_3_012_01_4.html',1,'']]], - ['integertype_3c_204_20_3e_69',['IntegerType< 4 >',['../struct_integer_type_3_014_01_4.html',1,'']]], - ['integertype_3c_208_20_3e_70',['IntegerType< 8 >',['../struct_integer_type_3_018_01_4.html',1,'']]], - ['integertype_3c_20sizeof_28audiooutputstorage_5ft_29_3e_71',['IntegerType< sizeof(AudioOutputStorage_t)>',['../group__util.html',1,'']]], - ['integertype_3c_20sizeof_28int8_5ft_29_2bsizeof_28int8_5ft_29_3e_72',['IntegerType< sizeof(int8_t)+sizeof(int8_t)>',['../group__util.html',1,'']]], - ['integertype_3c_20sizeof_28uint8_5ft_29_2bsizeof_28uint8_5ft_29_3e_73',['IntegerType< sizeof(uint8_t)+sizeof(uint8_t)>',['../group__util.html',1,'']]], - ['intmap_74',['IntMap',['../class_int_map.html',1,'IntMap'],['../class_int_map.html#a36ab6e0137254909f44ae909dfe44a8a',1,'IntMap::IntMap()']]], - ['isplaying_75',['isPlaying',['../class_sample.html#ae4fa817151691ece9d2a91a0c0c03007',1,'Sample']]] -]; diff --git a/extras/doc/html/search/all_9.html b/extras/doc/html/search/all_9.html deleted file mode 100644 index 1e263c134..000000000 --- a/extras/doc/html/search/all_9.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/all_9.js b/extras/doc/html/search/all_9.js deleted file mode 100644 index d6578aa32..000000000 --- a/extras/doc/html/search/all_9.js +++ /dev/null @@ -1,14 +0,0 @@ -var searchData= -[ - ['line_76',['Line',['../class_line.html',1,'Line< T >'],['../class_line_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#ada015ad9ad9b115b19c65efbb47d8bb4',1,'Line< SFix< NI, NF > >::Line()'],['../class_line_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#af6ca947ea977211411a5bf5e36245ca7',1,'Line< UFix< NI, NF > >::Line()'],['../class_line_3_01unsigned_01long_01_4.html#a797b2ebfe450971b6e75c26b1e6c88da',1,'Line< unsigned long >::Line()'],['../class_line_3_01unsigned_01int_01_4.html#a32c77e9442a640df179ec4573e8fea6d',1,'Line< unsigned int >::Line()'],['../class_line_3_01unsigned_01char_01_4.html#a151189139ee6ed39bacec86ea2364124',1,'Line< unsigned char >::Line()'],['../class_line.html#aa6a80df90da15782ca88889ef9c8dd51',1,'Line::Line()']]], - ['line_3c_20q15n16_20_3e_77',['Line< Q15n16 >',['../class_line.html',1,'']]], - ['line_3c_20q16n16_20_3e_78',['Line< Q16n16 >',['../class_line.html',1,'']]], - ['line_3c_20sfix_3c_20ni_2c_20nf_20_3e_20_3e_79',['Line< SFix< NI, NF > >',['../class_line_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html',1,'']]], - ['line_3c_20ufix_3c_20ni_2c_20nf_20_3e_20_3e_80',['Line< UFix< NI, NF > >',['../class_line_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html',1,'']]], - ['line_3c_20unsigned_20char_20_3e_81',['Line< unsigned char >',['../class_line_3_01unsigned_01char_01_4.html',1,'']]], - ['line_3c_20unsigned_20int_20_3e_82',['Line< unsigned int >',['../class_line_3_01unsigned_01int_01_4.html',1,'']]], - ['line_3c_20unsigned_20long_20_3e_83',['Line< unsigned long >',['../class_line_3_01unsigned_01long_01_4.html',1,'']]], - ['look_2dup_2dtables_20and_20python_20scripts_20to_20generate_20tables_20or_20convert_20sounds_2e_84',['Look-up-tables and python scripts to generate tables or convert sounds.',['../group__soundtables.html',1,'']]], - ['low_85',['low',['../class_multi_resonant_filter.html#ae5b4d06f4acad8a7a9e5291538ffd865',1,'MultiResonantFilter']]], - ['low15bits_86',['low15bits',['../group__fixmath.html#gac357561cf7360f82a264d90096d0126b',1,'mozzi_fixmath.h']]] -]; diff --git a/extras/doc/html/search/all_a.html b/extras/doc/html/search/all_a.html deleted file mode 100644 index 3a6cac108..000000000 --- a/extras/doc/html/search/all_a.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/all_a.js b/extras/doc/html/search/all_a.js deleted file mode 100644 index c7964854e..000000000 --- a/extras/doc/html/search/all_a.js +++ /dev/null @@ -1,49 +0,0 @@ -var searchData= -[ - ['make_5fstandard_5ftables_87',['make_standard_tables',['../namespacemake__standard__tables.html',1,'']]], - ['metaoscil_88',['MetaOscil',['../class_meta_oscil.html',1,'MetaOscil< NUM_TABLE_CELLS, UPDATE_RATE, N_OSCIL >'],['../class_meta_oscil.html#a019b888e600142805c4bc5c71a6ddf17',1,'MetaOscil::MetaOscil()']]], - ['metronome_89',['Metronome',['../class_metronome.html',1,'Metronome'],['../class_metronome.html#a37e8b0aa5a9aa8fa0f33212360cc0928',1,'Metronome::Metronome()']]], - ['midi_20note_20number_20to_20frequency_20conversions_90',['Midi note number to frequency conversions',['../group__midi.html',1,'']]], - ['miditofreqprivate_91',['MidiToFreqPrivate',['../class_midi_to_freq_private.html',1,'']]], - ['monooutput_92',['MonoOutput',['../struct_mono_output.html',1,'MonoOutput'],['../struct_mono_output.html#a059352b524ac1356adececc104df6c74',1,'MonoOutput::MonoOutput(AudioOutputStorage_t l)'],['../struct_mono_output.html#a8a0bf7d9c4446b83f17ccd75433a828f',1,'MonoOutput::MonoOutput()']]], - ['mozzi_20configuration_93',['Mozzi Configuration',['../group__config.html',1,'']]], - ['mozzi_20configuration_20options_94',['Mozzi Configuration options',['../group__config.html',1,'']]], - ['mozzi_20core_20functions_95',['Mozzi Core Functions',['../group__core.html',1,'']]], - ['mozzi_20on_20arduino_20uno_20r4_20_2d_20renesas_2e_96',['Mozzi on Arduino Uno R4 - Renesas.',['../hardware_renesas.html',1,'hardware']]], - ['mozzi_20on_20classic_20arduino_2c_20teensy_202_2ex_2c_20arduino_20mega_2c_20and_20other_208_20bit_20_22avr_22_2fatmega_20architecture_20boards_97',['Mozzi on classic Arduino, Teensy 2.x, Arduino Mega, and other 8 bit "AVR"/ATMEGA architecture boards',['../hardware_avr.html',1,'hardware']]], - ['mozzi_20on_20esp32_2dbased_20boards_2e_98',['Mozzi on ESP32-based boards.',['../hardware_esp32.html',1,'hardware']]], - ['mozzi_20on_20esp8266_2dbased_20boards_2e_99',['Mozzi on ESP8266-based boards.',['../hardware_esp8266.html',1,'hardware']]], - ['mozzi_20on_20mbed_2dbased_20boards_20_28arduino_20giga_20_2f_20portenta_29_2e_100',['Mozzi on MBED-based boards (Arduino Giga / Portenta).',['../hardware_mbed.html',1,'hardware']]], - ['mozzi_20on_20rp2040_20_28raspberry_20pi_20pico_29_101',['Mozzi on RP2040 (Raspberry Pi Pico)',['../hardware_rp2040.html',1,'hardware']]], - ['mozzi_20on_20samd21_20based_20boards_20_28arduino_20circuitplayground_20m0_20and_20others_29_102',['Mozzi on SAMD21 based boards (Arduino Circuitplayground M0 and others)',['../hardware_samd.html',1,'hardware']]], - ['mozzi_20on_20stm32_2dbased_20boards_20_2d_20disambiguation_103',['Mozzi on STM32-based boards - disambiguation',['../hardware_stm32_disambiguation.html',1,'hardware']]], - ['mozzi_20on_20stm32_2dboards_20with_20libmaple_20based_20core_2e_104',['Mozzi on STM32-boards with libmaple based core.',['../hardware_stm32_maple.html',1,'hardware']]], - ['mozzi_20on_20stm32duino_2dbased_20boards_2e_105',['Mozzi on STM32duino-based boards.',['../hardware_stm32duino.html',1,'hardware']]], - ['mozzi_20on_20teensy_203_2e0_2f3_2e1_2f3_2e2_2f3_2e4_2f3_2e5_2flc_20boards_2e_106',['Mozzi on Teensy 3.0/3.1/3.2/3.4/3.5/LC boards.',['../hardware_teensy3.html',1,'hardware']]], - ['mozzi_20on_20teensy_204_2ex_20boards_2e_107',['Mozzi on Teensy 4.x boards.',['../hardware_teensy4.html',1,'hardware']]], - ['mozzi_2eh_108',['Mozzi.h',['../_mozzi_8h.html',1,'']]], - ['mozzi_5fanalog_5fread_109',['MOZZI_ANALOG_READ',['../group__config.html#gac4c9e989df7beb3034cc26e571a41569',1,'mozzi_config_documentation.h']]], - ['mozzi_5faudio_5fbits_110',['MOZZI_AUDIO_BITS',['../group__config.html#ga68d4c7210dfdd68ea3eb418a1b7de0a2',1,'mozzi_config_documentation.h']]], - ['mozzi_5faudio_5fbits_5fper_5fchannel_111',['MOZZI_AUDIO_BITS_PER_CHANNEL',['../group__config.html#ga9bfd84013cbc04ddb51b31f583178720',1,'mozzi_config_documentation.h']]], - ['mozzi_5faudio_5fchannels_112',['MOZZI_AUDIO_CHANNELS',['../group__config.html#ga6ffeecfb574900db4d3161ce0992b8bb',1,'mozzi_config_documentation.h']]], - ['mozzi_5faudio_5finput_113',['MOZZI_AUDIO_INPUT',['../group__config.html#ga40857197e27e3b4d3ee7177e95f59d6d',1,'mozzi_config_documentation.h']]], - ['mozzi_5faudio_5finput_5fpin_114',['MOZZI_AUDIO_INPUT_PIN',['../group__config.html#gac448f990c61e43089f5aab5fdb80d4a6',1,'mozzi_config_documentation.h']]], - ['mozzi_5faudio_5fmode_115',['MOZZI_AUDIO_MODE',['../group__config.html#ga9b14b158a7a469612a89dcc9630933b7',1,'mozzi_config_documentation.h']]], - ['mozzi_5faudio_5fpin_5f1_116',['MOZZI_AUDIO_PIN_1',['../group__config.html#ga9b9905f3ee10d6446fa991e463cb63cf',1,'mozzi_config_documentation.h']]], - ['mozzi_5faudio_5frate_117',['MOZZI_AUDIO_RATE',['../group__config.html#gabc7b46bc3dbe1078f411287572226eff',1,'mozzi_config_documentation.h']]], - ['mozzi_5fcompatibility_5flevel_118',['MOZZI_COMPATIBILITY_LEVEL',['../group__config.html#ga9d4e8e86950fd08173ce6c16bcad0c76',1,'mozzi_config_documentation.h']]], - ['mozzi_5fconfig_5fdocumentation_2eh_119',['mozzi_config_documentation.h',['../mozzi__config__documentation_8h.html',1,'']]], - ['mozzi_5fcontrol_5frate_120',['MOZZI_CONTROL_RATE',['../group__config.html#ga947e756a0229e73de0a32ff3ea542013',1,'mozzi_config_documentation.h']]], - ['mozzi_5fpgm_5fread_5fwrapper_121',['mozzi_pgm_read_wrapper',['../group__core.html#ga6eab513d77c44e4a6e3cc63e95a35d98',1,'mozzi_pgmspace.h']]], - ['mozzi_5fpwm_5frate_122',['MOZZI_PWM_RATE',['../group__config.html#ga3a6d77e502b179f2e490f6151e93414e',1,'mozzi_config_documentation.h']]], - ['mozzianalogread_123',['mozziAnalogRead',['../group__analog.html#gadedb573129313bad0c183af2486c5283',1,'mozzi_analog.h']]], - ['mozzianalogread16_124',['mozziAnalogRead16',['../group__analog.html#gaf869bc4f93cb0a90664a59b20fb4f556',1,'mozzi_analog.h']]], - ['mozziconfigvalues_2eh_125',['MozziConfigValues.h',['../_mozzi_config_values_8h.html',1,'']]], - ['mozziguts_5fimpl_5ftemplate_2ehpp_126',['MozziGuts_impl_template.hpp',['../_mozzi_guts__impl__template_8hpp.html',1,'']]], - ['mozziheadersonly_2eh_127',['MozziHeadersOnly.h',['../_mozzi_headers_only_8h.html',1,'']]], - ['mozzimicros_128',['mozziMicros',['../group__core.html#gaaa6a42d80c5297407a45ca8bf3c1c7fe',1,'mozziMicros(): MozziGuts.hpp'],['../group__core.html#gaaa6a42d80c5297407a45ca8bf3c1c7fe',1,'mozziMicros(): MozziGuts.hpp']]], - ['mozziprivate_129',['MozziPrivate',['../namespace_mozzi_private.html',1,'']]], - ['mozzirandprivate_130',['MozziRandPrivate',['../class_mozzi_private_1_1_mozzi_rand_private.html',1,'MozziPrivate']]], - ['mtof_131',['mtof',['../group__midi.html#ga20e0e7d5b710097134f129b27902b188',1,'mtof(): mozzi_midi.h'],['../class_midi_to_freq_private.html#afa91fff6f63c1482d811b5a52d4009ec',1,'MidiToFreqPrivate::mtof()'],['../class_midi_to_freq_private.html#ad7f7fa97f0b39d844758172d2e9d657b',1,'MidiToFreqPrivate::mtof()'],['../class_midi_to_freq_private.html#a96a4f95a5703e79f79ddd23161eaa7a3',1,'MidiToFreqPrivate::mtof()'],['../class_midi_to_freq_private.html#ac8580918bc8c8e2ae9600668291dda41',1,'MidiToFreqPrivate::mtof()'],['../group__midi.html#ga25d24d0b734826a924266bda90e61db2',1,'mtof(UFix< NI, 0, RANGE > midival): mozzi_midi.h'],['../group__midi.html#ga94801ebe89ccc9a49675ec414887f6d4',1,'mtof(SFix< NI, NF, RANGE > midival): mozzi_midi.h'],['../group__midi.html#gaa16e3e2de7e214303dc1b3145dbc87e9',1,'mtof(UFix< NI, NF, RANGE > midival): mozzi_midi.h'],['../group__midi.html#gabf0b21f8700b5ab84617028f1f9d59fa',1,'mtof(UFix< 16, 16, RANGE > midival): mozzi_midi.h'],['../group__midi.html#ga08102facf170648591b2ca24a3c39712',1,'mtof(int midi_note): mozzi_midi.h'],['../group__midi.html#ga07d1ca985403df63f75aa5d143477206',1,'mtof(uint8_t midi_note): mozzi_midi.h'],['../group__midi.html#gafacb8849f96270644ea79184fde7db37',1,'mtof(float midival): mozzi_midi.h']]], - ['multiresonantfilter_132',['MultiResonantFilter',['../class_multi_resonant_filter.html',1,'']]] -]; diff --git a/extras/doc/html/search/all_b.html b/extras/doc/html/search/all_b.html deleted file mode 100644 index 130deb4ed..000000000 --- a/extras/doc/html/search/all_b.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/all_b.js b/extras/doc/html/search/all_b.js deleted file mode 100644 index 282bdadf8..000000000 --- a/extras/doc/html/search/all_b.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['next_133',['next',['../class_sample_huffman.html#a8ec7bbb21f5cf0e780611a7539e86695',1,'SampleHuffman::next()'],['../class_p_d_resonant.html#a80bd42c7ea92a64c3b8a42779a1e0d26',1,'PDResonant::next()'],['../class_phasor.html#a696198206182acaed5cf27fef226118d',1,'Phasor::next()'],['../class_portamento.html#ad39101f5275c433713df7699214638bc',1,'Portamento::next()'],['../class_r_cpoll.html#ab61697b3922ed289c8d501ccd11cbd6f',1,'RCpoll::next()'],['../class_resonant_filter.html#a0ebe21b235b04ab406a3f09363b73f43',1,'ResonantFilter::next()'],['../class_multi_resonant_filter.html#a477e6e40d56d5e8f65ec3f6a5559581a',1,'MultiResonantFilter::next()'],['../class_reverb_tank.html#a4930ae7a871dba610fb141d7ab83d827',1,'ReverbTank::next()'],['../group__sensortools.html#a23c4b93258faace0c7ee60eb395d2c4b',1,'RollingAverage::next()'],['../class_sample.html#a087e0da33436c9bfce1f462df50ac2a9',1,'Sample::next()'],['../class_audio_delay.html#a19258636609d83a2bab11849e17b5294',1,'AudioDelay::next()'],['../class_smooth.html#ab7c809b6b5217771832a3e829695f8d5',1,'Smooth::next()'],['../class_smooth_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#a2981f4eee274902609641c3a9e949576',1,'Smooth< UFix< NI, NF > >::next()'],['../class_smooth_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#a65d8d8b4cd627d57d8ff601b94edbf20',1,'Smooth< SFix< NI, NF > >::next()'],['../class_state_variable.html#a14cb100c22e4a33025665ef3620ca2b8',1,'StateVariable::next()'],['../class_wave_folder.html#af80790f963340c3b7f289933a28cbfc5',1,'WaveFolder::next()'],['../class_wave_packet.html#ab4e35082b60d3ccc29c86d09078329bd',1,'WavePacket::next()'],['../class_wave_shaper_3_01char_01_4.html#a8aa75261350b2651a2cbca264a02e944',1,'WaveShaper< char >::next()'],['../class_wave_shaper_3_01int_01_4.html#a2bf3bca1848a953c52ae94d5b58199ba',1,'WaveShaper< int >::next()'],['../class_oscil.html#a655de04690650b27182e3b4d07768d46',1,'Oscil::next()'],['../class_a_d_s_r.html#aa032d8689ff618dbfa974ec6803803ef',1,'ADSR::next()'],['../class_audio_delay.html#a41c09b5cc9e817d8eaf111b0f74c9a0b',1,'AudioDelay::next()'],['../class_audio_delay_feedback.html#a566593f5ea6d2d8bac9c45aa592f40fb',1,'AudioDelayFeedback::next(su input)'],['../class_audio_delay_feedback.html#a335ce266a8b40173f3279b96f9c6c050',1,'AudioDelayFeedback::next(su input, uint16_t delaytime_cells)'],['../class_audio_delay_feedback.html#af94a6f68bc932e4e2ce99b3a43713825',1,'AudioDelayFeedback::next(su input, Q16n16 delaytime_cells)'],['../group__sensortools.html#a34bc821f4f662e54383dd9d61db782df',1,'AutoMap::next()'],['../group__sensortools.html#a788fca4c9f1e6699eb1990582015c0e3',1,'AutoRange::next()'],['../class_cap_poll.html#a894e8abbabff197f4d17106455fef718',1,'CapPoll::next()'],['../class_d_cfilter.html#ae900f943d9520fbf3a522508231d82b0',1,'DCfilter::next()'],['../class_ead.html#a57e6f7b304c2bd7dd8cedf7f4fba66c9',1,'Ead::next()'],['../class_line.html#a413f620b2824c6996b3346ee54351849',1,'Line::next()'],['../class_line_3_01unsigned_01char_01_4.html#ad33f421ca975cb6b175a1c1f3ba0b68a',1,'Line< unsigned char >::next()'],['../class_line_3_01unsigned_01int_01_4.html#a4bf1b56d036097ecc3e28d52ef129ade',1,'Line< unsigned int >::next()'],['../class_line_3_01unsigned_01long_01_4.html#a69f39cf62a30d001d50daf82f45f191b',1,'Line< unsigned long >::next()'],['../class_line_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#a3c87f0c7c649a0eaf8ad2dcde7374e68',1,'Line< UFix< NI, NF > >::next()'],['../class_line_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#a1a9036422d9a7893b4d9dce8ceabeb65',1,'Line< SFix< NI, NF > >::next()'],['../class_meta_oscil.html#aab97eb27e23213506c608ce459d00f3d',1,'MetaOscil::next()'],['../group__sensortools.html#a413ca7de0dbf3d2afafd84aa75857442',1,'OverSample::next()']]], - ['notch_134',['notch',['../class_multi_resonant_filter.html#a737e621190d5897ea44560a0ba37e4cc',1,'MultiResonantFilter']]], - ['noteoff_135',['noteOff',['../class_a_d_s_r.html#a3c7362c1c91486e09a306b5109ad498c',1,'ADSR::noteOff()'],['../class_p_d_resonant.html#a2b548734ea968d99d7939d68c95411cb',1,'PDResonant::noteOff()']]], - ['noteon_136',['noteOn',['../class_a_d_s_r.html#aef8d9c2799485fcd5a854228503f9f2f',1,'ADSR::noteOn()'],['../class_p_d_resonant.html#a7d4497f3b5944f73dd2fb82d68fc099b',1,'PDResonant::noteOn()']]] -]; diff --git a/extras/doc/html/search/all_c.html b/extras/doc/html/search/all_c.html deleted file mode 100644 index 3dd5af06d..000000000 --- a/extras/doc/html/search/all_c.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/all_c.js b/extras/doc/html/search/all_c.js deleted file mode 100644 index 6a90d3827..000000000 --- a/extras/doc/html/search/all_c.js +++ /dev/null @@ -1,10 +0,0 @@ -var searchData= -[ - ['operator_20audiooutputstorage_5ft_137',['operator AudioOutputStorage_t',['../struct_mono_output.html#a1fa86997aa020097d6011b23ee35342a',1,'MonoOutput']]], - ['operator_28_29_138',['operator()',['../group__sensortools.html#afd49885d3f05ca0a2f417199a9e7cf10',1,'AutoMap::operator()()'],['../class_int_map.html#ae3bf8b61f2ab79ac6626245213e7cb2a',1,'IntMap::operator()()'],['../class_smooth.html#a24eb02e4c4bfe9401f24ed0399b1e392',1,'Smooth::operator()()']]], - ['oscil_139',['Oscil',['../class_oscil.html',1,'Oscil< NUM_TABLE_CELLS, UPDATE_RATE >'],['../class_oscil.html#afe6a75646d2dd822a654bcd85242e800',1,'Oscil::Oscil(const int8_t *TABLE_NAME)'],['../class_oscil.html#ab7dc5f97742d841fff6a4dca6d7242f3',1,'Oscil::Oscil()']]], - ['oscil_3c_208192_2c_20mozzi_5faudio_5frate_20_3e_140',['Oscil< 8192, MOZZI_AUDIO_RATE >',['../class_oscil.html',1,'']]], - ['oscil_3c_20cos8192_5fnum_5fcells_2c_20mozzi_5faudio_5frate_20_3e_141',['Oscil< COS8192_NUM_CELLS, MOZZI_AUDIO_RATE >',['../class_oscil.html',1,'']]], - ['oscil_3c_20sin2048_5fnum_5fcells_2c_20mozzi_5faudio_5frate_20_3e_142',['Oscil< SIN2048_NUM_CELLS, MOZZI_AUDIO_RATE >',['../class_oscil.html',1,'']]], - ['oversample_143',['OverSample',['../group__sensortools.html#class_over_sample',1,'']]] -]; diff --git a/extras/doc/html/search/all_d.html b/extras/doc/html/search/all_d.html deleted file mode 100644 index af7f2f0f5..000000000 --- a/extras/doc/html/search/all_d.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/all_d.js b/extras/doc/html/search/all_d.js deleted file mode 100644 index f1f90f173..000000000 --- a/extras/doc/html/search/all_d.js +++ /dev/null @@ -1,13 +0,0 @@ -var searchData= -[ - ['pdresonant_144',['PDResonant',['../class_p_d_resonant.html',1,'PDResonant'],['../class_p_d_resonant.html#a2bd77e08be68fc6ce89f1f71a7e1e069',1,'PDResonant::PDResonant()']]], - ['phaseincfromfreq_145',['phaseIncFromFreq',['../class_sample.html#a18e72ecdb7bac8d41038b785d6deba58',1,'Sample::phaseIncFromFreq()'],['../class_meta_oscil.html#af5f9994295116d5684e2ab4980f14511',1,'MetaOscil::phaseIncFromFreq()'],['../class_oscil.html#a48ad51d7fbac24263008a9931f537baf',1,'Oscil::phaseIncFromFreq()'],['../class_phasor.html#a6e7656824ae72aea09ce851c7b340eaf',1,'Phasor::phaseIncFromFreq()']]], - ['phasor_146',['Phasor',['../class_phasor.html',1,'Phasor< UPDATE_RATE >'],['../class_phasor.html#a147c4c3aa7506c3da800e6cc77deb4ac',1,'Phasor::Phasor()']]], - ['phasor_3c_20mozzi_5faudio_5frate_20_3e_147',['Phasor< MOZZI_AUDIO_RATE >',['../class_phasor.html',1,'']]], - ['phmod_148',['phMod',['../class_meta_oscil.html#abb81b942124212b2f7a99b9ce2bd2a39',1,'MetaOscil::phMod()'],['../class_oscil.html#a4c6de90bc2d4183a5146eb2ae5e3dd2c',1,'Oscil::phMod(Q15n16 phmod_proportion)'],['../class_oscil.html#a90aeeb558d2d06efceaf9b81566f4d3d',1,'Oscil::phMod(SFix< NI, NF, RANGE > phmod_proportion)'],['../class_oscil.html#ae12f5e34705bb92394c4941aebe5a8ea',1,'Oscil::phMod(SFix< 15, 16 > phmod_proportion)']]], - ['playing_149',['playing',['../class_a_d_s_r.html#ab2723ed7ab315967afa81786c8d7621d',1,'ADSR']]], - ['pop_150',['pop',['../class_stack.html#afa9a35e13b68d9b59999227218a34d0a',1,'Stack']]], - ['portable_151',['portable',['../struct_stereo_output.html#a84824d693bf7ce2b9141ff6f9b7c87be',1,'StereoOutput']]], - ['portamento_152',['Portamento',['../class_portamento.html',1,'Portamento< CONTROL_UPDATE_RATE >'],['../class_portamento.html#adc910a47d3fe8eff848d6de42d7280df',1,'Portamento::Portamento()']]], - ['push_153',['push',['../class_stack.html#af67739d9b82966da46f7496f4c1fc801',1,'Stack']]] -]; diff --git a/extras/doc/html/search/all_e.html b/extras/doc/html/search/all_e.html deleted file mode 100644 index e25df423a..000000000 --- a/extras/doc/html/search/all_e.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/all_e.js b/extras/doc/html/search/all_e.js deleted file mode 100644 index a2c733016..000000000 --- a/extras/doc/html/search/all_e.js +++ /dev/null @@ -1,101 +0,0 @@ -var searchData= -[ - ['q0n15_154',['Q0n15',['../group__fixmath.html#ga7b0aeeb726b5790b7b181f4f1ba08ee4',1,'mozzi_fixmath.h']]], - ['q0n15_5ffix1_155',['Q0n15_FIX1',['../group__fixmath.html#ga38ec011e7e3e08f5df091b608ce621e2',1,'mozzi_fixmath.h']]], - ['q0n16_156',['Q0n16',['../group__fixmath.html#ga38b7537c31ebeb6a2aba2ea34d23f230',1,'mozzi_fixmath.h']]], - ['q0n16_5ffix1_157',['Q0n16_FIX1',['../group__fixmath.html#gaa1e02cbcdc65171103653df03fec3b76',1,'mozzi_fixmath.h']]], - ['q0n16_5fto_5ffloat_158',['Q0n16_to_float',['../group__fixmath.html#ga0440dbc7692a88dca7b1173f020c9b0d',1,'mozzi_fixmath.h']]], - ['q0n31_159',['Q0n31',['../group__fixmath.html#ga8f4b2d87d5b697b3625c347618fa64c4',1,'mozzi_fixmath.h']]], - ['q0n32_160',['Q0n32',['../group__fixmath.html#gae32cb6df74dc8053c5da2a7b6378583b',1,'mozzi_fixmath.h']]], - ['q0n32_5ffix1_161',['Q0n32_FIX1',['../group__fixmath.html#gacb7fad10f1c2b67504271149f8f1215f',1,'mozzi_fixmath.h']]], - ['q0n7_162',['Q0n7',['../group__fixmath.html#ga9a64ce80fa7c320187d2cf2104a96daa',1,'mozzi_fixmath.h']]], - ['q0n7_5ffix1_163',['Q0n7_FIX1',['../group__fixmath.html#ga42c55269acbc41ca1fbcbb7aea5e8767',1,'mozzi_fixmath.h']]], - ['q0n7_5fto_5ffloat_164',['Q0n7_to_float',['../group__fixmath.html#ga8b01eb695e8d8c197e4e83a76d391a6a',1,'mozzi_fixmath.h']]], - ['q0n7_5fto_5fq15n16_165',['Q0n7_to_Q15n16',['../group__fixmath.html#gac8b6733abac81f36cf8075a4d3c04e49',1,'mozzi_fixmath.h']]], - ['q0n7_5fto_5fq1n14_166',['Q0n7_to_Q1n14',['../group__fixmath.html#ga468ddaa38e178b45a77e0c103da22b7c',1,'mozzi_fixmath.h']]], - ['q0n8_167',['Q0n8',['../group__fixmath.html#ga36659a8cbbf0b380fa7bb2355e32db51',1,'mozzi_fixmath.h']]], - ['q0n8_5fto_5ffloat_168',['Q0n8_to_float',['../group__fixmath.html#gade631f0534cf54fadbff65911809d927',1,'mozzi_fixmath.h']]], - ['q0n8_5fto_5fq15n16_169',['Q0n8_to_Q15n16',['../group__fixmath.html#gad224b917b591bfa3554a958e84f8fadf',1,'mozzi_fixmath.h']]], - ['q0n8_5fto_5fq16n16_170',['Q0n8_to_Q16n16',['../group__fixmath.html#gab13c5f790423d9a0cf10445b366933fe',1,'mozzi_fixmath.h']]], - ['q0n8_5fto_5fq1n15_171',['Q0n8_to_Q1n15',['../group__fixmath.html#gaa9c85bc32475856ed07c3780a237ba31',1,'mozzi_fixmath.h']]], - ['q0n8_5fto_5fq24n8_172',['Q0n8_to_Q24n8',['../group__fixmath.html#ga77edd2a4cd49df42e7145da9bdb799ae',1,'mozzi_fixmath.h']]], - ['q0n8_5fto_5fq8n24_173',['Q0n8_to_Q8n24',['../group__fixmath.html#gac864675855d95314dd015ea52dc80135',1,'mozzi_fixmath.h']]], - ['q0n8_5fto_5fq8n8_174',['Q0n8_to_Q8n8',['../group__fixmath.html#ga07cdd6c75045759d9d11116f5caea4bf',1,'mozzi_fixmath.h']]], - ['q15n0_175',['Q15n0',['../group__fixmath.html#ga97de6e3641b7638093a53cd137c8568c',1,'mozzi_fixmath.h']]], - ['q15n0_5ffix1_176',['Q15n0_FIX1',['../group__fixmath.html#gafa16db677f958c243a826695b2c14c3c',1,'mozzi_fixmath.h']]], - ['q15n0_5fto_5fq15n16_177',['Q15n0_to_Q15n16',['../group__fixmath.html#ga8ef5b17eaddb22228824829204ee71bb',1,'mozzi_fixmath.h']]], - ['q15n16_178',['Q15n16',['../group__fixmath.html#ga3e1cab88474edfa08535402573125cae',1,'mozzi_fixmath.h']]], - ['q15n16_5ffix1_179',['Q15n16_FIX1',['../group__fixmath.html#ga7933033ba3cd84a4d09c0bd652378a38',1,'mozzi_fixmath.h']]], - ['q15n16_5fto_5ffloat_180',['Q15n16_to_float',['../group__fixmath.html#ga4096449c3f0598a1534255de789d2ee5',1,'mozzi_fixmath.h']]], - ['q15n16_5fto_5fq0n8_181',['Q15n16_to_Q0n8',['../group__fixmath.html#gaf8dd8621335948f9048742f0a59dc795',1,'mozzi_fixmath.h']]], - ['q15n16_5fto_5fq15n0_182',['Q15n16_to_Q15n0',['../group__fixmath.html#gaa2ec03187910e9c6418298ef55655c36',1,'mozzi_fixmath.h']]], - ['q15n16_5fto_5fq23n8_183',['Q15n16_to_Q23n8',['../group__fixmath.html#ga67b0f3ae70755ed8891e510b02813c08',1,'mozzi_fixmath.h']]], - ['q15n16_5fto_5fq7n8_184',['Q15n16_to_Q7n8',['../group__fixmath.html#ga21d72d50bd41022755514c96c2d11901',1,'mozzi_fixmath.h']]], - ['q15n16_5fto_5fq8n0_185',['Q15n16_to_Q8n0',['../group__fixmath.html#ga13bc20d9c470ccac803d53f3ebf7d861',1,'mozzi_fixmath.h']]], - ['q15n16_5fto_5fq8n8_186',['Q15n16_to_Q8n8',['../group__fixmath.html#gaf62905baa27fd9ec0cbf5ed054ebd08a',1,'mozzi_fixmath.h']]], - ['q16n0_187',['Q16n0',['../group__fixmath.html#ga50af2aa1b7d33bba0b6e1a88c350adfa',1,'mozzi_fixmath.h']]], - ['q16n0_5fto_5ffloat_188',['Q16n0_to_float',['../group__fixmath.html#ga990f68566b105bc35ed718ad5ef93d72',1,'mozzi_fixmath.h']]], - ['q16n0_5fto_5fq15n16_189',['Q16n0_to_Q15n16',['../group__fixmath.html#ga720cdc234e4d0979753e5aef22a93e11',1,'mozzi_fixmath.h']]], - ['q16n0_5fto_5fq16n16_190',['Q16n0_to_Q16n16',['../group__fixmath.html#gac193b97057ac01de898db661cb6d1c5d',1,'mozzi_fixmath.h']]], - ['q16n0_5fto_5fq23n8_191',['Q16n0_to_Q23n8',['../group__fixmath.html#gaab7cd08af1c66dd48873f9a5645cc95e',1,'mozzi_fixmath.h']]], - ['q16n0_5fto_5fq24n8_192',['Q16n0_to_Q24n8',['../group__fixmath.html#ga779f365fbc3378a0e8cc167d44fd7aad',1,'mozzi_fixmath.h']]], - ['q16n16_193',['Q16n16',['../group__fixmath.html#gab3127fd8ac279e1d8dda0292bc1fc8dc',1,'mozzi_fixmath.h']]], - ['q16n16_5f2pi_194',['Q16n16_2PI',['../group__fixmath.html#ga4bf1124c7bdac767263b2037211933e3',1,'mozzi_fixmath.h']]], - ['q16n16_5ffix1_195',['Q16n16_FIX1',['../group__fixmath.html#gaa4538a17e7e75b14a5826405ad06acef',1,'mozzi_fixmath.h']]], - ['q16n16_5fmtof_196',['Q16n16_mtof',['../group__midi.html#ga45bd3f3abd7ae5fa509eac3d3931a5b2',1,'Q16n16_mtof(): mozzi_midi.h'],['../class_midi_to_freq_private.html#a84543eb6614218d9fee74b960b8a7644',1,'MidiToFreqPrivate::Q16n16_mtof()']]], - ['q16n16_5fpi_197',['Q16n16_PI',['../group__fixmath.html#gafd4492673766377d6d9202e43bb3d8dd',1,'mozzi_fixmath.h']]], - ['q16n16_5fpow2_198',['Q16n16_pow2',['../group__fixmath.html#ga2e1d9d0fe4ba7edb9830efb7887c36bd',1,'mozzi_fixmath.cpp']]], - ['q16n16_5fto_5ffloat_199',['Q16n16_to_float',['../group__fixmath.html#gafcb57f2d0fdcce65b60401f47b871d14',1,'mozzi_fixmath.h']]], - ['q16n16_5fto_5fq0n8_200',['Q16n16_to_Q0n8',['../group__fixmath.html#ga1315b4f68a57d26fbedc88d5b30a44d8',1,'mozzi_fixmath.h']]], - ['q16n16_5fto_5fq16n0_201',['Q16n16_to_Q16n0',['../group__fixmath.html#ga89bdabdfd59a8ec3f06aedbbab087527',1,'mozzi_fixmath.h']]], - ['q16n16_5fto_5fq24n8_202',['Q16n16_to_Q24n8',['../group__fixmath.html#ga17dd8cb80ef87b6573926e411618105a',1,'mozzi_fixmath.h']]], - ['q16n16_5fto_5fq8n8_203',['Q16n16_to_Q8n8',['../group__fixmath.html#gaef6ce2a93fe5862ac373772e994713a9',1,'mozzi_fixmath.h']]], - ['q1n14_204',['Q1n14',['../group__fixmath.html#ga856876974bff2af13e507f42af0c4925',1,'mozzi_fixmath.h']]], - ['q1n14_5ffix1_205',['Q1n14_FIX1',['../group__fixmath.html#ga6f99802ebadd6b1b3ee707892e36cab9',1,'mozzi_fixmath.h']]], - ['q1n14_5fto_5ffloat_206',['Q1n14_to_float',['../group__fixmath.html#gad3fe2bc17bed17cd159a9c030145b6ca',1,'mozzi_fixmath.h']]], - ['q1n14_5fto_5fq0n7_207',['Q1n14_to_Q0n7',['../group__fixmath.html#ga5f3733fb89e77693e54328375226f5e9',1,'mozzi_fixmath.h']]], - ['q1n15_208',['Q1n15',['../group__fixmath.html#gadefb02e4d84cdb085fbc6251b8f4e8be',1,'mozzi_fixmath.h']]], - ['q1n15_5ffix1_209',['Q1n15_FIX1',['../group__fixmath.html#ga8124fb8d1bcb111532f22726dbf3e5cc',1,'mozzi_fixmath.h']]], - ['q1n15_5fto_5ffloat_210',['Q1n15_to_float',['../group__fixmath.html#ga9ed5a6a2041f490ffa52b5a5fa95d3e5',1,'mozzi_fixmath.h']]], - ['q1n15_5fto_5fq0n8_211',['Q1n15_to_Q0n8',['../group__fixmath.html#ga67c11990c9288aa762c708d3a48ba7fc',1,'mozzi_fixmath.h']]], - ['q23n8_212',['Q23n8',['../group__fixmath.html#gaa43a54806ef427491497cc1762480d13',1,'mozzi_fixmath.h']]], - ['q23n8_5ffix1_213',['Q23n8_FIX1',['../group__fixmath.html#gaad55b32c6590a3e4bb07972a7acec4a9',1,'mozzi_fixmath.h']]], - ['q23n8_5fto_5ffloat_214',['Q23n8_to_float',['../group__fixmath.html#ga47738704056a272968e80b399e06e82b',1,'mozzi_fixmath.h']]], - ['q23n8_5fto_5fq15n0_215',['Q23n8_to_Q15n0',['../group__fixmath.html#ga1b21d30a04f07940dc4ea206533b9dd8',1,'mozzi_fixmath.h']]], - ['q23n8_5fto_5fq16n0_216',['Q23n8_to_Q16n0',['../group__fixmath.html#gaa6a3087e0119ed233a3256f8fa25e146',1,'mozzi_fixmath.h']]], - ['q23n8_5fto_5fq31n0_217',['Q23n8_to_Q31n0',['../group__fixmath.html#ga8f3d1181dc6802782b9ff9aa59ca96a2',1,'mozzi_fixmath.h']]], - ['q23n8_5fto_5fq7n8_218',['Q23n8_to_Q7n8',['../group__fixmath.html#gac243a1fd2154b115e4ba39a70125675e',1,'mozzi_fixmath.h']]], - ['q24n8_219',['Q24n8',['../group__fixmath.html#ga940a116ff2bfbd1b013b41b1be73f70f',1,'mozzi_fixmath.h']]], - ['q24n8_5fto_5ffloat_220',['Q24n8_to_float',['../group__fixmath.html#gab495892ee3db6cbce186fbb7c7246088',1,'mozzi_fixmath.h']]], - ['q24n8_5fto_5fq0n8_221',['Q24n8_to_Q0n8',['../group__fixmath.html#ga94dd6fe8594b171881ade98431dfda28',1,'mozzi_fixmath.h']]], - ['q24n8_5fto_5fq16n0_222',['Q24n8_to_Q16n0',['../group__fixmath.html#gaefdfa391a9fef0f17d1f9df16fd9a9f0',1,'mozzi_fixmath.h']]], - ['q24n8_5fto_5fq16n16_223',['Q24n8_to_Q16n16',['../group__fixmath.html#ga2b445681d56f8693c3d98d5ff19b51d4',1,'mozzi_fixmath.h']]], - ['q24n8_5fto_5fq32n0_224',['Q24n8_to_Q32n0',['../group__fixmath.html#ga9f28b2310c92ecac72960d9bd0aff80f',1,'mozzi_fixmath.h']]], - ['q31n0_225',['Q31n0',['../group__fixmath.html#ga5979e4e6ca93e368ee8c042a526b3b73',1,'mozzi_fixmath.h']]], - ['q32n0_226',['Q32n0',['../group__fixmath.html#gafc3e7e5a9ddd997abe8e815ba91f3c4e',1,'mozzi_fixmath.h']]], - ['q3n13_227',['Q3n13',['../group__fixmath.html#ga2ca0a65f5b9ddef56756b4a75b3b8a68',1,'mozzi_fixmath.h']]], - ['q3n13_5f2pi_228',['Q3n13_2PI',['../group__fixmath.html#gac065d8a968cb7c4dd713458682ee1308',1,'mozzi_fixmath.h']]], - ['q7n0_229',['Q7n0',['../group__fixmath.html#gabc933ab043f14dfee980811b2a103594',1,'mozzi_fixmath.h']]], - ['q7n0_5fto_5fq15n16_230',['Q7n0_to_Q15n16',['../group__fixmath.html#ga64d943b21ef783f34135630a5c80be46',1,'mozzi_fixmath.h']]], - ['q7n0_5fto_5fq7n8_231',['Q7n0_to_Q7n8',['../group__fixmath.html#ga81b0b1f295a6a724c100e600d6b4ce28',1,'mozzi_fixmath.h']]], - ['q7n8_232',['Q7n8',['../group__fixmath.html#ga65001bd29222d896ae9256fd7a415d41',1,'mozzi_fixmath.h']]], - ['q7n8_5ffix1_233',['Q7n8_FIX1',['../group__fixmath.html#ga1a04e29b3420231fc54039caf460a88c',1,'mozzi_fixmath.h']]], - ['q7n8_5fmult_234',['Q7n8_mult',['../group__fixmath.html#ga306932c4fb32b1352c24b7602a696fee',1,'mozzi_fixmath.h']]], - ['q7n8_5fto_5ffloat_235',['Q7n8_to_float',['../group__fixmath.html#gaad3cbbc6a772d246d26fd98b5a079382',1,'mozzi_fixmath.h']]], - ['q7n8_5fto_5fq15n16_236',['Q7n8_to_Q15n16',['../group__fixmath.html#ga958d671aeefb66c2492b84bf299f8d13',1,'mozzi_fixmath.h']]], - ['q7n8_5fto_5fq7n0_237',['Q7n8_to_Q7n0',['../group__fixmath.html#gaa8be90cc674fc9ac72a2faafb11d6a5e',1,'mozzi_fixmath.h']]], - ['q8n0_238',['Q8n0',['../group__fixmath.html#gadec626a60cce3a7fec144d2505b79dda',1,'mozzi_fixmath.h']]], - ['q8n0_5fto_5fq15n16_239',['Q8n0_to_Q15n16',['../group__fixmath.html#gac0b4678c510db93302efb15497911907',1,'mozzi_fixmath.h']]], - ['q8n0_5fto_5fq16n16_240',['Q8n0_to_Q16n16',['../group__fixmath.html#ga589b5c022b59a72fc3fb39061048d193',1,'mozzi_fixmath.h']]], - ['q8n0_5fto_5fq7n8_241',['Q8n0_to_Q7n8',['../group__fixmath.html#ga4baa8569c241630ddd25d798d0a89b3d',1,'mozzi_fixmath.h']]], - ['q8n0_5fto_5fq8n8_242',['Q8n0_to_Q8n8',['../group__fixmath.html#ga90a5d59d5a529f4caaf408730230a156',1,'mozzi_fixmath.h']]], - ['q8n24_243',['Q8n24',['../group__fixmath.html#ga5ce3f8456c6ea996029b8ea0d96fb3e8',1,'mozzi_fixmath.h']]], - ['q8n24_5ffix1_244',['Q8n24_FIX1',['../group__fixmath.html#ga5083b2bbeeb968258e2da31d3af26a25',1,'mozzi_fixmath.h']]], - ['q8n24_5fto_5ffloat_245',['Q8n24_to_float',['../group__fixmath.html#ga6f0e36938a7dfae4ab399f17642c2bcd',1,'mozzi_fixmath.h']]], - ['q8n24_5fto_5fq0n8_246',['Q8n24_to_Q0n8',['../group__fixmath.html#ga0c5065bc7c71ac750acde1c7ce216d87',1,'mozzi_fixmath.h']]], - ['q8n8_247',['Q8n8',['../group__fixmath.html#ga8dcb8a23bfed3b8404f7a0d73f300c8a',1,'mozzi_fixmath.h']]], - ['q8n8_5ffix1_248',['Q8n8_FIX1',['../group__fixmath.html#ga00d3299412f5460cae3af8f0c58b2db1',1,'mozzi_fixmath.h']]], - ['q8n8_5fto_5ffloat_249',['Q8n8_to_float',['../group__fixmath.html#gabc9c251c25fa7a239d704ea3998e7e39',1,'mozzi_fixmath.h']]], - ['q8n8_5fto_5fq16n16_250',['Q8n8_to_Q16n16',['../group__fixmath.html#gab88fd86b4f226f0e2614b0ac813e4cad',1,'mozzi_fixmath.h']]], - ['q8n8_5fto_5fq8n0_251',['Q8n8_to_Q8n0',['../group__fixmath.html#gad68e3b4d1bf65e997d5e709eb4153572',1,'mozzi_fixmath.h']]] -]; diff --git a/extras/doc/html/search/all_f.html b/extras/doc/html/search/all_f.html deleted file mode 100644 index b23da6ce4..000000000 --- a/extras/doc/html/search/all_f.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/all_f.js b/extras/doc/html/search/all_f.js deleted file mode 100644 index f153b7884..000000000 --- a/extras/doc/html/search/all_f.js +++ /dev/null @@ -1,18 +0,0 @@ -var searchData= -[ - ['rand_252',['rand',['../group__random.html#ga1182cb74988d9c8510959149adc63762',1,'rand(int maxval): mozzi_rand.h'],['../group__random.html#ga4c69deb53afb886b26c76b343513b340',1,'rand(int minval, int maxval): mozzi_rand.h'],['../group__random.html#ga4ad4ab94c8b0e8a4d4be925490378733',1,'rand(unsigned int maxval): mozzi_rand.h'],['../group__random.html#ga95de742b529d5965461f1d3f6f576e18',1,'rand(unsigned int minval, unsigned int maxval): mozzi_rand.h'],['../group__random.html#gabe026433bdf21da516984d35730672fc',1,'rand(int8_t minval, int8_t maxval): mozzi_rand.h'],['../group__random.html#ga99dee852111a97e20a64582de8e79ab1',1,'rand(int8_t maxval): mozzi_rand.h'],['../group__random.html#ga13bc207ecda4f92e2be2fb585a5cce2b',1,'rand(uint8_t minval, uint8_t maxval): mozzi_rand.h'],['../group__random.html#ga904cf092c2b014dc6c99f7844bd3723e',1,'rand(uint8_t maxval): mozzi_rand.h']]], - ['randmidinote_253',['randMidiNote',['../group__random.html#ga15ff4da0bec0272bf728ea7de2d78006',1,'mozzi_rand.h']]], - ['randprime_254',['randPrime',['../group__random.html#gab6c2b444d462461b82997e04105d0398',1,'primes.h']]], - ['randprimeupto_255',['randPrimeUpTo',['../group__random.html#gaead8db89e2403d5ef7842f894552c629',1,'primes.h']]], - ['randseed_256',['randSeed',['../class_mozzi_private_1_1_mozzi_rand_private.html#a4647c5989e5cf1ada9d952d5eb943d13',1,'MozziPrivate::MozziRandPrivate::randSeed()'],['../class_mozzi_private_1_1_mozzi_rand_private.html#a83ff6b4e38c84713e0d67aa1ec06af66',1,'MozziPrivate::MozziRandPrivate::randSeed()'],['../group__random.html#ga477030e3875a6dd400012c3a431e486a',1,'randSeed(uint32_t seed): mozzi_rand.h'],['../group__random.html#ga83ff6b4e38c84713e0d67aa1ec06af66',1,'randSeed(): mozzi_rand.h']]], - ['rangewholesample_257',['rangeWholeSample',['../class_sample.html#a8a012ae52ee028222118f6bba5c7fb33',1,'Sample']]], - ['rcpoll_258',['RCpoll',['../class_r_cpoll.html',1,'RCpoll< SENSOR_PIN >'],['../class_r_cpoll.html#a44673505bbfbac288ec994dd48017e83',1,'RCpoll::RCpoll()']]], - ['read_259',['read',['../class_audio_delay_feedback.html#aabcade306904f5f6ac43d12bb00606e6',1,'AudioDelayFeedback::read()'],['../class_audio_delay_feedback.html#adb77aac1acba3b0a31428345342a5205',1,'AudioDelayFeedback::read(Q16n16 delaytime_cells)'],['../class_audio_delay.html#a26b409fbfc322ae527ba23680c56e3a9',1,'AudioDelay::read()']]], - ['ready_260',['ready',['../class_metronome.html#adc67bd96eac9f9b9260f8b070b7db75f',1,'Metronome::ready()'],['../class_event_delay.html#a2267889678fb75df2f6bdcbd0be0ea8a',1,'EventDelay::ready()']]], - ['reconnectdigitalin_261',['reconnectDigitalIn',['../group__analog.html#ga26462e443299e8d39a520d4a838e00b7',1,'mozzi_analog.h']]], - ['resonantfilter_262',['ResonantFilter',['../class_resonant_filter.html',1,'ResonantFilter< FILTER_TYPE, su >'],['../class_resonant_filter.html#acd29c5e737fe80e0dc5c408113c3c282',1,'ResonantFilter::ResonantFilter()']]], - ['resonantfilter_3c_20lowpass_2c_20uint8_5ft_20_3e_263',['ResonantFilter< LOWPASS, uint8_t >',['../class_resonant_filter.html',1,'']]], - ['reverbtank_264',['ReverbTank',['../class_reverb_tank.html#a3ca18b03d045df164462338f6ed0648c',1,'ReverbTank::ReverbTank()'],['../class_reverb_tank.html',1,'ReverbTank']]], - ['rollingaverage_265',['RollingAverage',['../group__sensortools.html#a11cf7b9e1278648b1eb10e5534fe3e29',1,'RollingAverage::RollingAverage()'],['../group__sensortools.html#class_rolling_average',1,'RollingAverage< T, WINDOW_LENGTH >']]], - ['rollingstat_266',['RollingStat',['../group__sensortools.html#a98c3f767391db80b8ad59ca53c1e6a94',1,'RollingStat::RollingStat()'],['../group__sensortools.html#class_rolling_stat',1,'RollingStat< T, WINDOW_LENGTH >']]] -]; diff --git a/extras/doc/html/search/classes_0.html b/extras/doc/html/search/classes_0.html deleted file mode 100644 index af8159ee6..000000000 --- a/extras/doc/html/search/classes_0.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/classes_0.js b/extras/doc/html/search/classes_0.js deleted file mode 100644 index 9cc9eb9e4..000000000 --- a/extras/doc/html/search/classes_0.js +++ /dev/null @@ -1,15 +0,0 @@ -var searchData= -[ - ['adsr_349',['ADSR',['../class_a_d_s_r.html',1,'']]], - ['adsr_3c_20mozzi_5fcontrol_5frate_2c_20mozzi_5faudio_5frate_20_3e_350',['ADSR< MOZZI_CONTROL_RATE, MOZZI_AUDIO_RATE >',['../class_a_d_s_r.html',1,'']]], - ['adsr_3c_20mozzi_5fcontrol_5frate_2c_20mozzi_5fcontrol_5frate_20_3e_351',['ADSR< MOZZI_CONTROL_RATE, MOZZI_CONTROL_RATE >',['../class_a_d_s_r.html',1,'']]], - ['audiodelay_352',['AudioDelay',['../class_audio_delay.html',1,'']]], - ['audiodelay_3c_20128_20_3e_353',['AudioDelay< 128 >',['../class_audio_delay.html',1,'']]], - ['audiodelay_3c_20128_2c_20int_20_3e_354',['AudioDelay< 128, int >',['../class_audio_delay.html',1,'']]], - ['audiodelay_3c_20256_2c_20int_20_3e_355',['AudioDelay< 256, int >',['../class_audio_delay.html',1,'']]], - ['audiodelay_3c_20num_5fbuffer_5fsamples_2c_20int_20_3e_356',['AudioDelay< NUM_BUFFER_SAMPLES, int >',['../class_audio_delay.html',1,'']]], - ['audiodelayfeedback_357',['AudioDelayFeedback',['../class_audio_delay_feedback.html',1,'']]], - ['automap_358',['AutoMap',['../group__sensortools.html#class_auto_map',1,'']]], - ['autorange_359',['AutoRange',['../group__sensortools.html#class_auto_range',1,'']]], - ['autorange_3c_20int_20_3e_360',['AutoRange< int >',['../group__sensortools.html',1,'']]] -]; diff --git a/extras/doc/html/search/classes_1.html b/extras/doc/html/search/classes_1.html deleted file mode 100644 index 576e91689..000000000 --- a/extras/doc/html/search/classes_1.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/classes_1.js b/extras/doc/html/search/classes_1.js deleted file mode 100644 index 2f7102df5..000000000 --- a/extras/doc/html/search/classes_1.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['cappoll_361',['CapPoll',['../class_cap_poll.html',1,'']]], - ['circularbuffer_362',['CircularBuffer',['../class_circular_buffer.html',1,'']]], - ['controldelay_363',['ControlDelay',['../class_control_delay.html',1,'']]] -]; diff --git a/extras/doc/html/search/classes_2.html b/extras/doc/html/search/classes_2.html deleted file mode 100644 index 956405e5a..000000000 --- a/extras/doc/html/search/classes_2.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/classes_2.js b/extras/doc/html/search/classes_2.js deleted file mode 100644 index 458f6f28c..000000000 --- a/extras/doc/html/search/classes_2.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['dcfilter_364',['DCfilter',['../class_d_cfilter.html',1,'']]] -]; diff --git a/extras/doc/html/search/classes_3.html b/extras/doc/html/search/classes_3.html deleted file mode 100644 index d33343bc1..000000000 --- a/extras/doc/html/search/classes_3.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/classes_3.js b/extras/doc/html/search/classes_3.js deleted file mode 100644 index 094b1674b..000000000 --- a/extras/doc/html/search/classes_3.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['ead_365',['Ead',['../class_ead.html',1,'']]], - ['eventdelay_366',['EventDelay',['../class_event_delay.html',1,'']]] -]; diff --git a/extras/doc/html/search/classes_4.html b/extras/doc/html/search/classes_4.html deleted file mode 100644 index 8430b07fe..000000000 --- a/extras/doc/html/search/classes_4.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/classes_4.js b/extras/doc/html/search/classes_4.js deleted file mode 100644 index cd570a479..000000000 --- a/extras/doc/html/search/classes_4.js +++ /dev/null @@ -1,13 +0,0 @@ -var searchData= -[ - ['int2type_367',['Int2Type',['../group__util.html#struct_int2_type',1,'']]], - ['integertype_368',['IntegerType',['../group__util.html#struct_integer_type',1,'']]], - ['integertype_3c_201_20_3e_369',['IntegerType< 1 >',['../struct_integer_type_3_011_01_4.html',1,'']]], - ['integertype_3c_202_20_3e_370',['IntegerType< 2 >',['../struct_integer_type_3_012_01_4.html',1,'']]], - ['integertype_3c_204_20_3e_371',['IntegerType< 4 >',['../struct_integer_type_3_014_01_4.html',1,'']]], - ['integertype_3c_208_20_3e_372',['IntegerType< 8 >',['../struct_integer_type_3_018_01_4.html',1,'']]], - ['integertype_3c_20sizeof_28audiooutputstorage_5ft_29_3e_373',['IntegerType< sizeof(AudioOutputStorage_t)>',['../group__util.html',1,'']]], - ['integertype_3c_20sizeof_28int8_5ft_29_2bsizeof_28int8_5ft_29_3e_374',['IntegerType< sizeof(int8_t)+sizeof(int8_t)>',['../group__util.html',1,'']]], - ['integertype_3c_20sizeof_28uint8_5ft_29_2bsizeof_28uint8_5ft_29_3e_375',['IntegerType< sizeof(uint8_t)+sizeof(uint8_t)>',['../group__util.html',1,'']]], - ['intmap_376',['IntMap',['../class_int_map.html',1,'']]] -]; diff --git a/extras/doc/html/search/classes_5.html b/extras/doc/html/search/classes_5.html deleted file mode 100644 index c2f1b767b..000000000 --- a/extras/doc/html/search/classes_5.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/classes_5.js b/extras/doc/html/search/classes_5.js deleted file mode 100644 index e4a07f914..000000000 --- a/extras/doc/html/search/classes_5.js +++ /dev/null @@ -1,11 +0,0 @@ -var searchData= -[ - ['line_377',['Line',['../class_line.html',1,'']]], - ['line_3c_20q15n16_20_3e_378',['Line< Q15n16 >',['../class_line.html',1,'']]], - ['line_3c_20q16n16_20_3e_379',['Line< Q16n16 >',['../class_line.html',1,'']]], - ['line_3c_20sfix_3c_20ni_2c_20nf_20_3e_20_3e_380',['Line< SFix< NI, NF > >',['../class_line_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html',1,'']]], - ['line_3c_20ufix_3c_20ni_2c_20nf_20_3e_20_3e_381',['Line< UFix< NI, NF > >',['../class_line_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html',1,'']]], - ['line_3c_20unsigned_20char_20_3e_382',['Line< unsigned char >',['../class_line_3_01unsigned_01char_01_4.html',1,'']]], - ['line_3c_20unsigned_20int_20_3e_383',['Line< unsigned int >',['../class_line_3_01unsigned_01int_01_4.html',1,'']]], - ['line_3c_20unsigned_20long_20_3e_384',['Line< unsigned long >',['../class_line_3_01unsigned_01long_01_4.html',1,'']]] -]; diff --git a/extras/doc/html/search/classes_6.html b/extras/doc/html/search/classes_6.html deleted file mode 100644 index e39847ce8..000000000 --- a/extras/doc/html/search/classes_6.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/classes_6.js b/extras/doc/html/search/classes_6.js deleted file mode 100644 index 083403afc..000000000 --- a/extras/doc/html/search/classes_6.js +++ /dev/null @@ -1,9 +0,0 @@ -var searchData= -[ - ['metaoscil_385',['MetaOscil',['../class_meta_oscil.html',1,'']]], - ['metronome_386',['Metronome',['../class_metronome.html',1,'']]], - ['miditofreqprivate_387',['MidiToFreqPrivate',['../class_midi_to_freq_private.html',1,'']]], - ['monooutput_388',['MonoOutput',['../struct_mono_output.html',1,'']]], - ['mozzirandprivate_389',['MozziRandPrivate',['../class_mozzi_private_1_1_mozzi_rand_private.html',1,'MozziPrivate']]], - ['multiresonantfilter_390',['MultiResonantFilter',['../class_multi_resonant_filter.html',1,'']]] -]; diff --git a/extras/doc/html/search/classes_7.html b/extras/doc/html/search/classes_7.html deleted file mode 100644 index a2c4d1a39..000000000 --- a/extras/doc/html/search/classes_7.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/classes_7.js b/extras/doc/html/search/classes_7.js deleted file mode 100644 index ba9704144..000000000 --- a/extras/doc/html/search/classes_7.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['oscil_391',['Oscil',['../class_oscil.html',1,'']]], - ['oscil_3c_208192_2c_20mozzi_5faudio_5frate_20_3e_392',['Oscil< 8192, MOZZI_AUDIO_RATE >',['../class_oscil.html',1,'']]], - ['oscil_3c_20cos8192_5fnum_5fcells_2c_20mozzi_5faudio_5frate_20_3e_393',['Oscil< COS8192_NUM_CELLS, MOZZI_AUDIO_RATE >',['../class_oscil.html',1,'']]], - ['oscil_3c_20sin2048_5fnum_5fcells_2c_20mozzi_5faudio_5frate_20_3e_394',['Oscil< SIN2048_NUM_CELLS, MOZZI_AUDIO_RATE >',['../class_oscil.html',1,'']]], - ['oversample_395',['OverSample',['../group__sensortools.html#class_over_sample',1,'']]] -]; diff --git a/extras/doc/html/search/classes_8.html b/extras/doc/html/search/classes_8.html deleted file mode 100644 index 17003e480..000000000 --- a/extras/doc/html/search/classes_8.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/classes_8.js b/extras/doc/html/search/classes_8.js deleted file mode 100644 index bb0083534..000000000 --- a/extras/doc/html/search/classes_8.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['pdresonant_396',['PDResonant',['../class_p_d_resonant.html',1,'']]], - ['phasor_397',['Phasor',['../class_phasor.html',1,'']]], - ['phasor_3c_20mozzi_5faudio_5frate_20_3e_398',['Phasor< MOZZI_AUDIO_RATE >',['../class_phasor.html',1,'']]], - ['portamento_399',['Portamento',['../class_portamento.html',1,'']]] -]; diff --git a/extras/doc/html/search/classes_9.html b/extras/doc/html/search/classes_9.html deleted file mode 100644 index b8afa8cba..000000000 --- a/extras/doc/html/search/classes_9.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/classes_9.js b/extras/doc/html/search/classes_9.js deleted file mode 100644 index c142165d7..000000000 --- a/extras/doc/html/search/classes_9.js +++ /dev/null @@ -1,9 +0,0 @@ -var searchData= -[ - ['rcpoll_400',['RCpoll',['../class_r_cpoll.html',1,'']]], - ['resonantfilter_401',['ResonantFilter',['../class_resonant_filter.html',1,'']]], - ['resonantfilter_3c_20lowpass_2c_20uint8_5ft_20_3e_402',['ResonantFilter< LOWPASS, uint8_t >',['../class_resonant_filter.html',1,'']]], - ['reverbtank_403',['ReverbTank',['../class_reverb_tank.html',1,'']]], - ['rollingaverage_404',['RollingAverage',['../group__sensortools.html#class_rolling_average',1,'']]], - ['rollingstat_405',['RollingStat',['../group__sensortools.html#class_rolling_stat',1,'']]] -]; diff --git a/extras/doc/html/search/classes_a.html b/extras/doc/html/search/classes_a.html deleted file mode 100644 index 6788af270..000000000 --- a/extras/doc/html/search/classes_a.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/classes_a.js b/extras/doc/html/search/classes_a.js deleted file mode 100644 index ddbf25f8d..000000000 --- a/extras/doc/html/search/classes_a.js +++ /dev/null @@ -1,11 +0,0 @@ -var searchData= -[ - ['sample_406',['Sample',['../class_sample.html',1,'']]], - ['samplehuffman_407',['SampleHuffman',['../class_sample_huffman.html',1,'']]], - ['smooth_408',['Smooth',['../class_smooth.html',1,'']]], - ['smooth_3c_20sfix_3c_20ni_2c_20nf_20_3e_20_3e_409',['Smooth< SFix< NI, NF > >',['../class_smooth_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html',1,'']]], - ['smooth_3c_20ufix_3c_20ni_2c_20nf_20_3e_20_3e_410',['Smooth< UFix< NI, NF > >',['../class_smooth_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html',1,'']]], - ['stack_411',['Stack',['../class_stack.html',1,'']]], - ['statevariable_412',['StateVariable',['../class_state_variable.html',1,'']]], - ['stereooutput_413',['StereoOutput',['../struct_stereo_output.html',1,'']]] -]; diff --git a/extras/doc/html/search/classes_b.html b/extras/doc/html/search/classes_b.html deleted file mode 100644 index 3fcb49858..000000000 --- a/extras/doc/html/search/classes_b.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/classes_b.js b/extras/doc/html/search/classes_b.js deleted file mode 100644 index 9bb574283..000000000 --- a/extras/doc/html/search/classes_b.js +++ /dev/null @@ -1,9 +0,0 @@ -var searchData= -[ - ['wavefolder_414',['WaveFolder',['../class_wave_folder.html',1,'']]], - ['wavepacket_415',['WavePacket',['../class_wave_packet.html',1,'']]], - ['wavepacketsample_416',['WavePacketSample',['../class_wave_packet_sample.html',1,'']]], - ['waveshaper_417',['WaveShaper',['../class_wave_shaper.html',1,'']]], - ['waveshaper_3c_20char_20_3e_418',['WaveShaper< char >',['../class_wave_shaper_3_01char_01_4.html',1,'']]], - ['waveshaper_3c_20int_20_3e_419',['WaveShaper< int >',['../class_wave_shaper_3_01int_01_4.html',1,'']]] -]; diff --git a/extras/doc/html/search/close.png b/extras/doc/html/search/close.png deleted file mode 100644 index 9342d3dfe..000000000 Binary files a/extras/doc/html/search/close.png and /dev/null differ diff --git a/extras/doc/html/search/close.svg b/extras/doc/html/search/close.svg deleted file mode 100644 index a933eea1a..000000000 --- a/extras/doc/html/search/close.svg +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - diff --git a/extras/doc/html/search/files_0.html b/extras/doc/html/search/files_0.html deleted file mode 100644 index 9498842a6..000000000 --- a/extras/doc/html/search/files_0.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/files_0.js b/extras/doc/html/search/files_0.js deleted file mode 100644 index 314ca5c26..000000000 --- a/extras/doc/html/search/files_0.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['char2mozzi_2epy_422',['char2mozzi.py',['../char2mozzi_8py.html',1,'']]] -]; diff --git a/extras/doc/html/search/files_1.html b/extras/doc/html/search/files_1.html deleted file mode 100644 index 7050ef48a..000000000 --- a/extras/doc/html/search/files_1.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/files_1.js b/extras/doc/html/search/files_1.js deleted file mode 100644 index 07cdea3f8..000000000 --- a/extras/doc/html/search/files_1.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['mozzi_2eh_423',['Mozzi.h',['../_mozzi_8h.html',1,'']]], - ['mozzi_5fconfig_5fdocumentation_2eh_424',['mozzi_config_documentation.h',['../mozzi__config__documentation_8h.html',1,'']]], - ['mozziconfigvalues_2eh_425',['MozziConfigValues.h',['../_mozzi_config_values_8h.html',1,'']]], - ['mozziguts_5fimpl_5ftemplate_2ehpp_426',['MozziGuts_impl_template.hpp',['../_mozzi_guts__impl__template_8hpp.html',1,'']]], - ['mozziheadersonly_2eh_427',['MozziHeadersOnly.h',['../_mozzi_headers_only_8h.html',1,'']]] -]; diff --git a/extras/doc/html/search/files_2.html b/extras/doc/html/search/files_2.html deleted file mode 100644 index 497cdf5c7..000000000 --- a/extras/doc/html/search/files_2.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/files_2.js b/extras/doc/html/search/files_2.js deleted file mode 100644 index 093eaab15..000000000 --- a/extras/doc/html/search/files_2.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['twi_5fnonblock_5fheadersonly_2eh_423',['twi_nonblock_HeadersOnly.h',['../twi__nonblock___headers_only_8h.html',1,'']]] -]; diff --git a/extras/doc/html/search/functions_0.html b/extras/doc/html/search/functions_0.html deleted file mode 100644 index eb4c5014c..000000000 --- a/extras/doc/html/search/functions_0.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/functions_0.js b/extras/doc/html/search/functions_0.js deleted file mode 100644 index 608429857..000000000 --- a/extras/doc/html/search/functions_0.js +++ /dev/null @@ -1,13 +0,0 @@ -var searchData= -[ - ['adcdisconnectalldigitalins_428',['adcDisconnectAllDigitalIns',['../group__analog.html#ga5042e7c576dd0307be38eb70efdb69fe',1,'mozzi_analog.h']]], - ['adcreconnectalldigitalins_429',['adcReconnectAllDigitalIns',['../group__analog.html#gabad497d1f8c8026e81849be0b65bf38f',1,'mozzi_analog.h']]], - ['adsr_430',['ADSR',['../class_a_d_s_r.html#a4bd943baa8c5b68d3ee7b3d385e77221',1,'ADSR']]], - ['atindex_431',['atIndex',['../class_meta_oscil.html#ab74ebc6bde8fa15288df547c41e9206b',1,'MetaOscil::atIndex()'],['../class_oscil.html#a97f2c0f28751641417202fee2a0776d3',1,'Oscil::atIndex()'],['../class_sample.html#a86948f48dcdc0cb19f6e256ece70149d',1,'Sample::atIndex()']]], - ['audiodelay_432',['AudioDelay',['../class_audio_delay.html#a688f69088f96bf3976a8555d3026365f',1,'AudioDelay::AudioDelay()'],['../class_audio_delay.html#a79be253fcb5709624c8fb708e54f069f',1,'AudioDelay::AudioDelay(unsigned int delaytime_cells)']]], - ['audiodelayfeedback_433',['AudioDelayFeedback',['../class_audio_delay_feedback.html#a61f3c90f752d8b15c0f7a19e03bc4f03',1,'AudioDelayFeedback::AudioDelayFeedback(uint16_t delaytime_cells, int8_t feedback_level)'],['../class_audio_delay_feedback.html#a0412c5d62f72a881d95504d9d0018245',1,'AudioDelayFeedback::AudioDelayFeedback(uint16_t delaytime_cells)'],['../class_audio_delay_feedback.html#adbc1ecd0dffe273cac87b8fc888e28f0',1,'AudioDelayFeedback::AudioDelayFeedback()']]], - ['audiohook_434',['audioHook',['../group__core.html#ga2fca37b988ab369e2f3c3108c683e59d',1,'audioHook(): MozziGuts.hpp'],['../group__core.html#ga2fca37b988ab369e2f3c3108c683e59d',1,'audioHook(): MozziGuts.hpp']]], - ['audioticks_435',['audioTicks',['../group__core.html#ga55fa9d48f327b646c2f71cef7da7b8f0',1,'audioTicks(): MozziGuts.hpp'],['../group__core.html#ga55fa9d48f327b646c2f71cef7da7b8f0',1,'audioTicks(): MozziGuts.hpp']]], - ['automap_436',['AutoMap',['../group__sensortools.html#aec125f071bd83180ff0d0a71446725f3',1,'AutoMap']]], - ['autorange_437',['AutoRange',['../group__sensortools.html#a2f0638f4d8e2937080b67fc0614c8d6d',1,'AutoRange']]] -]; diff --git a/extras/doc/html/search/functions_1.html b/extras/doc/html/search/functions_1.html deleted file mode 100644 index ef4088b89..000000000 --- a/extras/doc/html/search/functions_1.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/functions_1.js b/extras/doc/html/search/functions_1.js deleted file mode 100644 index 6359a4c2d..000000000 --- a/extras/doc/html/search/functions_1.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['band_438',['band',['../class_multi_resonant_filter.html#a93c35829c63addc2f54f42ca3b30b37e',1,'MultiResonantFilter']]] -]; diff --git a/extras/doc/html/search/functions_10.html b/extras/doc/html/search/functions_10.html deleted file mode 100644 index 1bdc12572..000000000 --- a/extras/doc/html/search/functions_10.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/functions_10.js b/extras/doc/html/search/functions_10.js deleted file mode 100644 index 297c73516..000000000 --- a/extras/doc/html/search/functions_10.js +++ /dev/null @@ -1,65 +0,0 @@ -var searchData= -[ - ['sample_576',['Sample',['../class_sample.html#ac9a043d47ab143f7a4d9370cf9f2f02d',1,'Sample::Sample()'],['../class_sample.html#a0a22d5d06e5665853432fe1949e9d514',1,'Sample::Sample(const int8_t *TABLE_NAME)']]], - ['samplehuffman_577',['SampleHuffman',['../class_sample_huffman.html#a8587f641949024cd5aad7bfc1715adff',1,'SampleHuffman']]], - ['set_578',['set',['../class_line_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#a7b5f07b204b41abd4750c4ddb5b64872',1,'Line< UFix< NI, NF > >::set()'],['../class_wave_packet.html#ac693b3d676b583584a8cfc6b9cc0f37f',1,'WavePacket::set()'],['../class_phasor.html#ad9e0eceb175bca6b2b79130fd9c4f4ef',1,'Phasor::set()'],['../class_line_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#af1f74c0f6b411ff356b4594ee22e3379',1,'Line< SFix< NI, NF > >::set(internal_type startvalue, internal_type targetvalue, T num_steps)'],['../class_line_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#a659f6a1cfbb9f49c16442dd7690baf53',1,'Line< SFix< NI, NF > >::set(internal_type targetvalue, T num_steps)'],['../class_line_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#ab8668f3e9062c89262b48c12ed03e686',1,'Line< SFix< NI, NF > >::set(internal_type targetvalue, UFix< _NI, 0 > num_steps)'],['../class_line_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#a654ccdab0a5d269f5959ae08f9c6ede8',1,'Line< SFix< NI, NF > >::set(internal_type value)'],['../class_line_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#aa541b9351288682cfc84b771c9c8c4d4',1,'Line< UFix< NI, NF > >::set(internal_type startvalue, internal_type targetvalue, T num_steps)'],['../class_line_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#a4509fd68271cdc459d59f80144ca4fe0',1,'Line< UFix< NI, NF > >::set(internal_type targetvalue, T num_steps)'],['../class_line_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#a8fc856bd02be694d54a1f0d459e9f578',1,'Line< UFix< NI, NF > >::set(internal_type value)'],['../class_line_3_01unsigned_01long_01_4.html#a199dd187d87c9941515b21aea0c52a0f',1,'Line< unsigned long >::set(unsigned long startvalue, unsigned long targetvalue, unsigned long num_steps)'],['../class_line_3_01unsigned_01long_01_4.html#abb89855ea745a453262cd2aeb31e2ec7',1,'Line< unsigned long >::set(unsigned long targetvalue, unsigned long num_steps)'],['../class_event_delay.html#a937c86f3b05ccb6138ff7927713820da',1,'EventDelay::set()'],['../class_audio_delay.html#a7bd0a07f7803afda1a71b50e3f66827b',1,'AudioDelay::set()'],['../class_ead.html#af203c82721ab832c653a23ff219c040e',1,'Ead::set()'],['../class_line_3_01unsigned_01long_01_4.html#abb246fabacbefbd6d88ddce719f74b0e',1,'Line< unsigned long >::set()'],['../class_line.html#a6bad32d527e0d931c99e9b72c2a75c80',1,'Line::set(T value)'],['../class_line.html#a7378d526cf07c42c0792868c749dee6e',1,'Line::set(T targetvalue, T num_steps)'],['../class_line.html#a24ad85c17562e97b6823a010a5ba04c6',1,'Line::set(T startvalue, T targetvalue, T num_steps)'],['../class_line_3_01unsigned_01char_01_4.html#a6129febcfd57d32a5c771c8f730b6b7a',1,'Line< unsigned char >::set(unsigned char value)'],['../class_line_3_01unsigned_01char_01_4.html#a2b90896c1357a45daca74498f17b4909',1,'Line< unsigned char >::set(unsigned char targetvalue, unsigned char num_steps)'],['../class_line_3_01unsigned_01char_01_4.html#ad14e98651035d75c89270c6f0d5e5c46',1,'Line< unsigned char >::set(unsigned char startvalue, unsigned char targetvalue, unsigned char num_steps)'],['../class_line_3_01unsigned_01int_01_4.html#a157b1887464b81ed8388a8f73173338d',1,'Line< unsigned int >::set(unsigned int value)'],['../class_line_3_01unsigned_01int_01_4.html#a002bf2ae8e48467fd2d45072b8328e65',1,'Line< unsigned int >::set(unsigned int targetvalue, unsigned int num_steps)'],['../class_line_3_01unsigned_01int_01_4.html#a1677277eb5f3eb56e47a6e7dde0c1558',1,'Line< unsigned int >::set(unsigned int startvalue, unsigned int targetvalue, unsigned int num_steps)']]], - ['setadlevels_579',['setADLevels',['../class_a_d_s_r.html#a48aa75585d0ff96c87b4b232ee3df753',1,'ADSR']]], - ['setallupdatesteps_580',['setAllUpdateSteps',['../class_a_d_s_r.html#a9cd0d4d6fefdd58d81acb2a76b9fc4c0',1,'ADSR']]], - ['setattack_581',['setAttack',['../class_ead.html#a6bae0e92e6709c3fcd31fccd41212bac',1,'Ead']]], - ['setattacklevel_582',['setAttackLevel',['../class_a_d_s_r.html#a8a54760cfc0fee1b02983aa4c0331aa1',1,'ADSR']]], - ['setattacktime_583',['setAttackTime',['../class_a_d_s_r.html#aaf4131de0c02e4f154a97e3e9d95c199',1,'ADSR']]], - ['setattackupdatesteps_584',['setAttackUpdateSteps',['../class_a_d_s_r.html#a01cf549d19416288d604a02d95c31f21',1,'ADSR']]], - ['setbandwidth_585',['setBandwidth',['../class_wave_packet.html#abce5b3ca4c559473c199744753fb75aa',1,'WavePacket']]], - ['setbpm_586',['setBPM',['../class_metronome.html#aab384673719ebd552dd72d474ed58556',1,'Metronome']]], - ['setcentrefreq_587',['setCentreFreq',['../class_state_variable.html#a47e7ddad76db7009e370fa91ea5d4d3d',1,'StateVariable::setCentreFreq()'],['../class_wave_packet.html#adbbbf8b6b9eaae18ef381ff04be3eb5b',1,'WavePacket::setCentreFreq()']]], - ['setcutofffreq_588',['setCutoffFreq',['../class_meta_oscil.html#aceb617c02ea3a693a8ec48b32247a355',1,'MetaOscil::setCutoffFreq()'],['../class_resonant_filter.html#a906d49cb7d195dd0ac2185e3064fb25b',1,'ResonantFilter::setCutoffFreq(su cutoff)']]], - ['setcutofffreqandresonance_589',['setCutoffFreqAndResonance',['../class_resonant_filter.html#ab6f35bf0b8dd435b501931cef941e4a6',1,'ResonantFilter']]], - ['setcutofffreqs_590',['setCutoffFreqs',['../class_meta_oscil.html#a7567da1ff25347c8d44fad66efe28af1',1,'MetaOscil']]], - ['setdecay_591',['setDecay',['../class_ead.html#aa99e6dc2d5448b4de0764c6208e5c2fc',1,'Ead']]], - ['setdecaylevel_592',['setDecayLevel',['../class_a_d_s_r.html#a0ad21cb6ed8fa44bb24134f2b5b4f296',1,'ADSR']]], - ['setdecaytime_593',['setDecayTime',['../class_a_d_s_r.html#a1a0cb7fbf47f65dc81df7b5eb21ae4ec',1,'ADSR']]], - ['setdecayupdatesteps_594',['setDecayUpdateSteps',['../class_a_d_s_r.html#ae9a0d338581d3aaf6c4a89c4cfe19f5b',1,'ADSR']]], - ['setdelaytimecells_595',['setDelayTimeCells',['../class_audio_delay_feedback.html#ab6fb7260a540416018ebfac7aeac32f1',1,'AudioDelayFeedback::setDelayTimeCells(float delaytime_cells)'],['../class_audio_delay_feedback.html#a2c5c805eb4d62e4650b08400409863a9',1,'AudioDelayFeedback::setDelayTimeCells(Q16n16 delaytime_cells)'],['../class_audio_delay_feedback.html#a3f49d5e601799487237266621245c7a4',1,'AudioDelayFeedback::setDelayTimeCells(uint16_t delaytime_cells)']]], - ['setearlyreflections_596',['setEarlyReflections',['../class_reverb_tank.html#a6d27d8a02ec9551a5338bb1ba4bf9af2',1,'ReverbTank']]], - ['setend_597',['setEnd',['../class_sample.html#a9713e2d38b94e629c06916a7543ef48f',1,'Sample']]], - ['setfeebacklevel_598',['setFeebackLevel',['../class_reverb_tank.html#a91eeb601e42df576737f0d44dc73c653',1,'ReverbTank']]], - ['setfeedbacklevel_599',['setFeedbackLevel',['../class_audio_delay_feedback.html#a1408da9125a0d6c38ce89b11d7d93113',1,'AudioDelayFeedback']]], - ['setfreq_600',['setFreq',['../class_meta_oscil.html#a1960b7c4012424058876085c76d1dfd9',1,'MetaOscil::setFreq()'],['../class_sample.html#a4d5840157e98024537ae10cd27ff9f9e',1,'Sample::setFreq(float frequency)'],['../class_sample.html#aa0c37457f99def5c7036c6b6d9ee43fc',1,'Sample::setFreq(int frequency)'],['../class_phasor.html#a81f1976ebb4a91f66f26674efca52072',1,'Phasor::setFreq(float frequency)'],['../class_phasor.html#afc6106c648bddb5f2f084b8f34216b0f',1,'Phasor::setFreq(int frequency)'],['../class_oscil.html#a47bd8774216331e1c3ab62b8c9f92e8a',1,'Oscil::setFreq(SFix< NI, NF, RANGE > frequency)'],['../class_oscil.html#a5161b31eea29b634f530d37c8f552685',1,'Oscil::setFreq(UFix< 16, 16, RANGE > frequency)'],['../class_oscil.html#a7dbb7386be70efdda01bda5c280b15ee',1,'Oscil::setFreq(UFix< 24, 8, RANGE > frequency)'],['../class_oscil.html#a078e9b56769b96a2e9a6a645b3c49596',1,'Oscil::setFreq(UFix< NI, NF, RANGE > frequency)'],['../class_oscil.html#aa342e74f8e73edda0b0f042770e3fba4',1,'Oscil::setFreq(float frequency)'],['../class_oscil.html#a23121f22ea447918088a79c7f9748b3d',1,'Oscil::setFreq(int frequency)'],['../class_meta_oscil.html#aafb4c01a8ce6b4d880fd1ecf59bd3bfd',1,'MetaOscil::setFreq(UFix< NI, NF, RANGE > frequency)'],['../class_meta_oscil.html#a3a1bf4af017c5c39d736f78d3c3e1bee',1,'MetaOscil::setFreq(float frequency)']]], - ['setfreq_5fq16n16_601',['setFreq_Q16n16',['../class_meta_oscil.html#a98794f84684b257079e79bd9f92d0892',1,'MetaOscil::setFreq_Q16n16()'],['../class_oscil.html#a73b52741178ed490463d9ff471cebef3',1,'Oscil::setFreq_Q16n16()']]], - ['setfreq_5fq24n8_602',['setFreq_Q24n8',['../class_sample.html#a903c2d634b10ac531c3c9f6a35fcb046',1,'Sample::setFreq_Q24n8()'],['../class_oscil.html#abc8a4ee236f7fd45dda9dece7292b6e7',1,'Oscil::setFreq_Q24n8()'],['../class_meta_oscil.html#adcadf4935c390cd8d2eea9623365bf70',1,'MetaOscil::setFreq_Q24n8()']]], - ['setfundamental_603',['setFundamental',['../class_wave_packet.html#af87c37ffd274eee91aa93c0f7d560be2',1,'WavePacket']]], - ['sethighlimit_604',['setHighLimit',['../class_wave_folder.html#a2103be1ef91d0a3e4d896eabdad83fc7',1,'WaveFolder']]], - ['setlevels_605',['setLevels',['../class_a_d_s_r.html#a4ef5dfa5c71809737c3e614b09775203',1,'ADSR']]], - ['setlimits_606',['setLimits',['../class_wave_folder.html#af06cfae975014be2651966519df0f0cd',1,'WaveFolder']]], - ['setloopdelays_607',['setLoopDelays',['../class_reverb_tank.html#a0b348b630007a5cbda8b314d0c8dd604',1,'ReverbTank']]], - ['setloopingoff_608',['setLoopingOff',['../class_sample.html#accfdc762cd47425824179bff4cd2a78f',1,'Sample::setLoopingOff()'],['../class_sample_huffman.html#a040bfc55c19bbaa6cc42331be3646c8a',1,'SampleHuffman::setLoopingOff()']]], - ['setloopingon_609',['setLoopingOn',['../class_sample_huffman.html#a01f9bfb513da0374fe78c12300b69760',1,'SampleHuffman::setLoopingOn()'],['../class_sample.html#a40e76011d841b84d2d54bf2cec6c4d5f',1,'Sample::setLoopingOn()']]], - ['setlowlimit_610',['setLowLimit',['../class_wave_folder.html#ae8522fd82e949e8115193905bcf5b01c',1,'WaveFolder']]], - ['setoscils_611',['setOscils',['../class_meta_oscil.html#a3390f39fbaa06276398624bd14a639ad',1,'MetaOscil']]], - ['setpdenv_612',['setPDEnv',['../class_p_d_resonant.html#a7c921c18d37b0625beab9e4f06c69ca4',1,'PDResonant']]], - ['setphase_613',['setPhase',['../class_meta_oscil.html#a889ea6de8595838ef735f8237a0abc51',1,'MetaOscil::setPhase()'],['../class_oscil.html#ab7b740eec56740426a47508562ed4dd5',1,'Oscil::setPhase()']]], - ['setphasefractional_614',['setPhaseFractional',['../class_meta_oscil.html#ab3c61548e9b48714d1e0900532e99408',1,'MetaOscil::setPhaseFractional()'],['../class_oscil.html#a9befaff8a21a4915b647636e821435f9',1,'Oscil::setPhaseFractional()']]], - ['setphaseinc_615',['setPhaseInc',['../class_phasor.html#adf134d4e4ce960e4c773830fd8467e4b',1,'Phasor::setPhaseInc()'],['../class_sample.html#aaff03b2a14f8f0f79c13840948151a1d',1,'Sample::setPhaseInc()'],['../class_oscil.html#aced127a46f0e45c259f1a788b6c31074',1,'Oscil::setPhaseInc()'],['../class_meta_oscil.html#a3bed37fc800a93ff95af445d25eaf57d',1,'MetaOscil::setPhaseInc()']]], - ['setpin13high_616',['setPin13High',['../group__util.html#gaea7ee11e335eb2d6b891b886c5f3f942',1,'mozzi_utils.h']]], - ['setpin13low_617',['setPin13Low',['../group__util.html#ga4c87d0211135fd33a8697350235b50b4',1,'mozzi_utils.h']]], - ['setpin13out_618',['setPin13Out',['../group__util.html#gad1725ef17b234c4df9cc64a9bf561435',1,'mozzi_utils.h']]], - ['setreleaselevel_619',['setReleaseLevel',['../class_a_d_s_r.html#a8f67baf632be737cbae5a1d62edc4e23',1,'ADSR']]], - ['setreleasetime_620',['setReleaseTime',['../class_a_d_s_r.html#aabd0af40f4676bde840f6c83bbe302b2',1,'ADSR']]], - ['setreleaseupdatesteps_621',['setReleaseUpdateSteps',['../class_a_d_s_r.html#a0de6df796f56e97a4c6c44a9692251eb',1,'ADSR']]], - ['setresonance_622',['setResonance',['../class_resonant_filter.html#a68ff331edeba47b0c8e561c7ad7a8223',1,'ResonantFilter::setResonance()'],['../class_state_variable.html#a992e23a80b611b72e3e764c14d5ee188',1,'StateVariable::setResonance()']]], - ['setsmoothness_623',['setSmoothness',['../class_smooth.html#aac44bbf7a9bc6b9bae80eecc1be6e188',1,'Smooth::setSmoothness()'],['../class_smooth_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#aa4fb9cdb86f67bfc3e310920418329b7',1,'Smooth< UFix< NI, NF > >::setSmoothness(float smoothness)'],['../class_smooth_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#a24a2eb8633ce6a2a0da4e527c0186784',1,'Smooth< UFix< NI, NF > >::setSmoothness(UFix< 0, _NF > smoothness)'],['../class_smooth_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#a1c440ce813507ccb32bd9a2f19aeb643',1,'Smooth< SFix< NI, NF > >::setSmoothness(float smoothness)'],['../class_smooth_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#a6fb0f2216e29f946dfb8befafaf9d5fc',1,'Smooth< SFix< NI, NF > >::setSmoothness(UFix< 0, _NF > smoothness)']]], - ['setstart_624',['setStart',['../class_sample.html#a01836f7624ea574e966e775377d5bf11',1,'Sample']]], - ['setsustainlevel_625',['setSustainLevel',['../class_a_d_s_r.html#aec7ac1290688214a934c3b9f78ca43e9',1,'ADSR']]], - ['setsustaintime_626',['setSustainTime',['../class_a_d_s_r.html#ad0c7bd5b53f4b5c2d4ff3b5116d5c40f',1,'ADSR']]], - ['setsustainupdatesteps_627',['setSustainUpdateSteps',['../class_a_d_s_r.html#aec9c57671f1dfae7aa529dcc51b98e40',1,'ADSR']]], - ['settable_628',['setTable',['../class_wave_packet_sample.html#af50b8ef715a86bcdf417961b585c170d',1,'WavePacketSample::setTable()'],['../class_meta_oscil.html#afa39a5e42b7f82619ca1b898bdafced5',1,'MetaOscil::setTable()'],['../class_oscil.html#a0b22d79fb2d6c7fb50b19c00f249ed84',1,'Oscil::setTable()'],['../class_sample.html#ade1401f231c920576b1eea2776ac591f',1,'Sample::setTable()']]], - ['settime_629',['setTime',['../class_portamento.html#af19c3b3c189e111079f54211ff5a4ebe',1,'Portamento']]], - ['settimes_630',['setTimes',['../class_a_d_s_r.html#a5e16aa54a82fc6f907a7560e035adf2b',1,'ADSR']]], - ['setupfastanalogread_631',['setupFastAnalogRead',['../group__analog.html#gae909f8857d71ed79f277ee024de52574',1,'mozzi_analog.h']]], - ['smooth_632',['Smooth',['../class_smooth.html#ac6626aae94eb7a22024e2054c1bbbb26',1,'Smooth::Smooth(float smoothness)'],['../class_smooth.html#ae57139ceccee7527013ec2297dbc79ad',1,'Smooth::Smooth()'],['../class_smooth_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#a2ea0479e484a72f477f8dc56726cf933',1,'Smooth< UFix< NI, NF > >::Smooth(T smoothness)'],['../class_smooth_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#abc93c181f47511887d1275757b3c2c70',1,'Smooth< UFix< NI, NF > >::Smooth()'],['../class_smooth_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#aa28affdd0ec1fb3d2b8519dce1bd62b1',1,'Smooth< SFix< NI, NF > >::Smooth(T smoothness)'],['../class_smooth_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#aa34d3186fcabc7a245c4b47e1f1dc135',1,'Smooth< SFix< NI, NF > >::Smooth()']]], - ['stack_633',['Stack',['../class_stack.html#ab034b819e2382f80d952cf8527dc6e6c',1,'Stack']]], - ['start_634',['start',['../class_sample_huffman.html#a15ead859261d3d916d700b75f4626f15',1,'SampleHuffman::start()'],['../class_metronome.html#ad5670c748042846b02cb33c613c50422',1,'Metronome::start()'],['../class_sample.html#abb7084b95a6141843ede8025cdd726ac',1,'Sample::start(unsigned int startpos)'],['../class_sample.html#a49ab98acdfb4f81a8860ad21876bdc18',1,'Sample::start()'],['../class_portamento.html#af70701abfdd9f3d788f3b313e38017d0',1,'Portamento::start(Q16n16 note)'],['../class_portamento.html#aae67a74be47cb2e8a6ffbb90786221af',1,'Portamento::start(uint8_t note)'],['../class_metronome.html#ab85d2f5bdc5cb00d5056b0c2c6eed987',1,'Metronome::start()'],['../class_event_delay.html#a0943cb52a1ee36fda1156f8dd762a105',1,'EventDelay::start(unsigned int delay_milliseconds)'],['../class_event_delay.html#a97a07c9371040d6388b8369352b08d83',1,'EventDelay::start()'],['../class_ead.html#a146b205e70f4b2293e643ea063f2b38f',1,'Ead::start(unsigned int attack_ms, unsigned int decay_ms)'],['../class_ead.html#ac385679b58e2f9755029b7da7405b233',1,'Ead::start()']]], - ['statevariable_635',['StateVariable',['../class_state_variable.html#a9950b71a16f63654552d3e15774d6638',1,'StateVariable']]], - ['stereooutput_636',['StereoOutput',['../struct_stereo_output.html#a21de1439b838982ab5cb6663bef94498',1,'StereoOutput::StereoOutput(AudioOutputStorage_t l, AudioOutputStorage_t r)'],['../struct_stereo_output.html#a78371f79ab53e2b7c6ec5e0e04fc5062',1,'StereoOutput::StereoOutput()']]], - ['stopmozzi_637',['stopMozzi',['../group__core.html#ga8d9307490ec05ad28539d513c73a5c20',1,'stopMozzi(): MozziGuts.hpp'],['../group__core.html#ga8d9307490ec05ad28539d513c73a5c20',1,'stopMozzi(): MozziGuts.hpp']]] -]; diff --git a/extras/doc/html/search/functions_11.html b/extras/doc/html/search/functions_11.html deleted file mode 100644 index 188076ef2..000000000 --- a/extras/doc/html/search/functions_11.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/functions_11.js b/extras/doc/html/search/functions_11.js deleted file mode 100644 index 1622fe0db..000000000 --- a/extras/doc/html/search/functions_11.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['trailingzerosconst_638',['trailingZerosConst',['../group__util.html#ga886894a381e3569d040262831ca9292a',1,'mozzi_utils.h']]] -]; diff --git a/extras/doc/html/search/functions_12.html b/extras/doc/html/search/functions_12.html deleted file mode 100644 index eb29d8f9a..000000000 --- a/extras/doc/html/search/functions_12.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/functions_12.js b/extras/doc/html/search/functions_12.js deleted file mode 100644 index 6cac1a374..000000000 --- a/extras/doc/html/search/functions_12.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['uint8_5ftdiv_639',['uint8_tDiv',['../group__fixmath.html#ga1717d922e241ef368b81def7fd6c2446',1,'mozzi_fixmath.cpp']]], - ['uint8_5ftmod_640',['uint8_tMod',['../group__fixmath.html#ga0cb78c87959d2f8cef9e2ec1bd000414',1,'uint8_tMod(uint8_t n, uint8_t d): mozzi_fixmath.cpp'],['../group__fixmath.html#ga0cb78c87959d2f8cef9e2ec1bd000414',1,'uint8_tMod(uint8_t n, uint8_t d): mozzi_fixmath.cpp']]], - ['update_641',['update',['../class_a_d_s_r.html#a1bef7104c263fc1f0df28809a788ee23',1,'ADSR::update()'],['../class_p_d_resonant.html#ae604c6401c636ab32757913f21c6dbe6',1,'PDResonant::update()'],['../group__sensortools.html#a85750e78ac282caec24408dce6e78201',1,'RollingStat::update(T x)'],['../group__sensortools.html#a6f7b384ab338da5ba10200fbce7f2eb0',1,'RollingStat::update(int8_t x)']]], - ['updateaudio_642',['updateAudio',['../group__core.html#ga936b78c8ab7a4d7f7075b41e32780d3e',1,'updateAudio(): Skeleton_Multi_Unit2.cpp'],['../group__core.html#ga936b78c8ab7a4d7f7075b41e32780d3e',1,'updateAudio(): Skeleton_Multi_Unit2.cpp']]], - ['updatecontrol_643',['updateControl',['../group__core.html#ga59d187b915b2e366c88489e52801951a',1,'MozziGuts.h']]] -]; diff --git a/extras/doc/html/search/functions_13.html b/extras/doc/html/search/functions_13.html deleted file mode 100644 index 3da2ea69c..000000000 --- a/extras/doc/html/search/functions_13.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/functions_13.js b/extras/doc/html/search/functions_13.js deleted file mode 100644 index 901762a77..000000000 --- a/extras/doc/html/search/functions_13.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['wavefolder_644',['WaveFolder',['../class_wave_folder.html#a3be0f0b5ee86082e44b0b88cf5b9ac2f',1,'WaveFolder']]], - ['wavepacket_645',['WavePacket',['../class_wave_packet.html#a09afa3b26d61c97e24ccbae9cba2fd57',1,'WavePacket']]], - ['waveshaper_646',['WaveShaper',['../class_wave_shaper_3_01char_01_4.html#a6364609248c42174f9f7e4974585e301',1,'WaveShaper< char >::WaveShaper()'],['../class_wave_shaper_3_01int_01_4.html#a9cc7f4f6a7493172cdc94411ac09275a',1,'WaveShaper< int >::WaveShaper()']]], - ['write_647',['write',['../class_audio_delay_feedback.html#a5197399a986922eee160a455069dc93e',1,'AudioDelayFeedback::write(su input)'],['../class_audio_delay_feedback.html#a93231df73010a40da2d4092b94a99f9d',1,'AudioDelayFeedback::write(su input, uint16_t offset)']]], - ['writefeedback_648',['writeFeedback',['../class_audio_delay_feedback.html#ae83d67ec86483bae489a6a17e8d0e5e3',1,'AudioDelayFeedback']]] -]; diff --git a/extras/doc/html/search/functions_14.html b/extras/doc/html/search/functions_14.html deleted file mode 100644 index 29237b44c..000000000 --- a/extras/doc/html/search/functions_14.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/functions_14.js b/extras/doc/html/search/functions_14.js deleted file mode 100644 index 304b8d6ca..000000000 --- a/extras/doc/html/search/functions_14.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['xorshift96_649',['xorshift96',['../group__random.html#ga68ed69ece800f0c1e5819c05aed8d398',1,'mozzi_rand.h']]], - ['xorshiftseed_650',['xorshiftSeed',['../group__random.html#ga0a39ef54631e47a5bf6493bba1f6133c',1,'mozzi_rand.h']]] -]; diff --git a/extras/doc/html/search/functions_2.html b/extras/doc/html/search/functions_2.html deleted file mode 100644 index ca5aa10e6..000000000 --- a/extras/doc/html/search/functions_2.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/functions_2.js b/extras/doc/html/search/functions_2.js deleted file mode 100644 index c9b237ff7..000000000 --- a/extras/doc/html/search/functions_2.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['cappoll_439',['CapPoll',['../class_cap_poll.html#a4f691e78391a306d9ee89cdb1026096f',1,'CapPoll']]], - ['circularbuffer_440',['CircularBuffer',['../class_circular_buffer.html#a6789c0d6d73594fdd412a39445b5cd67',1,'CircularBuffer']]], - ['clip_441',['clip',['../struct_mono_output.html#a0e641cbab9732214c696cd1071e45de5',1,'MonoOutput::clip()'],['../struct_stereo_output.html#ac949f14e2d88f3c4e11986675addb228',1,'StereoOutput::clip()']]] -]; diff --git a/extras/doc/html/search/functions_3.html b/extras/doc/html/search/functions_3.html deleted file mode 100644 index d79f55b8e..000000000 --- a/extras/doc/html/search/functions_3.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/functions_3.js b/extras/doc/html/search/functions_3.js deleted file mode 100644 index 18118b755..000000000 --- a/extras/doc/html/search/functions_3.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['dcfilter_442',['DCfilter',['../class_d_cfilter.html#ab55e871fc9d11dfb9231e44627181c2c',1,'DCfilter']]], - ['disconnectdigitalin_443',['disconnectDigitalIn',['../group__analog.html#ga532fe99fe78e34d4e6ae0ae2c7528353',1,'mozzi_analog.h']]] -]; diff --git a/extras/doc/html/search/functions_4.html b/extras/doc/html/search/functions_4.html deleted file mode 100644 index 1657cad0d..000000000 --- a/extras/doc/html/search/functions_4.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/functions_4.js b/extras/doc/html/search/functions_4.js deleted file mode 100644 index 1bb22aa2a..000000000 --- a/extras/doc/html/search/functions_4.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['ead_444',['Ead',['../class_ead.html#a4862282805c2ac3255a34a99a31564d5',1,'Ead']]], - ['eventdelay_445',['EventDelay',['../class_event_delay.html#acd7b63341732ac4c23bce04d81316017',1,'EventDelay']]] -]; diff --git a/extras/doc/html/search/functions_5.html b/extras/doc/html/search/functions_5.html deleted file mode 100644 index 9301d6b9c..000000000 --- a/extras/doc/html/search/functions_5.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/functions_5.js b/extras/doc/html/search/functions_5.js deleted file mode 100644 index 8a98d584d..000000000 --- a/extras/doc/html/search/functions_5.js +++ /dev/null @@ -1,21 +0,0 @@ -var searchData= -[ - ['flash_5for_5fram_5fread_446',['FLASH_OR_RAM_READ',['../group__core.html#ga14d8349004d9544dbd01b907c60c08aa',1,'mozzi_pgmspace.h']]], - ['float_5fto_5fq0n16_447',['float_to_Q0n16',['../group__fixmath.html#ga4d20591828f0189963f1190f7197ba68',1,'mozzi_fixmath.h']]], - ['float_5fto_5fq0n7_448',['float_to_Q0n7',['../group__fixmath.html#ga1e0eab490ffe9a47fd78bcc449e3b995',1,'mozzi_fixmath.h']]], - ['float_5fto_5fq0n8_449',['float_to_Q0n8',['../group__fixmath.html#ga00e21c6b9d75ed26cd3bf1b9f4f9482e',1,'mozzi_fixmath.h']]], - ['float_5fto_5fq15n16_450',['float_to_Q15n16',['../group__fixmath.html#ga0e76f24ef8dfe0fa7510c4eea2608d5c',1,'mozzi_fixmath.h']]], - ['float_5fto_5fq16n16_451',['float_to_Q16n16',['../group__fixmath.html#ga041d3ba65c131b9aa01b9f34ec439b71',1,'mozzi_fixmath.h']]], - ['float_5fto_5fq1n14_452',['float_to_Q1n14',['../group__fixmath.html#ga1aab8b66d6d6f370cc66d82968884d18',1,'mozzi_fixmath.h']]], - ['float_5fto_5fq1n15_453',['float_to_Q1n15',['../group__fixmath.html#ga447e25c2d6c9bf14d8e324df0cc02753',1,'mozzi_fixmath.h']]], - ['float_5fto_5fq23n8_454',['float_to_Q23n8',['../group__fixmath.html#ga2ca980a6d71eb894b07534b30d9b7a06',1,'mozzi_fixmath.h']]], - ['float_5fto_5fq24n8_455',['float_to_Q24n8',['../group__fixmath.html#gaf91bc6123ecaff1441660d3abb20bf2e',1,'mozzi_fixmath.h']]], - ['float_5fto_5fq7n8_456',['float_to_Q7n8',['../group__fixmath.html#ga2a28dc262b3e79e0f67e4089cccaab45',1,'mozzi_fixmath.h']]], - ['float_5fto_5fq8n24_457',['float_to_Q8n24',['../group__fixmath.html#ga33ecb8a512f7d4eff5047d4ad65f5423',1,'mozzi_fixmath.h']]], - ['float_5fto_5fq8n8_458',['float_to_Q8n8',['../group__fixmath.html#ga36132b5f8f95223749b410ca235eef16',1,'mozzi_fixmath.h']]], - ['from16bit_459',['from16Bit',['../struct_stereo_output.html#a971c9597ec68cc46b831c9aaee020431',1,'StereoOutput::from16Bit()'],['../struct_mono_output.html#a67ed90efb5e8c00ae880f2d15b1ce0bd',1,'MonoOutput::from16Bit()']]], - ['from8bit_460',['from8Bit',['../struct_stereo_output.html#a3cdc76d522f2b290dc1b64a504373a4f',1,'StereoOutput::from8Bit()'],['../struct_mono_output.html#a7478d3111845040f553a965e7e54a539',1,'MonoOutput::from8Bit()']]], - ['fromalmostnbit_461',['fromAlmostNBit',['../struct_stereo_output.html#a132016fd745ea97426eaf29510f1be0f',1,'StereoOutput::fromAlmostNBit()'],['../struct_mono_output.html#aaaa9d580d583ff2bd961a98768fe9b15',1,'MonoOutput::fromAlmostNBit()']]], - ['fromnbit_462',['fromNBit',['../struct_stereo_output.html#aba322189d188eb977cc74a8c6ae909c1',1,'StereoOutput::fromNBit()'],['../struct_mono_output.html#a02f9adf531ab61ce96ed80a8319bdeea',1,'MonoOutput::fromNBit()']]], - ['fromsfix_463',['fromSFix',['../struct_stereo_output.html#aee0cca31f4aefc6c625d71be3a188192',1,'StereoOutput::fromSFix()'],['../struct_mono_output.html#ac6c0012c63037af58861b86d9f5dae22',1,'MonoOutput::fromSFix()']]] -]; diff --git a/extras/doc/html/search/functions_6.html b/extras/doc/html/search/functions_6.html deleted file mode 100644 index 9c4f5fc65..000000000 --- a/extras/doc/html/search/functions_6.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/functions_6.js b/extras/doc/html/search/functions_6.js deleted file mode 100644 index e15c177ea..000000000 --- a/extras/doc/html/search/functions_6.js +++ /dev/null @@ -1,12 +0,0 @@ -var searchData= -[ - ['getaudioinput_464',['getAudioInput',['../group__analog.html#gacd5e655ae9057843ade0d7647f909663',1,'MozziGuts.h']]], - ['getaudioinput16_465',['getAudioInput16',['../group__analog.html#gabb22bb94b66c6b2e583d745820cfac93',1,'MozziGuts.h']]], - ['getmax_466',['getMax',['../group__sensortools.html#a4d27e5fe43f9b376b537def88ac74119',1,'AutoRange']]], - ['getmean_467',['getMean',['../group__sensortools.html#a8521a53cde7c5d28ac9c375aaee3a972',1,'RollingStat']]], - ['getmin_468',['getMin',['../group__sensortools.html#acd1dae6e6ffb288efc1618e2453ad5ef',1,'AutoRange']]], - ['getphasefractional_469',['getPhaseFractional',['../class_meta_oscil.html#a20f0dcb30669eee21bfaa237f038c35d',1,'MetaOscil::getPhaseFractional()'],['../class_oscil.html#aefafa92dd2065243a164c1d824f292d7',1,'Oscil::getPhaseFractional()']]], - ['getrange_470',['getRange',['../group__sensortools.html#a75c842b27ad3917be6d29e3d35b485f3',1,'AutoRange']]], - ['getstandarddeviation_471',['getStandardDeviation',['../group__sensortools.html#a234ab1d244e4b392056fcaa1fc1e4fc4',1,'RollingStat']]], - ['getvariance_472',['getVariance',['../group__sensortools.html#a3e7e5f706e3b5ac2496f14b7b639775d',1,'RollingStat']]] -]; diff --git a/extras/doc/html/search/functions_7.html b/extras/doc/html/search/functions_7.html deleted file mode 100644 index 46b5c0f61..000000000 --- a/extras/doc/html/search/functions_7.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/functions_7.js b/extras/doc/html/search/functions_7.js deleted file mode 100644 index 97148d702..000000000 --- a/extras/doc/html/search/functions_7.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['high_473',['high',['../class_multi_resonant_filter.html#a1a624bcfa3ad251c2e4af27a6a453006',1,'MultiResonantFilter']]] -]; diff --git a/extras/doc/html/search/functions_8.html b/extras/doc/html/search/functions_8.html deleted file mode 100644 index 31a1d9503..000000000 --- a/extras/doc/html/search/functions_8.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/functions_8.js b/extras/doc/html/search/functions_8.js deleted file mode 100644 index 30008bd7d..000000000 --- a/extras/doc/html/search/functions_8.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['intmap_474',['IntMap',['../class_int_map.html#a36ab6e0137254909f44ae909dfe44a8a',1,'IntMap']]], - ['isplaying_475',['isPlaying',['../class_sample.html#ae4fa817151691ece9d2a91a0c0c03007',1,'Sample']]] -]; diff --git a/extras/doc/html/search/functions_9.html b/extras/doc/html/search/functions_9.html deleted file mode 100644 index 9a8e4290c..000000000 --- a/extras/doc/html/search/functions_9.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/functions_9.js b/extras/doc/html/search/functions_9.js deleted file mode 100644 index bc3dac320..000000000 --- a/extras/doc/html/search/functions_9.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['line_476',['Line',['../class_line.html#aa6a80df90da15782ca88889ef9c8dd51',1,'Line::Line()'],['../class_line_3_01unsigned_01char_01_4.html#a151189139ee6ed39bacec86ea2364124',1,'Line< unsigned char >::Line()'],['../class_line_3_01unsigned_01int_01_4.html#a32c77e9442a640df179ec4573e8fea6d',1,'Line< unsigned int >::Line()'],['../class_line_3_01unsigned_01long_01_4.html#a797b2ebfe450971b6e75c26b1e6c88da',1,'Line< unsigned long >::Line()'],['../class_line_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#af6ca947ea977211411a5bf5e36245ca7',1,'Line< UFix< NI, NF > >::Line()'],['../class_line_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#ada015ad9ad9b115b19c65efbb47d8bb4',1,'Line< SFix< NI, NF > >::Line()']]], - ['low_477',['low',['../class_multi_resonant_filter.html#ae5b4d06f4acad8a7a9e5291538ffd865',1,'MultiResonantFilter']]] -]; diff --git a/extras/doc/html/search/functions_a.html b/extras/doc/html/search/functions_a.html deleted file mode 100644 index 5ecc152ca..000000000 --- a/extras/doc/html/search/functions_a.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/functions_a.js b/extras/doc/html/search/functions_a.js deleted file mode 100644 index c11a42a08..000000000 --- a/extras/doc/html/search/functions_a.js +++ /dev/null @@ -1,11 +0,0 @@ -var searchData= -[ - ['metaoscil_478',['MetaOscil',['../class_meta_oscil.html#a019b888e600142805c4bc5c71a6ddf17',1,'MetaOscil']]], - ['metronome_479',['Metronome',['../class_metronome.html#a37e8b0aa5a9aa8fa0f33212360cc0928',1,'Metronome']]], - ['monooutput_480',['MonoOutput',['../struct_mono_output.html#a8a0bf7d9c4446b83f17ccd75433a828f',1,'MonoOutput::MonoOutput()'],['../struct_mono_output.html#a059352b524ac1356adececc104df6c74',1,'MonoOutput::MonoOutput(AudioOutputStorage_t l)']]], - ['mozzi_5fpgm_5fread_5fwrapper_481',['mozzi_pgm_read_wrapper',['../group__core.html#ga6eab513d77c44e4a6e3cc63e95a35d98',1,'mozzi_pgmspace.h']]], - ['mozzianalogread_482',['mozziAnalogRead',['../group__analog.html#gadedb573129313bad0c183af2486c5283',1,'mozzi_analog.h']]], - ['mozzianalogread16_483',['mozziAnalogRead16',['../group__analog.html#gaf869bc4f93cb0a90664a59b20fb4f556',1,'mozzi_analog.h']]], - ['mozzimicros_484',['mozziMicros',['../group__core.html#gaaa6a42d80c5297407a45ca8bf3c1c7fe',1,'mozziMicros(): MozziGuts.hpp'],['../group__core.html#gaaa6a42d80c5297407a45ca8bf3c1c7fe',1,'mozziMicros(): MozziGuts.hpp']]], - ['mtof_485',['mtof',['../group__midi.html#gafacb8849f96270644ea79184fde7db37',1,'mtof(float midival): mozzi_midi.h'],['../group__midi.html#ga07d1ca985403df63f75aa5d143477206',1,'mtof(uint8_t midi_note): mozzi_midi.h'],['../group__midi.html#ga08102facf170648591b2ca24a3c39712',1,'mtof(int midi_note): mozzi_midi.h'],['../group__midi.html#gabf0b21f8700b5ab84617028f1f9d59fa',1,'mtof(UFix< 16, 16, RANGE > midival): mozzi_midi.h'],['../group__midi.html#gaa16e3e2de7e214303dc1b3145dbc87e9',1,'mtof(UFix< NI, NF, RANGE > midival): mozzi_midi.h'],['../group__midi.html#ga94801ebe89ccc9a49675ec414887f6d4',1,'mtof(SFix< NI, NF, RANGE > midival): mozzi_midi.h'],['../group__midi.html#ga25d24d0b734826a924266bda90e61db2',1,'mtof(UFix< NI, 0, RANGE > midival): mozzi_midi.h'],['../group__midi.html#ga20e0e7d5b710097134f129b27902b188',1,'mtof(SFix< NI, 0, RANGE > midival): mozzi_midi.h']]] -]; diff --git a/extras/doc/html/search/functions_b.html b/extras/doc/html/search/functions_b.html deleted file mode 100644 index e301fedd7..000000000 --- a/extras/doc/html/search/functions_b.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/functions_b.js b/extras/doc/html/search/functions_b.js deleted file mode 100644 index 94ffbefdf..000000000 --- a/extras/doc/html/search/functions_b.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['next_486',['next',['../class_sample_huffman.html#a8ec7bbb21f5cf0e780611a7539e86695',1,'SampleHuffman::next()'],['../class_p_d_resonant.html#a80bd42c7ea92a64c3b8a42779a1e0d26',1,'PDResonant::next()'],['../class_phasor.html#a696198206182acaed5cf27fef226118d',1,'Phasor::next()'],['../class_portamento.html#ad39101f5275c433713df7699214638bc',1,'Portamento::next()'],['../class_r_cpoll.html#ab61697b3922ed289c8d501ccd11cbd6f',1,'RCpoll::next()'],['../class_resonant_filter.html#a0ebe21b235b04ab406a3f09363b73f43',1,'ResonantFilter::next()'],['../class_multi_resonant_filter.html#a477e6e40d56d5e8f65ec3f6a5559581a',1,'MultiResonantFilter::next()'],['../class_reverb_tank.html#a4930ae7a871dba610fb141d7ab83d827',1,'ReverbTank::next()'],['../group__sensortools.html#a23c4b93258faace0c7ee60eb395d2c4b',1,'RollingAverage::next()'],['../class_sample.html#a087e0da33436c9bfce1f462df50ac2a9',1,'Sample::next()'],['../class_audio_delay.html#a19258636609d83a2bab11849e17b5294',1,'AudioDelay::next()'],['../class_smooth.html#ab7c809b6b5217771832a3e829695f8d5',1,'Smooth::next()'],['../class_smooth_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#a2981f4eee274902609641c3a9e949576',1,'Smooth< UFix< NI, NF > >::next()'],['../class_smooth_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#a65d8d8b4cd627d57d8ff601b94edbf20',1,'Smooth< SFix< NI, NF > >::next()'],['../class_state_variable.html#a14cb100c22e4a33025665ef3620ca2b8',1,'StateVariable::next()'],['../class_wave_folder.html#af80790f963340c3b7f289933a28cbfc5',1,'WaveFolder::next()'],['../class_wave_packet.html#ab4e35082b60d3ccc29c86d09078329bd',1,'WavePacket::next()'],['../class_wave_shaper_3_01char_01_4.html#a8aa75261350b2651a2cbca264a02e944',1,'WaveShaper< char >::next()'],['../class_wave_shaper_3_01int_01_4.html#a2bf3bca1848a953c52ae94d5b58199ba',1,'WaveShaper< int >::next()'],['../class_oscil.html#a655de04690650b27182e3b4d07768d46',1,'Oscil::next()'],['../class_a_d_s_r.html#aa032d8689ff618dbfa974ec6803803ef',1,'ADSR::next()'],['../class_audio_delay.html#a41c09b5cc9e817d8eaf111b0f74c9a0b',1,'AudioDelay::next()'],['../class_audio_delay_feedback.html#a566593f5ea6d2d8bac9c45aa592f40fb',1,'AudioDelayFeedback::next(su input)'],['../class_audio_delay_feedback.html#a335ce266a8b40173f3279b96f9c6c050',1,'AudioDelayFeedback::next(su input, uint16_t delaytime_cells)'],['../class_audio_delay_feedback.html#af94a6f68bc932e4e2ce99b3a43713825',1,'AudioDelayFeedback::next(su input, Q16n16 delaytime_cells)'],['../group__sensortools.html#a34bc821f4f662e54383dd9d61db782df',1,'AutoMap::next()'],['../group__sensortools.html#a788fca4c9f1e6699eb1990582015c0e3',1,'AutoRange::next()'],['../class_cap_poll.html#a894e8abbabff197f4d17106455fef718',1,'CapPoll::next()'],['../class_d_cfilter.html#ae900f943d9520fbf3a522508231d82b0',1,'DCfilter::next()'],['../class_ead.html#a57e6f7b304c2bd7dd8cedf7f4fba66c9',1,'Ead::next()'],['../class_line.html#a413f620b2824c6996b3346ee54351849',1,'Line::next()'],['../class_line_3_01unsigned_01char_01_4.html#ad33f421ca975cb6b175a1c1f3ba0b68a',1,'Line< unsigned char >::next()'],['../class_line_3_01unsigned_01int_01_4.html#a4bf1b56d036097ecc3e28d52ef129ade',1,'Line< unsigned int >::next()'],['../class_line_3_01unsigned_01long_01_4.html#a69f39cf62a30d001d50daf82f45f191b',1,'Line< unsigned long >::next()'],['../class_line_3_01_u_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#a3c87f0c7c649a0eaf8ad2dcde7374e68',1,'Line< UFix< NI, NF > >::next()'],['../class_line_3_01_s_fix_3_01_n_i_00_01_n_f_01_4_01_4.html#a1a9036422d9a7893b4d9dce8ceabeb65',1,'Line< SFix< NI, NF > >::next()'],['../class_meta_oscil.html#aab97eb27e23213506c608ce459d00f3d',1,'MetaOscil::next()'],['../group__sensortools.html#a413ca7de0dbf3d2afafd84aa75857442',1,'OverSample::next()']]], - ['notch_487',['notch',['../class_multi_resonant_filter.html#a737e621190d5897ea44560a0ba37e4cc',1,'MultiResonantFilter']]], - ['noteoff_488',['noteOff',['../class_a_d_s_r.html#a3c7362c1c91486e09a306b5109ad498c',1,'ADSR::noteOff()'],['../class_p_d_resonant.html#a2b548734ea968d99d7939d68c95411cb',1,'PDResonant::noteOff()']]], - ['noteon_489',['noteOn',['../class_a_d_s_r.html#aef8d9c2799485fcd5a854228503f9f2f',1,'ADSR::noteOn()'],['../class_p_d_resonant.html#a7d4497f3b5944f73dd2fb82d68fc099b',1,'PDResonant::noteOn()']]] -]; diff --git a/extras/doc/html/search/functions_c.html b/extras/doc/html/search/functions_c.html deleted file mode 100644 index c4f326877..000000000 --- a/extras/doc/html/search/functions_c.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/functions_c.js b/extras/doc/html/search/functions_c.js deleted file mode 100644 index 3c128a96c..000000000 --- a/extras/doc/html/search/functions_c.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['operator_20audiooutputstorage_5ft_490',['operator AudioOutputStorage_t',['../struct_mono_output.html#a1fa86997aa020097d6011b23ee35342a',1,'MonoOutput']]], - ['operator_28_29_491',['operator()',['../group__sensortools.html#afd49885d3f05ca0a2f417199a9e7cf10',1,'AutoMap::operator()()'],['../class_int_map.html#ae3bf8b61f2ab79ac6626245213e7cb2a',1,'IntMap::operator()()'],['../class_smooth.html#a24eb02e4c4bfe9401f24ed0399b1e392',1,'Smooth::operator()()']]], - ['oscil_492',['Oscil',['../class_oscil.html#afe6a75646d2dd822a654bcd85242e800',1,'Oscil::Oscil(const int8_t *TABLE_NAME)'],['../class_oscil.html#ab7dc5f97742d841fff6a4dca6d7242f3',1,'Oscil::Oscil()']]] -]; diff --git a/extras/doc/html/search/functions_d.html b/extras/doc/html/search/functions_d.html deleted file mode 100644 index 7a1ed065d..000000000 --- a/extras/doc/html/search/functions_d.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/functions_d.js b/extras/doc/html/search/functions_d.js deleted file mode 100644 index 9f3ba3abb..000000000 --- a/extras/doc/html/search/functions_d.js +++ /dev/null @@ -1,12 +0,0 @@ -var searchData= -[ - ['pdresonant_493',['PDResonant',['../class_p_d_resonant.html#a2bd77e08be68fc6ce89f1f71a7e1e069',1,'PDResonant']]], - ['phaseincfromfreq_494',['phaseIncFromFreq',['../class_meta_oscil.html#af5f9994295116d5684e2ab4980f14511',1,'MetaOscil::phaseIncFromFreq()'],['../class_oscil.html#a48ad51d7fbac24263008a9931f537baf',1,'Oscil::phaseIncFromFreq()'],['../class_phasor.html#a6e7656824ae72aea09ce851c7b340eaf',1,'Phasor::phaseIncFromFreq()'],['../class_sample.html#a18e72ecdb7bac8d41038b785d6deba58',1,'Sample::phaseIncFromFreq()']]], - ['phasor_495',['Phasor',['../class_phasor.html#a147c4c3aa7506c3da800e6cc77deb4ac',1,'Phasor']]], - ['phmod_496',['phMod',['../class_meta_oscil.html#abb81b942124212b2f7a99b9ce2bd2a39',1,'MetaOscil::phMod()'],['../class_oscil.html#a4c6de90bc2d4183a5146eb2ae5e3dd2c',1,'Oscil::phMod(Q15n16 phmod_proportion)'],['../class_oscil.html#a90aeeb558d2d06efceaf9b81566f4d3d',1,'Oscil::phMod(SFix< NI, NF, RANGE > phmod_proportion)'],['../class_oscil.html#ae12f5e34705bb92394c4941aebe5a8ea',1,'Oscil::phMod(SFix< 15, 16 > phmod_proportion)']]], - ['playing_497',['playing',['../class_a_d_s_r.html#ab2723ed7ab315967afa81786c8d7621d',1,'ADSR']]], - ['pop_498',['pop',['../class_stack.html#afa9a35e13b68d9b59999227218a34d0a',1,'Stack']]], - ['portable_499',['portable',['../struct_stereo_output.html#a84824d693bf7ce2b9141ff6f9b7c87be',1,'StereoOutput']]], - ['portamento_500',['Portamento',['../class_portamento.html#adc910a47d3fe8eff848d6de42d7280df',1,'Portamento']]], - ['push_501',['push',['../class_stack.html#af67739d9b82966da46f7496f4c1fc801',1,'Stack']]] -]; diff --git a/extras/doc/html/search/functions_e.html b/extras/doc/html/search/functions_e.html deleted file mode 100644 index 22d2a6bf5..000000000 --- a/extras/doc/html/search/functions_e.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/functions_e.js b/extras/doc/html/search/functions_e.js deleted file mode 100644 index cb54a9a3f..000000000 --- a/extras/doc/html/search/functions_e.js +++ /dev/null @@ -1,63 +0,0 @@ -var searchData= -[ - ['q0n16_5fto_5ffloat_502',['Q0n16_to_float',['../group__fixmath.html#ga0440dbc7692a88dca7b1173f020c9b0d',1,'mozzi_fixmath.h']]], - ['q0n7_5fto_5ffloat_503',['Q0n7_to_float',['../group__fixmath.html#ga8b01eb695e8d8c197e4e83a76d391a6a',1,'mozzi_fixmath.h']]], - ['q0n7_5fto_5fq15n16_504',['Q0n7_to_Q15n16',['../group__fixmath.html#gac8b6733abac81f36cf8075a4d3c04e49',1,'mozzi_fixmath.h']]], - ['q0n7_5fto_5fq1n14_505',['Q0n7_to_Q1n14',['../group__fixmath.html#ga468ddaa38e178b45a77e0c103da22b7c',1,'mozzi_fixmath.h']]], - ['q0n8_5fto_5ffloat_506',['Q0n8_to_float',['../group__fixmath.html#gade631f0534cf54fadbff65911809d927',1,'mozzi_fixmath.h']]], - ['q0n8_5fto_5fq15n16_507',['Q0n8_to_Q15n16',['../group__fixmath.html#gad224b917b591bfa3554a958e84f8fadf',1,'mozzi_fixmath.h']]], - ['q0n8_5fto_5fq16n16_508',['Q0n8_to_Q16n16',['../group__fixmath.html#gab13c5f790423d9a0cf10445b366933fe',1,'mozzi_fixmath.h']]], - ['q0n8_5fto_5fq1n15_509',['Q0n8_to_Q1n15',['../group__fixmath.html#gaa9c85bc32475856ed07c3780a237ba31',1,'mozzi_fixmath.h']]], - ['q0n8_5fto_5fq24n8_510',['Q0n8_to_Q24n8',['../group__fixmath.html#ga77edd2a4cd49df42e7145da9bdb799ae',1,'mozzi_fixmath.h']]], - ['q0n8_5fto_5fq8n24_511',['Q0n8_to_Q8n24',['../group__fixmath.html#gac864675855d95314dd015ea52dc80135',1,'mozzi_fixmath.h']]], - ['q0n8_5fto_5fq8n8_512',['Q0n8_to_Q8n8',['../group__fixmath.html#ga07cdd6c75045759d9d11116f5caea4bf',1,'mozzi_fixmath.h']]], - ['q15n0_5fto_5fq15n16_513',['Q15n0_to_Q15n16',['../group__fixmath.html#ga8ef5b17eaddb22228824829204ee71bb',1,'mozzi_fixmath.h']]], - ['q15n16_5fto_5ffloat_514',['Q15n16_to_float',['../group__fixmath.html#ga4096449c3f0598a1534255de789d2ee5',1,'mozzi_fixmath.h']]], - ['q15n16_5fto_5fq0n8_515',['Q15n16_to_Q0n8',['../group__fixmath.html#gaf8dd8621335948f9048742f0a59dc795',1,'mozzi_fixmath.h']]], - ['q15n16_5fto_5fq15n0_516',['Q15n16_to_Q15n0',['../group__fixmath.html#gaa2ec03187910e9c6418298ef55655c36',1,'mozzi_fixmath.h']]], - ['q15n16_5fto_5fq23n8_517',['Q15n16_to_Q23n8',['../group__fixmath.html#ga67b0f3ae70755ed8891e510b02813c08',1,'mozzi_fixmath.h']]], - ['q15n16_5fto_5fq7n8_518',['Q15n16_to_Q7n8',['../group__fixmath.html#ga21d72d50bd41022755514c96c2d11901',1,'mozzi_fixmath.h']]], - ['q15n16_5fto_5fq8n0_519',['Q15n16_to_Q8n0',['../group__fixmath.html#ga13bc20d9c470ccac803d53f3ebf7d861',1,'mozzi_fixmath.h']]], - ['q15n16_5fto_5fq8n8_520',['Q15n16_to_Q8n8',['../group__fixmath.html#gaf62905baa27fd9ec0cbf5ed054ebd08a',1,'mozzi_fixmath.h']]], - ['q16n0_5fto_5ffloat_521',['Q16n0_to_float',['../group__fixmath.html#ga990f68566b105bc35ed718ad5ef93d72',1,'mozzi_fixmath.h']]], - ['q16n0_5fto_5fq15n16_522',['Q16n0_to_Q15n16',['../group__fixmath.html#ga720cdc234e4d0979753e5aef22a93e11',1,'mozzi_fixmath.h']]], - ['q16n0_5fto_5fq16n16_523',['Q16n0_to_Q16n16',['../group__fixmath.html#gac193b97057ac01de898db661cb6d1c5d',1,'mozzi_fixmath.h']]], - ['q16n0_5fto_5fq23n8_524',['Q16n0_to_Q23n8',['../group__fixmath.html#gaab7cd08af1c66dd48873f9a5645cc95e',1,'mozzi_fixmath.h']]], - ['q16n0_5fto_5fq24n8_525',['Q16n0_to_Q24n8',['../group__fixmath.html#ga779f365fbc3378a0e8cc167d44fd7aad',1,'mozzi_fixmath.h']]], - ['q16n16_5fmtof_526',['Q16n16_mtof',['../group__midi.html#ga45bd3f3abd7ae5fa509eac3d3931a5b2',1,'mozzi_midi.h']]], - ['q16n16_5fpow2_527',['Q16n16_pow2',['../group__fixmath.html#ga2e1d9d0fe4ba7edb9830efb7887c36bd',1,'mozzi_fixmath.cpp']]], - ['q16n16_5fto_5ffloat_528',['Q16n16_to_float',['../group__fixmath.html#gafcb57f2d0fdcce65b60401f47b871d14',1,'mozzi_fixmath.h']]], - ['q16n16_5fto_5fq0n8_529',['Q16n16_to_Q0n8',['../group__fixmath.html#ga1315b4f68a57d26fbedc88d5b30a44d8',1,'mozzi_fixmath.h']]], - ['q16n16_5fto_5fq16n0_530',['Q16n16_to_Q16n0',['../group__fixmath.html#ga89bdabdfd59a8ec3f06aedbbab087527',1,'mozzi_fixmath.h']]], - ['q16n16_5fto_5fq24n8_531',['Q16n16_to_Q24n8',['../group__fixmath.html#ga17dd8cb80ef87b6573926e411618105a',1,'mozzi_fixmath.h']]], - ['q16n16_5fto_5fq8n8_532',['Q16n16_to_Q8n8',['../group__fixmath.html#gaef6ce2a93fe5862ac373772e994713a9',1,'mozzi_fixmath.h']]], - ['q1n14_5fto_5ffloat_533',['Q1n14_to_float',['../group__fixmath.html#gad3fe2bc17bed17cd159a9c030145b6ca',1,'mozzi_fixmath.h']]], - ['q1n14_5fto_5fq0n7_534',['Q1n14_to_Q0n7',['../group__fixmath.html#ga5f3733fb89e77693e54328375226f5e9',1,'mozzi_fixmath.h']]], - ['q1n15_5fto_5ffloat_535',['Q1n15_to_float',['../group__fixmath.html#ga9ed5a6a2041f490ffa52b5a5fa95d3e5',1,'mozzi_fixmath.h']]], - ['q1n15_5fto_5fq0n8_536',['Q1n15_to_Q0n8',['../group__fixmath.html#ga67c11990c9288aa762c708d3a48ba7fc',1,'mozzi_fixmath.h']]], - ['q23n8_5fto_5ffloat_537',['Q23n8_to_float',['../group__fixmath.html#ga47738704056a272968e80b399e06e82b',1,'mozzi_fixmath.h']]], - ['q23n8_5fto_5fq15n0_538',['Q23n8_to_Q15n0',['../group__fixmath.html#ga1b21d30a04f07940dc4ea206533b9dd8',1,'mozzi_fixmath.h']]], - ['q23n8_5fto_5fq16n0_539',['Q23n8_to_Q16n0',['../group__fixmath.html#gaa6a3087e0119ed233a3256f8fa25e146',1,'mozzi_fixmath.h']]], - ['q23n8_5fto_5fq31n0_540',['Q23n8_to_Q31n0',['../group__fixmath.html#ga8f3d1181dc6802782b9ff9aa59ca96a2',1,'mozzi_fixmath.h']]], - ['q23n8_5fto_5fq7n8_541',['Q23n8_to_Q7n8',['../group__fixmath.html#gac243a1fd2154b115e4ba39a70125675e',1,'mozzi_fixmath.h']]], - ['q24n8_5fto_5ffloat_542',['Q24n8_to_float',['../group__fixmath.html#gab495892ee3db6cbce186fbb7c7246088',1,'mozzi_fixmath.h']]], - ['q24n8_5fto_5fq0n8_543',['Q24n8_to_Q0n8',['../group__fixmath.html#ga94dd6fe8594b171881ade98431dfda28',1,'mozzi_fixmath.h']]], - ['q24n8_5fto_5fq16n0_544',['Q24n8_to_Q16n0',['../group__fixmath.html#gaefdfa391a9fef0f17d1f9df16fd9a9f0',1,'mozzi_fixmath.h']]], - ['q24n8_5fto_5fq16n16_545',['Q24n8_to_Q16n16',['../group__fixmath.html#ga2b445681d56f8693c3d98d5ff19b51d4',1,'mozzi_fixmath.h']]], - ['q24n8_5fto_5fq32n0_546',['Q24n8_to_Q32n0',['../group__fixmath.html#ga9f28b2310c92ecac72960d9bd0aff80f',1,'mozzi_fixmath.h']]], - ['q7n0_5fto_5fq15n16_547',['Q7n0_to_Q15n16',['../group__fixmath.html#ga64d943b21ef783f34135630a5c80be46',1,'mozzi_fixmath.h']]], - ['q7n0_5fto_5fq7n8_548',['Q7n0_to_Q7n8',['../group__fixmath.html#ga81b0b1f295a6a724c100e600d6b4ce28',1,'mozzi_fixmath.h']]], - ['q7n8_5fmult_549',['Q7n8_mult',['../group__fixmath.html#ga306932c4fb32b1352c24b7602a696fee',1,'mozzi_fixmath.h']]], - ['q7n8_5fto_5ffloat_550',['Q7n8_to_float',['../group__fixmath.html#gaad3cbbc6a772d246d26fd98b5a079382',1,'mozzi_fixmath.h']]], - ['q7n8_5fto_5fq15n16_551',['Q7n8_to_Q15n16',['../group__fixmath.html#ga958d671aeefb66c2492b84bf299f8d13',1,'mozzi_fixmath.h']]], - ['q7n8_5fto_5fq7n0_552',['Q7n8_to_Q7n0',['../group__fixmath.html#gaa8be90cc674fc9ac72a2faafb11d6a5e',1,'mozzi_fixmath.h']]], - ['q8n0_5fto_5fq15n16_553',['Q8n0_to_Q15n16',['../group__fixmath.html#gac0b4678c510db93302efb15497911907',1,'mozzi_fixmath.h']]], - ['q8n0_5fto_5fq16n16_554',['Q8n0_to_Q16n16',['../group__fixmath.html#ga589b5c022b59a72fc3fb39061048d193',1,'mozzi_fixmath.h']]], - ['q8n0_5fto_5fq7n8_555',['Q8n0_to_Q7n8',['../group__fixmath.html#ga4baa8569c241630ddd25d798d0a89b3d',1,'mozzi_fixmath.h']]], - ['q8n0_5fto_5fq8n8_556',['Q8n0_to_Q8n8',['../group__fixmath.html#ga90a5d59d5a529f4caaf408730230a156',1,'mozzi_fixmath.h']]], - ['q8n24_5fto_5ffloat_557',['Q8n24_to_float',['../group__fixmath.html#ga6f0e36938a7dfae4ab399f17642c2bcd',1,'mozzi_fixmath.h']]], - ['q8n24_5fto_5fq0n8_558',['Q8n24_to_Q0n8',['../group__fixmath.html#ga0c5065bc7c71ac750acde1c7ce216d87',1,'mozzi_fixmath.h']]], - ['q8n8_5fto_5ffloat_559',['Q8n8_to_float',['../group__fixmath.html#gabc9c251c25fa7a239d704ea3998e7e39',1,'mozzi_fixmath.h']]], - ['q8n8_5fto_5fq16n16_560',['Q8n8_to_Q16n16',['../group__fixmath.html#gab88fd86b4f226f0e2614b0ac813e4cad',1,'mozzi_fixmath.h']]], - ['q8n8_5fto_5fq8n0_561',['Q8n8_to_Q8n0',['../group__fixmath.html#gad68e3b4d1bf65e997d5e709eb4153572',1,'mozzi_fixmath.h']]] -]; diff --git a/extras/doc/html/search/functions_f.html b/extras/doc/html/search/functions_f.html deleted file mode 100644 index 54b7dee08..000000000 --- a/extras/doc/html/search/functions_f.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/functions_f.js b/extras/doc/html/search/functions_f.js deleted file mode 100644 index 36059f890..000000000 --- a/extras/doc/html/search/functions_f.js +++ /dev/null @@ -1,17 +0,0 @@ -var searchData= -[ - ['rand_562',['rand',['../group__random.html#ga4ad4ab94c8b0e8a4d4be925490378733',1,'rand(unsigned int maxval): mozzi_rand.h'],['../group__random.html#ga95de742b529d5965461f1d3f6f576e18',1,'rand(unsigned int minval, unsigned int maxval): mozzi_rand.h'],['../group__random.html#ga1182cb74988d9c8510959149adc63762',1,'rand(int maxval): mozzi_rand.h'],['../group__random.html#ga4c69deb53afb886b26c76b343513b340',1,'rand(int minval, int maxval): mozzi_rand.h'],['../group__random.html#gabe026433bdf21da516984d35730672fc',1,'rand(int8_t minval, int8_t maxval): mozzi_rand.h'],['../group__random.html#ga99dee852111a97e20a64582de8e79ab1',1,'rand(int8_t maxval): mozzi_rand.h'],['../group__random.html#ga13bc207ecda4f92e2be2fb585a5cce2b',1,'rand(uint8_t minval, uint8_t maxval): mozzi_rand.h'],['../group__random.html#ga904cf092c2b014dc6c99f7844bd3723e',1,'rand(uint8_t maxval): mozzi_rand.h']]], - ['randmidinote_563',['randMidiNote',['../group__random.html#ga15ff4da0bec0272bf728ea7de2d78006',1,'mozzi_rand.h']]], - ['randprime_564',['randPrime',['../group__random.html#gab6c2b444d462461b82997e04105d0398',1,'primes.h']]], - ['randprimeupto_565',['randPrimeUpTo',['../group__random.html#gaead8db89e2403d5ef7842f894552c629',1,'primes.h']]], - ['randseed_566',['randSeed',['../group__random.html#ga83ff6b4e38c84713e0d67aa1ec06af66',1,'randSeed(): mozzi_rand.h'],['../group__random.html#ga477030e3875a6dd400012c3a431e486a',1,'randSeed(uint32_t seed): mozzi_rand.h']]], - ['rangewholesample_567',['rangeWholeSample',['../class_sample.html#a8a012ae52ee028222118f6bba5c7fb33',1,'Sample']]], - ['rcpoll_568',['RCpoll',['../class_r_cpoll.html#a44673505bbfbac288ec994dd48017e83',1,'RCpoll']]], - ['read_569',['read',['../class_audio_delay_feedback.html#aabcade306904f5f6ac43d12bb00606e6',1,'AudioDelayFeedback::read()'],['../class_audio_delay_feedback.html#adb77aac1acba3b0a31428345342a5205',1,'AudioDelayFeedback::read(Q16n16 delaytime_cells)'],['../class_audio_delay.html#a26b409fbfc322ae527ba23680c56e3a9',1,'AudioDelay::read()']]], - ['ready_570',['ready',['../class_metronome.html#adc67bd96eac9f9b9260f8b070b7db75f',1,'Metronome::ready()'],['../class_event_delay.html#a2267889678fb75df2f6bdcbd0be0ea8a',1,'EventDelay::ready()']]], - ['reconnectdigitalin_571',['reconnectDigitalIn',['../group__analog.html#ga26462e443299e8d39a520d4a838e00b7',1,'mozzi_analog.h']]], - ['resonantfilter_572',['ResonantFilter',['../class_resonant_filter.html#acd29c5e737fe80e0dc5c408113c3c282',1,'ResonantFilter']]], - ['reverbtank_573',['ReverbTank',['../class_reverb_tank.html#a3ca18b03d045df164462338f6ed0648c',1,'ReverbTank']]], - ['rollingaverage_574',['RollingAverage',['../group__sensortools.html#a11cf7b9e1278648b1eb10e5534fe3e29',1,'RollingAverage']]], - ['rollingstat_575',['RollingStat',['../group__sensortools.html#a98c3f767391db80b8ad59ca53c1e6a94',1,'RollingStat']]] -]; diff --git a/extras/doc/html/search/groups_0.html b/extras/doc/html/search/groups_0.html deleted file mode 100644 index c600b4970..000000000 --- a/extras/doc/html/search/groups_0.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/groups_0.js b/extras/doc/html/search/groups_0.js deleted file mode 100644 index 12c2d032c..000000000 --- a/extras/doc/html/search/groups_0.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['analog_678',['Analog',['../group__analog.html',1,'']]], - ['audio_20output_20and_20buffering_679',['Audio Output and Buffering',['../group__audio__output.html',1,'']]], - ['automatic_20range_20adjustment_680',['Automatic range adjustment',['../group__sensortools.html',1,'']]] -]; diff --git a/extras/doc/html/search/groups_1.html b/extras/doc/html/search/groups_1.html deleted file mode 100644 index 2eb3550dc..000000000 --- a/extras/doc/html/search/groups_1.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/groups_1.js b/extras/doc/html/search/groups_1.js deleted file mode 100644 index 0a76ea184..000000000 --- a/extras/doc/html/search/groups_1.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['fast_20integer_20based_20fixed_2dpoint_20arithmetic_681',['Fast integer based fixed-point arithmetic',['../group__fixmath.html',1,'']]], - ['fast_20random_20number_20generator_20functions_682',['Fast random number generator functions',['../group__random.html',1,'']]] -]; diff --git a/extras/doc/html/search/groups_2.html b/extras/doc/html/search/groups_2.html deleted file mode 100644 index 12f4af7a0..000000000 --- a/extras/doc/html/search/groups_2.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/groups_2.js b/extras/doc/html/search/groups_2.js deleted file mode 100644 index 4c9090c5a..000000000 --- a/extras/doc/html/search/groups_2.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['look_2dup_2dtables_20and_20python_20scripts_20to_20generate_20tables_20or_20convert_20sounds_2e_683',['Look-up-tables and python scripts to generate tables or convert sounds.',['../group__soundtables.html',1,'']]] -]; diff --git a/extras/doc/html/search/groups_3.html b/extras/doc/html/search/groups_3.html deleted file mode 100644 index 5e235b53c..000000000 --- a/extras/doc/html/search/groups_3.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/groups_3.js b/extras/doc/html/search/groups_3.js deleted file mode 100644 index bd1b084b3..000000000 --- a/extras/doc/html/search/groups_3.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['midi_20note_20number_20to_20frequency_20conversions_684',['Midi note number to frequency conversions',['../group__midi.html',1,'']]], - ['mozzi_20configuration_20options_685',['Mozzi Configuration options',['../group__config.html',1,'']]], - ['mozzi_20core_20functions_686',['Mozzi Core Functions',['../group__core.html',1,'']]] -]; diff --git a/extras/doc/html/search/groups_4.html b/extras/doc/html/search/groups_4.html deleted file mode 100644 index 99405e159..000000000 --- a/extras/doc/html/search/groups_4.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/groups_4.js b/extras/doc/html/search/groups_4.js deleted file mode 100644 index af88dba70..000000000 --- a/extras/doc/html/search/groups_4.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['utility_20functions_2c_20and_20debugging_687',['Utility functions, and debugging',['../group__util.html',1,'']]] -]; diff --git a/extras/doc/html/search/groups_5.html b/extras/doc/html/search/groups_5.html deleted file mode 100644 index 583f5f58a..000000000 --- a/extras/doc/html/search/groups_5.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/groups_5.js b/extras/doc/html/search/groups_5.js deleted file mode 100644 index 6c6e3fef4..000000000 --- a/extras/doc/html/search/groups_5.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['utility_20functions_2c_20and_20debugging_679',['Utility functions, and debugging',['../group__util.html',1,'']]] -]; diff --git a/extras/doc/html/search/groups_6.html b/extras/doc/html/search/groups_6.html deleted file mode 100644 index f8f808513..000000000 --- a/extras/doc/html/search/groups_6.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/groups_6.js b/extras/doc/html/search/groups_6.js deleted file mode 100644 index 6a7ff87f9..000000000 --- a/extras/doc/html/search/groups_6.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['util',['Util',['../group__util.html',1,'']]] -]; diff --git a/extras/doc/html/search/mag_sel.png b/extras/doc/html/search/mag_sel.png deleted file mode 100644 index 81f6040a2..000000000 Binary files a/extras/doc/html/search/mag_sel.png and /dev/null differ diff --git a/extras/doc/html/search/mag_sel.svg b/extras/doc/html/search/mag_sel.svg deleted file mode 100644 index 03626f64a..000000000 --- a/extras/doc/html/search/mag_sel.svg +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/extras/doc/html/search/namespaces_0.html b/extras/doc/html/search/namespaces_0.html deleted file mode 100644 index 21db2c3a5..000000000 --- a/extras/doc/html/search/namespaces_0.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/namespaces_0.js b/extras/doc/html/search/namespaces_0.js deleted file mode 100644 index e981231a9..000000000 --- a/extras/doc/html/search/namespaces_0.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['make_5fstandard_5ftables_420',['make_standard_tables',['../namespacemake__standard__tables.html',1,'']]], - ['mozziprivate_421',['MozziPrivate',['../namespace_mozzi_private.html',1,'']]] -]; diff --git a/extras/doc/html/search/nomatches.html b/extras/doc/html/search/nomatches.html deleted file mode 100644 index 2b9360b6b..000000000 --- a/extras/doc/html/search/nomatches.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - -
-
No Matches
-
- - diff --git a/extras/doc/html/search/pages_0.html b/extras/doc/html/search/pages_0.html deleted file mode 100644 index 8517b48f0..000000000 --- a/extras/doc/html/search/pages_0.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/pages_0.js b/extras/doc/html/search/pages_0.js deleted file mode 100644 index 684b99d02..000000000 --- a/extras/doc/html/search/pages_0.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['basic_20architecture_20of_20audio_20generation_2c_20buffering_2c_20and_20output_20in_20mozzi_688',['Basic architecture of audio generation, buffering, and output in Mozzi',['../group__audio__output.html',1,'']]] -]; diff --git a/extras/doc/html/search/pages_1.html b/extras/doc/html/search/pages_1.html deleted file mode 100644 index a0fb67963..000000000 --- a/extras/doc/html/search/pages_1.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/pages_1.js b/extras/doc/html/search/pages_1.js deleted file mode 100644 index bdd9df9cd..000000000 --- a/extras/doc/html/search/pages_1.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['external_20audio_20output_689',['External audio output',['../group__audio__output.html',1,'']]] -]; diff --git a/extras/doc/html/search/pages_2.html b/extras/doc/html/search/pages_2.html deleted file mode 100644 index 084edfd03..000000000 --- a/extras/doc/html/search/pages_2.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/pages_2.js b/extras/doc/html/search/pages_2.js deleted file mode 100644 index e07ebb67e..000000000 --- a/extras/doc/html/search/pages_2.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['getting_20started_690',['Getting Started',['../basic_info.html',1,'']]] -]; diff --git a/extras/doc/html/search/pages_3.html b/extras/doc/html/search/pages_3.html deleted file mode 100644 index c0b45b0fc..000000000 --- a/extras/doc/html/search/pages_3.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/pages_3.js b/extras/doc/html/search/pages_3.js deleted file mode 100644 index 3b0955cba..000000000 --- a/extras/doc/html/search/pages_3.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['hardware_20and_20configuration_691',['Hardware and configuration',['../hardware.html',1,'']]] -]; diff --git a/extras/doc/html/search/pages_4.html b/extras/doc/html/search/pages_4.html deleted file mode 100644 index 0f05c2e73..000000000 --- a/extras/doc/html/search/pages_4.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/pages_4.js b/extras/doc/html/search/pages_4.js deleted file mode 100644 index 55a69c6b0..000000000 --- a/extras/doc/html/search/pages_4.js +++ /dev/null @@ -1,16 +0,0 @@ -var searchData= -[ - ['mozzi_20configuration_692',['Mozzi Configuration',['../group__config.html',1,'']]], - ['mozzi_20on_20arduino_20uno_20r4_20_2d_20renesas_2e_693',['Mozzi on Arduino Uno R4 - Renesas.',['../hardware_renesas.html',1,'hardware']]], - ['mozzi_20on_20classic_20arduino_2c_20teensy_202_2ex_2c_20arduino_20mega_2c_20and_20other_208_20bit_20_22avr_22_2fatmega_20architecture_20boards_694',['Mozzi on classic Arduino, Teensy 2.x, Arduino Mega, and other 8 bit "AVR"/ATMEGA architecture boards',['../hardware_avr.html',1,'hardware']]], - ['mozzi_20on_20esp32_2dbased_20boards_2e_695',['Mozzi on ESP32-based boards.',['../hardware_esp32.html',1,'hardware']]], - ['mozzi_20on_20esp8266_2dbased_20boards_2e_696',['Mozzi on ESP8266-based boards.',['../hardware_esp8266.html',1,'hardware']]], - ['mozzi_20on_20mbed_2dbased_20boards_20_28arduino_20giga_20_2f_20portenta_29_2e_697',['Mozzi on MBED-based boards (Arduino Giga / Portenta).',['../hardware_mbed.html',1,'hardware']]], - ['mozzi_20on_20rp2040_20_28raspberry_20pi_20pico_29_698',['Mozzi on RP2040 (Raspberry Pi Pico)',['../hardware_rp2040.html',1,'hardware']]], - ['mozzi_20on_20samd21_20based_20boards_20_28arduino_20circuitplayground_20m0_20and_20others_29_699',['Mozzi on SAMD21 based boards (Arduino Circuitplayground M0 and others)',['../hardware_samd.html',1,'hardware']]], - ['mozzi_20on_20stm32_2dbased_20boards_20_2d_20disambiguation_700',['Mozzi on STM32-based boards - disambiguation',['../hardware_stm32_disambiguation.html',1,'hardware']]], - ['mozzi_20on_20stm32_2dboards_20with_20libmaple_20based_20core_2e_701',['Mozzi on STM32-boards with libmaple based core.',['../hardware_stm32_maple.html',1,'hardware']]], - ['mozzi_20on_20stm32duino_2dbased_20boards_2e_702',['Mozzi on STM32duino-based boards.',['../hardware_stm32duino.html',1,'hardware']]], - ['mozzi_20on_20teensy_203_2e0_2f3_2e1_2f3_2e2_2f3_2e4_2f3_2e5_2flc_20boards_2e_703',['Mozzi on Teensy 3.0/3.1/3.2/3.4/3.5/LC boards.',['../hardware_teensy3.html',1,'hardware']]], - ['mozzi_20on_20teensy_204_2ex_20boards_2e_704',['Mozzi on Teensy 4.x boards.',['../hardware_teensy4.html',1,'hardware']]] -]; diff --git a/extras/doc/html/search/related_0.html b/extras/doc/html/search/related_0.html deleted file mode 100644 index 506aaecc0..000000000 --- a/extras/doc/html/search/related_0.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/related_0.js b/extras/doc/html/search/related_0.js deleted file mode 100644 index 5ea6a4fff..000000000 --- a/extras/doc/html/search/related_0.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['mtof_674',['mtof',['../class_midi_to_freq_private.html#ac8580918bc8c8e2ae9600668291dda41',1,'MidiToFreqPrivate::mtof()'],['../class_midi_to_freq_private.html#a96a4f95a5703e79f79ddd23161eaa7a3',1,'MidiToFreqPrivate::mtof()'],['../class_midi_to_freq_private.html#ad7f7fa97f0b39d844758172d2e9d657b',1,'MidiToFreqPrivate::mtof()'],['../class_midi_to_freq_private.html#afa91fff6f63c1482d811b5a52d4009ec',1,'MidiToFreqPrivate::mtof()']]] -]; diff --git a/extras/doc/html/search/related_1.html b/extras/doc/html/search/related_1.html deleted file mode 100644 index 605d4b78f..000000000 --- a/extras/doc/html/search/related_1.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/related_1.js b/extras/doc/html/search/related_1.js deleted file mode 100644 index 238060ec0..000000000 --- a/extras/doc/html/search/related_1.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['q16n16_5fmtof_675',['Q16n16_mtof',['../class_midi_to_freq_private.html#a84543eb6614218d9fee74b960b8a7644',1,'MidiToFreqPrivate']]] -]; diff --git a/extras/doc/html/search/related_2.html b/extras/doc/html/search/related_2.html deleted file mode 100644 index 6d6ae3309..000000000 --- a/extras/doc/html/search/related_2.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/related_2.js b/extras/doc/html/search/related_2.js deleted file mode 100644 index 5b9a5bf4e..000000000 --- a/extras/doc/html/search/related_2.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['randseed_676',['randSeed',['../class_mozzi_private_1_1_mozzi_rand_private.html#a83ff6b4e38c84713e0d67aa1ec06af66',1,'MozziPrivate::MozziRandPrivate::randSeed()'],['../class_mozzi_private_1_1_mozzi_rand_private.html#a4647c5989e5cf1ada9d952d5eb943d13',1,'MozziPrivate::MozziRandPrivate::randSeed()']]] -]; diff --git a/extras/doc/html/search/related_3.html b/extras/doc/html/search/related_3.html deleted file mode 100644 index e6c5d179b..000000000 --- a/extras/doc/html/search/related_3.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/related_3.js b/extras/doc/html/search/related_3.js deleted file mode 100644 index 0facd1994..000000000 --- a/extras/doc/html/search/related_3.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['xorshift96_677',['xorshift96',['../class_mozzi_private_1_1_mozzi_rand_private.html#a68ed69ece800f0c1e5819c05aed8d398',1,'MozziPrivate::MozziRandPrivate']]] -]; diff --git a/extras/doc/html/search/search.css b/extras/doc/html/search/search.css deleted file mode 100644 index a272296d4..000000000 --- a/extras/doc/html/search/search.css +++ /dev/null @@ -1,273 +0,0 @@ -/*---------------- Search Box */ - -#FSearchBox { - float: left; -} - -#MSearchBox { - white-space : nowrap; - float: none; - margin-top: 0px; - right: 0px; - width: 170px; - height: 24px; - z-index: 102; - display: inline; - position: absolute; -} - -#MSearchBox .left -{ - display:block; - position:absolute; - left:10px; - width:20px; - height:19px; - background:url('search_l.png') no-repeat; - background-position:right; -} - -#MSearchSelect { - display:block; - position:absolute; - width:20px; - height:19px; -} - -.left #MSearchSelect { - left:4px; -} - -.right #MSearchSelect { - right:5px; -} - -#MSearchField { - display:block; - position:absolute; - height:19px; - background:url('search_m.png') repeat-x; - border:none; - width:111px; - margin-left:20px; - padding-left:4px; - color: #909090; - outline: none; - font: 9pt Arial, Verdana, sans-serif; - -webkit-border-radius: 0px; -} - -#FSearchBox #MSearchField { - margin-left:15px; -} - -#MSearchBox .right { - display:block; - position:absolute; - right:10px; - top:0px; - width:20px; - height:19px; - background:url('search_r.png') no-repeat; - background-position:left; -} - -#MSearchClose { - display: none; - position: absolute; - top: 4px; - background : none; - border: none; - margin: 0px 4px 0px 0px; - padding: 0px 0px; - outline: none; -} - -.left #MSearchClose { - left: 6px; -} - -.right #MSearchClose { - right: 2px; -} - -.MSearchBoxActive #MSearchField { - color: #000000; -} - -/*---------------- Search filter selection */ - -#MSearchSelectWindow { - display: none; - position: absolute; - left: 0; top: 0; - border: 1px solid #6F7F3E; - background-color: #F6F8F0; - z-index: 10001; - padding-top: 4px; - padding-bottom: 4px; - -moz-border-radius: 4px; - -webkit-border-top-left-radius: 4px; - -webkit-border-top-right-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -} - -.SelectItem { - font: 8pt Arial, Verdana, sans-serif; - padding-left: 2px; - padding-right: 12px; - border: 0px; -} - -span.SelectionMark { - margin-right: 4px; - font-family: monospace; - outline-style: none; - text-decoration: none; -} - -a.SelectItem { - display: block; - outline-style: none; - color: #000000; - text-decoration: none; - padding-left: 6px; - padding-right: 12px; -} - -a.SelectItem:focus, -a.SelectItem:active { - color: #000000; - outline-style: none; - text-decoration: none; -} - -a.SelectItem:hover { - color: #FFFFFF; - background-color: #191D0E; - outline-style: none; - text-decoration: none; - cursor: pointer; - display: block; -} - -/*---------------- Search results window */ - -iframe#MSearchResults { - width: 60ex; - height: 15em; -} - -#MSearchResultsWindow { - display: none; - position: absolute; - left: 0; top: 0; - border: 1px solid #000; - background-color: #E5EAD5; - z-index:10000; -} - -/* ----------------------------------- */ - - -#SRIndex { - clear:both; - padding-bottom: 15px; -} - -.SREntry { - font-size: 10pt; - padding-left: 1ex; -} - -.SRPage .SREntry { - font-size: 8pt; - padding: 1px 5px; -} - -body.SRPage { - margin: 5px 2px; -} - -.SRChildren { - padding-left: 3ex; padding-bottom: .5em -} - -.SRPage .SRChildren { - display: none; -} - -.SRSymbol { - font-weight: bold; - color: #1F2311; - font-family: Arial, Verdana, sans-serif; - text-decoration: none; - outline: none; -} - -a.SRScope { - display: block; - color: #1F2311; - font-family: Arial, Verdana, sans-serif; - text-decoration: none; - outline: none; -} - -a.SRSymbol:focus, a.SRSymbol:active, -a.SRScope:focus, a.SRScope:active { - text-decoration: underline; -} - -span.SRScope { - padding-left: 4px; -} - -.SRPage .SRStatus { - padding: 2px 5px; - font-size: 8pt; - font-style: italic; -} - -.SRResult { - display: none; -} - -DIV.searchresults { - margin-left: 10px; - margin-right: 10px; -} - -/*---------------- External search page results */ - -.searchresult { - background-color: #E8EDDA; -} - -.pages b { - color: white; - padding: 5px 5px 3px 5px; - background-image: url("../tab_a.png"); - background-repeat: repeat-x; - text-shadow: 0 1px 1px #000000; -} - -.pages { - line-height: 17px; - margin-left: 4px; - text-decoration: none; -} - -.hl { - font-weight: bold; -} - -#searchresults { - margin-bottom: 20px; -} - -.searchpages { - margin-top: 10px; -} - diff --git a/extras/doc/html/search/search.js b/extras/doc/html/search/search.js deleted file mode 100644 index fb226f734..000000000 --- a/extras/doc/html/search/search.js +++ /dev/null @@ -1,816 +0,0 @@ -/* - @licstart The following is the entire license notice for the JavaScript code in this file. - - The MIT License (MIT) - - Copyright (C) 1997-2020 by Dimitri van Heesch - - Permission is hereby granted, free of charge, to any person obtaining a copy of this software - and associated documentation files (the "Software"), to deal in the Software without restriction, - including without limitation the rights to use, copy, modify, merge, publish, distribute, - sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or - substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING - BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, - DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - @licend The above is the entire license notice for the JavaScript code in this file - */ -function convertToId(search) -{ - var result = ''; - for (i=0;i do a search - { - this.Search(); - } - } - - this.OnSearchSelectKey = function(evt) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==40 && this.searchIndex0) // Up - { - this.searchIndex--; - this.OnSelectItem(this.searchIndex); - } - else if (e.keyCode==13 || e.keyCode==27) - { - this.OnSelectItem(this.searchIndex); - this.CloseSelectionWindow(); - this.DOMSearchField().focus(); - } - return false; - } - - // --------- Actions - - // Closes the results window. - this.CloseResultsWindow = function() - { - this.DOMPopupSearchResultsWindow().style.display = 'none'; - this.DOMSearchClose().style.display = 'none'; - this.Activate(false); - } - - this.CloseSelectionWindow = function() - { - this.DOMSearchSelectWindow().style.display = 'none'; - } - - // Performs a search. - this.Search = function() - { - this.keyTimeout = 0; - - // strip leading whitespace - var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); - - var code = searchValue.toLowerCase().charCodeAt(0); - var idxChar = searchValue.substr(0, 1).toLowerCase(); - if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair - { - idxChar = searchValue.substr(0, 2); - } - - var resultsPage; - var resultsPageWithSearch; - var hasResultsPage; - - var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); - if (idx!=-1) - { - var hexCode=idx.toString(16); - resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + this.extension; - resultsPageWithSearch = resultsPage+'?'+escape(searchValue); - hasResultsPage = true; - } - else // nothing available for this search term - { - resultsPage = this.resultsPath + '/nomatches' + this.extension; - resultsPageWithSearch = resultsPage; - hasResultsPage = false; - } - - window.frames.MSearchResults.location = resultsPageWithSearch; - var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); - - if (domPopupSearchResultsWindow.style.display!='block') - { - var domSearchBox = this.DOMSearchBox(); - this.DOMSearchClose().style.display = 'inline-block'; - if (this.insideFrame) - { - var domPopupSearchResults = this.DOMPopupSearchResults(); - domPopupSearchResultsWindow.style.position = 'relative'; - domPopupSearchResultsWindow.style.display = 'block'; - var width = document.body.clientWidth - 8; // the -8 is for IE :-( - domPopupSearchResultsWindow.style.width = width + 'px'; - domPopupSearchResults.style.width = width + 'px'; - } - else - { - var domPopupSearchResults = this.DOMPopupSearchResults(); - var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; - var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; - domPopupSearchResultsWindow.style.display = 'block'; - left -= domPopupSearchResults.offsetWidth; - domPopupSearchResultsWindow.style.top = top + 'px'; - domPopupSearchResultsWindow.style.left = left + 'px'; - } - } - - this.lastSearchValue = searchValue; - this.lastResultsPage = resultsPage; - } - - // -------- Activation Functions - - // Activates or deactivates the search panel, resetting things to - // their default values if necessary. - this.Activate = function(isActive) - { - if (isActive || // open it - this.DOMPopupSearchResultsWindow().style.display == 'block' - ) - { - this.DOMSearchBox().className = 'MSearchBoxActive'; - - var searchField = this.DOMSearchField(); - - if (searchField.value == this.searchLabel) // clear "Search" term upon entry - { - searchField.value = ''; - this.searchActive = true; - } - } - else if (!isActive) // directly remove the panel - { - this.DOMSearchBox().className = 'MSearchBoxInactive'; - this.DOMSearchField().value = this.searchLabel; - this.searchActive = false; - this.lastSearchValue = '' - this.lastResultsPage = ''; - } - } -} - -// ----------------------------------------------------------------------- - -// The class that handles everything on the search results page. -function SearchResults(name) -{ - // The number of matches from the last run of . - this.lastMatchCount = 0; - this.lastKey = 0; - this.repeatOn = false; - - // Toggles the visibility of the passed element ID. - this.FindChildElement = function(id) - { - var parentElement = document.getElementById(id); - var element = parentElement.firstChild; - - while (element && element!=parentElement) - { - if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') - { - return element; - } - - if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) - { - element = element.firstChild; - } - else if (element.nextSibling) - { - element = element.nextSibling; - } - else - { - do - { - element = element.parentNode; - } - while (element && element!=parentElement && !element.nextSibling); - - if (element && element!=parentElement) - { - element = element.nextSibling; - } - } - } - } - - this.Toggle = function(id) - { - var element = this.FindChildElement(id); - if (element) - { - if (element.style.display == 'block') - { - element.style.display = 'none'; - } - else - { - element.style.display = 'block'; - } - } - } - - // Searches for the passed string. If there is no parameter, - // it takes it from the URL query. - // - // Always returns true, since other documents may try to call it - // and that may or may not be possible. - this.Search = function(search) - { - if (!search) // get search word from URL - { - search = window.location.search; - search = search.substring(1); // Remove the leading '?' - search = unescape(search); - } - - search = search.replace(/^ +/, ""); // strip leading spaces - search = search.replace(/ +$/, ""); // strip trailing spaces - search = search.toLowerCase(); - search = convertToId(search); - - var resultRows = document.getElementsByTagName("div"); - var matches = 0; - - var i = 0; - while (i < resultRows.length) - { - var row = resultRows.item(i); - if (row.className == "SRResult") - { - var rowMatchName = row.id.toLowerCase(); - rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' - - if (search.length<=rowMatchName.length && - rowMatchName.substr(0, search.length)==search) - { - row.style.display = 'block'; - matches++; - } - else - { - row.style.display = 'none'; - } - } - i++; - } - document.getElementById("Searching").style.display='none'; - if (matches == 0) // no results - { - document.getElementById("NoMatches").style.display='block'; - } - else // at least one result - { - document.getElementById("NoMatches").style.display='none'; - } - this.lastMatchCount = matches; - return true; - } - - // return the first item with index index or higher that is visible - this.NavNext = function(index) - { - var focusItem; - while (1) - { - var focusName = 'Item'+index; - focusItem = document.getElementById(focusName); - if (focusItem && focusItem.parentNode.parentNode.style.display=='block') - { - break; - } - else if (!focusItem) // last element - { - break; - } - focusItem=null; - index++; - } - return focusItem; - } - - this.NavPrev = function(index) - { - var focusItem; - while (1) - { - var focusName = 'Item'+index; - focusItem = document.getElementById(focusName); - if (focusItem && focusItem.parentNode.parentNode.style.display=='block') - { - break; - } - else if (!focusItem) // last element - { - break; - } - focusItem=null; - index--; - } - return focusItem; - } - - this.ProcessKeys = function(e) - { - if (e.type == "keydown") - { - this.repeatOn = false; - this.lastKey = e.keyCode; - } - else if (e.type == "keypress") - { - if (!this.repeatOn) - { - if (this.lastKey) this.repeatOn = true; - return false; // ignore first keypress after keydown - } - } - else if (e.type == "keyup") - { - this.lastKey = 0; - this.repeatOn = false; - } - return this.lastKey!=0; - } - - this.Nav = function(evt,itemIndex) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==13) return true; - if (!this.ProcessKeys(e)) return false; - - if (this.lastKey==38) // Up - { - var newIndex = itemIndex-1; - var focusItem = this.NavPrev(newIndex); - if (focusItem) - { - var child = this.FindChildElement(focusItem.parentNode.parentNode.id); - if (child && child.style.display == 'block') // children visible - { - var n=0; - var tmpElem; - while (1) // search for last child - { - tmpElem = document.getElementById('Item'+newIndex+'_c'+n); - if (tmpElem) - { - focusItem = tmpElem; - } - else // found it! - { - break; - } - n++; - } - } - } - if (focusItem) - { - focusItem.focus(); - } - else // return focus to search field - { - parent.document.getElementById("MSearchField").focus(); - } - } - else if (this.lastKey==40) // Down - { - var newIndex = itemIndex+1; - var focusItem; - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem && elem.style.display == 'block') // children visible - { - focusItem = document.getElementById('Item'+itemIndex+'_c0'); - } - if (!focusItem) focusItem = this.NavNext(newIndex); - if (focusItem) focusItem.focus(); - } - else if (this.lastKey==39) // Right - { - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem) elem.style.display = 'block'; - } - else if (this.lastKey==37) // Left - { - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem) elem.style.display = 'none'; - } - else if (this.lastKey==27) // Escape - { - parent.searchBox.CloseResultsWindow(); - parent.document.getElementById("MSearchField").focus(); - } - else if (this.lastKey==13) // Enter - { - return true; - } - return false; - } - - this.NavChild = function(evt,itemIndex,childIndex) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==13) return true; - if (!this.ProcessKeys(e)) return false; - - if (this.lastKey==38) // Up - { - if (childIndex>0) - { - var newIndex = childIndex-1; - document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); - } - else // already at first child, jump to parent - { - document.getElementById('Item'+itemIndex).focus(); - } - } - else if (this.lastKey==40) // Down - { - var newIndex = childIndex+1; - var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); - if (!elem) // last child, jump to parent next parent - { - elem = this.NavNext(itemIndex+1); - } - if (elem) - { - elem.focus(); - } - } - else if (this.lastKey==27) // Escape - { - parent.searchBox.CloseResultsWindow(); - parent.document.getElementById("MSearchField").focus(); - } - else if (this.lastKey==13) // Enter - { - return true; - } - return false; - } -} - -function setKeyActions(elem,action) -{ - elem.setAttribute('onkeydown',action); - elem.setAttribute('onkeypress',action); - elem.setAttribute('onkeyup',action); -} - -function setClassAttr(elem,attr) -{ - elem.setAttribute('class',attr); - elem.setAttribute('className',attr); -} - -function createResults() -{ - var results = document.getElementById("SRResults"); - for (var e=0; e - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/extras/doc/html/search/typedefs_0.js b/extras/doc/html/search/typedefs_0.js deleted file mode 100644 index 1e6448261..000000000 --- a/extras/doc/html/search/typedefs_0.js +++ /dev/null @@ -1,25 +0,0 @@ -var searchData= -[ - ['q0n15_652',['Q0n15',['../group__fixmath.html#ga7b0aeeb726b5790b7b181f4f1ba08ee4',1,'mozzi_fixmath.h']]], - ['q0n16_653',['Q0n16',['../group__fixmath.html#ga38b7537c31ebeb6a2aba2ea34d23f230',1,'mozzi_fixmath.h']]], - ['q0n31_654',['Q0n31',['../group__fixmath.html#ga8f4b2d87d5b697b3625c347618fa64c4',1,'mozzi_fixmath.h']]], - ['q0n32_655',['Q0n32',['../group__fixmath.html#gae32cb6df74dc8053c5da2a7b6378583b',1,'mozzi_fixmath.h']]], - ['q0n7_656',['Q0n7',['../group__fixmath.html#ga9a64ce80fa7c320187d2cf2104a96daa',1,'mozzi_fixmath.h']]], - ['q0n8_657',['Q0n8',['../group__fixmath.html#ga36659a8cbbf0b380fa7bb2355e32db51',1,'mozzi_fixmath.h']]], - ['q15n0_658',['Q15n0',['../group__fixmath.html#ga97de6e3641b7638093a53cd137c8568c',1,'mozzi_fixmath.h']]], - ['q15n16_659',['Q15n16',['../group__fixmath.html#ga3e1cab88474edfa08535402573125cae',1,'mozzi_fixmath.h']]], - ['q16n0_660',['Q16n0',['../group__fixmath.html#ga50af2aa1b7d33bba0b6e1a88c350adfa',1,'mozzi_fixmath.h']]], - ['q16n16_661',['Q16n16',['../group__fixmath.html#gab3127fd8ac279e1d8dda0292bc1fc8dc',1,'mozzi_fixmath.h']]], - ['q1n14_662',['Q1n14',['../group__fixmath.html#ga856876974bff2af13e507f42af0c4925',1,'mozzi_fixmath.h']]], - ['q1n15_663',['Q1n15',['../group__fixmath.html#gadefb02e4d84cdb085fbc6251b8f4e8be',1,'mozzi_fixmath.h']]], - ['q23n8_664',['Q23n8',['../group__fixmath.html#gaa43a54806ef427491497cc1762480d13',1,'mozzi_fixmath.h']]], - ['q24n8_665',['Q24n8',['../group__fixmath.html#ga940a116ff2bfbd1b013b41b1be73f70f',1,'mozzi_fixmath.h']]], - ['q31n0_666',['Q31n0',['../group__fixmath.html#ga5979e4e6ca93e368ee8c042a526b3b73',1,'mozzi_fixmath.h']]], - ['q32n0_667',['Q32n0',['../group__fixmath.html#gafc3e7e5a9ddd997abe8e815ba91f3c4e',1,'mozzi_fixmath.h']]], - ['q3n13_668',['Q3n13',['../group__fixmath.html#ga2ca0a65f5b9ddef56756b4a75b3b8a68',1,'mozzi_fixmath.h']]], - ['q7n0_669',['Q7n0',['../group__fixmath.html#gabc933ab043f14dfee980811b2a103594',1,'mozzi_fixmath.h']]], - ['q7n8_670',['Q7n8',['../group__fixmath.html#ga65001bd29222d896ae9256fd7a415d41',1,'mozzi_fixmath.h']]], - ['q8n0_671',['Q8n0',['../group__fixmath.html#gadec626a60cce3a7fec144d2505b79dda',1,'mozzi_fixmath.h']]], - ['q8n24_672',['Q8n24',['../group__fixmath.html#ga5ce3f8456c6ea996029b8ea0d96fb3e8',1,'mozzi_fixmath.h']]], - ['q8n8_673',['Q8n8',['../group__fixmath.html#ga8dcb8a23bfed3b8404f7a0d73f300c8a',1,'mozzi_fixmath.h']]] -]; diff --git a/extras/doc/html/sin1024__int8_8py_source.html b/extras/doc/html/sin1024__int8_8py_source.html deleted file mode 100644 index 4e96b17d4..000000000 --- a/extras/doc/html/sin1024__int8_8py_source.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - - -Mozzi: sin1024_int8.py Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
sin1024_int8.py
-
-
-
1 
-
3 
-
4 import array
-
5 import os
-
6 import textwrap
-
7 import math
-
8 
-
9 def generate(outfile, tablename, tablelength, samplerate):
-
10  fout = open(os.path.expanduser(outfile), "w")
-
11  fout.write('#ifndef ' + tablename + '_H_' + '\n')
-
12  fout.write('#define ' + tablename + '_H_' + '\n \n')
-
13  fout.write('#include <Arduino.h>'+'\n')
-
14  fout.write('#include "mozzi_pgmspace.h"'+'\n \n')
-
15  fout.write('#define ' + tablename + '_NUM_CELLS '+ str(tablelength)+'\n')
-
16  fout.write('#define ' + tablename + '_SAMPLERATE '+ str(samplerate)+'\n \n')
-
17  outstring = 'CONSTTABLE_STORAGE(int8_t) ' + tablename + '_DATA [] = {'
-
18 
-
19  try:
-
20  for num in range(tablelength):
-
21 
-
22  x = float(num)/tablelength
-
23 
-
24  t_x = (math.cos(2*math.pi*x-math.pi)+1)/2
-
25 
-
26  scaled = int(math.floor(t_x*255.999))-128
-
27 
-
28  outstring += str(scaled) + ', '
-
29  finally:
-
30  outstring = textwrap.fill(outstring, 80)
-
31  outstring += '\n }; \n \n #endif /* ' + tablename + '_H_ */\n'
-
32  fout.write(outstring)
-
33  fout.close()
-
34  print "wrote " + outfile
-
35 
-
36 generate("~/Desktop/sin1024_int8.h", "SIN1024", 1024, "1024")
-
-
- - - diff --git a/extras/doc/html/sin8192__uint8_8py_source.html b/extras/doc/html/sin8192__uint8_8py_source.html deleted file mode 100644 index 32ca93491..000000000 --- a/extras/doc/html/sin8192__uint8_8py_source.html +++ /dev/null @@ -1,146 +0,0 @@ - - - - - - - -Mozzi: sin8192_uint8.py Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
sin8192_uint8.py
-
-
-
1 
-
2 
-
3 
-
4 import array
-
5 import os
-
6 import textwrap
-
7 import math
-
8 
-
9 def generate(outfile, tablename, tablelength, samplerate):
-
10  fout = open(os.path.expanduser(outfile), "w")
-
11  fout.write('#ifndef ' + tablename + '_H_' + '\n')
-
12  fout.write('#define ' + tablename + '_H_' + '\n \n')
-
13  fout.write('#include <Arduino.h>'+'\n')
-
14  fout.write('#include "mozzi_pgmspace.h"'+'\n \n')
-
15  fout.write('#define ' + tablename + '_NUM_CELLS '+ str(tablelength)+'\n')
-
16  fout.write('#define ' + tablename + '_SAMPLERATE '+ str(samplerate)+'\n \n')
-
17  outstring = 'CONSTTABLE_STORAGE(int8_t) ' + tablename + '_DATA [] = {'
-
18  halftable = tablelength/2
-
19  try:
-
20  for num in range(tablelength):
-
21 
-
23  x = float(num)/tablelength
-
24 
-
25  t_x = (math.cos(2*math.pi*x-math.pi)+1)/2
-
26 
-
27  scaled = int(math.floor(t_x*255.999))
-
28 
-
29  outstring += str(scaled) + ', '
-
30 
-
32  finally:
-
33  outstring = textwrap.fill(outstring, 80)
-
34  outstring += '\n }; \n \n #endif /* ' + tablename + '_H_ */\n'
-
35  fout.write(outstring)
-
36  fout.close()
-
37  print "wrote " + outfile
-
38 
-
39 
-
40 generate("~/Desktop/sin8192_uint8.h", "sin8192_uint", 8192, "8192")
-
-
- - - diff --git a/extras/doc/html/sin__multi__levels__int8_8py_source.html b/extras/doc/html/sin__multi__levels__int8_8py_source.html deleted file mode 100644 index 77f58a659..000000000 --- a/extras/doc/html/sin__multi__levels__int8_8py_source.html +++ /dev/null @@ -1,151 +0,0 @@ - - - - - - - -Mozzi: sin_multi_levels_int8.py Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
sin_multi_levels_int8.py
-
-
-
1 
-
3 
-
4 import array,os,textwrap,math
-
5 
-
6 
-
7 
-
8 def generate(outfile, tablename, tablelength, numtables):
-
9  fout = open(os.path.expanduser(outfile), "w")
-
10 
-
11 
-
12 
-
13  fout.write('#ifndef ' + tablename + '_H_' + '\n')
-
14  fout.write('#define ' + tablename + '_H_' + '\n \n')
-
15  fout.write('#include <Arduino.h>'+'\n')
-
16  fout.write('#include "mozzi_pgmspace.h"'+'\n \n')
-
17  fout.write('#define ' + tablename + '_NUM_CELLS '+ str(tablelength) +'\n')
-
18  fout.write('CONSTTABLE_STORAGE(int8_t) ' + tablename + '_DATA [] = { \n')
-
19 
-
20  try:
-
21  for tablenum in range(numtables):
-
22  try:
-
23  outstring = '\n'
-
24  for num in range(tablelength):
-
25 
-
26  x = float(num)/tablelength
-
27 
-
28  t_x = math.sin(2*math.pi*x)*(float(tablenum+1)/numtables)
-
29 
-
30  scaled = int16_t(math.floor(t_x*127.999))
-
31 
-
32  outstring += str(scaled) + ', '
-
33  finally:
-
34  outstring = textwrap.fill(outstring, 80)
-
35  outstring += '\n'
-
36  fout.write(outstring)
-
37  finally:
-
38 
-
39  fout.write('}; \n \n #endif /* ' + tablename + '_H_ */\n')
-
40  fout.close()
-
41  print "wrote " + outfile
-
42 
-
43 
-
44 generate("~/Desktop/sin_64level_int8.h", "SIN_64LEVEL", 256, 64)
-
-
- - - diff --git a/extras/doc/html/splitbar.png b/extras/doc/html/splitbar.png deleted file mode 100644 index c56343841..000000000 Binary files a/extras/doc/html/splitbar.png and /dev/null differ diff --git a/extras/doc/html/struct_integer_type_3_011_01_4-members.html b/extras/doc/html/struct_integer_type_3_011_01_4-members.html deleted file mode 100644 index 4610daae4..000000000 --- a/extras/doc/html/struct_integer_type_3_011_01_4-members.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
IntegerType< 1 > Member List
-
-
- -

This is the complete list of members for IntegerType< 1 >, including all inherited members.

- - - -
signed_type typedef (defined in IntegerType< 1 >)IntegerType< 1 >
unsigned_type typedef (defined in IntegerType< 1 >)IntegerType< 1 >
-
- - - diff --git a/extras/doc/html/struct_integer_type_3_011_01_4.html b/extras/doc/html/struct_integer_type_3_011_01_4.html deleted file mode 100644 index d01f44f54..000000000 --- a/extras/doc/html/struct_integer_type_3_011_01_4.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - -Mozzi: IntegerType< 1 > Struct Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
IntegerType< 1 > Struct Reference
-
-
-

Detailed Description

-
-

Definition at line 27 of file IntegerType.h.

-
- - - - - -

-Public Types

-typedef uint8_t unsigned_type
 
-typedef int8_t signed_type
 
-
-
- - - diff --git a/extras/doc/html/struct_integer_type_3_011_01_4.js b/extras/doc/html/struct_integer_type_3_011_01_4.js deleted file mode 100644 index f2a7b612e..000000000 --- a/extras/doc/html/struct_integer_type_3_011_01_4.js +++ /dev/null @@ -1,5 +0,0 @@ -var struct_integer_type_3_011_01_4 = -[ - [ "signed_type", "struct_integer_type_3_011_01_4.html#a6430fb22abf4c71f842612ddde022a01", null ], - [ "unsigned_type", "struct_integer_type_3_011_01_4.html#a3e0b143ba1392aa5229d057c71fbe177", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/struct_integer_type_3_012_01_4-members.html b/extras/doc/html/struct_integer_type_3_012_01_4-members.html deleted file mode 100644 index c75b807a6..000000000 --- a/extras/doc/html/struct_integer_type_3_012_01_4-members.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
IntegerType< 2 > Member List
-
-
- -

This is the complete list of members for IntegerType< 2 >, including all inherited members.

- - - -
signed_type typedef (defined in IntegerType< 2 >)IntegerType< 2 >
unsigned_type typedef (defined in IntegerType< 2 >)IntegerType< 2 >
-
- - - diff --git a/extras/doc/html/struct_integer_type_3_012_01_4.html b/extras/doc/html/struct_integer_type_3_012_01_4.html deleted file mode 100644 index 8268e5161..000000000 --- a/extras/doc/html/struct_integer_type_3_012_01_4.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - -Mozzi: IntegerType< 2 > Struct Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
IntegerType< 2 > Struct Reference
-
-
-

Detailed Description

-
-

Definition at line 32 of file IntegerType.h.

-
- - - - - -

-Public Types

-typedef uint16_t unsigned_type
 
-typedef int16_t signed_type
 
-
-
- - - diff --git a/extras/doc/html/struct_integer_type_3_012_01_4.js b/extras/doc/html/struct_integer_type_3_012_01_4.js deleted file mode 100644 index ba1c2a8a0..000000000 --- a/extras/doc/html/struct_integer_type_3_012_01_4.js +++ /dev/null @@ -1,5 +0,0 @@ -var struct_integer_type_3_012_01_4 = -[ - [ "signed_type", "struct_integer_type_3_012_01_4.html#af650a594ac2482f5d32c22d148db833d", null ], - [ "unsigned_type", "struct_integer_type_3_012_01_4.html#a2a064442b5dd6186d2ec05a860ae7f83", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/struct_integer_type_3_014_01_4-members.html b/extras/doc/html/struct_integer_type_3_014_01_4-members.html deleted file mode 100644 index 6e930a83f..000000000 --- a/extras/doc/html/struct_integer_type_3_014_01_4-members.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
IntegerType< 4 > Member List
-
-
- -

This is the complete list of members for IntegerType< 4 >, including all inherited members.

- - - -
signed_type typedef (defined in IntegerType< 4 >)IntegerType< 4 >
unsigned_type typedef (defined in IntegerType< 4 >)IntegerType< 4 >
-
- - - diff --git a/extras/doc/html/struct_integer_type_3_014_01_4.html b/extras/doc/html/struct_integer_type_3_014_01_4.html deleted file mode 100644 index e1e20c07c..000000000 --- a/extras/doc/html/struct_integer_type_3_014_01_4.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - -Mozzi: IntegerType< 4 > Struct Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
IntegerType< 4 > Struct Reference
-
-
-

Detailed Description

-
-

Definition at line 37 of file IntegerType.h.

-
- - - - - -

-Public Types

-typedef uint32_t unsigned_type
 
-typedef int32_t signed_type
 
-
-
- - - diff --git a/extras/doc/html/struct_integer_type_3_014_01_4.js b/extras/doc/html/struct_integer_type_3_014_01_4.js deleted file mode 100644 index f2a286ed2..000000000 --- a/extras/doc/html/struct_integer_type_3_014_01_4.js +++ /dev/null @@ -1,5 +0,0 @@ -var struct_integer_type_3_014_01_4 = -[ - [ "signed_type", "struct_integer_type_3_014_01_4.html#a51587a78699c66b879cc030b24ae304d", null ], - [ "unsigned_type", "struct_integer_type_3_014_01_4.html#ad038f91268a18621f2314c14d4d76d2b", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/struct_integer_type_3_018_01_4-members.html b/extras/doc/html/struct_integer_type_3_018_01_4-members.html deleted file mode 100644 index b8119fd81..000000000 --- a/extras/doc/html/struct_integer_type_3_018_01_4-members.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
IntegerType< 8 > Member List
-
-
- -

This is the complete list of members for IntegerType< 8 >, including all inherited members.

- - - -
signed_type typedef (defined in IntegerType< 8 >)IntegerType< 8 >
unsigned_type typedef (defined in IntegerType< 8 >)IntegerType< 8 >
-
- - - diff --git a/extras/doc/html/struct_integer_type_3_018_01_4.html b/extras/doc/html/struct_integer_type_3_018_01_4.html deleted file mode 100644 index b3ed387ac..000000000 --- a/extras/doc/html/struct_integer_type_3_018_01_4.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - -Mozzi: IntegerType< 8 > Struct Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
IntegerType< 8 > Struct Reference
-
-
-

Detailed Description

-
-

Definition at line 42 of file IntegerType.h.

-
- - - - - -

-Public Types

-typedef uint64_t unsigned_type
 
-typedef int64_t signed_type
 
-
-
- - - diff --git a/extras/doc/html/struct_integer_type_3_018_01_4.js b/extras/doc/html/struct_integer_type_3_018_01_4.js deleted file mode 100644 index 3a45d2560..000000000 --- a/extras/doc/html/struct_integer_type_3_018_01_4.js +++ /dev/null @@ -1,5 +0,0 @@ -var struct_integer_type_3_018_01_4 = -[ - [ "signed_type", "struct_integer_type_3_018_01_4.html#a228ff4637cc681fd9319de423525f5a0", null ], - [ "unsigned_type", "struct_integer_type_3_018_01_4.html#a7319b96acf35cd610fd96a474e30d55e", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/struct_mono_output-members.html b/extras/doc/html/struct_mono_output-members.html deleted file mode 100644 index c94b0fb52..000000000 --- a/extras/doc/html/struct_mono_output-members.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
MonoOutput Member List
-
-
- -

This is the complete list of members for MonoOutput, including all inherited members.

- - - - - - - - - - - - -
clip()MonoOutputinline
from16Bit(int16_t l)MonoOutputinlinestatic
from8Bit(int16_t l)MonoOutputinlinestatic
fromAlmostNBit(A bits, B l)MonoOutputinlinestatic
fromNBit(uint8_t bits, T l)MonoOutputinlinestatic
fromSFix(SFix< NI, NF, RANGE > l)MonoOutputinlinestatic
l() const (defined in MonoOutput)MonoOutputinline
MonoOutput()MonoOutputinline
MonoOutput(AudioOutputStorage_t l)MonoOutputinline
operator AudioOutputStorage_t() constMonoOutputinline
r() const (defined in MonoOutput)MonoOutputinline
-
- - - diff --git a/extras/doc/html/struct_mono_output.html b/extras/doc/html/struct_mono_output.html deleted file mode 100644 index 71db178dc..000000000 --- a/extras/doc/html/struct_mono_output.html +++ /dev/null @@ -1,415 +0,0 @@ - - - - - - - -Mozzi: MonoOutput Struct Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- - -
- -

This struct encapsulates one frame of mono audio output. - More...

- -

#include <AudioOutput.h>

-

Detailed Description

-

This struct encapsulates one frame of mono audio output.

-

Internally, it really just boils down to a single int value, but the struct provides useful API an top of that, for the following:

-

a) To construct an output frame, you should use one of the from8Bit(), fromNBit(), etc. functions. Given a raw input value, at a known resolution (number of bits), this scales the output efficiently to whatever is needed on the target platform. Using this, your updateAudio() function will be portable across different CPU and different output methods, including external DACs. b) The struct provides some convenience API on top of this. Right now, this is the function clip(), replacing the more verbose, and non-portable constrain(x, -244, 243) found in some old sketches. c) The struct provides accessors l() and r() that are source-compatible with StereoOutput, making it easy to e.g. implement support for an external DAC in both mono and stereo. d) Finally, an automatic conversion operator to int aka AudioOutput_t provides backward compatibility with old Mozzi sketches. Internally, the compiler will actually do away with this whole struct, leaving just the same basic fast integer operations as in older Mozzi sketches. However, now, you don't have to rewrite those for different configurations.

- -

Definition at line 111 of file AudioOutput.h.

-
- - - - - - - - - - - - - - - - - -

-Public Member Functions

 MonoOutput ()
 Default constructor. More...
 
MonoOutput (AudioOutputStorage_t l)
 Construct an audio frame from raw values (zero-centered)
 
operator AudioOutputStorage_t () const
 Conversion to int operator.
 
-AudioOutputStorage_t l () const
 
-AudioOutputStorage_t r () const
 
MonoOutputclip ()
 Clip frame to supported range. More...
 
- - - - - - - - - - - - - - - - - - - -

-Static Public Member Functions

template<typename T >
static MonoOutput fromNBit (uint8_t bits, T l)
 Construct an audio frame a zero-centered value known to be in the N bit range. More...
 
static MonoOutput from8Bit (int16_t l)
 Construct an audio frame from a zero-centered value known to be in the 8 bit range. More...
 
static MonoOutput from16Bit (int16_t l)
 Construct an audio frame from a zero-centered value known to be in the 16 bit range. More...
 
template<int8_t NI, int8_t NF, uint64_t RANGE>
static MonoOutput fromSFix (SFix< NI, NF, RANGE > l)
 Construct an audio frame from a SFix type from FixMath. More...
 
template<typename A , typename B >
static MonoOutput fromAlmostNBit (A bits, B l)
 Construct an audio frame a zero-centered value known to be above at almost but not quite the N bit range, e.g. More...
 
-

Constructor & Destructor Documentation

- -

◆ MonoOutput()

- -
-
- - - - - -
- - - - - - - -
MonoOutput::MonoOutput ()
-
-inline
-
- -

Default constructor.

-

Does not initialize the sample!

- -

Definition at line 113 of file AudioOutput.h.

- -
-
-

Member Function Documentation

- -

◆ clip()

- -
-
- - - - - -
- - - - - - - -
MonoOutput& MonoOutput::clip ()
-
-inline
-
- -

Clip frame to supported range.

-

This is useful when at times, but only rarely, the signal may exceed the usual range. Using this function does not avoid artifacts, entirely, but gives much better results than an overflow.

- -

Definition at line 129 of file AudioOutput.h.

- -
-
- -

◆ from16Bit()

- -
-
- - - - - -
- - - - - - - - -
static MonoOutput MonoOutput::from16Bit (int16_t l)
-
-inlinestatic
-
- -

Construct an audio frame from a zero-centered value known to be in the 16 bit range.

-

This is jsut a shortcut for fromNBit(16, ...) provided for convenience.

- -

Definition at line 139 of file AudioOutput.h.

- -
-
- -

◆ from8Bit()

- -
-
- - - - - -
- - - - - - - - -
static MonoOutput MonoOutput::from8Bit (int16_t l)
-
-inlinestatic
-
- -

Construct an audio frame from a zero-centered value known to be in the 8 bit range.

-

On AVR, if MOZZI_OUTPUT_PWM mode, this is effectively the same as calling the constructor, directly (no scaling gets applied). On platforms/configs using more bits, an appropriate left-shift will be performed.

- -

Definition at line 137 of file AudioOutput.h.

- -
-
- -

◆ fromAlmostNBit()

- -
-
-
-template<typename A , typename B >
- - - - - -
- - - - - - - - - - - - - - - - - - -
static MonoOutput MonoOutput::fromAlmostNBit (bits,
l 
)
-
-inlinestatic
-
- -

Construct an audio frame a zero-centered value known to be above at almost but not quite the N bit range, e.g.

-

at N=8 bits and a litte. On most platforms, this is exactly the same as fromNBit(), shifting up or down to the platforms' available resolution.

-

However, on AVR, MOZZI_OUTPUT_PWM mode (where about 8.5 bits are usable), the value will be shifted to the (almost) 9 bit range, instead of to the 8 bit range. allowing to make use of that extra half bit of resolution. In many cases it is useful to follow up this call with clip(). E.g.:

-
return MonoOutput::fromAlmostNBit(10, oscilA.next() + oscilB.next() + oscilC.next()).clip();
-
MonoOutput & clip()
Clip frame to supported range.
Definition: AudioOutput.h:129
-
static MonoOutput fromAlmostNBit(A bits, B l)
Construct an audio frame a zero-centered value known to be above at almost but not quite the N bit ra...
Definition: AudioOutput.h:153
-
-

Definition at line 153 of file AudioOutput.h.

- -
-
- -

◆ fromNBit()

- -
-
-
-template<typename T >
- - - - - -
- - - - - - - - - - - - - - - - - - -
static MonoOutput MonoOutput::fromNBit (uint8_t bits,
l 
)
-
-inlinestatic
-
- -

Construct an audio frame a zero-centered value known to be in the N bit range.

-

Appropriate left- or right-shifting will be performed, based on the number of output bits available. While this function takes care of the shifting, beware of potential overflow issues, if your intermediary results exceed the 16 bit range. Use proper casts to int32_t or larger in that case (and the compiler will automatically pick the 32 bit overload in this case)

- -

Definition at line 134 of file AudioOutput.h.

- -
-
- -

◆ fromSFix()

- -
-
-
-template<int8_t NI, int8_t NF, uint64_t RANGE>
- - - - - -
- - - - - - - - -
static MonoOutput MonoOutput::fromSFix (SFix< NI, NF, RANGE > l)
-
-inlinestatic
-
- -

Construct an audio frame from a SFix type from FixMath.

-

Mozzi will figure out how many bits are in there and performs appropriate shifting to match the output range.

- -

Definition at line 142 of file AudioOutput.h.

- -
-
-
-
- - - diff --git a/extras/doc/html/struct_mono_output.js b/extras/doc/html/struct_mono_output.js deleted file mode 100644 index 7eea7efb6..000000000 --- a/extras/doc/html/struct_mono_output.js +++ /dev/null @@ -1,9 +0,0 @@ -var struct_mono_output = -[ - [ "MonoOutput", "struct_mono_output.html#a8a0bf7d9c4446b83f17ccd75433a828f", null ], - [ "MonoOutput", "struct_mono_output.html#a059352b524ac1356adececc104df6c74", null ], - [ "clip", "struct_mono_output.html#a0e641cbab9732214c696cd1071e45de5", null ], - [ "l", "struct_mono_output.html#aac4ac57932e39b02959cd55bdb5d394d", null ], - [ "operator AudioOutputStorage_t", "struct_mono_output.html#a1fa86997aa020097d6011b23ee35342a", null ], - [ "r", "struct_mono_output.html#a3fe87c5d547ee10e8aeb2d6af95905e3", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/struct_stereo_output-members.html b/extras/doc/html/struct_stereo_output-members.html deleted file mode 100644 index f7b14c1c9..000000000 --- a/extras/doc/html/struct_stereo_output-members.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - - -Mozzi: Member List - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
StereoOutput Member List
-
-
- -

This is the complete list of members for StereoOutput, including all inherited members.

- - - - - - - - - - - - - -
clip()StereoOutputinline
from16Bit(int16_t l, int16_t r)StereoOutputinlinestatic
from8Bit(int16_t l, int16_t r)StereoOutputinlinestatic
fromAlmostNBit(A bits, B l, B r)StereoOutputinlinestatic
fromNBit(uint8_t bits, T l, T r)StereoOutputinlinestatic
fromSFix(SFix< NI, NF, RANGE > l, SFix< _NI, _NF, _RANGE > r)StereoOutputinlinestatic
l() const (defined in StereoOutput)StereoOutputinline
portable() const __attribute__((deprecated("Sketch generates stereo outputStereoOutputinline
r() const (defined in StereoOutput)StereoOutputinline
setting (defined in StereoOutput)StereoOutput
StereoOutput(AudioOutputStorage_t l, AudioOutputStorage_t r)StereoOutputinline
StereoOutput()StereoOutputinline
-
- - - diff --git a/extras/doc/html/struct_stereo_output.html b/extras/doc/html/struct_stereo_output.html deleted file mode 100644 index ef9ea0ddf..000000000 --- a/extras/doc/html/struct_stereo_output.html +++ /dev/null @@ -1,310 +0,0 @@ - - - - - - - -Mozzi: StereoOutput Struct Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- - -
- -

This struct encapsulates one frame of mono audio output. - More...

- -

#include <AudioOutput.h>

-

Detailed Description

-

This struct encapsulates one frame of mono audio output.

-

Internally, it really just boils down to two int values, but the struct provides useful API an top of that. For more detail see MonoOutput .

- -

Definition at line 161 of file AudioOutput.h.

-
- - - - - - - - - - - - - - - - - -

-Public Member Functions

StereoOutput (AudioOutputStorage_t l, AudioOutputStorage_t r)
 Construct an audio frame from raw values (zero-centered)
 
 StereoOutput ()
 Default constructor. More...
 
AudioOutput portable () const __attribute__((deprecated("Sketch generates stereo output
 Conversion to int operator: If used in a mono config, returns only the left channel (and gives a compile time warning). More...
 
-AudioOutputStorage_t l () const
 
-AudioOutputStorage_t r () const
 
StereoOutputclip ()
 See MonoOutput::clip(). More...
 
- - - - - - - - - - - - - - - - - - - -

-Static Public Member Functions

-template<typename T >
static StereoOutput fromNBit (uint8_t bits, T l, T r)
 See MonoOutput::fromNBit(), stereo variant.
 
-static StereoOutput from8Bit (int16_t l, int16_t r)
 See MonoOutput::from8Bit(), stereo variant.
 
-static StereoOutput from16Bit (int16_t l, int16_t r)
 See MonoOutput::from16Bit(), stereo variant.
 
template<int8_t NI, int8_t NF, uint64_t RANGE, int8_t _NI, int8_t _NF, uint64_t _RANGE>
static StereoOutput fromSFix (SFix< NI, NF, RANGE > l, SFix< _NI, _NF, _RANGE > r)
 See MonoOutput::fromSFix(), stereo variant. More...
 
-template<typename A , typename B >
static StereoOutput fromAlmostNBit (A bits, B l, B r)
 See MonoOutput::fromAlmostNBit(), stereo variant.
 
- - - -

-Public Attributes

-AudioOutput but Mozzi is configured for mono Check MOZZI_AUDIO_CHANNELS setting
 
-

Constructor & Destructor Documentation

- -

◆ StereoOutput()

- -
-
- - - - - -
- - - - - - - -
StereoOutput::StereoOutput ()
-
-inline
-
- -

Default constructor.

-

Does not initialize the sample!

- -

Definition at line 165 of file AudioOutput.h.

- -
-
-

Member Function Documentation

- -

◆ clip()

- -
-
- - - - - -
- - - - - - - -
StereoOutput& StereoOutput::clip ()
-
-inline
-
- -

See MonoOutput::clip().

-

Clips both channels.

- -

Definition at line 178 of file AudioOutput.h.

- -
-
- -

◆ fromSFix()

- -
-
-
-template<int8_t NI, int8_t NF, uint64_t RANGE, int8_t _NI, int8_t _NF, uint64_t _RANGE>
- - - - - -
- - - - - - - - - - - - - - - - - - -
static StereoOutput StereoOutput::fromSFix (SFix< NI, NF, RANGE > l,
SFix< _NI, _NF, _RANGE > r 
)
-
-inlinestatic
-
- -

See MonoOutput::fromSFix(), stereo variant.

-

Note that the two channels do not need to have the same number of bits.

- -

Definition at line 188 of file AudioOutput.h.

- -
-
- -

◆ portable()

- -
-
- - - - - -
- - - - - - - -
AudioOutput StereoOutput::portable () const
-
-inline
-
- -

Conversion to int operator: If used in a mono config, returns only the left channel (and gives a compile time warning).

-

This could be turned into an operator for implicit conversion in this case. For now we chose to apply conversion on demand, only, as most of the time using StereoOutput in a mono config, is not intended.

- -
-
-
-
- - - diff --git a/extras/doc/html/struct_stereo_output.js b/extras/doc/html/struct_stereo_output.js deleted file mode 100644 index e6a359bf2..000000000 --- a/extras/doc/html/struct_stereo_output.js +++ /dev/null @@ -1,10 +0,0 @@ -var struct_stereo_output = -[ - [ "StereoOutput", "struct_stereo_output.html#a21de1439b838982ab5cb6663bef94498", null ], - [ "StereoOutput", "struct_stereo_output.html#a78371f79ab53e2b7c6ec5e0e04fc5062", null ], - [ "clip", "struct_stereo_output.html#ac949f14e2d88f3c4e11986675addb228", null ], - [ "l", "struct_stereo_output.html#a1f5572fce5164f49fc21d7a828fe04a8", null ], - [ "portable", "struct_stereo_output.html#a84824d693bf7ce2b9141ff6f9b7c87be", null ], - [ "r", "struct_stereo_output.html#aecd84b6725634f864349a668bdfdf653", null ], - [ "setting", "struct_stereo_output.html#a1d3f10eed67a406d962a4f7c0249aa66", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/sync_off.png b/extras/doc/html/sync_off.png deleted file mode 100644 index 76203870e..000000000 Binary files a/extras/doc/html/sync_off.png and /dev/null differ diff --git a/extras/doc/html/sync_on.png b/extras/doc/html/sync_on.png deleted file mode 100644 index cb6892096..000000000 Binary files a/extras/doc/html/sync_on.png and /dev/null differ diff --git a/extras/doc/html/tab_a.png b/extras/doc/html/tab_a.png deleted file mode 100644 index a53af0caa..000000000 Binary files a/extras/doc/html/tab_a.png and /dev/null differ diff --git a/extras/doc/html/tab_b.png b/extras/doc/html/tab_b.png deleted file mode 100644 index 2e56c1e29..000000000 Binary files a/extras/doc/html/tab_b.png and /dev/null differ diff --git a/extras/doc/html/tab_h.png b/extras/doc/html/tab_h.png deleted file mode 100644 index 9fe25a186..000000000 Binary files a/extras/doc/html/tab_h.png and /dev/null differ diff --git a/extras/doc/html/tab_s.png b/extras/doc/html/tab_s.png deleted file mode 100644 index 1ef2165e7..000000000 Binary files a/extras/doc/html/tab_s.png and /dev/null differ diff --git a/extras/doc/html/table__generator__template_8py_source.html b/extras/doc/html/table__generator__template_8py_source.html deleted file mode 100644 index 713d9d65f..000000000 --- a/extras/doc/html/table__generator__template_8py_source.html +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - - -Mozzi: table_generator_template.py Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
table_generator_template.py
-
-
-
1 import array
-
2 import os
-
3 import textwrap
-
4 import random
-
5 
-
6 def generate(outfile, tablename, tablelength, samplerate):
-
7  fout = open(os.path.expanduser(outfile), "w")
-
8  fout.write('#ifndef ' + tablename + '_H_' + '\n')
-
9  fout.write('#define ' + tablename + '_H_' + '\n \n')
-
10  fout.write('#include <Arduino.h>'+'\n')
-
11  fout.write('#include "mozzi_pgmspace.h"'+'\n \n')
-
12  fout.write('#define ' + tablename + '_NUM_CELLS '+ str(tablelength)+'\n')
-
13  fout.write('#define ' + tablename + '_SAMPLERATE '+ str(samplerate)+'\n \n')
-
14  outstring = 'CONSTTABLE_STORAGE(int8_t) ' + tablename + '_DATA [] = {'
-
15  try:
-
16  for num in range(tablelength):
-
17  outstring += str(random.randint(-128, 127)) + ", "
-
18  finally:
-
19  outstring += "};"
-
20  outstring = textwrap.fill(outstring, 80)
-
21  fout.write(outstring)
-
22  fout.write('\n \n #endif /* ' + tablename + '_H_ */\n')
-
23  fout.close()
-
24  print("wrote " + outfile)
-
25 
-
26 generate("~/Desktop/whitenoise_4096_3_int8.h", "WHITENOISE_4096_3", 4096, 16384) # adjust to suit
-
-
- - - diff --git a/extras/doc/html/tabs.css b/extras/doc/html/tabs.css deleted file mode 100644 index 7d45d36c1..000000000 --- a/extras/doc/html/tabs.css +++ /dev/null @@ -1 +0,0 @@ -.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0px/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0px 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0px 1px 1px rgba(255,255,255,0.9);color:#283A5D;outline:none}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a.current{color:#D23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media (min-width: 768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283A5D transparent transparent transparent;background:transparent;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0px 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;border-radius:0 !important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a:hover span.sub-arrow{border-color:#fff transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;border-radius:5px !important;box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0 !important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent #fff}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #D23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#D23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} diff --git a/extras/doc/html/teensy_pin_map_8h_source.html b/extras/doc/html/teensy_pin_map_8h_source.html deleted file mode 100644 index 7be815751..000000000 --- a/extras/doc/html/teensy_pin_map_8h_source.html +++ /dev/null @@ -1,218 +0,0 @@ - - - - - - - -Mozzi: teensyPinMap.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
teensyPinMap.h
-
-
-
1 /*
-
2  * teensyPinMap.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2021-2024 T. Combriat and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10 */
-
11 
-
12 #ifndef TEENSYPINMAP_H_
-
13 #define TEENSYPINMAP_H
-
14 
-
15 
-
16 inline uint8_t teensyPinMap(uint8_t pin)
-
17 {
-
18  if (pin < 24) return pin-14; // common to all teensys
-
19 
-
20 #if defined (__MK20DX128__) // Teensy 3.0
-
21  return pin - 24;
-
22 
-
23 #elif defined (__MK20DX256__) // Teensy 3.1/3.2
-
24 
-
25  switch (pin)
-
26  {
-
27  case 34:
-
28  return 10;
-
29  case 35:
-
30  return 11;
-
31  case 36:
-
32  return 12;
-
33  case 37:
-
34  return 13;
-
35  case 40:
-
36  return 14;
-
37  case 26:
-
38  return 15;
-
39  case 27:
-
40  return 16;
-
41  case 28:
-
42  return 17;
-
43  case 29:
-
44  return 18;
-
45  case 30:
-
46  return 19;
-
47  case 31:
-
48  return 20;
-
49  }
-
50  return pin - 24; // probably incorrect
-
51 
-
52 
-
53 #elif defined (__MKL26Z64__) //TeensyLC
-
54  return pin-14;
-
55 
-
56 
-
57 #elif defined(__MK64FX512__) || defined(__MK66FX1M0__) // Teensy 3.5//3.6
-
58  switch (pin)
-
59  {
-
60  case 64:
-
61  return 10;
-
62  case 65:
-
63  return 11;
-
64  case 31:
-
65  return 12;
-
66  case 32:
-
67  return 13;
-
68  case 33:
-
69  return 14;
-
70  case 34:
-
71  return 15;
-
72  case 35:
-
73  return 16;
-
74  case 36:
-
75  return 17;
-
76  case 37:
-
77  return 18;
-
78  case 38:
-
79  return 19;
-
80  case 39:
-
81  return 20;
-
82  case 66:
-
83  return 21;
-
84  case 67:
-
85  return 22;
-
86  case 49:
-
87  return 23;
-
88  case 50:
-
89  return 24;
-
90  case 68:
-
91  return 25;
-
92  case 69:
-
93  return 26;
-
94  }
-
95  return pin-14; // probably incorrect, but we need to return *something*
-
96 
-
97 #elif defined ARDUINO_TEENSY40
-
98  return pin-14;
-
99 
-
100 #elif defined ARDUINO_TEENSY41
-
101  if (pin< 28) return pin-14;
-
102  return pin-24;
-
103 #endif
-
104 }
-
105 
-
106 
-
107 
-
108 
-
109 
-
110 #endif
-
-
- - - diff --git a/extras/doc/html/triangle_8py_source.html b/extras/doc/html/triangle_8py_source.html deleted file mode 100644 index b7122ecd8..000000000 --- a/extras/doc/html/triangle_8py_source.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - -Mozzi: triangle.py Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
triangle.py
-
-
-
1 import array
-
2 import os
-
3 import textwrap
-
4 import math
-
5 
-
6 def generate(outfile, tablename, tablelength, samplerate):
-
7  fout = open(os.path.expanduser(outfile), "w")
-
8  fout.write('#ifndef ' + tablename + '_H_' + '\n')
-
9  fout.write('#define ' + tablename + '_H_' + '\n \n')
-
10  fout.write('#include <Arduino.h>'+'\n')
-
11  fout.write('#include "mozzi_pgmspace.h"'+'\n \n')
-
12  fout.write('#define ' + tablename + '_NUM_CELLS '+ str(tablelength)+'\n')
-
13  fout.write('#define ' + tablename + '_SAMPLERATE '+ str(samplerate)+'\n \n')
-
14  outstring = 'CONSTTABLE_STORAGE(int8_t) ' + tablename + '_DATA [] = {'
-
15  try:
-
16  for num in range(tablelength):
-
17 
-
18  x = float(num)/tablelength
-
19  if x<0.5:
-
20  t_x = 2 * x
-
21  else:
-
22  t_x = 2 - 2 * x
-
23 
-
24  scaled = int(math.floor(t_x*255.999))
-
25  outstring += str(scaled) + ', '
-
26  finally:
-
27  outstring += "};"
-
28  outstring = textwrap.fill(outstring, 80)
-
29  fout.write(outstring)
-
30  fout.write('\n \n #endif /* ' + tablename + '_H_ */\n')
-
31  fout.close()
-
32  print "wrote " + outfile
-
33 
-
34 generate("~/Desktop/triangle512_uint8.h", "triange", 512, "512")
-
-
- - - diff --git a/extras/doc/html/twi__nonblock_8h_source.html b/extras/doc/html/twi__nonblock_8h_source.html deleted file mode 100644 index 9873068fa..000000000 --- a/extras/doc/html/twi__nonblock_8h_source.html +++ /dev/null @@ -1,206 +0,0 @@ - - - - - - - -Mozzi: twi_nonblock.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
twi_nonblock.h
-
-
-
1 /*
-
2  * twi_nonblock.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2012-2024 Marije Baalman and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 
-
13 #ifndef TWI_NONBLOCK_H_
-
14 #define TWI_NONBLOCK_H_
-
15 
-
16 #include <hardware_defines.h>
-
17 // Added by TB2014 for Teensy 3 port
-
18 #if IS_AVR() // this code is only for AVRs
-
19 
-
20 #include "Arduino.h"
-
21 #include <compat/twi.h>
-
22 
-
23 #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
-
24 #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
-
25 
-
26 // --- twi reading variables
-
27  #ifndef TWI_FREQ
-
28  #define TWI_FREQ 100000L
-
29  #endif
-
30 
-
31  #ifndef TWI_BUFFER_LENGTH
-
32  #define TWI_BUFFER_LENGTH 32
-
33  #endif
-
34 
-
35  #define TWI_READY 0
-
36  #define TWI_PRE_MRX 1
-
37  #define TWI_MRX 2
-
38  #define TWI_PRE_MTX 3
-
39  #define TWI_MTX 4
-
40  #define TWI_SRX 5
-
41  #define TWI_STX 6
-
42 
-
43 static volatile uint8_t twi_state;
-
44 static volatile uint8_t twi_oldstate;
-
45 // static uint8_t twiint_masrw;
-
46 static uint8_t twi_slarw;
-
47 
-
48 static uint8_t twi_masterBuffer[TWI_BUFFER_LENGTH];
-
49 static volatile uint8_t twi_masterBufferIndex;
-
50 static uint8_t twi_masterBufferLength;
-
51 
-
52 static volatile uint8_t twi_error;
-
53 
-
54 #define BUFFER_LENGTH 32
-
55 static uint8_t rxBuffer[BUFFER_LENGTH];
-
56 static uint8_t rxBufferIndex = 0;
-
57 static uint8_t rxBufferLength = 0;
-
58 
-
59 static uint8_t txAddress = 0;
-
60 static uint8_t txBuffer[BUFFER_LENGTH];
-
61 static uint8_t txBufferIndex = 0;
-
62 static uint8_t txBufferLength = 0;
-
63 
-
64 static uint8_t transmitting;
-
65 
-
66 
-
67 void initialize_twi_nonblock();
-
68 
-
69 uint8_t twowire_requestFrom(uint8_t address, uint8_t quantity);
-
70 void twowire_beginTransmission( uint8_t address );
-
71 void twowire_send( uint8_t data );
-
72 uint8_t twowire_endTransmission(void);
-
73 
-
74 /// non-blocking functions:
-
75 uint8_t twi_initiateReadFrom(uint8_t address, uint8_t length);
-
76 void twi_continueReadFrom();
-
77 
-
78 uint8_t twi_readMasterBuffer( uint8_t* data, uint8_t length );
-
79 
-
80 uint8_t twi_initiateWriteTo(uint8_t address, uint8_t* data, uint8_t length );
-
81 void twi_continueWriteTo();
-
82 
-
83 
-
84 void twi_reply(uint8_t ack);
-
85 void twi_stop(void);
-
86 void twi_releaseBus(void);
-
87 
-
88 /// blocking versions:
-
89 uint8_t twi_readFromBlocking(uint8_t address, uint8_t* data, uint8_t length);
-
90 uint8_t twi_writeToBlocking(uint8_t address, uint8_t* data, uint8_t length, uint8_t wait);
-
91 
-
92 #endif
-
93 
-
94 #if !defined _MOZZI_TWI_HEADER_ONLY
-
95 #include "internal/twi_nonblock.hpp"
-
96 #endif
-
97 
-
98 #endif
-
-
- - - diff --git a/extras/doc/html/twi__nonblock_8hpp_source.html b/extras/doc/html/twi__nonblock_8hpp_source.html deleted file mode 100644 index a9bb816ce..000000000 --- a/extras/doc/html/twi__nonblock_8hpp_source.html +++ /dev/null @@ -1,710 +0,0 @@ - - - - - - - -Mozzi: twi_nonblock.hpp Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
twi_nonblock.hpp
-
-
-
1 /*
-
2  * twi_nonblock.cpp
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2012-2024 Marije Baalman and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 #include "hardware_defines.h"
-
13 #if !IS_AVR()
-
14 #error Wrong include
-
15 #endif
-
16 
-
17 // Added by TB2014 for Mozzi library, to hide code from Teensy 3.1
-
18 
-
19 
-
20 #include <avr/interrupt.h>
-
21 
-
22 uint8_t twi_writeAddress;
-
23 uint8_t * twi_writeData;
-
24 uint8_t twi_writeLength;
-
25 
-
26 uint8_t twi_readAddress;
-
27 // uint8_t * twi_writeData;
-
28 uint8_t twi_readLength;
-
29 
-
30 /*
-
31  * Function twi_init
-
32  * Desc readys twi pins and sets twi bitrate
-
33  * Input none
-
34  * Output none
-
35  */
-
36 void initialize_twi_nonblock(){
-
37  rxBufferIndex = 0;
-
38  rxBufferLength = 0;
-
39 
-
40  txBufferIndex = 0;
-
41  txBufferLength = 0;
-
42 
-
43  // initialize state
-
44  twi_state = TWI_READY;
-
45 
-
46  #if defined(__AVR_ATmega168__) || defined(__AVR_ATmega8__) || defined(__AVR_ATmega328P__)
-
47  // activate internal pull-ups for twi
-
48  // as per note from atmega8 manual pg167
-
49  sbi(PORTC, 4);
-
50  sbi(PORTC, 5);
-
51  #else
-
52  // activate internal pull-ups for twi
-
53  // as per note from atmega128 manual pg204
-
54  sbi(PORTD, 0);
-
55  sbi(PORTD, 1);
-
56  #endif
-
57 
-
58  // initialize twi prescaler and bit rate
-
59  cbi(TWSR, TWPS0);
-
60  cbi(TWSR, TWPS1);
-
61  TWBR = ((F_CPU / TWI_FREQ) - 16) / 2;
-
62 
-
63  /* twi bit rate formula from atmega128 manual pg 204
-
64  SCL Frequency = CPU Clock Frequency / (16 + (2 * TWBR))
-
65  note: TWBR should be 10 or higher for master mode
-
66  It is 72 for a 16mhz Wiring board with 100kHz TWI */
-
67 
-
68  // enable twi module, acks, and twi interrupt
-
69  TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWEA);
-
70 }
-
71 
-
72 
-
73 uint8_t twowire_requestFromBlocking(uint8_t address, uint8_t quantity)
-
74 {
-
75  // clamp to buffer length
-
76  if(quantity > BUFFER_LENGTH){
-
77  quantity = BUFFER_LENGTH;
-
78  }
-
79  // perform blocking read into buffer
-
80  uint8_t read = twi_readFromBlocking(address, rxBuffer, quantity);
-
81  // set rx buffer iterator vars
-
82  rxBufferIndex = 0;
-
83  rxBufferLength = read;
-
84 
-
85  return read;
-
86 }
-
87 
-
88 void twowire_beginTransmission( uint8_t address ){
-
89  // indicate that we are transmitting
-
90  transmitting = 1;
-
91  // set address of targeted slave
-
92  txAddress = address;
-
93  // reset tx buffer iterator vars
-
94  txBufferIndex = 0;
-
95  txBufferLength = 0;
-
96 }
-
97 
-
98 void twowire_send( uint8_t data ){
-
99  if(transmitting){
-
100  // in master transmitter mode
-
101  // don't bother if buffer is full
-
102  if(txBufferLength >= BUFFER_LENGTH){
-
103  return;
-
104  }
-
105  // put byte in tx buffer
-
106  txBuffer[txBufferIndex] = data;
-
107  ++txBufferIndex;
-
108  // update amount in buffer
-
109  txBufferLength = txBufferIndex;
-
110  }
-
111 }
-
112 
-
113 uint8_t twowire_endTransmission(void)
-
114 {
-
115  // transmit buffer (blocking)
-
116  int8_t ret = twi_writeToBlocking(txAddress, txBuffer, txBufferLength, 1);
-
117  // reset tx buffer iterator vars
-
118  txBufferIndex = 0;
-
119  txBufferLength = 0;
-
120  // indicate that we are done transmitting
-
121  transmitting = 0;
-
122  return ret;
-
123 }
-
124 
-
125 /*
-
126  * Function twi_readFrom
-
127  * Desc attempts to become twi bus master and read a
-
128  * series of bytes from a device on the bus
-
129  * Input address: 7bit i2c device address
-
130  * data: pointer to byte array
-
131  * length: number of bytes to read into array
-
132  * Output number of bytes read
-
133  */
-
134 /// TODO: make non-blocking
-
135 uint8_t twi_readFromBlocking(uint8_t address, uint8_t* data, uint8_t length)
-
136 {
-
137  uint8_t i;
-
138 
-
139  // ensure data will fit into buffer
-
140  if(TWI_BUFFER_LENGTH < length){
-
141  return 0;
-
142  }
-
143 
-
144  // wait until twi is ready, become master receiver
-
145  while(TWI_READY != twi_state){
-
146  continue;
-
147  }
-
148 
-
149  twi_state = TWI_MRX;
-
150  // reset error state (0xFF.. no error occured)
-
151  twi_error = 0xFF;
-
152 
-
153  // initialize buffer iteration vars
-
154  twi_masterBufferIndex = 0;
-
155  twi_masterBufferLength = length-1; // This is not intuitive, read on...
-
156  // On receive, the previously configured ACK/NACK setting is transmitted in
-
157  // response to the received byte before the interrupt is signalled.
-
158  // Therefor we must actually set NACK when the _next_ to last byte is
-
159  // received, causing that NACK to be sent in response to receiving the last
-
160  // expected byte of data.
-
161 
-
162  // build sla+w, slave device address + w bit
-
163  twi_slarw = TW_READ;
-
164  twi_slarw |= address << 1;
-
165 
-
166  // send start condition
-
167  TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWEA) | _BV(TWINT) | _BV(TWSTA);
-
168 
-
169  // wait for read operation to complete
-
170  while(TWI_MRX == twi_state){
-
171  continue;
-
172  }
-
173 
-
174  if (twi_masterBufferIndex < length)
-
175  length = twi_masterBufferIndex;
-
176 
-
177  // copy twi buffer to data
-
178  for(i = 0; i < length; ++i){
-
179  data[i] = twi_masterBuffer[i];
-
180  }
-
181 
-
182  return length;
-
183 }
-
184 
-
185 
-
186 
-
187 /// ---------- non-blocking version ----------
-
188 
-
189 
-
190 uint8_t twi_initiateReadFrom(uint8_t address, uint8_t length)
-
191 {
-
192 
-
193  // ensure data will fit into buffer
-
194  if(TWI_BUFFER_LENGTH < length){
-
195  return 0;
-
196  }
-
197 
-
198  twi_readLength = length;
-
199  twi_readAddress = address;
-
200 
-
201  if ( TWI_READY == twi_state ){
-
202  twi_continueReadFrom();
-
203  } else {
-
204  twi_state = TWI_PRE_MRX;
-
205  }
-
206  if (twi_error == 0xFF)
-
207  return 0; // success
-
208  else if (twi_error == TW_MT_SLA_NACK)
-
209  return 2; // error: address send, nack received
-
210  else if (twi_error == TW_MT_DATA_NACK)
-
211  return 3; // error: data send, nack received
-
212  else
-
213  return 4; // other twi error
-
214 }
-
215 
-
216 
-
217 
-
218 void twi_continueReadFrom(){
-
219 
-
220  twi_state = TWI_MRX;
-
221  // reset error state (0xFF.. no error occured)
-
222  twi_error = 0xFF;
-
223 
-
224  // initialize buffer iteration vars
-
225  twi_masterBufferIndex = 0;
-
226  twi_masterBufferLength = twi_readLength-1; // This is not intuitive, read on...
-
227  // On receive, the previously configured ACK/NACK setting is transmitted in
-
228  // response to the received byte before the interrupt is signalled.
-
229  // Therefor we must actually set NACK when the _next_ to last byte is
-
230  // received, causing that NACK to be sent in response to receiving the last
-
231  // expected byte of data.
-
232 
-
233  // build sla+w, slave device address + w bit
-
234  twi_slarw = TW_READ;
-
235  twi_slarw |= twi_readAddress << 1;
-
236 
-
237  // send start condition
-
238  TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWEA) | _BV(TWINT) | _BV(TWSTA);
-
239 }
-
240 
-
241 
-
242 
-
243 uint8_t twi_readMasterBuffer( uint8_t* data, uint8_t length ){
-
244  uint8_t i;
-
245  if (twi_masterBufferIndex < length)
-
246  length = twi_masterBufferIndex;
-
247 
-
248  // copy twi buffer to data
-
249  for(i = 0; i < length; ++i){
-
250  data[i] = twi_masterBuffer[i];
-
251  }
-
252 
-
253  return length;
-
254 }
-
255 
-
256 
-
257 
-
258 /// ----end------ non-blocking version ----------
-
259 
-
260 
-
261 /*
-
262  * Function twi_writeTo
-
263  * Desc attempts to become twi bus master and write a
-
264  * series of bytes to a device on the bus
-
265  * Input address: 7bit i2c device address
-
266  * data: pointer to byte array
-
267  * length: number of bytes in array
-
268  * wait: boolean indicating to wait for write or not
-
269  * Output 0 .. success
-
270  * 1 .. length to long for buffer
-
271  * 2 .. address send, NACK received
-
272  * 3 .. data send, NACK received
-
273  * 4 .. other twi error (lost bus arbitration, bus error, ..)
-
274  */
-
275 /// TODO: make non-blocking
-
276 uint8_t twi_writeToBlocking(uint8_t address, uint8_t* data, uint8_t length, uint8_t wait)
-
277 {
-
278  uint8_t i;
-
279 
-
280  // ensure data will fit into buffer
-
281  if(TWI_BUFFER_LENGTH < length){
-
282  return 1;
-
283  }
-
284 
-
285  // wait until twi is ready, become master transmitter
-
286  while(TWI_READY != twi_state){
-
287  continue;
-
288  }
-
289 
-
290  twi_state = TWI_MTX;
-
291  // reset error state (0xFF.. no error occured)
-
292  twi_error = 0xFF;
-
293 
-
294  // initialize buffer iteration vars
-
295  twi_masterBufferIndex = 0;
-
296  twi_masterBufferLength = length;
-
297 
-
298  // copy data to twi buffer
-
299  for(i = 0; i < length; ++i){
-
300  twi_masterBuffer[i] = data[i];
-
301  }
-
302 
-
303  // build sla+w, slave device address + w bit
-
304  twi_slarw = TW_WRITE;
-
305  twi_slarw |= address << 1;
-
306 
-
307  // send start condition
-
308  TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWEA) | _BV(TWINT) | _BV(TWSTA);
-
309 
-
310  // wait for write operation to complete
-
311  while(wait && (TWI_MTX == twi_state)){
-
312  continue;
-
313  }
-
314 
-
315  if (twi_error == 0xFF)
-
316  return 0; // success
-
317  else if (twi_error == TW_MT_SLA_NACK)
-
318  return 2; // error: address send, nack received
-
319  else if (twi_error == TW_MT_DATA_NACK)
-
320  return 3; // error: data send, nack received
-
321  else
-
322  return 4; // other twi error
-
323 }
-
324 
-
325 
-
326 
-
327 /// ----------------- non-blocking ---------
-
328 
-
329 
-
330 uint8_t twi_initiateWriteTo(uint8_t address, uint8_t* data, uint8_t length )
-
331 {
-
332  // ensure data will fit into buffer
-
333  if(TWI_BUFFER_LENGTH < length){
-
334  return 1;
-
335  }
-
336  twi_writeAddress = address;
-
337  twi_writeData = data;
-
338  twi_writeLength = length;
-
339 
-
340  if ( TWI_READY == twi_state ){
-
341  twi_continueWriteTo();
-
342  } else {
-
343  twi_state = TWI_PRE_MTX;
-
344  }
-
345  if (twi_error == 0xFF)
-
346  return 0; // success
-
347  else if (twi_error == TW_MT_SLA_NACK)
-
348  return 2; // error: address send, nack received
-
349  else if (twi_error == TW_MT_DATA_NACK)
-
350  return 3; // error: data send, nack received
-
351  else
-
352  return 4; // other twi error
-
353 }
-
354 
-
355 
-
356 
-
357 void twi_continueWriteTo(){
-
358  uint8_t i;
-
359  // wait until twi is ready, become master transmitter
-
360 // while(TWI_READY != twi_state){
-
361 // continue;
-
362 // }
-
363 
-
364  twi_state = TWI_MTX;
-
365  // reset error state (0xFF.. no error occured)
-
366  twi_error = 0xFF;
-
367 
-
368  // initialize buffer iteration vars
-
369  twi_masterBufferIndex = 0;
-
370  twi_masterBufferLength = twi_writeLength;
-
371 
-
372  // copy data to twi buffer
-
373  for(i = 0; i < twi_writeLength; ++i){
-
374  twi_masterBuffer[i] = twi_writeData[i];
-
375  }
-
376 
-
377  // build sla+w, slave device address + w bit
-
378  twi_slarw = TW_WRITE;
-
379  twi_slarw |= twi_writeAddress << 1;
-
380 
-
381  // send start condition
-
382  TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWEA) | _BV(TWINT) | _BV(TWSTA);
-
383 }
-
384 
-
385 
-
386 // -----------end non-blocking --------------------
-
387 
-
388 
-
389 /*
-
390  * Function twi_reply
-
391  * Desc sends byte or readys receive line
-
392  * Input ack: byte indicating to ack or to nack
-
393  * Output none
-
394  */
-
395 void twi_reply(uint8_t ack)
-
396 {
-
397  // transmit master read ready signal, with or without ack
-
398  if(ack){
-
399  TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWINT) | _BV(TWEA);
-
400  }else{
-
401  TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWINT);
-
402  }
-
403 }
-
404 
-
405 
-
406 
-
407 /*
-
408  * Function twi_stop
-
409  * Desc relinquishes bus master status
-
410  * Input none
-
411  * Output none
-
412  */
-
413 void twi_stop(void)
-
414 {
-
415  // send stop condition
-
416  TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWEA) | _BV(TWINT) | _BV(TWSTO);
-
417 
-
418  // wait for stop condition to be exectued on bus
-
419  // TWINT is not set after a stop condition!
-
420  while(TWCR & _BV(TWSTO)){ //FIXME: does this cause a delay?
-
421  continue;
-
422  }
-
423 
-
424  twi_oldstate = twi_state;
-
425  // update twi state
-
426  twi_state = TWI_READY;
-
427  if ( twi_oldstate == TWI_PRE_MTX ){
-
428  twi_continueWriteTo();
-
429  } else if ( twi_oldstate == TWI_PRE_MRX ){
-
430  twi_continueReadFrom();
-
431  }
-
432 }
-
433 
-
434 
-
435 
-
436 /*
-
437  * Function twi_releaseBus
-
438  * Desc releases bus control
-
439  * Input none
-
440  * Output none
-
441  */
-
442 void twi_releaseBus(void)
-
443 {
-
444  // release bus
-
445  TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWEA) | _BV(TWINT);
-
446 
-
447  twi_oldstate = twi_state;
-
448  // update twi state
-
449  twi_state = TWI_READY;
-
450  if ( twi_oldstate == TWI_PRE_MTX ){
-
451  twi_continueWriteTo();
-
452  } else if ( twi_oldstate == TWI_PRE_MRX ){
-
453  twi_continueReadFrom();
-
454  }
-
455 }
-
456 
-
457 // SIGNAL(TWI_vect)
-
458 // ISR(TWI_vect, ISR_NOBLOCK )
-
459 ISR(TWI_vect)
-
460 {
-
461  switch(TW_STATUS){
-
462  // All Master
-
463  case TW_START: // sent start condition
-
464  case TW_REP_START: // sent repeated start condition
-
465  // copy device address and r/w bit to output register and ack
-
466  TWDR = twi_slarw;
-
467  twi_reply(1);
-
468  break;
-
469 
-
470  // Master Transmitter
-
471  case TW_MT_SLA_ACK: // slave receiver acked address
-
472  case TW_MT_DATA_ACK: // slave receiver acked data
-
473  // if there is data to send, send it, otherwise stop
-
474  if(twi_masterBufferIndex < twi_masterBufferLength){
-
475  // copy data to output register and ack
-
476  TWDR = twi_masterBuffer[twi_masterBufferIndex++];
-
477  twi_reply(1);
-
478  }else{
-
479  twi_stop();
-
480  }
-
481  break;
-
482  case TW_MT_SLA_NACK: // address sent, nack received
-
483  twi_error = TW_MT_SLA_NACK;
-
484  twi_stop();
-
485  break;
-
486  case TW_MT_DATA_NACK: // data sent, nack received
-
487  twi_error = TW_MT_DATA_NACK;
-
488  twi_stop();
-
489  break;
-
490  case TW_MT_ARB_LOST: // lost bus arbitration
-
491  twi_error = TW_MT_ARB_LOST;
-
492  twi_releaseBus();
-
493  break;
-
494 
-
495  // Master Receiver
-
496  case TW_MR_DATA_ACK: // data received, ack sent
-
497  // put byte into buffer
-
498  twi_masterBuffer[twi_masterBufferIndex++] = TWDR;
-
499  case TW_MR_SLA_ACK: // address sent, ack received
-
500  // ack if more bytes are expected, otherwise nack
-
501  if(twi_masterBufferIndex < twi_masterBufferLength){
-
502  twi_reply(1);
-
503  }else{
-
504  twi_reply(0);
-
505  }
-
506  break;
-
507  case TW_MR_DATA_NACK: // data received, nack sent
-
508  // put final byte into buffer
-
509  twi_masterBuffer[twi_masterBufferIndex++] = TWDR;
-
510  case TW_MR_SLA_NACK: // address sent, nack received
-
511  twi_stop();
-
512  break;
-
513  // TW_MR_ARB_LOST handled by TW_MT_ARB_LOST case
-
514 
-
515 // // Slave Receiver
-
516 // case TW_SR_SLA_ACK: // addressed, returned ack
-
517 // case TW_SR_GCALL_ACK: // addressed generally, returned ack
-
518 // case TW_SR_ARB_LOST_SLA_ACK: // lost arbitration, returned ack
-
519 // case TW_SR_ARB_LOST_GCALL_ACK: // lost arbitration, returned ack
-
520 // // enter slave receiver mode
-
521 // twi_state = TWI_SRX;
-
522 // // indicate that rx buffer can be overwritten and ack
-
523 // twi_rxBufferIndex = 0;
-
524 // twi_reply(1);
-
525 // break;
-
526 // case TW_SR_DATA_ACK: // data received, returned ack
-
527 // case TW_SR_GCALL_DATA_ACK: // data received generally, returned ack
-
528 // // if there is still room in the rx buffer
-
529 // if(twi_rxBufferIndex < TWI_BUFFER_LENGTH){
-
530 // // put byte in buffer and ack
-
531 // twi_rxBuffer[twi_rxBufferIndex++] = TWDR;
-
532 // twi_reply(1);
-
533 // }else{
-
534 // // otherwise nack
-
535 // twi_reply(0);
-
536 // }
-
537 // break;
-
538 // case TW_SR_STOP: // stop or repeated start condition received
-
539 // // put a null char after data if there's room
-
540 // if(twi_rxBufferIndex < TWI_BUFFER_LENGTH){
-
541 // twi_rxBuffer[twi_rxBufferIndex] = '\0';
-
542 // }
-
543 // // sends ack and stops interface for clock stretching
-
544 // twi_stop();
-
545 // // callback to user defined callback
-
546 // twi_onSlaveReceive(twi_rxBuffer, twi_rxBufferIndex);
-
547 // // since we submit rx buffer to "wire" library, we can reset it
-
548 // twi_rxBufferIndex = 0;
-
549 // // ack future responses and leave slave receiver state
-
550 // twi_releaseBus();
-
551 // break;
-
552 // case TW_SR_DATA_NACK: // data received, returned nack
-
553 // case TW_SR_GCALL_DATA_NACK: // data received generally, returned nack
-
554 // // nack back at master
-
555 // twi_reply(0);
-
556 // break;
-
557 //
-
558 // // Slave Transmitter
-
559 // case TW_ST_SLA_ACK: // addressed, returned ack
-
560 // case TW_ST_ARB_LOST_SLA_ACK: // arbitration lost, returned ack
-
561 // // enter slave transmitter mode
-
562 // twi_state = TWI_STX;
-
563 // // ready the tx buffer index for iteration
-
564 // twi_txBufferIndex = 0;
-
565 // // set tx buffer length to be zero, to verify if user changes it
-
566 // twi_txBufferLength = 0;
-
567 // // request for txBuffer to be filled and length to be set
-
568 // // note: user must call twi_transmit(bytes, length) to do this
-
569 // twi_onSlaveTransmit();
-
570 // // if they didn't change buffer & length, initialize it
-
571 // if(0 == twi_txBufferLength){
-
572 // twi_txBufferLength = 1;
-
573 // twi_txBuffer[0] = 0x00;
-
574 // }
-
575 // // transmit first byte from buffer, fall
-
576 // case TW_ST_DATA_ACK: // byte sent, ack returned
-
577 // // copy data to output register
-
578 // TWDR = twi_txBuffer[twi_txBufferIndex++];
-
579 // // if there is more to send, ack, otherwise nack
-
580 // if(twi_txBufferIndex < twi_txBufferLength){
-
581 // twi_reply(1);
-
582 // }else{
-
583 // twi_reply(0);
-
584 // }
-
585 // break;
-
586 // case TW_ST_DATA_NACK: // received nack, we are done
-
587 // case TW_ST_LAST_DATA: // received ack, but we are done already!
-
588 // // ack future responses
-
589 // twi_reply(1);
-
590 // // leave slave receiver state
-
591 // twi_state = TWI_READY;
-
592 // break;
-
593 
-
594  // All
-
595  case TW_NO_INFO: // no state information
-
596  break;
-
597  case TW_BUS_ERROR: // bus error, illegal stop/start
-
598  twi_error = TW_BUS_ERROR;
-
599  twi_stop();
-
600  break;
-
601  }
-
602 }
-
-
- - - diff --git a/extras/doc/html/twi__nonblock___headers_only_8h.html b/extras/doc/html/twi__nonblock___headers_only_8h.html deleted file mode 100644 index 7af07cff0..000000000 --- a/extras/doc/html/twi__nonblock___headers_only_8h.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - - -Mozzi: twi_nonblock_HeadersOnly.h File Reference - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
- -
-
twi_nonblock_HeadersOnly.h File Reference
-
-
- -

This file provides declarations of the Mozzi Core Functions twi_nonblock functions, but no implementation. -More...

-
#include "twi_nonblock.h"
-
-

Go to the source code of this file.

-

Detailed Description

-

This file provides declarations of the Mozzi Core Functions twi_nonblock functions, but no implementation.

-

Use this only, if you have more than one translation unit in your project (i.e. you have more than one .cpp-file in your sketch itself). Otherwise include twi_nonblock.h, instead.

-

(Failure to head this advice will lead to "symbol XY undefined" errors.).

- -

Definition in file twi_nonblock_HeadersOnly.h.

-
-
- - - diff --git a/extras/doc/html/twi__nonblock___headers_only_8h.js b/extras/doc/html/twi__nonblock___headers_only_8h.js deleted file mode 100644 index d5e9daa7f..000000000 --- a/extras/doc/html/twi__nonblock___headers_only_8h.js +++ /dev/null @@ -1,4 +0,0 @@ -var twi__nonblock___headers_only_8h = -[ - [ "_MOZZI_TWI_HEADER_ONLY", "twi__nonblock___headers_only_8h.html#a83f4357fd165be2f25322454042ff71b", null ] -]; \ No newline at end of file diff --git a/extras/doc/html/twi__nonblock___headers_only_8h_source.html b/extras/doc/html/twi__nonblock___headers_only_8h_source.html deleted file mode 100644 index cf0740607..000000000 --- a/extras/doc/html/twi__nonblock___headers_only_8h_source.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - - -Mozzi: twi_nonblock_HeadersOnly.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
twi_nonblock_HeadersOnly.h
-
-
-Go to the documentation of this file.
1 /*
-
2  * twi_nonblock_HeadersOnly.h
-
3  *
-
4  * This file is part of Mozzi.
-
5  *
-
6  * Copyright 2012-2024 Tim Barrass and the Mozzi Team
-
7  *
-
8  * Mozzi is licensed under the GNU Lesser General Public Licence (LGPL) Version 2.1 or later.
-
9  *
-
10  */
-
11 
-
12 /** @ingroup core
-
13  * @file twi_nonblock_HeadersOnly.h
-
14  *
-
15  * This file provides declarations of the \ref core twi_nonblock functions, but no implementation. Use this only, if you have more than one
-
16  * translation unit in your project (i.e. you have more than one .cpp-file in your sketch itself). Otherwise include \ref twi_nonblock.h, instead.
-
17  *
-
18  * (Failure to head this advice will lead to "symbol XY undefined" errors.).
-
19  */
-
20 
-
21 #ifndef MOZZI_TWI_HEADERS_ONLY_H_
-
22 #define MOZZI_TWI_HEADERS_ONLY_H_
-
23 
-
24 #define _MOZZI_TWI_HEADER_ONLY
-
25 #include "twi_nonblock.h"
-
26 
-
27 #endif
-
-
- - - diff --git a/extras/doc/html/umpah__huff_8h_source.html b/extras/doc/html/umpah__huff_8h_source.html deleted file mode 100644 index efbd56c77..000000000 --- a/extras/doc/html/umpah__huff_8h_source.html +++ /dev/null @@ -1,749 +0,0 @@ - - - - - - - -Mozzi: umpah_huff.h Source File - - - - - - - - - - - - - - - -
-
- - - - - - - - -
-
Mozzi -  version v2.0 -
-
sound synthesis library for Arduino
-
- - - - - - -
-
-
- - - -
-
- -
-
-
- -
- -
-
- - -
- -
- -
-
-
umpah_huff.h
-
-
-
1 // generated by Mozzi/extras/python/audio2huff.py
-
2 
-
3 #ifndef UMPAH_H_
-
4 #define UMPAH_H_
-
5 
-
6 #include <Arduino.h>
-
7 
-
8 #include "mozzi_pgmspace.h"
-
9 
-
10 
-
11 #define UMPAH_SAMPLERATE 16384
-
12 #define UMPAH_SAMPLE_BITS 8
-
13 CONSTTABLE_STORAGE(int16_t) UMPAH_HUFFMAN[280] = {
-
14 277,169,67,0,1,64,46,28,25,7,4,0,-25,0,-26,0,-13,16,7,0,-31,4,0,-36,0,-39,7,0,20,4,0,-38,0,-35,0,-6,16,0,5,13,
-
15 10,0,13,7,0,31,4,0,39,0,-34,0,-10,16,0,4,13,10,4,0,16,0,-14,4,0,-15,0,15,0,-7,100,4,0,3,0,-2,94,52,49,43,
-
16 10,7,4,0,-37,0,36,0,-32,0,19,31,28,22,19,0,-43,16,0,44,13,10,4,0,46,0,-45,4,0,-46,0,-62,0,45,0,41,4,0,40,0,
-
17 37,0,17,4,0,9,0,8,0,-4,40,22,13,7,0,-16,4,0,32,0,-33,4,0,-18,0,-17,7,4,0,-19,0,18,0,-11,16,13,10,0,21,7,
-
18 4,0,-40,0,-41,0,35,0,-12,0,-8,106,4,0,-1,0,2,100,55,34,19,10,4,0,22,0,-23,4,0,23,0,-20,7,4,0,25,0,-21,0,10,
-
19 13,0,-9,10,4,0,-24,0,-29,4,0,28,0,24,19,16,0,6,13,0,11,10,7,0,34,4,0,38,0,-42,0,27,0,-5,43,40,19,7,4,0,
-
20 -22,0,-27,0,12,10,4,0,-30,0,29,4,0,30,0,26,19,16,13,0,-28,10,0,33,7,4,0,42,0,-44,0,43,0,14,0,7,0,-3,0,0
-
21 };
-
22 uint32_t const UMPAH_SOUNDDATA_BITS = 196860L;
-
23 CONSTTABLE_STORAGE(byte) UMPAH_SOUNDDATA[] = {
-
24 210,20,130,2,84,176,64,164,16,40,8,29,42,245,148,33,72,34,0,32,104,132,68,82,192,164,66,170,80,100,40,32,2,104,165,134,133,104,242,140,
-
25 60,194,228,96,20,116,96,79,41,213,219,49,158,86,27,9,182,8,180,122,58,107,156,155,98,8,22,112,138,113,114,152,128,140,117,60,130,208,161,20,
-
26 98,207,136,134,36,230,195,107,78,3,129,129,16,68,158,98,61,163,56,71,14,4,97,30,120,29,152,6,112,161,20,96,68,179,69,176,233,152,98,156,
-
27 7,3,20,205,62,98,196,122,156,66,45,169,206,34,204,38,19,200,206,99,48,14,144,28,109,104,93,194,233,140,51,163,166,58,5,197,176,183,6,176,
-
28 242,56,181,207,40,140,97,60,141,115,33,28,214,33,198,214,133,221,14,152,197,57,24,150,107,33,108,34,149,210,60,174,45,119,77,60,29,76,65,202,
-
29 100,121,12,10,8,243,18,33,112,186,119,1,200,196,186,25,24,179,142,214,8,227,39,43,91,58,158,15,43,93,140,71,58,83,4,192,178,16,90,209,
-
30 204,232,45,132,1,115,2,34,69,161,110,102,231,17,198,51,8,139,98,56,136,177,104,97,30,96,68,179,76,81,193,192,233,140,193,201,138,17,13,48,
-
31 34,60,97,104,69,186,179,207,43,8,112,121,5,166,134,0,192,188,68,49,67,150,97,137,112,14,133,179,52,73,139,17,228,22,132,115,139,16,242,30,
-
32 7,2,45,206,236,91,185,138,96,158,98,226,8,182,98,156,218,211,160,75,88,113,145,202,35,218,152,70,0,234,56,17,78,119,98,60,226,65,16,192,
-
33 139,136,6,41,138,112,49,76,209,38,4,91,145,202,34,154,153,226,44,194,99,17,206,115,49,20,113,35,144,243,100,32,53,163,145,201,173,8,34,230,
-
34 44,68,67,136,69,49,185,196,113,212,194,35,156,236,98,40,226,83,140,197,178,112,152,163,145,208,197,8,39,98,216,193,67,204,192,59,114,136,179,25,
-
35 224,242,181,218,132,113,196,167,25,230,219,53,173,14,88,38,41,152,57,22,198,9,173,96,138,20,206,17,206,44,33,22,97,28,8,183,43,65,30,233,
-
36 26,205,48,39,172,19,22,116,57,152,183,8,150,176,227,35,148,69,56,176,12,0,140,234,34,156,226,142,55,73,183,65,139,61,112,53,166,40,228,91,
-
37 51,71,152,177,30,41,204,121,12,103,129,22,194,22,8,231,48,163,0,98,196,136,134,36,116,204,116,193,0,114,98,140,23,158,98,61,163,152,71,14,
-
38 216,71,145,158,234,34,206,33,132,121,139,18,205,49,67,166,41,138,96,158,139,97,16,167,152,138,118,206,48,14,172,3,200,192,117,60,174,97,132,81,
-
39 230,37,154,214,135,44,17,108,193,29,53,167,32,243,2,35,212,90,60,130,198,123,91,96,14,15,35,153,160,142,48,47,48,76,80,229,152,98,88,167,
-
40 51,18,205,30,98,196,80,194,208,139,113,103,158,67,192,224,242,185,154,8,227,2,217,130,98,135,44,193,108,224,29,24,167,64,147,2,113,140,233,8,
-
41 225,99,156,242,179,199,7,148,90,20,35,140,9,162,220,196,142,68,7,78,193,29,58,119,33,173,104,71,138,116,143,35,171,17,173,176,135,103,145,204,
-
42 236,69,30,101,48,76,73,216,130,233,140,83,129,137,114,15,107,70,0,142,147,91,22,51,218,217,224,118,121,92,174,196,91,88,241,30,45,135,46,131,
-
43 18,224,98,152,151,32,185,138,48,0,214,30,87,22,113,136,48,12,45,109,202,100,35,143,56,143,22,204,157,6,36,232,195,49,46,19,209,108,45,222,
-
44 96,79,33,152,180,214,206,172,35,16,103,11,15,43,88,49,128,49,35,196,67,17,28,24,38,34,16,4,46,152,45,222,98,196,91,67,137,173,142,220,
-
45 238,154,231,28,30,83,205,160,143,49,69,17,12,68,122,204,49,29,152,57,116,195,4,73,129,17,195,11,71,148,88,207,60,172,33,216,139,114,187,48,
-
46 13,99,206,51,22,122,205,22,206,6,25,139,114,11,158,98,41,14,35,202,100,231,49,3,9,213,173,181,216,207,33,231,22,230,40,93,194,233,206,135,
-
47 71,78,232,23,49,34,42,121,158,70,54,115,91,58,176,26,219,157,213,173,158,100,17,198,37,144,136,98,35,163,20,196,78,17,11,167,22,229,22,194,
-
48 44,201,210,49,3,171,17,211,90,238,166,32,121,168,142,49,39,196,67,17,206,108,83,17,196,3,183,78,34,20,91,24,7,109,97,229,28,57,218,219,
-
49 156,118,121,90,193,140,3,90,18,34,24,147,128,128,233,196,17,209,138,22,227,207,51,200,70,185,136,56,152,93,52,70,113,49,6,184,161,22,121,182,
-
50 113,139,97,8,128,98,88,103,51,18,232,30,45,132,121,15,51,200,44,103,53,182,1,132,196,28,198,71,144,197,148,69,58,96,132,65,49,19,4,230,
-
51 233,196,65,230,40,71,16,243,107,98,198,187,166,176,142,166,32,230,50,17,102,44,167,25,137,61,16,29,59,20,230,233,220,131,197,177,128,20,214,30,
-
52 65,219,92,242,49,14,162,45,210,50,17,70,41,238,71,78,33,102,24,137,130,115,116,195,140,75,90,60,131,11,77,108,88,196,116,214,1,140,196,105,
-
53 204,40,196,12,8,241,28,98,142,78,67,18,225,97,152,161,110,125,173,8,178,53,141,109,213,156,98,12,243,9,229,56,140,132,112,182,67,140,196,157,
-
54 184,76,68,193,57,58,119,35,35,20,96,20,243,60,174,45,115,16,96,24,90,219,149,140,242,24,20,17,230,36,245,208,233,216,167,71,78,205,100,98,
-
55 68,80,30,103,145,169,174,233,167,131,9,136,57,88,196,113,139,3,5,211,178,102,24,140,28,142,6,34,16,71,152,163,140,15,49,22,212,215,107,102,
-
56 19,11,91,107,153,8,182,178,35,197,177,219,52,196,177,88,102,41,200,122,96,76,3,197,166,182,209,136,98,50,99,28,58,107,156,204,242,53,147,140,
-
57 91,50,16,93,57,204,228,233,130,3,35,20,113,207,49,28,100,206,107,102,19,11,91,107,177,136,182,178,113,152,182,78,19,18,114,58,24,145,4,236,
-
58 91,28,115,204,71,49,179,143,33,132,194,121,90,230,66,44,90,65,30,96,69,220,38,40,230,114,49,44,195,230,41,154,7,152,183,106,114,152,3,11,
-
59 0,69,181,220,68,81,196,65,110,98,199,186,5,177,205,134,45,132,3,214,180,96,149,172,48,14,220,162,44,118,35,30,70,3,81,228,103,1,128,56,
-
60 133,204,19,204,232,193,48,34,8,132,243,114,26,214,11,119,108,225,30,59,96,24,6,123,168,138,114,140,113,181,130,93,6,44,116,197,107,78,3,211,
-
61 22,205,53,172,22,237,25,198,0,118,120,17,204,1,97,128,115,12,45,207,54,221,2,216,116,197,49,76,17,9,139,114,54,233,8,161,76,225,22,44,
-
62 60,8,182,3,168,142,115,59,56,204,89,92,38,36,236,232,233,140,51,179,18,225,121,139,22,238,197,161,28,56,97,8,182,19,168,142,114,138,17,231,
-
63 152,151,35,90,29,48,69,179,48,116,96,76,17,226,208,139,6,33,136,25,24,93,52,194,212,121,89,195,8,166,176,214,104,182,16,177,76,83,12,66,
-
64 45,156,38,158,103,24,167,41,128,117,96,8,230,3,169,128,114,138,22,237,97,172,211,22,122,193,22,204,49,211,90,112,137,107,14,50,57,76,3,83,
-
65 0,69,136,206,162,57,174,40,71,186,70,179,76,9,235,128,197,157,7,77,105,152,217,129,114,10,22,140,17,99,156,91,158,12,98,221,156,100,96,186,
-
66 87,9,139,100,197,22,199,49,203,90,102,54,121,185,8,229,22,236,108,35,0,99,117,17,108,1,132,91,16,120,138,107,156,220,142,102,99,20,90,116,
-
67 29,139,66,32,57,78,54,166,33,198,97,48,156,110,118,161,16,90,87,65,230,125,192,96,78,3,163,205,192,125,210,116,92,166,9,155,8,71,142,12,
-
68 98,41,132,100,45,217,200,228,56,143,179,15,51,129,204,243,96,178,107,25,168,229,56,221,176,132,123,168,224,71,176,12,142,55,42,186,26,195,92,13,
-
69 104,244,114,214,142,130,76,91,48,142,147,161,141,156,34,24,207,7,27,61,196,227,115,43,145,210,30,32,30,99,163,147,88,204,61,115,24,34,88,130,
-
70 46,99,116,215,102,102,32,234,65,22,194,41,130,45,15,96,152,19,209,208,182,57,9,49,108,192,116,156,134,78,115,140,112,117,22,236,6,163,141,156,
-
71 174,67,136,123,48,243,29,28,207,55,0,187,164,232,43,148,68,104,207,22,238,166,49,30,120,99,22,237,112,17,5,161,226,3,164,58,57,53,142,3,
-
72 183,73,194,130,211,145,219,92,68,28,30,12,22,123,171,145,204,208,65,48,37,98,139,102,67,161,108,115,30,98,217,147,137,154,209,206,45,197,134,49,
-
73 20,117,50,17,76,40,143,98,29,152,44,71,3,161,158,205,98,179,206,49,118,32,143,86,33,198,234,192,114,51,199,14,129,104,200,65,107,46,3,204,
-
74 92,228,96,78,135,109,96,128,107,153,200,71,57,198,212,97,22,231,87,19,141,136,71,35,149,177,4,90,61,97,156,71,65,201,196,32,54,229,102,140,
-
75 196,17,26,132,99,140,194,212,113,179,198,114,57,94,32,58,76,142,71,152,228,92,192,157,10,121,179,26,11,78,17,219,61,208,192,28,58,26,230,110,
-
76 23,53,152,113,50,97,156,71,35,131,148,64,23,115,152,47,48,136,224,113,60,174,197,30,81,218,8,166,16,150,107,153,145,209,172,16,139,152,19,147,
-
77 218,198,8,206,103,67,83,8,68,49,142,204,22,19,183,35,94,225,56,153,48,206,33,208,232,226,96,143,115,58,44,65,17,216,140,113,142,221,78,51,
-
78 195,71,35,156,162,11,149,147,128,90,57,142,133,167,0,145,104,64,35,57,194,198,194,102,152,76,110,134,35,24,130,230,87,3,164,105,205,172,59,59,
-
79 107,14,70,186,76,18,53,220,38,71,135,35,171,169,130,97,20,34,30,13,17,24,3,166,105,225,130,193,60,51,71,76,1,16,214,3,145,217,225,154,
-
80 56,58,184,89,237,66,3,56,142,1,105,179,161,196,122,33,22,142,67,220,172,192,98,56,76,196,102,107,171,171,144,194,237,208,194,71,11,156,251,129,
-
81 156,58,56,51,152,167,218,226,5,136,232,118,35,57,5,142,172,211,11,183,67,61,89,140,230,206,66,208,185,235,164,112,108,226,97,145,156,193,106,103,
-
82 136,6,51,171,49,128,226,193,107,140,197,114,188,228,230,61,29,51,152,98,236,65,4,73,132,227,123,136,142,81,66,44,205,4,80,224,214,107,8,75,
-
83 21,204,46,122,113,14,91,56,142,128,206,96,187,97,8,34,195,27,132,70,99,16,89,228,96,181,219,58,57,79,71,44,227,152,187,93,130,107,9,194,
-
84 67,11,145,141,213,200,56,51,116,30,0,64,98,54,197,107,136,78,13,115,160,187,157,192,87,59,49,219,9,152,234,97,102,30,5,140,23,59,70,43,
-
85 153,14,103,16,147,179,136,244,72,180,115,179,156,14,216,66,3,136,225,154,56,118,205,49,160,136,117,61,17,7,14,7,8,225,194,197,58,185,25,24,
-
86 93,10,120,16,5,134,22,9,224,118,224,115,153,48,217,211,147,148,248,229,202,57,100,206,97,189,136,193,24,240,32,49,152,220,35,134,167,64,140,48,
-
87 130,194,53,152,196,61,58,49,14,103,172,70,43,108,246,96,30,28,38,99,135,64,177,169,208,35,12,204,103,163,21,156,36,116,230,59,62,45,14,138,
-
88 230,58,10,115,177,69,140,6,9,132,112,193,103,177,177,90,227,28,153,198,142,153,194,19,215,59,20,249,225,154,61,196,192,54,49,228,160,139,51,52,
-
89 227,49,154,204,115,137,28,139,76,135,156,66,20,115,28,134,115,176,88,196,97,0,118,44,16,12,46,216,44,32,97,185,196,156,26,231,167,173,115,144,
-
90 150,123,5,4,97,4,80,225,208,212,198,232,49,138,16,79,5,96,176,143,157,24,131,145,11,16,230,61,136,197,176,152,46,196,102,11,168,225,130,35,
-
91 49,177,88,131,28,153,200,33,22,132,159,22,142,202,230,29,12,215,58,25,48,24,34,193,96,130,59,104,232,49,182,205,117,56,8,130,193,1,194,226,
-
92 205,97,186,179,79,157,92,35,24,88,46,167,86,24,140,234,116,98,59,57,51,144,116,206,30,122,206,28,143,115,157,17,128,224,20,117,102,49,186,136,
-
93 35,179,54,97,132,28,12,6,206,140,33,113,211,8,224,201,132,195,52,240,193,83,24,128,102,226,32,139,29,179,12,36,98,176,138,115,98,31,61,115,
-
94 158,137,107,156,1,136,114,118,192,98,139,14,172,83,11,169,201,158,100,112,103,16,237,202,246,76,225,113,236,243,147,102,55,8,151,98,41,180,17,104,
-
95 36,71,10,62,34,11,15,184,24,7,207,89,194,230,179,143,85,174,112,118,194,58,56,152,216,163,135,23,0,140,41,138,192,67,147,60,120,229,158,33,
-
96 100,194,57,26,192,112,41,141,152,209,196,64,106,118,32,14,21,130,35,61,134,192,62,112,97,14,78,216,7,35,79,12,53,17,156,6,67,134,40,236,
-
97 88,195,60,25,156,153,234,112,107,154,118,215,62,219,148,236,25,195,167,108,67,152,176,70,58,14,197,142,3,24,204,195,171,98,8,236,230,225,106,16,
-
98 68,3,33,16,228,100,34,31,113,112,140,234,193,117,117,57,30,24,206,12,65,135,45,114,158,181,207,159,115,142,94,194,58,41,133,192,236,118,193,106,
-
99 106,96,142,197,49,76,40,195,96,15,56,30,15,79,79,7,33,230,22,41,76,108,17,133,140,198,54,54,8,237,163,12,70,3,155,8,209,11,61,147,
-
100 38,120,228,214,17,205,88,7,67,51,11,12,118,59,58,30,28,71,44,67,51,215,42,159,114,154,219,92,244,211,195,12,163,183,9,90,11,115,77,17,
-
101 200,118,34,133,30,185,5,135,103,67,192,185,246,32,189,206,33,20,194,56,49,152,78,66,193,97,208,198,100,116,17,136,115,96,26,57,97,31,23,96,
-
102 14,68,158,14,136,99,98,145,213,152,102,102,204,113,35,4,112,140,51,11,103,6,1,217,233,224,224,60,194,114,67,9,209,161,141,138,212,226,197,29,
-
103 153,156,143,3,14,89,232,118,196,18,61,206,202,215,23,104,196,16,184,176,7,35,131,25,192,198,100,116,49,163,128,118,118,204,99,96,136,34,153,174,
-
104 1,70,8,133,219,145,237,76,19,49,97,200,234,226,58,97,59,61,98,0,187,17,179,236,243,179,88,3,168,140,114,24,112,195,99,113,97,139,29,176,
-
105 199,0,116,58,182,112,58,157,136,78,167,6,70,51,161,163,134,26,186,177,76,218,152,174,34,152,99,176,57,8,197,28,176,4,178,97,11,182,194,16,
-
106 128,140,112,104,99,57,184,142,206,102,55,17,211,0,204,237,136,49,246,114,26,215,30,107,8,114,241,195,21,238,196,70,205,48,13,139,136,164,61,114,
-
107 25,178,97,152,207,178,97,9,43,157,144,166,120,132,204,194,112,99,117,57,139,12,142,70,49,142,102,24,228,240,36,236,240,46,36,70,29,60,198,114,
-
108 1,99,20,102,54,9,152,167,3,141,134,56,121,192,194,60,244,194,118,46,97,56,54,99,57,0,224,232,102,234,115,117,113,56,29,90,14,143,0,118,
-
109 194,53,147,60,121,172,246,74,194,59,51,96,30,139,12,39,163,135,83,129,140,81,208,112,219,21,168,230,32,140,225,16,20,68,58,12,228,100,100,204,
-
110 35,137,201,213,212,66,35,49,157,176,133,29,179,202,201,128,60,123,0,245,230,17,210,152,206,109,29,78,76,108,103,71,81,71,33,194,28,204,99,199,
-
111 70,51,211,179,25,192,120,224,228,142,172,49,154,152,102,110,216,110,35,29,7,8,58,58,154,118,120,30,37,128,46,243,192,132,134,17,209,152,224,224,
-
112 44,22,14,78,172,103,172,7,108,152,131,54,215,71,179,207,148,194,58,43,136,128,108,227,30,124,192,9,16,139,120,132,64,99,100,112,48,143,109,158,
-
113 36,24,140,154,48,15,76,204,99,150,167,19,131,171,179,129,141,71,39,82,157,136,195,207,136,199,109,157,71,72,59,57,43,83,12,81,155,20,200,102,
-
114 27,138,28,135,98,71,67,177,115,209,192,132,121,140,114,134,49,208,161,217,193,141,196,116,234,100,58,49,144,114,97,65,115,195,98,88,2,81,132,124,
-
115 83,9,147,25,224,92,118,99,61,28,49,142,135,10,115,113,62,224,118,195,16,85,154,204,136,135,50,8,45,153,176,218,53,14,71,110,39,98,49,152,
-
116 187,1,89,48,13,30,35,31,121,212,237,12,99,146,14,206,6,109,71,6,167,103,7,85,29,14,222,57,28,31,59,28,30,159,117,29,54,44,57,88,
-
117 206,131,25,157,12,133,28,220,84,116,56,67,211,169,167,204,35,222,97,101,58,158,140,59,29,25,139,7,66,198,161,9,212,205,145,225,163,108,242,21,
-
118 158,84,60,31,142,7,72,102,32,54,243,140,121,232,138,108,116,34,41,235,21,140,249,217,132,73,88,2,69,30,25,59,58,158,153,11,7,45,70,67,
-
119 145,96,194,17,216,30,152,222,200,234,125,179,24,185,71,98,16,22,28,6,50,57,187,24,232,101,57,53,26,112,22,15,59,29,178,30,59,61,109,212,
-
120 115,117,29,52,113,28,177,153,8,93,90,30,142,20,92,198,81,230,22,222,120,18,167,129,230,98,48,241,97,212,248,236,88,46,56,118,122,59,41,204,
-
121 200,114,193,6,96,130,241,17,138,247,65,232,206,9,152,233,169,168,92,198,212,124,194,208,121,134,60,194,37,179,171,34,142,14,213,212,66,41,196,114,
-
122 100,100,58,113,20,57,22,68,46,173,158,186,139,139,184,136,71,181,28,30,198,115,83,35,155,70,135,54,49,135,78,160,122,56,67,231,83,91,48,159,
-
123 67,24,186,142,207,69,11,4,38,77,71,162,195,33,115,171,65,236,1,141,97,74,35,54,131,131,212,50,58,55,116,31,100,34,31,59,102,148,93,138,
-
124 236,121,232,224,211,79,6,169,224,72,163,171,39,98,195,211,35,33,203,83,65,200,177,78,221,81,144,225,177,35,134,79,29,158,220,71,74,100,115,20,
-
125 40,230,236,135,51,34,156,24,219,16,184,143,100,59,100,104,236,236,29,79,70,22,8,76,204,132,45,77,15,93,72,118,59,159,49,154,217,141,178,157,
-
126 79,169,213,145,152,225,147,80,176,93,196,204,245,196,7,76,103,206,131,28,216,106,224,57,171,128,237,161,209,12,135,46,218,142,197,140,108,135,13,15,
-
127 142,0,248,225,227,199,3,205,117,23,65,97,233,28,68,46,204,132,38,77,4,45,74,122,226,135,162,193,34,238,34,227,220,68,45,177,156,16,204,224,
-
128 71,103,7,98,132,44,100,59,117,159,29,148,72,224,73,71,7,238,167,100,106,61,104,100,118,198,236,92,88,40,248,224,130,78,179,78,166,188,112,201,
-
129 28,71,47,20,197,109,226,1,163,216,40,37,134,237,177,8,177,226,76,102,161,213,181,28,31,24,88,46,209,140,244,205,161,235,25,15,92,98,226,199,
-
130 143,117,18,107,171,34,184,157,129,144,133,93,142,134,24,116,236,7,38,69,61,113,108,93,196,120,241,96,187,197,135,96,226,118,41,140,236,204,204,237,
-
131 168,97,119,16,100,234,81,46,166,154,59,18,131,179,228,117,100,237,196,92,200,200,237,140,99,214,55,142,93,178,56,12,58,29,12,115,59,20,112,123,
-
132 177,9,12,142,204,140,207,184,180,62,234,67,238,168,61,213,182,197,135,202,226,47,106,61,24,200,245,163,67,211,33,143,90,167,110,38,178,113,30,61,
-
133 169,147,108,103,168,102,33,87,98,17,154,8,76,212,237,142,201,196,163,197,143,53,212,73,69,140,129,168,92,140,103,174,221,139,153,52,23,113,33,241,
-
134 221,177,219,222,234,36,174,44,144,204,114,132,57,149,14,147,78,99,26,57,50,53,147,137,166,186,182,142,163,212,88,200,102,49,118,134,103,102,99,29,
-
135 177,128,187,81,79,184,182,37,196,123,218,143,163,25,218,153,158,140,208,66,208,135,166,115,179,39,178,106,18,61,168,121,173,66,232,198,118,166,66,226,
-
136 140,197,204,197,11,181,43,39,20,62,44,53,183,22,202,226,60,28,79,145,168,251,67,38,70,98,133,216,192,236,201,231,110,217,30,180,61,23,20,33,
-
137 18,40,66,142,206,198,118,46,102,209,147,81,7,184,196,184,189,183,17,47,106,62,141,66,224,100,118,51,179,183,99,29,153,3,35,36,62,198,104,246,
-
138 49,230,153,31,121,144,188,204,244,141,15,90,16,93,218,139,177,207,181,60,75,139,111,106,31,99,62,12,98,227,59,23,118,41,145,145,15,177,128,151,
-
139 20,108,88,107,218,132,149,140,94,208,246,163,156,116,71,136,90,60,92,201,226,90,141,123,136,155,136,245,50,62,51,182,77,5,11,187,32,185,148,251,
-
140 27,196,177,182,107,80,242,153,31,153,139,145,161,216,161,142,218,40,187,180,100,100,104,243,38,219,99,30,86,54,64,100,200,134,108,154,10,100,102,70,
-
141 70,64,125,140,162,88,205,53,168,73,90,143,169,145,241,140,217,52,104,201,217,25,25,217,25,182,201,217,246,77,5,196,180,59,43,177,117,104,200,83,
-
142 67,238,198,62,198,3,216,208,75,25,166,177,137,41,144,249,155,37,118,46,40,80,187,66,50,51,159,50,40,243,35,91,50,30,243,35,232,237,144,59,
-
143 23,32,161,113,68,23,51,159,50,65,44,102,154,198,217,88,196,204,143,169,155,33,154,50,118,67,230,106,60,202,37,141,230,177,182,83,33,232,237,148,
-
144 99,186,158,172,236,81,89,59,40,246,55,154,198,105,88,196,204,135,169,155,33,154,50,104,70,70,96,124,204,162,76,141,109,141,183,153,137,67,51,224,
-
145 209,145,5,50,20,172,157,207,187,67,230,70,137,50,18,243,49,40,102,125,93,159,24,81,246,131,31,51,83,230,72,36,201,237,153,26,243,33,40,100,
-
146 61,93,159,25,161,241,67,31,118,12,157,161,246,141,143,104,60,75,67,239,104,126,208,249,26,31,104,49,243,53,30,103,18,100,86,204,155,121,144,146,
-
147 153,143,187,62,162,143,140,49,246,128,61,220,121,155,219,50,108,211,49,40,236,125,219,34,12,124,132,62,40,15,153,160,147,50,182,100,247,153,54,134,
-
148 99,193,216,245,104,124,97,143,187,83,230,113,38,104,217,145,175,50,18,142,199,218,31,2,11,144,5,198,139,180,65,238,202,36,200,210,153,154,134,98,
-
149 65,216,242,10,30,48,199,197,40,247,104,37,217,91,51,52,211,54,202,236,77,217,245,104,124,131,31,20,163,218,71,153,189,183,102,154,102,36,174,196,
-
150 218,15,86,135,198,20,125,162,143,119,18,102,86,204,222,105,153,165,51,19,118,37,90,15,24,97,226,148,123,72,247,111,18,209,182,218,15,53,160,244,
-
151 20,125,69,15,32,195,218,16,123,176,18,238,217,155,205,51,53,230,98,81,216,240,20,60,132,30,49,15,180,1,238,209,183,111,52,204,215,187,109,29,
-
152 143,1,67,212,99,227,40,241,64,61,218,54,102,247,187,52,166,109,163,177,32,40,121,6,30,49,7,180,1,46,209,179,50,154,102,105,93,137,180,30,
-
153 2,143,169,25,16,15,141,30,41,4,187,121,166,102,149,219,119,98,65,160,146,12,60,82,137,20,2,90,32,151,101,109,217,175,118,218,52,18,2,132,
-
154 168,194,70,81,34,128,75,68,109,161,77,104,107,221,137,70,130,64,80,146,12,60,98,9,20,2,93,163,109,10,107,183,189,219,104,236,72,52,18,162,
-
155 132,140,162,69,0,150,136,37,163,219,104,105,173,4,148,80,148,20,37,70,30,49,4,138,1,46,208,214,136,107,179,74,237,180,104,220,80,149,24,121,
-
156 8,60,80,9,21,109,161,77,118,247,187,109,26,55,20,37,70,30,66,15,20,2,69,91,104,83,93,189,238,219,70,141,218,9,1,132,144,130,69,3,
-
157 98,129,182,136,107,183,149,161,168,41,184,161,234,65,234,67,227,0,241,162,90,20,214,133,123,67,81,163,96,40,74,138,18,66,9,25,68,138,182,208,
-
158 166,180,123,218,26,86,141,197,9,1,66,72,65,35,40,145,86,218,35,109,30,246,134,149,163,113,66,84,97,42,48,145,129,177,86,218,33,173,30,246,
-
159 143,43,67,98,155,1,66,72,48,145,129,177,128,72,164,109,163,205,20,107,218,9,140,216,12,37,70,18,50,137,21,109,162,26,208,175,104,242,180,110,
-
160 41,184,161,42,65,36,81,34,173,138,67,90,21,237,13,65,70,197,54,3,9,82,9,25,68,140,13,138,67,69,21,237,30,81,70,197,55,20,37,70,
-
161 18,69,108,84,209,83,90,21,237,30,86,141,160,166,192,97,32,65,36,1,35,91,26,219,66,188,83,202,208,212,20,216,12,218,145,178,43,99,3,98,
-
162 144,209,72,107,71,189,161,168,41,184,161,42,48,146,43,99,3,98,166,138,43,197,60,162,141,65,70,198,108,6,18,69,108,96,108,85,182,133,120,167,
-
163 149,161,168,40,208,25,181,25,178,43,99,3,99,91,20,87,140,242,138,52,162,155,140,216,12,36,138,216,192,216,211,69,35,197,21,237,13,65,70,198,
-
164 109,72,218,171,100,86,198,154,50,60,81,74,40,212,20,108,83,96,48,146,43,100,3,70,154,50,60,83,202,41,229,20,108,102,192,102,212,141,144,13,
-
165 24,13,20,143,20,82,138,122,12,108,102,192,141,170,182,64,108,147,70,71,138,121,69,60,162,141,140,216,12,218,145,178,43,99,1,163,35,198,41,70,
-
166 122,12,108,99,64,141,145,77,32,26,52,209,72,104,162,148,103,160,207,65,141,2,26,4,108,128,104,211,70,71,140,82,140,82,138,54,49,170,67,84,
-
167 141,145,77,36,209,145,227,20,163,60,163,61,6,54,67,64,141,144,13,32,26,50,60,98,148,83,208,103,198,54,51,106,166,170,182,52,209,145,227,35,
-
168 197,20,162,158,131,26,4,53,84,213,86,198,154,52,209,145,226,158,131,61,6,54,67,85,77,85,108,96,52,107,198,66,138,41,70,124,134,129,13,5,
-
169 53,64,210,77,25,30,50,60,98,148,103,160,198,200,104,16,213,83,72,15,37,227,35,198,41,70,122,12,108,99,64,134,170,154,64,52,107,198,41,70,
-
170 41,70,124,143,144,208,33,170,6,144,13,37,227,20,163,20,163,62,49,160,71,129,13,85,52,128,104,211,70,71,140,82,144,168,71,200,104,41,170,166,
-
171 168,26,75,200,133,24,165,24,168,51,228,120,43,193,77,32,26,73,163,35,198,66,140,84,25,242,62,67,85,77,32,26,75,200,133,34,20,133,66,62,
-
172 67,64,134,168,61,65,228,7,146,82,33,70,42,12,249,13,5,53,65,234,6,146,242,35,198,41,70,41,70,122,17,242,26,170,105,0,210,3,201,120,
-
173 200,82,21,8,249,31,33,170,166,170,154,64,121,47,24,165,24,168,71,200,249,13,5,120,41,164,188,136,82,33,72,84,25,242,60,8,240,87,170,154,
-
174 75,201,121,16,164,42,16,168,71,200,104,43,193,77,80,122,222,68,40,197,66,21,6,124,143,5,122,131,212,13,37,227,20,163,21,8,89,31,35,193,
-
175 77,85,52,151,145,10,68,41,10,132,124,143,171,193,94,160,245,7,146,82,74,68,40,197,66,62,71,213,234,15,91,201,121,16,164,42,16,168,71,213,
-
176 224,175,5,122,131,201,121,37,34,20,133,66,22,175,5,122,131,212,30,75,200,133,34,20,133,169,106,240,87,130,154,75,201,121,16,164,66,144,178,62,
-
177 71,129,30,10,245,7,168,60,136,82,33,72,84,33,106,240,87,128,61,111,89,86,242,34,16,168,66,200,240,87,168,61,65,228,188,136,82,33,72,90,
-
178 150,165,171,212,30,160,245,148,136,82,21,8,84,35,228,125,94,160,245,7,146,242,74,68,66,21,8,90,150,175,5,122,131,214,85,149,81,20,168,71,
-
179 213,224,175,0,40,1,84,30,73,72,136,168,132,124,143,169,64,30,160,245,7,145,10,68,41,10,132,42,17,224,175,5,120,3,212,30,68,41,16,164,
-
180 68,82,200,240,82,128,20,0,171,42,202,68,41,10,132,45,75,87,130,188,1,235,122,202,168,82,34,42,33,10,10,80,2,128,21,101,89,85,17,81,
-
181 20,181,45,75,87,168,61,101,89,85,17,81,20,181,45,75,87,168,61,64,171,41,17,21,16,133,169,106,90,188,21,235,42,202,178,170,34,149,8,250,
-
182 188,0,160,5,0,42,209,104,168,132,42,16,181,120,1,64,10,0,245,148,136,82,34,41,106,90,188,0,160,5,0,122,202,178,170,33,11,82,200,240,
-
183 82,128,20,0,171,42,202,68,41,11,82,212,181,120,1,66,85,66,172,170,136,168,132,45,74,10,80,2,172,171,42,202,168,138,136,165,169,106,80,2,
-
184 128,61,101,89,85,17,81,20,181,45,94,10,245,149,104,178,173,21,17,81,20,160,5,0,42,202,178,172,170,136,168,138,88,22,175,0,40,1,86,139,
-
185 41,17,21,42,90,150,5,0,40,1,64,10,168,138,136,168,138,90,150,5,0,40,1,66,85,149,101,84,169,106,80,2,128,21,104,20,84,69,68,84,
-
186 69,74,150,165,171,192,10,18,170,32,74,168,138,149,40,2,0,20,0,171,42,202,178,170,34,162,41,106,80,2,128,20,37,89,85,17,81,20,181,45,
-
187 75,4,129,86,85,162,162,42,34,165,75,82,128,20,0,171,42,208,40,8,138,136,165,129,96,80,2,173,2,139,69,68,84,169,106,88,36,10,178,172,
-
188 170,136,168,138,90,150,5,0,40,1,66,129,42,202,168,138,149,45,74,0,80,2,173,2,138,136,168,138,136,169,4,169,66,129,40,74,168,128,136,169,
-
189 4,169,64,16,0,160,5,89,86,128,144,72,36,10,0,80,2,133,2,85,149,81,21,17,75,82,193,32,129,64,160,81,81,21,32,149,40,1,64,10,
-
190 0,85,149,104,20,4,69,44,10,0,88,20,0,171,69,68,90,42,34,164,18,9,2,128,21,101,84,69,68,84,69,45,75,4,129,66,129,64,160,80,
-
191 18,9,82,212,160,5,0,64,160,81,81,21,17,82,9,4,130,4,161,64,68,10,2,34,164,18,165,0,64,2,172,171,64,160,36,18,9,2,128,20,
-
192 0,161,64,160,34,42,34,150,9,4,130,65,2,129,64,162,164,18,165,0,40,1,64,10,0,85,160,80,18,8,128,144,44,18,5,0,64,162,164,40,
-
193 169,4,130,65,2,129,64,149,82,9,4,129,96,144,40,1,66,129,64,160,36,18,9,82,128,20,0,171,64,160,81,82,9,4,130,65,32,80,2,132,
-
194 170,136,9,4,130,65,0,18,8,20,90,5,2,128,144,72,36,18,5,0,40,80,40,8,138,136,9,4,130,65,32,129,64,160,81,82,9,82,128,36,
-
195 18,8,20,10,2,65,17,75,4,129,66,144,64,160,80,48,162,160,2,0,20,40,18,130,32,34,2,65,32,144,72,32,80,40,20,84,133,2,138,144,
-
196 72,20,40,0,80,2,133,2,128,144,72,36,18,9,2,133,2,129,69,68,84,130,65,0,16,1,2,129,77,1,16,18,9,2,128,36,16,40,20,10,
-
197 5,21,32,88,36,19,64,148,40,9,4,130,65,0,16,1,32,129,64,162,165,82,9,4,130,65,52,208,37,10,2,65,32,144,72,36,16,40,20,84,
-
198 133,3,4,0,64,4,0,40,80,18,9,4,64,42,1,114,160,23,64,160,81,104,184,106,128,168,10,129,64,162,193,117,193,52,75,202,133,66,149,16,
-
199 180,64,68,10,46,176,88,45,66,11,80,5,0,88,46,9,2,162,61,10,105,94,217,94,242,148,180,134,176,80,82,85,65,64,21,64,128,4,0,88,
-
200 42,0,32,82,133,68,121,77,52,166,154,243,94,143,45,42,128,160,170,10,160,64,85,85,34,128,192,4,130,192,16,0,160,136,136,84,123,208,215,188,
-
201 211,74,107,209,229,164,17,86,69,2,2,145,64,138,170,170,160,170,0,176,194,128,137,41,111,42,26,242,154,247,154,242,189,16,188,0,21,64,128,170,
-
202 170,64,82,2,144,21,106,16,8,97,64,42,94,133,52,175,52,215,182,247,188,165,46,138,0,160,164,5,32,42,129,20,8,170,170,10,0,1,12,48,
-
203 68,149,10,242,189,178,154,107,222,105,74,84,68,13,106,73,20,21,85,84,8,160,64,85,0,88,44,21,20,16,37,149,229,121,175,108,211,91,52,166,
-
204 189,10,152,0,42,129,21,85,85,84,8,10,64,85,0,80,80,5,10,132,1,1,10,134,189,237,182,216,147,91,109,239,122,34,0,2,168,12,10,64,
-
205 82,2,144,20,128,170,4,80,34,130,128,40,2,224,148,123,222,219,98,79,137,18,60,211,77,42,32,0,16,20,138,66,1,8,4,32,17,85,84,21,
-
206 65,85,85,85,84,20,33,222,134,182,104,241,227,207,159,108,75,111,41,64,0,128,65,128,132,85,34,169,0,132,1,148,8,160,64,82,0,16,1,65,
-
207 67,162,61,179,68,143,30,124,120,241,237,154,106,36,20,8,69,25,84,101,82,42,145,84,138,164,0,80,85,82,40,17,65,66,8,146,189,237,182,36,
-
208 120,241,227,196,137,109,239,44,36,85,33,20,138,164,85,34,144,138,66,42,168,40,1,21,72,69,85,0,208,165,43,102,182,60,120,243,226,71,137,109,
-
209 239,68,170,169,20,132,82,16,8,64,33,20,132,85,85,80,85,85,85,82,2,172,41,71,188,209,45,143,30,60,248,241,45,182,87,164,0,138,163,1,
-
210 8,4,85,33,20,132,81,149,72,170,64,34,129,8,4,90,130,2,60,166,182,216,243,226,89,15,30,36,75,205,68,130,169,8,164,34,145,84,138,164,
-
211 85,34,144,138,164,2,16,8,69,33,21,64,1,10,134,137,108,249,241,226,231,199,159,109,179,81,32,170,50,144,101,82,42,144,20,138,164,82,17,84,
-
212 128,66,0,202,163,17,72,160,180,67,77,108,121,243,236,153,50,62,60,75,101,42,40,40,196,32,196,81,149,72,170,170,164,5,80,34,169,8,65,136,
-
213 65,136,66,0,6,134,189,177,227,207,139,159,100,200,120,246,222,244,0,81,136,65,136,49,20,138,164,80,32,42,168,17,84,101,32,202,65,136,66,2,
-
214 134,143,41,162,91,62,200,251,38,67,207,137,52,210,234,66,12,49,6,33,8,69,34,129,1,84,1,64,21,72,69,24,98,12,50,170,193,10,134,154,
-
215 216,241,227,217,50,62,124,123,98,94,136,10,163,16,130,136,66,17,72,10,64,85,2,40,17,64,138,4,34,140,66,17,84,2,133,121,173,137,30,200,
-
216 251,38,67,199,143,53,229,128,16,98,12,49,6,82,42,170,130,168,42,170,168,40,41,20,131,12,65,136,164,8,20,165,109,177,39,207,178,100,124,249,
-
217 246,219,53,16,21,72,48,196,24,132,85,32,42,168,42,170,128,16,8,66,16,98,12,49,8,170,0,136,87,154,36,120,243,236,153,50,62,60,73,175,
-
218 124,0,131,16,98,16,132,82,42,170,129,1,85,64,138,163,40,195,40,195,40,202,160,25,74,246,196,137,62,200,248,185,241,231,219,53,229,130,144,132,
-
219 24,132,34,145,85,85,84,20,128,69,85,34,140,66,12,48,195,16,132,0,161,94,219,99,207,178,100,46,200,249,241,45,154,137,34,144,98,12,50,144,
-
220 138,170,10,160,69,85,32,17,84,138,65,136,48,195,16,138,161,66,154,104,147,231,217,11,178,100,200,120,150,222,136,160,65,136,65,136,66,41,21,72,
-
221 160,64,85,0,85,82,16,130,136,48,162,12,66,40,64,175,53,177,227,217,11,139,139,178,62,61,179,94,128,4,24,130,134,32,196,34,144,21,64,128,
-
222 170,0,0,164,82,16,131,12,65,134,33,21,66,133,52,72,147,226,236,142,197,217,31,30,217,165,73,8,65,134,24,98,16,138,69,5,80,80,80,0,
-
223 5,82,16,131,12,48,195,12,50,170,232,243,91,30,201,144,184,187,33,115,226,68,188,168,10,65,134,24,81,6,34,145,85,84,1,64,22,160,4,33,
-
224 6,33,6,32,196,33,20,0,10,87,182,36,123,38,66,231,108,143,159,108,215,234,66,12,48,195,16,138,64,32,42,130,130,130,168,42,169,20,131,16,
-
225 97,68,20,66,40,80,166,182,36,249,243,177,113,113,118,67,196,154,82,130,144,130,136,40,132,25,84,128,170,160,64,85,0,85,82,16,131,16,131,40,
-
226 196,34,172,10,87,137,18,61,147,38,66,236,135,159,109,239,64,2,16,131,12,66,17,85,85,65,84,20,20,20,8,170,49,8,49,8,49,20,128,0,
-
227 136,83,77,18,124,123,38,76,135,159,109,183,151,85,32,196,32,202,69,85,5,5,80,80,80,5,5,82,16,98,16,132,82,2,134,87,189,177,35,207,
-
228 159,30,124,120,150,205,42,64,8,69,24,138,164,5,80,80,5,0,0,0,5,82,16,132,24,132,34,168,6,133,121,173,182,60,120,241,226,68,182,105,
-
229 74,144,85,33,8,164,85,85,5,0,88,44,20,1,85,85,85,85,85,84,0,17,16,166,154,219,98,71,137,108,73,175,121,104,170,4,34,145,85,64,
-
230 0,1,64,2,0,0,160,170,4,85,34,130,128,7,43,222,105,162,68,182,37,179,77,121,83,5,82,41,21,84,20,1,64,0,32,16,0,0,5,5,
-
231 80,85,5,8,81,10,247,182,217,162,91,52,211,74,82,192,1,84,138,170,10,0,0,0,1,8,4,0,20,1,65,85,65,96,9,71,149,230,154,219,
-
232 102,154,107,222,137,130,170,170,170,130,128,0,0,0,64,48,128,0,40,0,2,128,6,8,133,43,222,105,166,182,247,154,84,76,20,21,84,20,20,2,
-
233 0,1,12,2,16,0,5,0,80,5,135,66,149,239,53,230,154,243,74,84,76,20,21,84,20,22,161,0,134,24,64,0,0,0,0,2,1,162,33,94,
-
234 83,94,243,94,82,149,18,21,0,85,0,0,0,128,66,16,224,16,0,0,0,88,4,40,136,82,189,239,123,222,82,161,120,40,2,130,128,0,4,2,
-
235 16,193,3,8,0,64,0,2,26,34,20,165,123,202,242,148,168,156,0,20,0,0,2,16,134,28,33,8,64,2,176,12,17,17,10,87,149,229,41,74,
-
236 148,133,64,0,1,96,1,8,97,248,67,8,4,3,10,81,10,82,188,165,41,81,19,0,0,0,0,128,66,28,48,248,67,0,128,64,52,162,20,165,
-
237 41,74,133,68,225,0,0,0,0,128,67,15,254,24,64,33,133,40,136,82,148,165,68,68,64,192,32,0,16,8,97,193,2,129,240,132,32,16,232,136,
-
238 136,82,161,74,148,240,0,0,8,4,33,195,250,112,194,16,135,165,16,168,84,42,34,82,24,0,4,33,8,124,41,248,97,132,48,233,68,68,42,34,
-
239 34,80,48,128,4,2,16,195,244,254,28,33,224,148,162,21,17,17,41,194,16,132,33,135,255,252,48,195,10,104,136,136,137,68,248,4,32,16,195,15,
-
240 79,167,12,48,255,68,162,34,37,63,8,66,28,63,250,120,112,195,133,52,162,81,41,76,48,132,33,135,255,167,240,225,240,77,18,137,74,126,16,225,
-
241 195,254,159,225,195,135,77,41,74,83,134,24,67,15,255,79,248,112,253,52,162,83,160,120,97,240,160,122,127,240,225,255,74,105,79,134,24,120,127,211,
-
242 255,195,195,79,74,82,159,14,31,255,255,254,31,15,211,77,63,195,15,15,244,255,254,31,244,211,79,252,63,255,255,255,135,255,211,167,15,15,135,253,
-
243 63,208,60,33,250,104,148,74,127,12,60,63,15,254,31,255,233,165,52,240,225,225,255,195,78,31,15,250,82,148,211,252,56,127,15,255,255,167,79,79,
-
244 254,24,97,240,225,255,224,158,157,52,211,167,255,240,255,194,16,132,48,79,135,166,137,68,68,68,162,116,135,8,66,16,128,64,33,211,0,0,80,0,
-
245 8,83,66,161,74,242,148,165,42,34,34,83,225,0,0,0,0,0,0,0,80,80,85,0,80,5,8,122,33,74,242,188,215,154,243,94,242,149,18,129,
-
246 10,128,42,170,168,40,40,2,170,170,130,168,40,0,0,7,232,136,87,148,211,94,217,166,154,107,222,84,68,192,0,21,85,65,85,85,85,72,170,69,
-
247 85,85,5,0,128,67,74,21,10,82,189,239,53,230,154,107,222,247,161,83,128,2,170,170,170,170,169,21,85,84,138,160,170,0,0,16,244,162,21,10,
-
248 87,149,230,188,211,94,107,222,242,149,19,0,0,85,85,85,82,42,145,85,85,85,85,64,0,0,0,2,26,81,10,82,149,239,53,230,154,105,166,189,
-
249 229,41,104,16,80,85,85,32,42,170,170,145,85,72,170,160,160,0,16,195,232,136,87,149,230,188,211,77,52,211,94,242,161,104,16,5,85,85,85,85,
-
250 85,85,85,85,85,85,80,0,5,0,0,0,14,136,82,189,230,154,217,173,182,105,166,189,229,42,96,0,170,170,164,85,85,85,85,85,85,85,5,80,
-
251 85,0,80,80,0,0,209,10,83,77,52,75,98,68,137,109,182,222,242,162,64,21,84,138,69,82,42,170,170,169,21,85,85,84,138,170,170,160,160,0,
-
252 1,161,74,243,91,18,60,121,241,227,196,182,219,202,152,42,145,72,164,82,41,20,138,69,85,34,170,130,170,170,145,72,164,80,80,134,136,83,77,108,
-
253 120,243,231,217,31,30,36,75,222,144,2,41,8,66,16,138,66,41,21,72,164,82,42,169,21,85,85,85,85,85,64,0,40,133,123,109,137,62,61,145,
-
254 243,231,196,137,53,232,128,10,164,33,6,33,20,132,85,82,41,20,138,164,80,85,85,82,42,170,170,168,122,21,239,53,177,227,199,159,62,60,120,246,
-
255 205,121,112,82,16,132,33,8,69,82,41,20,138,66,16,138,160,160,170,164,82,16,138,170,1,68,71,188,214,196,143,30,124,249,241,227,196,182,105,82,
-
256 0,164,33,8,66,17,72,170,69,33,20,132,82,42,168,42,129,21,84,138,170,161,10,33,74,107,98,71,159,30,200,249,241,35,205,52,165,130,169,8,
-
257 66,16,138,164,85,34,145,72,69,33,21,72,164,82,42,145,72,170,170,29,10,243,91,18,60,249,243,236,143,143,18,36,215,162,0,41,8,66,16,132,
-
258 33,21,85,84,138,164,82,17,72,170,66,41,8,66,16,132,80,93,10,107,98,71,159,100,201,147,38,67,199,182,242,164,20,132,32,196,33,8,170,170,
-
259 170,170,164,82,41,20,138,69,33,8,66,16,131,17,85,66,133,52,209,227,207,139,178,23,23,100,124,120,147,74,144,33,8,48,195,16,132,34,170,170,
-
260 170,170,170,130,169,20,131,16,97,134,24,98,17,85,67,41,77,108,120,246,76,133,217,11,178,62,61,179,74,128,4,32,195,12,49,6,34,145,85,84,
-
261 21,84,21,65,72,66,12,66,12,65,134,33,8,0,20,66,154,104,145,231,217,50,23,100,200,248,246,219,122,85,70,24,97,134,24,98,17,85,85,84,
-
262 20,20,20,0,20,138,49,6,24,97,134,24,138,161,148,175,53,177,227,207,178,100,46,125,144,241,45,188,168,10,65,134,24,97,134,33,8,170,160,160,
-
263 10,160,170,170,170,69,82,16,131,12,49,21,84,2,82,189,182,199,159,62,46,201,147,35,227,219,53,233,2,16,97,134,20,66,16,138,170,10,10,10,
-
264 10,10,170,10,164,32,195,10,24,97,136,69,80,161,74,104,145,39,207,139,178,23,100,200,248,150,205,42,2,144,97,133,12,49,8,69,85,80,80,5,
-
265 80,80,85,85,33,6,24,97,134,24,98,16,128,0,136,83,91,18,61,147,38,66,226,236,143,143,18,107,210,170,65,134,24,97,136,69,32,42,130,130,
-
266 168,42,170,144,132,24,97,134,24,97,134,33,20,0,17,30,246,196,143,62,200,92,92,93,145,241,226,91,122,65,72,48,195,12,49,8,170,170,170,10,
-
267 170,10,170,164,33,8,65,136,40,80,194,136,50,170,130,20,173,182,60,123,33,113,113,118,76,143,143,18,105,82,170,48,195,12,65,136,69,85,5,5,
-
268 5,85,85,85,85,34,144,131,12,65,134,24,138,171,161,77,52,72,241,236,153,50,100,124,248,150,205,42,65,72,65,136,49,8,69,34,130,168,2,128,
-
269 0,0,42,169,8,66,12,49,6,33,21,67,66,188,214,196,137,62,124,249,243,227,219,109,229,72,41,8,49,6,33,21,85,64,0,0,0,0,0,1,
-
270 85,84,138,66,16,132,85,85,13,10,247,182,36,120,241,231,199,137,18,105,165,77,72,66,16,132,34,170,168,0,64,32,1,0,0,85,85,33,20,132,
-
271 82,2,134,136,87,154,216,145,34,68,143,108,73,175,122,32,2,144,132,82,17,84,20,0,32,16,132,32,10,10,170,170,164,80,80,88,81,10,247,154,
-
272 219,98,91,18,217,166,188,169,0,85,34,145,85,65,66,1,8,4,32,16,5,0,85,85,85,85,80,130,34,21,239,53,182,219,109,179,77,121,81,2,
-
273 170,170,69,80,80,0,8,66,24,66,0,160,160,170,10,160,160,1,208,165,123,205,52,214,205,53,239,122,38,10,10,170,170,0,1,8,97,194,0,0,
-
274 10,160,170,10,10,1,13,16,165,123,205,52,211,77,123,202,136,128,0,10,170,160,0,1,135,134,16,128,2,130,168,40,40,0,4,18,133,43,222,243,
-
275 94,107,222,242,162,96,0,160,160,160,16,135,135,224,21,5,5,85,5,0,12,18,84,41,94,247,189,239,43,209,19,128,40,2,128,4,56,127,128,64,
-
276 1,64,0,20,0,2,29,16,165,41,94,242,188,165,42,34,96,0,160,0,1,15,195,240,128,0,2,128,2,132,3,210,84,41,74,242,149,232,84,68,
-
277 192,0,0,0,33,135,248,112,128,0,0,0,0,4,3,209,16,165,41,74,82,148,168,137,192,0,0,32,24,127,195,128,64,0,0,32,0,16,233,66,
-
278 161,74,82,148,168,84,166,16,0,0,132,56,127,14,16,0,128,4,2,31,162,33,74,133,41,80,168,148,132,0,32,1,14,31,225,132,32,16,0,128,
-
279 67,210,136,84,41,80,165,68,74,97,0,0,8,67,15,254,24,4,2,16,135,233,66,162,21,10,136,136,158,1,0,8,66,31,254,24,64,33,8,67,
-
280 210,136,136,133,68,66,209,56,66,0,16,135,255,225,225,8,67,15,165,40,136,84,68,162,120,64,32,16,225,211,240,240,195,14,31,210,136,137,68,68,
-
281 208,56,64,33,225,167,255,135,12,56,127,74,81,17,41,78,24,66,24,127,79,225,248,112,225,250,82,136,148,211,134,24,127,255,255,134,28,63,244,162,
-
282 82,159,195,15,15,79,255,225,195,135,14,154,82,137,167,225,195,255,167,135,240,225,225,254,148,166,154,67,195,225,167,255,252,56,120,127,166,148,167,255,
-
283 135,255,255,240,248,126,29,58,105,167,240,255,255,255,15,248,127,253,41,167,255,15,255,255,225,254,31,253,58,127,255,255,254,31,255,195,254,157,58,127,
-
284 195,255,255,135,255,225,255,167,79,167,15,255,225,255,255,255,255,79,79,225,255,252,63,255,255,195,211,211,255,255,255,15,255,250,7,255,244,253,63,135,
-
285 254,31,255,255,132,63,165,40,148,167,240,195,135,12,56,127,167,255,211,166,154,127,252,56,97,15,15,255,166,154,125,63,252,63,195,15,255,74,105,166,
-
286 144,248,97,255,135,15,195,253,61,52,233,233,255,195,15,14,16,134,26,120,122,82,136,148,68,68,166,159,132,32,16,0,0,0,252,0,0,20,3,4,
-
287 162,33,74,87,148,165,66,149,18,148,248,0,0,0,40,2,128,40,42,170,168,40,2,132,52,149,30,87,154,243,77,52,215,189,232,84,225,5,5,85,
-
288 85,80,80,85,85,34,145,85,65,64,0,3,232,133,43,222,105,173,182,107,102,154,247,149,19,0,5,82,42,170,170,145,84,132,82,41,21,85,65,96,
-
289 1,232,133,41,74,243,94,105,173,154,217,166,189,229,68,224,160,164,85,34,144,138,69,34,145,72,170,170,10,1,0,244,68,66,148,175,121,166,154,217,
-
290 166,154,107,222,84,76,0,21,72,170,69,34,144,138,69,34,169,20,20,0,0,2,16,165,16,165,123,205,123,109,154,219,102,154,247,149,19,5,5,34,
-
291 169,21,72,164,82,41,8,69,34,170,128,0,66,28,18,84,43,222,105,173,154,217,173,154,107,202,84,68,8,40,41,21,84,138,69,82,41,8,170,69,
-
292 85,80,0,0,0,0,13,17,30,247,154,219,109,137,109,182,205,52,175,68,193,64,138,164,82,42,145,84,138,69,34,145,85,84,21,84,1,64,2,20,
-
293 41,94,246,219,18,60,72,241,34,91,53,239,68,10,170,145,72,69,34,169,20,138,69,82,41,20,138,66,42,170,170,128,0,65,10,87,182,216,241,231,
-
294 217,31,30,60,73,175,42,64,20,138,66,16,138,66,16,138,66,17,72,164,85,85,33,20,132,34,170,168,6,133,41,173,143,62,124,93,147,38,67,199,
-
295 154,242,193,84,131,16,132,33,8,66,17,72,69,33,8,69,34,145,72,69,85,34,170,168,0,80,175,108,72,243,236,133,217,11,159,30,36,215,150,10,
-
296 164,32,196,24,132,33,8,164,33,8,66,17,72,170,170,164,33,8,164,34,128,5,16,175,52,72,147,231,217,50,100,200,120,150,205,42,85,72,66,12,
-
297 66,16,132,33,20,132,32,196,33,8,170,170,170,65,136,66,16,138,1,68,123,205,18,60,249,246,66,236,143,159,30,217,165,74,170,140,66,12,66,17,
-
298 72,66,16,132,32,196,33,20,138,170,66,41,8,69,34,128,104,133,53,177,35,217,50,100,201,147,33,226,77,122,32,42,144,131,16,132,34,144,132,33,
-
299 8,65,136,65,148,132,33,8,66,41,8,69,32,0,80,175,108,72,243,231,197,217,11,178,62,60,73,165,44,21,72,65,136,65,148,132,34,144,132,32,
-
300 196,24,132,33,8,66,16,132,24,98,17,85,116,121,162,79,178,100,118,46,118,201,145,241,38,189,32,164,32,196,24,132,33,21,72,164,33,8,66,16,
-
301 132,33,8,66,12,65,136,48,196,34,174,83,91,30,125,145,217,217,217,217,219,33,226,77,42,2,144,131,12,48,196,33,8,69,34,144,138,66,41,20,
-
302 132,24,131,10,24,80,194,136,66,0,2,33,173,137,62,200,92,244,236,236,237,145,241,230,189,0,8,48,194,134,24,97,136,66,42,145,85,72,170,170,
-
303 65,136,48,195,12,48,195,12,50,168,4,165,123,99,207,178,23,59,59,59,23,100,124,73,175,64,33,6,20,40,97,67,16,98,41,21,84,138,170,10,
-
304 170,164,32,195,12,40,80,161,134,85,0,66,148,209,34,79,139,178,59,59,59,100,200,251,102,190,4,32,194,133,12,40,97,136,66,42,170,170,170,145,
-
305 84,138,66,41,6,24,97,134,25,85,66,133,53,177,39,217,11,157,157,157,139,178,30,36,210,160,16,130,134,20,40,97,134,34,145,85,85,85,84,138,
-
306 170,170,69,24,97,66,133,12,49,8,160,136,83,91,30,125,145,217,217,217,216,187,35,226,77,42,1,8,40,97,66,134,24,98,17,72,170,170,170,170,
-
307 170,170,65,134,24,97,67,10,24,98,42,130,33,77,18,60,251,35,179,179,179,177,118,71,196,154,84,5,24,97,133,12,48,196,24,138,69,85,82,42,
-
308 145,84,131,12,48,195,12,48,161,134,34,168,101,121,162,71,178,100,118,118,122,46,46,200,123,102,150,4,32,161,134,20,49,6,34,144,138,164,85,34,
-
309 145,72,66,12,65,134,20,40,80,161,136,69,90,21,182,199,178,23,59,61,59,61,59,100,124,75,101,64,82,12,48,161,67,16,98,41,21,85,72,164,
-
310 33,8,69,33,6,32,195,10,20,40,97,134,34,133,30,104,147,236,133,207,79,79,79,78,217,31,108,210,192,132,24,80,161,134,24,98,16,132,82,41,
-
311 21,85,85,84,131,16,80,194,154,10,20,48,196,34,229,53,177,44,153,30,158,158,158,158,139,178,30,219,210,66,12,40,80,161,67,12,66,17,85,84,
-
312 138,170,160,170,164,24,97,134,20,40,97,66,134,24,128,178,189,177,44,133,207,79,68,34,19,209,118,67,205,122,1,8,40,80,166,131,10,24,132,34,
-
313 145,65,85,84,20,1,72,65,133,12,41,160,161,66,133,16,139,149,237,143,100,46,122,33,61,16,157,157,159,30,107,208,8,48,161,66,133,10,24,98,
-
314 16,138,170,170,160,160,10,170,65,134,20,48,161,133,10,24,98,42,172,165,108,73,246,71,103,167,162,19,211,182,67,219,122,72,65,66,133,10,20,48,
-
315 196,33,21,85,85,85,85,85,85,72,66,12,48,161,66,154,10,24,101,90,60,209,231,217,29,136,68,34,19,211,177,113,237,154,146,16,97,66,133,10,
-
316 24,98,16,138,164,85,85,34,130,169,8,65,134,24,80,195,12,48,195,17,65,17,230,137,62,200,236,236,244,244,236,92,248,246,222,128,164,24,97,66,
-
317 134,24,132,34,145,85,85,85,65,85,84,132,24,97,133,12,48,196,33,21,65,17,230,137,30,200,92,92,236,236,93,144,241,38,149,1,72,65,133,16,
-
318 98,16,138,170,170,170,170,170,10,170,164,24,97,134,24,98,16,138,160,8,134,154,36,249,241,118,66,226,231,207,137,53,229,129,8,65,134,32,196,82,
-
319 42,170,168,40,2,128,2,129,8,48,195,12,48,196,82,0,4,165,53,182,199,159,62,200,249,241,226,91,52,169,5,33,6,32,202,66,42,130,130,128,
-
320 40,0,42,170,169,20,132,82,41,21,84,2,133,121,173,137,30,124,121,241,226,68,154,242,165,84,132,33,8,66,42,130,128,40,0,0,0,40,42,169,
-
321 20,132,82,40,40,0,34,35,205,108,72,145,227,199,137,109,179,74,136,0,164,33,20,138,69,5,5,0,0,0,0,0,0,85,85,85,85,32,40,0,
-
322 80,165,52,214,196,137,30,36,75,102,189,233,170,169,8,69,34,168,40,40,0,0,66,0,0,10,10,170,170,160,160,1,66,149,230,182,216,145,45,182,
-
323 217,175,42,64,21,72,164,85,80,80,5,0,0,128,4,32,10,160,170,10,160,0,28,165,123,205,109,182,219,108,211,74,84,64,5,82,42,145,65,65,
-
324 64,2,0,16,128,64,1,64,20,21,64,0,57,81,239,53,179,91,108,211,94,82,164,0,20,138,170,10,10,0,1,0,132,32,0,0,10,10,0,0,
-
325 0,26,33,74,107,205,52,214,222,247,148,188,21,85,84,20,20,0,2,1,8,112,0,0,0,80,5,0,14,136,143,123,205,121,166,189,229,42,36,0,
-
326 21,65,65,64,0,0,33,8,67,8,0,0,2,128,0,7,68,66,189,239,53,239,123,202,133,192,1,65,84,1,64,32,24,97,132,33,0,128,40,0,
-
327 66,8,136,82,189,239,123,222,82,162,36,0,1,64,20,0,2,1,14,28,33,0,128,0,64,33,209,16,175,121,94,242,189,17,56,2,128,40,0,4,
-
328 2,24,112,240,132,32,0,16,14,136,133,43,202,242,148,165,79,0,0,0,0,0,8,67,15,135,8,64,32,16,250,21,10,87,148,165,42,39,128,0,
-
329 0,0,0,4,48,255,135,8,64,32,31,68,41,74,82,161,74,148,194,0,0,0,16,132,60,63,194,16,128,67,10,81,10,133,41,74,136,137,224,0,
-
330 0,1,0,134,31,255,132,2,16,194,148,68,66,149,10,136,137,194,0,16,0,134,31,254,28,33,8,67,210,133,68,42,21,17,62,1,0,0,132,48,
-
331 254,159,134,16,132,62,137,42,33,81,17,52,12,0,32,16,195,135,79,240,194,16,195,165,17,17,10,136,148,240,8,4,2,24,127,167,248,97,8,125,
-
332 40,136,136,136,148,240,132,33,12,63,255,225,134,28,41,165,17,17,40,159,132,33,134,30,26,127,225,135,15,165,40,137,68,255,12,48,248,127,254,24,
-
333 97,253,41,68,68,167,240,135,15,135,255,248,97,195,166,148,162,83,76,56,124,63,255,195,134,28,62,154,37,18,154,97,195,15,255,255,135,12,63,244,
-
334 162,82,159,195,195,255,255,195,12,56,116,233,74,38,159,14,31,255,255,225,135,15,244,166,148,255,240,255,255,252,48,225,255,74,83,79,248,127,255,255,
-
335 195,15,15,167,77,62,152,116,255,225,255,195,135,15,211,166,159,255,255,255,255,15,15,254,158,159,255,211,255,195,225,225,255,244,250,127,255,255,255,240,
-
336 255,135,211,233,254,9,253,63,248,124,60,63,253,62,159,15,167,255,255,240,255,193,63,211,255,255,211,252,63,15,135,254,159,79,225,211,255,255,248,127,
-
337 255,253,63,255,255,255,252,63,15,253,63,79,255,255,255,240,255,255,254,159,255,167,240,255,135,255,15,250,127,79,255,255,252,63,255,255,255,79,250,127,
-
338 195,252,63,254,31,233,255,211,255,255,248,127,255,255,255,79,233,255,195,248,127,225,255,167,255,79,244,240,255,195,255,255,255,253,62,159,255,15,195,252,
-
339 63,253,63,253,62,159,225,252,63,255,255,255,233,244,255,248,126,31,135,255,233,255,211,233,255,15,248,127,255,255,254,158,159,255,195,240,252,63,255,233,
-
340 253,61,63,225,255,135,255,255,255,233,233,255,240,255,15,240,255,254,159,211,211,252,63,248,127,255,255,254,158,159,255,15,248,127,135,255,244,253,61,63,
-
341 195,255,195,255,255,255,233,233,255,240,255,135,248,127,255,211,211,211,255,15,252,63,255,255,255,78,159,255,135,252,63,15,255,250,125,62,159,248,127,195,
-
342 255,14,159,255,167,167,255,240,254,31,195,255,250,127,79,211,252,63,240,255,255,255,250,125,63,254,31,225,252,63,255,79,233,255,255,255,195,255,255,255,
-
343 211,211,255,240,255,15,240,255,255,167,167,167,254,31,225,255,255,195,233,250,116,250,67,248,126,31,195,255,255,167,167,167,255,135,225,254,31,79,195,167,
-
344 233,211,233,225,248,120,126,31,255,253,62,158,159,255,15,135,240,255,244,255,233,211,255,254,30,31,15,255,253,63,79,167,255,195,225,252,63,250,127,244,
-
345 244,255,255,15,135,225,255,254,159,211,233,255,195,240,255,195,250,127,253,61,63,255,15,135,255,135,254,159,244,250,127,195,240,255,255,255,255,167,233,255,
-
346 225,240,255,193,63,255,254,159,211,252,62,31,225,244,255,255,167,250,127,248,124,63,15,250,127,253,63,167,252,63,15,225,255,167,255,79,244,255,248,126,
-
347 31,135,255,211,253,63,79,255,15,135,225,255,250,127,167,244,255,254,30,31,135,255,244,254,159,211,255,195,195,240,255,250,127,244,254,159,255,135,195,240,
-
348 255,233,255,211,253,63,240,248,127,15,254,159,253,63,211,255,225,240,255,135,250,127,244,255,211,240,255,15,255,255,255,167,255,79,225,255,135,255,255,255,
-
349 211,255,255,248,127,255,255,255,211,255,255,254,31,255,255,255,250,127,255,252,63,255,255,255,244,255,255,255,15,255,255,255,253,63,255,254,31,255,255,255,
-
350 167,255,255,255,195,255,255,255,253,63,255,255,15,255,255,255,211,255,255,252,63,255,232,31,255,250,127,255,240,255,255,244,15,255,244,240,240,255,166,148,
-
351 211,233,135,225,135,15,195,250,7,240,225,250,105,166,158,159,233,255,195,254,30,28,48,195,167,211,233,254,157,63,255,211,225,225,195,255,15,254,159,255,
-
352 211,255,135,79,211,248,127,211,248,112,135,255,233,135,250,125,63,240,79,77,63,135,14,28,56,83,165,63,135,225,167,135,255,253,40,148,77,48,225,225,
-
353 15,255,167,160,124,33,8,64,0,2,1,8,116,68,66,161,81,10,133,68,68,74,127,134,24,4,0,63,194,0,0,0,1,0,128,2,168,0,116,162,
-
354 34,34,34,33,81,10,82,149,229,41,74,84,68,194,0,0,0,16,0,128,40,2,128,40,0,0,4,56,97,132,32,0,16,209,17,16,168,82,149,229,
-
355 53,239,123,202,82,149,48,130,130,128,40,0,0,0,0,2,130,130,130,128,0,0,0,6,148,74,66,24,105,165,17,10,133,41,74,82,188,165,41,74,
-
356 84,68,224,10,10,160,160,0,1,8,0,40,42,130,168,2,128,0,116,162,74,148,167,135,162,33,74,133,43,202,87,149,229,41,81,48,0,80,85,0,
-
357 0,0,132,1,65,85,85,84,20,2,16,254,157,41,68,162,81,16,168,84,41,74,133,41,74,84,42,34,80,32,10,10,10,1,0,128,2,128,42,170,
-
358 170,130,128,4,3,74,34,83,211,209,40,133,66,148,165,41,74,133,41,74,84,42,38,0,0,160,160,170,0,0,0,0,10,10,10,10,10,1,8,126,
-
359 148,233,250,34,34,20,165,41,74,242,188,175,41,74,84,68,192,21,65,85,85,85,64,0,1,64,20,20,0,0,2,31,165,41,8,67,135,162,34,20,
-
360 165,43,222,107,205,52,215,189,229,42,64,21,72,164,33,20,138,170,160,160,160,160,0,0,16,254,148,78,1,0,0,8,6,20,68,41,94,105,166,182,
-
361 216,150,219,52,215,189,16,1,72,65,134,24,98,12,66,42,170,128,40,0,4,0,63,210,136,148,134,0,0,0,10,1,208,165,121,166,182,36,72,145,
-
362 45,137,52,210,151,5,32,196,20,48,194,134,24,132,82,2,168,40,0,0,6,20,162,34,21,17,41,240,8,0,40,40,0,104,87,188,211,68,182,60,
-
363 72,145,45,154,242,224,164,32,195,10,24,97,134,24,132,33,21,65,64,33,253,40,84,68,66,162,83,8,0,0,2,168,40,6,82,148,211,91,18,60,
-
364 72,241,45,154,242,164,20,132,24,130,134,24,97,136,66,41,21,84,1,96,1,133,40,136,133,68,68,68,167,192,0,0,1,64,52,66,189,237,182,216,
-
365 145,34,68,154,105,75,0,82,12,48,194,134,24,98,16,138,170,160,0,0,1,12,58,81,18,136,136,137,78,144,130,130,170,128,81,30,246,219,18,60,
-
366 72,241,45,154,242,193,84,131,12,40,97,134,24,138,64,80,5,0,80,0,8,97,166,136,148,68,248,67,0,128,0,104,82,189,182,219,30,36,120,145,
-
367 38,188,169,82,16,97,133,10,24,80,196,33,21,65,64,32,16,255,255,192,33,255,8,6,136,87,154,216,241,227,207,159,30,37,183,165,72,48,161,77,
-
368 26,52,104,40,80,196,34,128,0,67,135,250,34,34,112,134,0,0,16,0,85,80,12,175,120,145,39,217,11,139,178,100,124,73,165,128,195,52,118,208,
-
369 205,219,182,141,26,12,48,202,170,1,244,68,162,34,81,17,41,211,0,128,0,2,170,145,85,66,82,182,217,246,71,103,103,103,108,143,137,53,1,70,
-
370 104,209,217,153,153,155,183,110,197,10,24,132,80,0,250,34,34,34,34,21,17,19,64,192,2,24,0,0,40,44,16,165,109,177,236,153,11,139,139,159,
-
371 30,217,80,8,48,167,110,221,153,153,187,118,208,80,195,17,72,10,16,210,136,84,66,161,80,168,148,252,41,224,10,10,170,161,41,77,18,60,251,35,
-
372 177,118,71,199,154,244,2,12,209,163,179,51,55,102,109,26,52,24,98,17,64,0,52,162,33,80,165,42,21,18,148,240,134,156,0,1,64,2,136,246,
-
373 196,143,62,46,201,147,33,45,189,1,70,20,41,219,179,55,110,221,138,104,48,195,17,85,64,61,17,10,133,121,74,82,162,39,132,0,61,3,0,0,
-
374 0,161,94,104,145,236,153,11,178,62,37,178,160,40,205,5,59,118,102,237,219,70,130,133,12,69,32,40,7,209,16,168,82,148,165,42,34,34,66,1,
-
375 15,194,10,1,161,94,219,99,199,178,62,124,72,151,150,4,25,160,167,109,29,180,104,208,97,134,85,80,0,195,166,136,136,84,68,45,41,15,165,18,
-
376 144,0,5,13,10,243,91,30,60,248,241,237,154,84,5,32,194,154,52,104,208,80,161,68,33,20,20,48,233,165,18,136,84,68,68,240,0,0,254,16,
-
377 232,133,121,162,68,143,30,60,123,102,149,42,65,134,104,209,163,65,66,133,12,50,170,128,127,210,136,136,136,136,136,148,8,66,20,254,16,229,41,77,
-
378 108,72,145,35,219,53,232,128,164,24,97,77,5,10,20,48,196,34,168,4,62,157,40,136,136,136,136,148,225,195,225,8,116,71,148,214,219,109,182,205,
-
379 121,82,10,65,136,40,97,133,16,98,17,84,22,31,166,148,74,34,34,37,19,8,66,31,195,209,10,87,154,107,102,182,247,189,53,82,16,131,12,49,
-
380 6,34,170,168,0,7,253,41,68,68,68,68,68,240,135,195,135,162,33,74,243,77,121,175,121,104,0,164,33,8,66,16,132,85,0,0,135,233,233,74,
-
381 34,81,17,52,14,31,134,30,136,133,43,205,123,222,82,166,10,170,69,33,20,138,10,0,16,248,126,154,81,40,148,167,15,254,26,81,16,165,43,222,
-
382 87,162,36,0,21,84,138,170,170,0,176,135,254,26,105,74,37,41,255,225,253,17,10,87,148,175,66,240,5,5,82,42,130,128,0,127,255,13,52,210,
-
383 154,127,240,240,165,37,71,148,165,41,83,128,2,170,170,130,128,0,127,79,15,15,167,79,233,233,255,74,33,74,82,149,17,56,2,130,170,130,128,0,
-
384 7,255,195,250,105,77,63,255,250,81,16,168,84,42,39,0,5,5,5,5,0,135,233,211,135,233,233,255,252,63,209,17,16,165,68,68,225,0,80,0,
-
385 80,8,67,211,254,31,211,167,195,255,233,165,17,10,133,68,79,0,0,0,80,0,8,67,255,255,244,211,250,127,255,165,17,17,17,62,1,0,0,0,
-
386 0,195,233,233,135,233,244,255,255,195,211,68,162,34,105,8,66,0,16,135,254,156,62,31,233,255,211,255,165,18,136,148,225,8,4,2,16,195,211,248,
-
387 127,244,253,63,233,254,154,82,159,8,64,33,12,61,58,127,240,254,159,10,127,255,166,148,167,240,194,16,195,233,233,225,225,240,255,211,211,211,211,74,
-
388 83,225,132,33,8,97,233,244,240,255,233,255,250,127,78,157,56,97,132,33,15,233,166,159,255,240,248,127,250,125,52,211,248,97,195,255,211,255,15,135,
-
389 240,250,122,116,211,78,159,135,8,97,135,255,211,255,255,255,211,250,126,156,60,56,97,225,167,166,159,255,255,135,255,255,211,211,240,254,31,250,127,240,
-
390 252,63,254,159,167,167,167,195,225,195,195,254,159,255,255,255,244,253,63,248,120,112,255,233,211,233,135,255,135,255,255,211,255,255,15,255,79,255,225,255,
-
391 15,250,122,116,255,252,56,120,127,211,250,127,255,225,255,244,244,252,62,30,31,250,116,233,255,135,248,124,63,244,244,255,255,240,255,167,255,240,255,248,
-
392 127,79,78,159,255,15,15,15,244,255,254,159,255,195,255,79,255,225,252,62,159,79,167,195,255,240,248,127,211,233,255,255,240,250,127,248,127,255,255,253,
-
393 58,127,195,252,63,15,79,255,254,159,210,31,195,250,127,225,255,255,244,250,124,63,255,195,225,254,159,79,255,255,255,255,248,127,255,255,254,157,63,225,
-
394 254,31,255,255,255,167,255,225,255,211,255,248,127,255,167,255,255,255,135,195,254,158,159,255,255,255,248,127,255,255,255,253,63,255,255,195,255,255,255,167,
-
395 255,248,127,244,255,195,255,255,79,255,255,255,248,124,62,159,250,127,255,255,15,255,254,159,254,31,253,63,255,255,248,127,255,253,63,255,225,255,255,255,
-
396 167,255,255,255,255,255,225,252,63,79,244,255,255,255,240,255,255,211,254,31,250,127,255,255,225,255,255,250,127,255,225,255,255,255,233,255,255,255,130,127,
-
397 255,135,240,255,167,233,253,60,63,252,63,255,244,255,252,63,255,211,255,255,225,255,255,211,255,255,15,255,255,253,63,255,255,195,233,255,255,15,240,254,
-
398 159,211,255,255,255,15,255,167,255,252,63,255,254,159,255,248,127,254,159,255,248,127,255,255,250,127,255,255,135,211,255,225,255,255,255,233,255,255,255,195,
-
399 255,167,255,255,195,255,255,211,255,135,255,211,255,255,225,255,255,255,253,63,255,255,255,255,240,255,255,255,167,255,255,255,15,255,233,255,255,225,255,255,
-
400 255,255,255,244,255,255,255,135,255,195,211,254,159,255,255,255,255,252,63,255,255,255,167,255,255,248,127,244,255,255,195,255,255,255,244,255,255,255,255,255,
-
401 135,255,255,255,244,255,255,252,63,211,255,135,255,255,211,252,63,250,127,240,255,233,255,255,248,127,255,255,255,253,63,255,255,255,135,255,255,255,233,255,
-
402 255,255,4,15,211,248,127,255,167,255,225,255,255,255,255,167,253,56,127,135,255,255,255,255,233,255,255,255,255,135,255,255,255,211,255,255,225,255,79,254,
-
403 31,254,159,255,15,255,253,63,225,255,167,255,255,195,255,255,255,255,244,255,255,255,254,31,255,255,255,255,79,255,252,63,253,60,63,250,127,255,240,255,
-
404 255,255,255,211,250,7,255,4,130,120,39,130,5,3,224,144,79,64,160,39,255,193,56,32,32,36,30,117,48,14,166,40,196,109,210,103,152,2,25,25,
-
405 157,34,49,167,9,224,75,21,217,132,75,13,197,212,114,118,234,59,96,139,185,218,8,3,220,195,8,133,116,132,186,24,216,130,238,131,27,61,134,197,
-
406 96,29,89,135,7,59,139,132,93,156,102,228,123,153,25,163,51,132,186,26,154,226,17,0,112,207,57,56,15,2,51,128,230,196,29,184,79,92,198,110,
-
407 70,220,192,34,43,152,123,144,201,156,33,112,142,217,231,38,97,224,240,204,57,177,7,110,19,214,115,27,144,75,152,130,32,57,141,114,59,115,29,186,
-
408 7,110,115,155,48,240,192,96,157,24,131,129,4,66,206,99,114,9,115,43,144,28,198,136,134,110,99,183,64,237,174,115,16,24,12,38,97,201,206,99,
-
409 112,136,92,173,66,32,151,48,198,10,28,70,152,46,220,199,172,209,99,56,228,32,136,204,38,11,13,136,99,102,142,92,198,66,32,247,49,12,25,196,
-
410 107,145,160,180,46,205,117,103,28,196,19,195,9,192,195,115,152,220,35,151,43,83,144,75,148,80,136,130,209,172,215,108,225,119,67,171,156,230,193,48,
-
411 176,24,167,70,17,212,64,28,181,218,156,39,220,173,28,133,115,35,52,103,48,246,107,83,56,114,225,49,179,216,174,6,1,212,64,57,181,220,89,162,
-
412 238,87,102,11,197,162,136,130,156,199,220,142,46,83,152,130,117,98,29,24,44,243,8,128,112,103,11,29,2,238,102,142,71,139,72,34,10,115,31,102,
-
413 181,51,135,34,8,225,158,195,98,136,198,23,1,201,206,44,112,139,181,204,221,6,185,129,154,51,152,248,130,212,231,61,102,14,25,231,70,24,140,97,
-
414 96,156,24,142,34,9,219,57,219,145,236,235,53,92,167,220,142,46,113,200,130,56,98,56,24,172,35,171,48,224,196,22,8,34,236,230,142,131,92,192,
-
415 34,10,114,143,116,25,53,207,68,1,99,16,232,224,96,29,88,39,54,32,176,64,59,107,153,51,77,114,131,52,142,86,220,38,77,115,177,0,112,207,
-
416 57,48,196,102,3,128,228,231,28,58,14,220,206,220,141,185,128,193,35,148,123,53,219,148,237,154,234,207,57,48,76,44,6,99,21,174,59,102,158,179,
-
417 140,217,162,92,164,102,220,207,114,25,185,69,221,3,182,185,204,64,17,152,12,83,163,0,198,32,142,92,238,46,134,78,86,142,68,22,138,228,104,229,
-
418 100,225,22,49,7,46,3,27,8,232,116,97,14,24,34,23,59,139,160,251,148,83,53,25,197,116,10,107,139,184,69,140,243,131,48,194,120,112,28,152,
-
419 67,177,4,114,196,50,102,159,114,168,136,142,98,152,38,98,208,133,194,56,115,156,216,39,131,195,128,228,196,28,56,68,44,230,55,32,145,104,134,8,
-
420 11,77,136,134,110,83,183,64,225,136,115,112,48,15,14,3,155,156,112,225,59,114,153,51,91,56,149,154,162,211,110,70,55,40,229,194,234,231,58,51,
-
421 24,2,48,128,115,115,186,179,69,217,205,25,162,92,160,113,220,167,196,71,109,113,203,160,118,196,58,48,88,12,6,9,205,206,117,112,158,185,152,217,
-
422 163,197,161,140,21,22,155,17,12,197,161,11,52,112,215,57,8,12,38,19,48,228,215,49,186,15,69,163,38,104,145,105,68,64,56,155,48,76,156,167,
-
423 174,17,195,92,228,204,103,176,156,7,38,112,225,194,122,230,99,48,91,56,144,193,7,49,243,140,205,158,115,114,56,176,24,162,9,212,234,204,97,185,
-
424 199,14,19,211,137,169,200,246,176,142,65,157,38,220,141,71,16,133,154,117,103,48,196,6,123,9,194,114,103,14,4,67,177,104,204,193,109,210,1,110,
-
425 51,164,125,200,212,230,29,56,78,172,67,155,5,128,192,102,28,154,231,86,104,133,210,99,17,30,233,41,130,51,164,60,193,50,115,14,132,65,219,61,
-
426 130,225,48,157,89,174,6,16,176,193,28,179,140,204,17,46,145,12,17,143,55,185,24,221,33,119,65,213,204,114,16,25,236,65,0,232,206,58,185,4,
-
427 39,19,25,130,36,226,83,141,78,33,38,11,183,48,133,200,234,215,57,8,39,134,123,48,232,215,48,186,7,78,103,17,16,251,164,208,227,3,205,238,
-
428 67,39,72,93,154,59,22,142,78,134,3,16,64,102,49,12,102,9,209,206,100,35,196,46,85,48,6,156,79,17,237,26,195,230,8,237,210,29,56,88,
-
429 76,231,3,21,156,120,16,71,78,97,219,144,92,226,118,96,149,210,41,130,208,90,23,114,56,179,142,14,19,171,17,192,193,98,24,92,39,6,112,177,
-
430 200,46,45,52,114,60,90,1,16,97,105,182,107,136,180,33,16,14,173,115,147,129,132,192,16,14,78,113,219,144,114,206,118,35,207,179,158,34,145,202,
-
431 46,113,187,115,14,153,166,54,185,209,130,196,97,48,78,110,99,27,132,236,226,106,17,13,107,20,193,24,226,18,228,50,115,30,179,71,108,230,24,130,
-
432 120,103,184,88,172,225,195,144,114,45,49,152,35,221,37,56,193,172,108,193,50,107,4,34,33,213,204,115,16,88,140,71,3,13,202,120,114,30,156,77,
-
433 71,24,147,136,4,84,90,62,34,133,51,142,7,24,177,158,224,116,24,88,66,11,21,174,117,112,142,93,39,23,35,103,152,161,17,90,199,136,134,71,
-
434 16,187,52,118,229,57,184,79,12,246,99,21,174,99,116,14,156,172,98,33,241,104,135,28,90,52,68,104,45,11,186,5,142,81,208,130,35,49,24,167,
-
435 71,57,132,64,16,185,133,142,19,238,147,177,17,14,34,156,109,28,199,166,11,83,156,232,96,152,207,14,17,4,240,99,114,29,25,206,38,11,38,177,
-
436 161,130,167,156,68,50,60,217,51,71,14,99,128,130,120,115,176,92,14,113,25,154,112,115,56,136,135,206,33,71,26,28,70,152,34,133,163,177,16,88,
-
437 206,57,56,79,12,246,99,21,174,99,116,14,78,38,161,16,214,176,80,136,49,230,246,107,27,88,118,232,49,179,152,98,9,224,240,225,96,179,197,135,
-
438 25,201,206,208,192,11,185,144,71,161,196,36,193,99,56,133,217,166,17,104,230,204,98,49,24,44,55,48,140,228,61,56,156,76,17,39,153,5,185,29,
-
439 38,206,51,33,104,66,34,14,217,204,87,65,225,132,225,112,53,204,110,65,208,180,212,96,143,60,198,56,193,172,120,136,198,214,11,186,14,167,17,205,
-
440 152,196,98,49,88,108,227,11,144,116,229,50,17,226,238,82,152,6,218,236,132,113,25,195,161,110,44,107,157,4,22,3,93,192,116,115,48,4,19,214,
-
441 177,213,154,217,230,208,68,83,204,209,16,200,226,59,114,14,25,199,71,9,225,128,32,48,88,134,49,16,224,229,50,22,227,220,196,22,243,136,209,16,
-
442 204,90,23,102,142,28,167,6,99,61,206,197,57,185,79,2,1,219,164,44,116,54,233,12,113,163,152,72,138,25,206,115,17,230,103,134,97,130,56,58,
-
443 184,89,140,241,195,160,66,45,11,29,15,48,46,221,2,143,59,161,169,210,100,32,142,28,167,6,97,225,132,193,98,177,12,108,211,131,56,200,193,100,
-
444 230,81,110,130,208,147,141,163,148,66,228,117,115,156,153,135,134,19,128,228,206,58,136,7,103,16,177,194,107,88,209,154,51,88,246,107,24,180,122,205,
-
445 117,103,177,93,6,51,27,53,152,35,49,152,39,38,32,163,4,251,149,92,138,113,21,194,212,113,31,102,29,92,163,150,43,1,136,195,57,53,204,98,
-
446 9,235,57,141,154,61,202,67,5,28,173,152,34,153,194,22,107,139,16,232,32,29,79,12,22,27,60,198,225,16,185,154,157,13,139,66,153,170,113,21,
-
447 194,100,230,30,32,14,25,195,151,1,225,132,197,97,179,221,93,7,6,123,67,4,245,158,130,220,214,32,145,16,102,185,216,130,44,107,142,88,167,134,
-
448 121,200,224,231,48,184,15,92,174,34,0,151,48,167,69,202,246,107,70,184,187,161,197,158,115,16,14,162,51,5,134,192,29,136,35,167,57,147,52,123,
-
449 56,142,75,152,174,131,39,51,33,0,118,206,29,49,79,12,35,161,205,206,117,102,30,179,154,153,163,217,202,96,189,174,60,227,35,16,114,96,177,176,
-
450 142,78,19,8,140,224,58,49,14,172,195,215,48,176,65,108,226,104,232,83,136,174,131,39,43,39,11,171,92,230,204,48,158,24,44,54,16,237,194,58,
-
451 115,153,57,15,185,84,68,185,91,114,52,114,157,186,29,92,227,166,97,225,132,197,57,181,206,172,195,183,43,139,133,177,104,103,64,57,158,205,104,206,
-
452 61,102,181,48,142,142,17,193,140,64,98,136,206,174,129,203,156,201,208,37,204,65,4,5,164,112,153,57,143,136,3,183,56,229,130,35,48,24,103,38,
-
453 16,224,64,16,185,216,217,163,218,234,228,181,205,114,59,115,157,136,46,44,243,131,4,234,35,49,78,76,35,27,48,245,174,212,32,182,229,24,65,7,
-
454 41,68,19,54,185,241,0,88,196,29,56,12,102,22,41,208,240,44,112,142,152,78,220,140,152,128,205,71,59,220,45,26,231,217,142,172,65,11,12,194,
-
455 192,58,28,24,70,54,9,219,157,140,64,18,215,35,133,26,239,112,138,115,139,136,45,76,33,211,4,112,35,49,78,71,135,86,8,229,136,100,32,137,
-
456 115,138,112,217,200,32,180,103,31,102,11,24,130,22,25,140,240,115,57,158,7,14,1,11,60,200,65,100,207,86,107,217,237,179,72,207,23,16,88,216,
-
457 67,150,41,140,70,57,28,24,3,134,41,219,17,169,130,37,174,40,64,181,208,64,20,231,62,32,53,48,135,44,81,217,132,232,114,17,157,88,34,22,
-
458 17,155,48,251,16,130,9,92,229,16,69,49,15,179,28,88,71,172,83,25,224,230,112,60,14,24,167,108,246,166,96,151,56,194,10,57,222,225,25,158,
-
459 46,225,50,60,28,25,142,167,86,25,200,194,59,112,30,179,218,153,141,181,198,102,3,93,25,142,216,131,216,46,44,33,11,20,198,97,58,28,196,97,
-
460 219,4,245,128,100,32,15,103,144,65,43,156,209,4,83,60,248,128,212,194,28,177,71,6,19,145,192,240,59,98,158,177,24,217,141,181,198,16,1,174,
-
461 86,99,70,33,246,11,81,224,114,224,29,152,216,167,67,11,83,48,66,120,51,16,71,177,8,32,92,229,102,59,115,143,96,139,25,227,147,161,140,70,
-
462 57,28,15,3,183,1,219,60,201,152,61,136,65,5,28,230,136,2,153,236,153,140,108,1,203,20,118,117,58,28,196,103,87,1,235,60,201,152,219,16,
-
463 102,101,206,86,11,70,32,247,3,83,8,66,116,28,29,78,71,3,11,171,4,66,192,118,32,31,96,43,132,172,39,136,34,153,231,216,45,76,35,214,
-
464 25,140,70,57,142,143,3,182,25,219,61,141,130,37,136,48,129,98,20,64,20,207,100,193,99,60,14,88,110,167,83,145,192,234,234,197,16,176,12,153,
-
465 130,89,228,16,44,242,176,69,51,199,184,26,152,7,167,65,193,212,224,58,17,157,88,98,236,3,38,8,150,17,4,2,176,158,32,145,128,46,193,51,
-
466 17,132,44,55,83,25,192,116,97,117,58,29,176,24,216,173,179,198,112,89,232,193,20,194,18,224,99,60,8,78,131,179,25,204,224,117,22,48,207,79,
-
467 6,108,17,44,2,48,81,128,86,8,204,33,238,3,35,193,217,209,212,234,112,29,29,71,103,67,182,1,147,20,75,8,83,5,25,229,96,140,192,30,
-
468 193,50,48,136,88,110,38,51,145,192,112,44,97,158,158,12,156,2,88,66,152,40,196,71,0,166,16,150,43,27,0,236,232,234,117,29,28,14,174,172,
-
469 51,179,193,155,128,123,0,102,98,48,10,193,25,128,125,192,100,35,30,157,29,76,103,1,209,212,88,116,23,17,140,152,173,176,6,112,88,72,224,20,
-
470 192,30,195,99,17,142,206,142,163,131,129,192,198,226,195,61,48,187,112,15,60,43,129,24,5,112,10,60,9,97,177,136,194,231,39,83,168,232,114,117,
-
471 22,28,133,196,99,54,24,150,1,28,8,192,43,128,99,192,246,41,145,132,244,228,44,28,28,7,35,129,97,208,92,194,102,195,18,120,35,21,24,5,
-
472 97,140,120,18,195,99,48,139,156,197,134,49,208,132,112,44,57,11,152,93,176,196,152,85,192,130,51,220,3,24,71,176,204,142,167,103,55,81,216,228,
-
473 66,99,22,28,197,196,99,51,163,103,130,48,231,130,176,197,24,68,176,204,142,167,103,49,96,236,116,57,28,53,28,153,29,93,176,219,17,149,139,17,
-
474 138,197,24,70,18,116,50,58,139,156,221,71,99,145,9,141,196,230,200,194,236,232,104,140,70,26,8,197,97,144,194,61,134,102,99,61,57,184,186,142,
-
475 132,35,134,163,152,185,132,204,232,217,224,140,57,225,24,99,30,4,157,12,142,162,231,49,96,236,114,33,29,184,156,133,204,46,216,109,152,72,195,67,
-
476 9,88,99,24,68,157,12,206,167,103,7,17,216,228,66,56,106,56,50,58,153,157,13,48,144,232,2,49,78,130,140,35,206,70,70,51,179,155,139,168,
-
477 232,114,59,99,57,139,152,221,157,4,136,202,116,136,197,58,10,48,137,57,49,152,197,199,78,35,177,201,232,225,168,230,200,234,236,232,105,133,88,115,
-
478 9,88,99,24,71,156,140,204,103,103,7,17,216,232,244,118,212,115,100,117,118,114,108,194,67,164,194,135,65,70,17,39,35,35,24,184,233,196,118,57,
-
479 16,142,218,142,98,230,54,135,70,206,170,195,67,11,206,131,24,68,156,140,140,98,227,167,17,216,228,244,112,212,112,100,117,118,114,52,194,67,164,194,
-
480 83,160,199,81,39,35,49,192,185,193,197,212,114,122,234,212,112,100,56,118,114,108,194,167,36,48,161,208,99,171,103,35,51,27,35,131,136,236,66,33,
-
481 29,184,156,25,24,221,156,196,152,84,232,135,82,157,8,117,30,114,51,28,11,156,26,157,68,39,163,182,163,129,243,27,179,155,102,17,142,147,10,28,
-
482 136,117,108,230,236,198,46,58,106,117,16,136,93,90,142,2,230,55,103,38,206,164,57,33,213,14,131,29,68,156,204,199,12,142,14,46,162,19,215,86,
-
483 161,211,35,27,179,153,167,82,28,144,194,83,144,198,49,39,55,99,182,71,6,49,96,132,66,234,198,58,100,56,118,115,108,234,49,201,12,40,114,24,
-
484 234,217,204,204,112,200,114,212,44,61,61,117,99,29,31,29,187,57,182,99,33,201,14,165,57,144,198,36,224,236,118,200,116,212,44,61,61,117,99,28,
-
485 178,28,59,56,54,117,33,205,12,115,144,198,54,206,14,199,108,135,44,98,195,211,215,22,49,211,33,219,179,155,99,130,28,208,198,135,2,14,13,56,
-
486 59,28,31,28,177,186,158,157,139,24,199,39,199,110,206,13,152,200,115,65,194,28,200,56,108,224,208,118,124,114,100,44,59,61,113,106,28,178,29,187,
-
487 56,54,99,33,192,166,57,204,134,51,78,13,7,99,199,76,98,195,179,183,22,161,203,33,219,179,128,145,193,14,101,28,78,106,56,108,116,208,118,124,
-
488 114,198,44,59,59,113,106,16,178,29,187,29,54,56,24,224,83,26,28,8,56,108,116,209,212,120,233,141,196,236,237,197,140,114,125,213,216,232,72,224,
-
489 135,4,28,33,193,71,6,142,154,58,143,28,177,184,139,157,184,177,136,89,14,221,142,155,29,140,112,40,226,112,81,217,167,6,142,167,199,38,66,195,
-
490 179,183,22,49,11,33,219,177,211,99,130,14,138,99,65,210,142,13,29,52,117,30,57,50,22,29,157,184,153,8,79,186,180,29,54,59,32,232,163,132,
-
491 56,16,118,104,232,83,168,241,9,147,136,185,219,83,25,233,241,99,177,203,99,177,135,69,28,78,4,29,154,57,20,234,60,66,102,226,46,122,212,198,
-
492 33,100,234,208,114,216,236,135,4,28,32,233,71,6,142,154,58,143,16,153,56,139,139,181,49,136,79,186,180,28,182,59,32,232,163,185,193,71,102,142,
-
493 69,58,143,16,153,184,139,157,184,153,30,178,117,104,57,53,212,97,209,71,17,210,142,205,28,180,117,30,33,51,113,100,118,212,100,122,124,88,208,114,
-
494 36,118,67,129,71,113,210,142,205,28,138,117,30,122,102,226,200,237,196,200,244,248,177,216,229,177,217,7,69,28,32,233,71,102,142,154,11,7,136,76,
-
495 154,133,197,218,140,143,79,139,26,14,77,117,32,233,7,113,210,142,205,28,180,22,9,16,153,53,50,59,106,99,61,62,44,104,33,109,212,131,164,117,
-
496 142,149,212,209,200,161,96,241,9,147,83,35,182,166,51,211,226,199,99,147,93,72,57,40,238,58,81,217,163,145,66,193,231,166,110,34,226,236,102,71,
-
497 163,220,90,8,91,117,32,229,29,99,162,58,154,57,104,44,30,122,102,226,46,46,212,100,122,124,88,208,66,219,169,7,40,235,28,171,169,163,150,142,
-
498 35,207,76,218,133,197,216,204,143,71,184,180,16,154,234,162,20,117,65,10,186,154,33,20,44,30,118,102,212,46,201,140,200,244,123,139,65,11,110,164,
-
499 28,149,214,57,87,83,68,34,156,68,158,153,181,11,178,99,50,61,30,226,208,66,107,170,136,81,213,4,42,44,120,132,83,136,147,211,54,161,118,76,
-
500 102,103,163,220,90,8,91,117,81,202,58,160,133,93,77,16,180,113,30,118,102,212,200,93,168,204,236,123,139,65,9,162,194,14,81,213,4,42,44,52,
-
501 66,41,196,73,233,155,27,38,76,102,103,99,220,69,30,154,44,32,230,44,65,9,5,134,136,90,56,143,59,51,99,100,201,140,204,236,123,136,163,211,
-
502 69,138,33,65,98,8,85,197,226,17,78,34,78,204,216,217,50,106,51,59,30,226,40,244,209,98,158,160,177,4,42,44,52,244,83,80,147,183,108,108,
-
503 153,49,153,157,143,113,20,122,104,177,68,40,44,136,84,88,105,232,167,17,39,102,102,71,217,49,153,157,143,113,20,122,104,177,68,40,44,65,9,28,
-
504 77,61,20,212,36,236,205,141,147,38,51,51,177,45,77,15,77,22,41,234,11,16,66,162,195,79,69,53,9,59,51,50,62,201,141,216,184,246,161,71,
-
505 102,184,169,234,11,16,66,162,195,79,69,53,9,23,118,198,200,249,145,153,216,150,161,71,175,113,83,212,22,33,234,184,154,118,41,168,73,217,153,145,
-
506 246,76,110,197,199,181,10,59,53,196,130,27,140,66,70,167,158,138,106,18,46,236,200,251,35,35,49,113,237,66,142,205,113,83,212,113,136,85,197,231,
-
507 162,154,132,139,187,50,62,124,201,216,184,150,161,71,175,113,83,212,113,158,171,139,207,69,53,9,23,118,198,200,249,145,152,184,246,161,71,175,106,83,
-
508 212,113,158,171,83,206,198,106,18,46,236,200,249,243,39,108,132,177,138,59,53,197,79,109,83,213,113,52,236,83,27,98,238,204,143,178,50,118,200,75,
-
509 24,163,179,90,136,122,142,40,118,173,79,59,25,168,75,38,140,103,207,153,59,23,18,212,40,236,214,162,30,163,138,29,131,83,206,198,106,18,46,236,
-
510 200,249,243,39,108,132,177,138,59,123,82,157,163,84,236,26,158,46,51,27,98,237,12,135,159,51,118,46,217,144,161,115,90,148,237,26,167,106,212,243,
-
511 177,154,132,178,104,100,60,249,147,177,118,216,198,23,123,25,14,209,169,14,213,169,231,99,49,182,46,208,200,249,243,38,140,132,177,138,23,53,169,78,
-
512 209,197,14,213,169,226,227,49,182,46,236,204,121,243,55,108,132,177,138,23,53,169,78,209,170,118,13,79,23,35,80,150,77,12,135,159,51,118,200,75,
-
513 24,163,183,177,144,237,26,167,96,212,241,113,152,196,178,104,100,60,249,155,182,66,76,133,11,154,212,162,232,199,23,6,167,139,140,198,219,38,134,99,
-
514 199,153,180,62,36,200,80,187,216,212,92,173,83,176,106,120,185,24,219,100,208,204,120,247,110,207,137,50,20,46,246,53,23,70,56,184,53,60,92,102,
-
515 54,217,52,51,30,61,219,182,77,153,12,200,214,53,23,70,56,184,49,189,145,24,219,100,208,204,73,243,55,108,155,50,25,147,216,212,93,24,231,106,
-
516 198,246,68,99,109,147,67,49,227,221,180,62,217,152,161,119,177,168,186,49,197,193,141,236,134,50,108,248,163,49,35,221,180,62,217,144,204,158,100,172,
-
517 144,202,46,12,101,23,24,201,182,77,12,199,137,118,208,251,102,67,50,123,26,139,163,28,92,24,222,200,99,51,89,52,51,30,61,219,67,237,153,12,
-
518 46,246,48,100,134,81,117,50,43,34,25,54,125,163,177,35,204,218,31,108,200,102,79,50,86,72,198,140,129,141,236,136,100,217,246,142,196,143,118,208,
-
519 251,102,99,31,121,146,139,204,172,128,200,172,136,100,105,241,78,196,137,104,208,123,102,99,50,121,146,178,67,40,186,153,149,145,12,155,62,209,216,145,
-
520 238,218,15,108,204,102,69,50,86,72,101,100,6,69,100,49,153,167,197,59,18,37,216,161,237,153,140,201,230,74,47,50,67,224,100,243,228,50,108,120,
-
521 167,98,68,180,104,61,179,49,153,60,201,89,33,149,144,25,60,249,12,205,62,41,216,145,45,26,31,52,204,135,222,100,172,144,202,201,76,138,200,99,
-
522 51,79,180,118,36,75,70,135,205,118,49,247,153,171,36,50,178,3,39,159,33,153,167,197,59,18,37,216,161,237,153,140,125,230,106,125,12,144,248,25,
-
523 60,249,12,205,30,41,216,145,45,5,15,53,216,199,222,102,172,166,118,74,102,83,228,51,52,120,167,98,68,180,104,61,179,50,31,41,154,178,67,43,
-
524 32,50,121,242,25,154,60,83,70,196,180,20,60,215,99,31,121,154,159,67,36,62,6,69,62,71,102,143,20,236,72,150,130,135,154,236,99,239,51,86,
-
525 83,59,32,50,120,242,59,52,120,167,98,91,104,40,121,166,100,30,243,53,62,134,115,224,102,83,228,118,104,241,77,27,18,208,80,243,93,144,249,76,
-
526 192,252,206,124,12,202,124,134,102,143,20,209,177,45,5,9,53,217,7,188,205,79,161,156,248,59,40,245,51,52,120,206,196,182,40,80,147,93,144,123,
-
527 204,212,250,25,207,171,180,62,71,102,137,25,163,98,90,10,30,107,178,15,121,154,159,67,57,240,51,41,242,59,120,241,77,27,18,208,80,147,93,144,
-
528 123,204,212,250,25,207,131,180,62,71,102,143,25,163,109,138,20,37,183,100,30,87,106,61,12,231,192,204,163,200,236,209,35,52,109,182,131,9,53,217,
-
529 7,188,204,7,163,185,240,51,41,242,59,52,72,205,27,108,80,161,38,187,32,242,187,81,232,103,62,6,101,30,174,205,18,51,70,219,20,40,121,174,
-
530 200,60,174,192,122,25,160,240,118,81,42,236,209,35,52,109,182,131,9,123,66,9,123,181,30,142,227,193,217,71,145,163,196,140,40,209,45,6,18,246,
-
531 132,30,87,106,61,29,199,131,180,30,174,205,18,51,70,219,20,40,73,173,8,60,174,192,122,59,143,7,101,30,70,143,18,48,163,91,20,40,73,174,
-
532 200,60,174,212,122,59,143,7,104,61,93,154,36,102,141,182,40,80,147,90,16,75,221,128,251,184,240,104,131,200,209,226,70,20,107,98,134,108,214,132,
-
533 18,86,138,61,29,199,131,178,143,35,67,68,140,209,182,197,12,217,173,8,36,173,20,125,218,9,6,136,60,141,30,36,97,70,182,40,102,205,104,65,
-
534 37,104,163,209,220,120,59,40,242,52,120,145,133,26,216,161,155,53,161,4,149,162,143,180,143,7,101,30,70,134,182,65,70,182,40,102,205,104,65,37,
-
535 104,163,237,34,65,161,68,145,163,196,140,40,211,69,12,37,237,20,73,90,40,251,72,240,118,81,42,209,226,70,20,217,162,134,18,246,138,36,174,192,
-
536 74,59,65,32,209,4,171,71,137,24,81,173,138,25,179,90,40,146,187,1,246,145,32,208,162,72,41,237,140,40,214,197,12,217,173,8,36,173,0,74,
-
537 59,143,6,136,37,90,60,72,194,141,108,80,205,188,81,4,149,160,9,71,104,36,26,32,149,104,241,35,10,53,177,67,54,241,68,18,86,128,37,26,
-
538 68,131,66,137,86,143,108,130,141,52,97,155,120,162,54,86,128,38,210,38,209,4,171,71,182,65,70,154,48,205,188,81,4,149,160,9,138,137,6,133,
-
539 18,173,30,217,5,26,104,162,26,107,69,108,173,0,77,164,77,162,9,81,69,108,130,141,108,81,13,53,162,182,81,74,37,26,68,131,66,182,162,138,
-
540 217,5,26,104,195,54,241,74,217,90,0,148,105,18,13,10,218,138,121,164,25,230,140,67,94,41,91,43,64,19,105,18,2,144,74,138,43,100,25,237,
-
541 138,35,111,20,65,37,104,2,109,17,176,20,141,168,167,154,65,70,154,48,205,188,81,4,160,160,19,21,110,208,173,168,162,182,65,158,104,196,53,227,
-
542 17,178,138,6,226,173,218,21,181,20,86,200,40,211,70,33,175,20,173,148,80,54,141,34,64,82,54,162,158,105,6,121,163,16,215,138,86,202,41,68,
-
543 197,68,128,164,109,69,60,210,12,243,70,33,175,20,173,160,160,109,5,91,1,72,216,10,43,100,20,105,163,12,219,197,43,101,20,13,163,68,108,5,
-
544 35,96,40,173,144,81,166,140,51,101,24,141,148,80,55,21,108,5,20,208,20,86,200,51,205,24,134,188,82,182,130,129,180,21,108,5,21,181,20,243,
-
545 72,51,205,24,134,188,82,182,81,64,220,85,176,20,86,212,83,205,32,207,52,98,26,241,148,210,138,6,226,173,197,35,106,40,173,144,103,154,49,13,
-
546 120,165,108,162,129,184,171,96,50,26,2,138,217,6,121,163,16,215,138,86,202,40,27,138,182,2,138,104,10,43,100,25,230,140,67,94,50,154,81,64,
-
547 220,105,177,72,218,138,121,164,25,239,33,13,40,202,105,69,3,104,42,216,12,134,128,162,182,65,158,104,196,53,227,41,165,20,13,198,155,20,141,168,
-
548 197,52,131,60,209,136,105,70,86,208,96,53,5,91,1,144,208,24,166,144,103,154,49,13,120,165,109,6,3,80,85,176,25,13,1,138,105,6,121,163,
-
549 16,215,140,166,160,192,106,10,182,3,33,160,41,230,144,103,154,49,13,41,8,218,12,6,160,171,96,50,26,3,20,210,17,239,33,30,241,148,212,24,
-
550 13,65,86,192,100,53,70,41,170,51,222,66,26,82,41,168,48,26,130,173,128,200,104,12,83,72,71,188,132,123,198,83,80,96,53,5,77,140,134,168,
-
551 197,53,70,123,200,67,74,69,53,6,6,227,77,1,144,208,24,166,144,143,121,8,247,140,166,160,192,106,10,67,64,100,52,6,43,212,103,188,132,52,
-
552 163,41,165,24,13,141,54,50,26,164,67,84,133,121,21,239,25,77,66,1,177,166,197,33,160,49,77,33,30,82,43,202,69,121,70,3,99,77,140,134,
-
553 169,10,245,33,94,69,121,72,166,160,192,106,13,52,6,67,64,98,189,72,87,145,94,82,41,168,48,26,131,77,1,144,208,24,175,82,60,170,71,148,
-
554 138,106,12,6,160,211,64,100,53,72,87,169,10,242,43,202,69,121,70,3,99,77,140,134,169,10,245,33,94,69,121,72,166,160,192,106,13,52,8,143,
-
555 2,33,170,51,222,66,60,164,83,80,96,53,6,190,50,60,6,43,212,143,42,145,229,32,61,8,6,201,124,100,52,6,43,212,143,121,8,242,145,77,
-
556 65,175,65,166,128,200,104,12,87,169,10,242,43,202,69,121,70,3,100,190,50,26,164,43,212,133,121,21,229,34,188,163,1,178,95,25,13,1,138,245,
-
557 35,202,164,121,72,175,40,192,108,151,201,52,6,43,212,133,121,21,229,34,154,132,7,160,211,64,147,84,133,122,144,175,34,148,164,7,161,1,232,52,
-
558 216,200,240,33,94,164,121,84,143,41,1,232,64,122,13,52,8,143,1,138,245,33,94,69,121,72,175,40,192,108,151,198,71,129,10,245,33,94,69,121,
-
559 72,175,40,192,108,151,201,52,6,43,212,133,121,21,229,34,154,132,7,160,215,201,53,72,87,169,10,242,43,202,69,121,70,3,100,190,50,26,164,43,
-
560 212,133,122,145,229,34,188,163,95,37,242,77,82,21,234,66,188,138,244,85,122,18,249,47,145,30,4,71,170,148,170,71,148,138,244,32,27,37,241,145,
-
561 224,66,148,8,82,170,188,164,87,148,128,249,47,145,30,4,71,169,10,245,35,202,64,41,70,190,75,228,188,8,87,169,10,245,35,202,69,122,16,30,
-
562 132,188,8,143,2,35,192,133,121,21,229,32,61,8,15,66,94,4,71,129,17,234,66,188,138,242,145,94,132,7,161,47,2,35,192,136,240,33,94,69,
-
563 121,72,5,41,1,242,95,37,224,66,148,8,82,170,188,164,2,148,128,249,47,145,30,4,71,170,148,170,165,41,0,168,160,249,47,146,240,33,74,4,
-
564 41,85,94,138,175,66,95,37,242,94,4,41,64,133,42,171,209,64,165,32,62,160,249,17,224,68,120,16,165,85,41,72,15,66,3,228,188,8,143,2,
-
565 35,213,74,85,82,148,128,244,32,61,9,124,136,80,84,122,169,74,170,82,144,30,132,7,201,124,136,89,17,234,165,42,169,74,64,42,18,249,47,5,
-
566 188,8,82,129,10,85,87,162,171,208,151,201,124,151,130,161,65,74,85,82,148,128,84,37,242,95,37,224,168,245,82,149,84,165,32,61,8,15,168,62,
-
567 68,40,42,20,8,82,170,148,164,7,161,1,245,150,68,120,16,165,5,41,85,74,82,3,208,128,250,203,34,20,21,30,170,133,80,42,40,21,9,124,
-
568 151,200,133,5,66,130,161,85,74,85,87,161,37,66,94,10,133,5,71,170,148,170,165,41,0,168,160,249,47,145,10,10,133,2,20,170,165,42,171,208,
-
569 146,161,47,145,11,34,61,84,165,85,41,72,5,69,2,161,37,173,224,66,148,21,10,160,84,80,42,40,62,68,44,136,80,84,40,41,81,64,168,160,
-
570 84,36,168,75,193,80,160,168,80,84,42,129,81,64,168,160,249,47,5,66,130,161,65,80,170,5,69,2,162,131,235,44,136,80,84,40,42,21,64,168,
-
571 160,84,36,181,150,183,130,161,65,80,170,5,69,7,214,90,203,89,100,66,130,161,84,10,138,5,66,75,89,107,120,42,20,21,10,160,84,80,42,40,
-
572 62,178,200,133,5,66,130,161,84,10,138,5,69,7,214,90,202,10,133,5,42,40,21,20,10,138,5,173,224,168,80,84,40,42,21,64,168,160,84,80,
-
573 125,101,5,66,130,161,84,16,170,8,85,2,161,37,69,150,178,213,10,160,133,80,68,89,107,44,151,130,203,84,64,82,160,2,21,64,168,160,84,89,
-
574 100,66,130,161,65,74,138,5,69,2,162,129,80,151,130,161,65,80,160,168,85,2,162,129,107,45,101,173,224,168,80,82,160,41,81,65,245,150,183,130,
-
575 161,65,81,1,74,128,165,69,2,162,203,89,106,137,89,65,81,1,81,20,11,89,107,45,101,169,74,10,82,168,21,0,10,139,45,111,0,148,1,16,
-
576 20,168,160,84,80,68,80,45,101,172,160,8,85,4,42,130,34,130,33,41,80,44,136,149,68,0,42,0,21,0,10,129,44,37,170,22,165,72,33,84,
-
577 10,138,8,138,5,5,148,22,80,84,64,4,64,4,64,2,162,203,89,107,40,42,32,42,21,65,17,65,17,64,181,148,2,88,33,66,133,0,42,0,
-
578 21,0,10,139,40,4,160,168,128,168,128,168,138,5,69,2,194,80,9,106,133,0,66,168,21,20,17,20,18,74,73,40,44,160,165,64,4,42,202,139,
-
579 42,42,22,23,128,33,64,16,170,5,128,34,45,43,40,4,160,8,128,5,64,2,162,129,81,64,176,2,214,128,168,138,168,138,169,80,74,129,107,44,
-
580 16,160,5,72,20,160,5,40,3,225,42,4,181,66,130,162,0,80,21,17,64,176,162,44,176,148,21,16,21,16,1,32,169,80,74,130,86,80,84,64,
-
581 4,64,2,160,81,2,88,95,4,124,10,88,21,0,17,20,18,160,80,0,40,4,160,8,128,5,64,2,160,1,107,64,90,1,40,11,69,13,85,32,
-
582 8,129,44,37,170,20,1,10,20,46,242,209,229,4,124,41,92,23,5,160,2,64,11,9,97,74,208,22,138,180,80,68,90,66,136,180,168,34,168,85,
-
583 82,0,136,18,166,106,35,205,41,94,105,80,175,130,34,172,8,176,32,65,65,1,65,0,40,0,136,0,136,20,64,165,105,90,87,5,72,42,84,53,
-
584 84,5,164,16,169,43,202,134,154,82,154,244,71,148,37,5,10,144,36,80,5,93,85,42,9,0,44,37,132,186,22,5,64,4,168,107,74,208,23,85,
-
585 10,174,160,136,18,150,83,94,87,154,242,189,229,148,160,26,146,4,80,2,4,9,130,210,168,128,8,129,66,133,16,41,9,97,64,4,128,37,66,10,
-
586 176,85,130,130,65,11,66,188,165,52,210,148,215,162,61,2,128,161,82,0,1,2,171,168,96,9,10,114,232,154,32,83,4,69,224,8,11,170,173,72,
-
587 21,92,37,74,61,232,83,94,87,154,84,43,210,136,1,5,36,8,176,85,64,80,214,128,8,128,5,64,149,1,10,128,136,129,74,224,180,85,130,172,
-
588 8,176,32,107,46,87,162,60,210,188,211,74,87,189,37,64,8,17,65,72,0,170,21,13,65,33,72,81,2,93,11,161,66,136,0,136,180,0,10,170,
-
589 130,145,65,72,21,10,111,42,20,215,189,237,154,87,154,84,41,97,169,1,72,170,4,88,42,234,26,210,18,132,168,146,150,133,46,88,80,0,32,176,
-
590 85,0,82,2,145,65,72,16,4,42,35,222,247,182,217,175,108,215,189,229,74,85,64,132,32,16,101,5,32,2,168,84,18,0,93,10,146,149,17,30,
-
591 148,46,136,0,149,8,42,212,101,2,12,170,66,40,40,82,134,188,166,137,108,214,196,137,123,102,189,10,80,0,82,12,164,20,50,144,98,42,145,64,
-
592 20,16,1,11,66,149,16,175,163,209,16,165,161,82,136,11,5,85,2,12,170,49,20,132,34,170,175,71,148,173,182,107,98,68,182,219,109,188,175,40,
-
593 4,8,69,32,162,16,97,149,70,34,130,168,64,17,40,82,202,242,161,94,136,87,162,21,16,17,1,96,69,0,34,130,140,160,49,8,164,25,65,65,
-
594 17,10,105,175,52,123,109,182,61,183,154,107,209,16,20,20,98,16,130,134,33,6,34,169,20,0,1,52,68,66,189,10,87,161,74,84,71,162,33,122,
-
595 1,1,72,50,128,196,85,24,132,81,149,85,67,68,53,239,109,182,219,30,37,179,91,108,165,42,0,84,132,33,5,12,65,134,34,144,128,170,184,80,
-
596 180,121,80,175,122,21,229,66,149,37,46,144,8,17,84,131,12,163,12,66,16,101,82,40,66,82,149,237,182,107,99,196,182,36,73,175,53,233,212,138,
-
597 163,12,66,10,25,72,66,42,145,96,0,137,66,149,10,242,148,175,42,61,17,10,148,72,106,69,82,17,84,98,41,8,69,82,40,0,2,36,166,189,
-
598 237,137,109,177,226,91,53,179,74,133,69,0,32,196,32,195,12,163,12,69,33,20,21,125,11,41,74,82,188,168,242,149,10,84,68,44,18,160,160,50,
-
599 170,140,164,32,196,81,136,64,34,251,222,83,68,137,108,72,241,45,137,108,215,148,168,0,4,33,8,48,162,16,80,202,65,136,170,171,0,162,74,82,
-
600 163,202,82,188,165,41,74,136,82,229,128,85,85,70,25,72,48,196,81,136,170,69,0,9,74,87,182,219,98,71,137,18,60,121,166,154,244,192,138,65,
-
601 133,12,65,66,134,32,195,42,144,128,10,9,162,21,10,242,148,166,148,175,121,80,175,162,36,53,80,81,136,164,24,132,32,162,40,196,32,17,116,67,
-
602 77,52,72,241,226,79,159,30,37,182,205,66,160,17,84,97,67,12,41,160,196,20,49,8,49,20,8,24,33,81,30,242,149,239,41,94,244,43,222,82,
-
603 188,186,2,168,16,132,32,194,136,48,194,136,48,195,41,21,122,26,243,68,143,18,60,251,33,227,199,137,53,239,74,130,138,24,97,154,10,20,40,80,
-
604 195,12,49,20,138,0,0,136,136,242,149,239,121,94,105,74,247,148,165,42,34,36,0,8,66,16,97,136,48,195,16,97,134,82,12,160,0,133,123,219,
-
605 18,36,75,35,227,207,159,30,107,102,151,144,131,16,83,65,66,133,52,24,97,67,16,131,40,40,105,41,74,87,154,87,188,210,189,239,41,94,84,68,
-
606 192,20,132,82,16,138,48,195,16,97,136,66,17,84,128,136,143,108,214,199,143,30,60,251,33,45,137,53,229,74,170,140,40,80,194,154,10,24,80,195,
-
607 16,97,149,84,3,161,80,175,121,94,107,202,247,188,165,52,168,82,250,170,168,196,33,6,33,8,48,202,48,196,82,17,64,47,123,219,18,60,73,243,
-
608 231,207,137,30,36,215,149,0,0,97,134,24,80,161,66,133,10,24,97,134,82,16,0,2,137,41,74,87,154,87,188,210,189,239,41,74,84,164,0,20,
-
609 132,81,134,33,6,24,131,12,49,8,49,21,86,143,43,109,137,30,61,145,243,231,207,137,53,183,151,82,16,97,133,10,20,40,80,161,134,20,66,16,
-
610 96,80,90,101,41,74,247,149,230,188,165,121,81,229,68,42,39,5,82,12,49,8,48,196,32,196,82,16,128,164,209,30,107,102,143,30,36,121,241,34,
-
611 91,109,229,68,5,85,24,97,136,48,162,12,48,202,65,136,10,171,133,17,10,242,163,222,82,188,165,41,74,84,41,116,0,80,85,85,33,8,66,12,
-
612 164,33,21,72,161,4,43,222,107,98,91,18,60,75,109,182,105,74,144,5,33,20,97,134,33,6,33,20,101,85,80,0,4,208,165,66,149,232,87,149,
-
613 10,82,161,94,146,160,64,21,85,72,170,66,17,72,69,85,32,2,130,34,20,211,77,52,75,109,137,109,183,189,233,192,138,164,24,138,49,8,164,34,
-
614 170,168,2,130,65,16,168,143,42,60,165,71,149,16,168,136,158,10,0,10,160,164,85,34,170,169,1,65,122,60,175,52,214,205,109,182,222,107,209,18,
-
615 10,10,66,41,8,69,82,42,170,128,2,240,68,73,74,136,242,162,20,178,149,17,19,72,0,0,40,42,170,170,170,170,168,40,4,40,82,148,215,154,
-
616 246,205,53,239,122,33,96,21,85,82,17,85,72,160,170,0,161,134,148,42,34,20,168,133,68,42,34,33,116,194,10,160,170,160,170,160,170,0,11,133,
-
617 17,17,229,123,205,123,222,247,161,81,3,80,80,82,2,170,168,42,128,44,33,77,17,37,44,168,90,21,40,154,36,40,0,21,0,85,0,80,80,0,
-
618 0,0,242,149,10,242,189,239,121,74,84,74,0,5,84,20,21,65,84,0,0,32,30,137,68,73,81,17,17,40,137,78,144,192,0,1,64,21,64,0,
-
619 2,1,130,34,74,82,148,175,41,74,82,162,97,0,80,5,0,5,0,0,0,128,126,148,74,34,34,37,17,52,211,240,10,128,0,0,0,0,64,48,
-
620 166,136,133,66,148,165,42,21,19,192,0,0,1,64,0,2,1,12,18,9,77,18,136,148,77,19,78,144,132,2,0,0,0,16,0,135,10,37,10,136,
-
621 82,149,10,90,80,48,0,0,0,0,0,128,97,195,78,148,165,17,52,77,52,248,6,161,0,0,0,192,56,38,136,136,136,84,66,162,34,120,66,0,
-
622 0,1,0,132,56,125,52,165,41,68,211,167,195,0,128,6,1,128,112,160,81,40,136,136,84,68,77,33,128,4,2,16,8,67,240,78,148,166,137,211,
-
623 79,72,112,8,6,1,0,225,250,81,40,84,68,68,211,192,33,0,128,66,24,127,211,74,105,74,116,255,14,1,128,66,24,97,166,148,68,74,34,37,
-
624 60,33,0,192,48,195,255,233,77,52,233,208,63,132,33,132,48,225,72,37,41,74,34,81,62,24,96,24,7,15,254,157,58,83,211,255,12,33,134,28,
-
625 63,210,148,74,82,159,195,0,195,135,240,79,233,211,167,255,248,112,225,195,255,77,41,74,122,67,132,48,195,255,253,58,126,159,255,15,195,135,135,244,
-
626 210,154,83,252,48,225,195,255,233,250,127,79,255,15,15,135,255,211,74,116,240,225,195,130,67,244,10,127,79,233,4,252,18,31,135,135,255,167,77,63,
-
627 240,225,255,130,96,159,253,63,167,252,18,28,60,63,255,77,52,255,225,195,255,255,254,159,255,208,63,195,240,255,160,39,78,159,240,225,255,255,255,79,
-
628 255,255,254,31,135,254,157,58,127,135,135,255,255,255,79,254,129,76,18,31,135,135,254,158,158,159,15,135,255,255,253,63,255,255,252,63,135,233,244,244,
-
629 240,252,63,255,255,254,159,255,208,63,240,240,255,167,211,255,254,31,255,255,254,159,255,255,240,254,9,10,127,79,255,240,255,255,255,244,255,254,129,255,
-
630 135,240,253,62,159,255,240,255,255,255,244,254,159,240,252,63,135,232,9,233,255,254,20,15,255,255,250,127,244,13,3,248,127,4,134,159,211,255,252,63,
-
631 255,255,253,1,63,253,33,252,63,240,164,41,250,127,255,194,129,255,255,250,2,127,255,255,195,255,255,211,255,252,63,255,255,253,63,255,255,225,255,255,
-
632 253,63,255,225,64,255,255,250,127,244,10,67,252,16,63,252,19,253,63,255,193,33,255,255,244,255,255,255,135,255,255,244,255,255,225,255,255,255,79,253,
-
633 48,72,127,15,254,9,255,211,255,255,225,255,255,233,255,164,40,31,225,255,255,253,63,255,240,64,255,255,253,63,244,248,127,15,252,19,255,211,255,255,
-
634 248,127,255,250,127,164,18,31,248,127,130,66,159,244,255,255,252,63,255,253,63,250,7,252,63,255,255,167,255,255,240,255,255,255,79,255,255,135,255,255,
-
635 250,127,255,252,63,255,255,167,255,255,135,255,255,211,255,255,224,129,255,255,250,2,127,255,252,63,255,255,211,255,254,9,13,3,255,255,211,255,255,225,
-
636 255,255,254,144,79,255,248,82,20,15,255,250,127,255,255,15,255,255,167,255,255,194,129,255,255,254,159,255,255,15,255,255,160,39,255,255,194,129,255,255,
-
637 250,2,127,255,224,129,255,255,244,255,255,130,67,255,255,253,63,255,255,4,15,255,255,167,255,255,135,255,255,211,255,255,254,31,255,254,159,255,195,255,
-
638 255,253,63,255,255,252,63,255,255,211,255,254,31,255,254,159,255,255,254,31,255,255,211,255,240,255,255,79,255,255,254,31,255,255,255,64,167,255,195,255,
-
639 254,128,159,255,255,240,164,48
-
640 };
-
641 #endif /* UMPAH_H_ */
-
-
- - - diff --git a/gh-pages/index.markdown b/gh-pages/index.markdown index c85890ece..9f6cb981b 100644 --- a/gh-pages/index.markdown +++ b/gh-pages/index.markdown @@ -3,7 +3,7 @@ layout: single toc: true --- -Currently your Arduino can only beep like a microwave oven. Mozzi brings +TESTEST Currently your Arduino can only beep like a microwave oven. Mozzi brings your Arduino to life by allowing it to produce much more complex and interesting growls, sweeps and chorusing atmospherics. These sounds can be quickly and easily constructed from familiar synthesis units like oscillators, delays, filters and envelopes. You can use Mozzi to generate algorithmic music for an installation or