Code:
//example for phase modulation
#include <Audio.h>
// GUItool: begin automatically generated code
// AudioSynthWaveform waveform[0]; //xy=277,194
// AudioSynthWaveform waveform[1]; //xy=283,235
// AudioSynthWaveform waveform[2]; //xy=288,276
// AudioSynthWaveform waveform[3]; //xy=293,317
// AudioSynthWaveformSineModulated sine_fm[0]; //xy=437,199
// AudioSynthWaveformSineModulated sine_fm[1]; //xy=443,240
// AudioSynthWaveformSineModulated sine_fm[2]; //xy=448,281
// AudioSynthWaveformSineModulated sine_fm[3]; //xy=453,322
AudioSynthWaveform* waveform = new AudioSynthWaveform[4]; //not automatically generated code
AudioSynthWaveformSineModulated* sine_fm = new AudioSynthWaveformSineModulated[4]; //not automatically generated code
AudioMixer4 mixer1; //xy=630,252
AudioOutputI2S i2s1; //xy=776,259
AudioConnection patchCord1(waveform[0], sine_fm[0]);
AudioConnection patchCord2(waveform[1], sine_fm[1]);
AudioConnection patchCord3(waveform[2], sine_fm[2]);
AudioConnection patchCord4(waveform[3], sine_fm[3]);
AudioConnection patchCord5(sine_fm[0], 0, mixer1, 0);
AudioConnection patchCord6(sine_fm[1], 0, mixer1, 1);
AudioConnection patchCord7(sine_fm[2], 0, mixer1, 2);
AudioConnection patchCord8(sine_fm[3], 0, mixer1, 3);
AudioConnection patchCord9(mixer1, 0, i2s1, 0);
AudioConnection patchCord10(mixer1, 0, i2s1, 1);
AudioControlSGTL5000 sgtl5000_1; //xy=630,319
// GUItool: end automatically generated code
void setup() {
Serial.begin(250000);
AudioMemory(20);
sgtl5000_1.enable();
sgtl5000_1.volume(0.5);
for(int i = 0; i < 4; i++) {
mixer1.gain(i, 0.25);
}
}
void loop() {
Serial.println("sirens in the city");
phaseSweep(WAVEFORM_SINE, .1, 3, 1000, 0, 90, 0.05, 0.05); //sirens in the city
Serial.println("red alert");
phaseSweep(WAVEFORM_SAWTOOTH, 0.9, .75, 500, 0, 90, 0.05, 0.5); //red alert
Serial.println("helicopter flyby");
phaseSweep(WAVEFORM_SAWTOOTH_REVERSE, 0.9, 20, 200, 5, 50, 0.05, 0.05); //helicopter flyby
Serial.println("etheral winds");
phaseSweep(WAVEFORM_SINE, 1.0, 0.01, 300, 0, 90, 0.01, 0.05); //etheral winds
}
void phaseSweep(short t_type, float ampl_lfo, float freq_lfo, float freq_vco, float from_phase, float to_phase, float step_up, float step_down){
//initialise lfo's & vco's
for(int i = 0; i < 4; i++) {
waveform[i].amplitude(ampl_lfo);
waveform[i].frequency(freq_lfo);
waveform[i].begin(t_type);
waveform[i].phase(from_phase);
sine_fm[i].amplitude(1);
sine_fm[i].frequency(freq_vco);
}
waveform[0].phase(0); //phase of lfo0 always 0
delay(2000);
//sweep up phase of lfo's
Serial.println("phase up");
for(float p = from_phase; p <= to_phase; p+=step_up){
AudioNoInterrupts();
for (int i = 1; i < 4; i++) {
waveform[i].phase(p * i);
}
AudioInterrupts();
delay(10);
Serial.print("phase up ");
Serial.println(p);
}
Serial.println("phase steady");
delay(2000);
//sweep down phase of lfo's
Serial.println("phase down");
for(float p = to_phase; p >= from_phase; p-=step_down){
AudioNoInterrupts();
for (int i = 1; i < 4; i++) {
waveform[i].phase(p * i);
}
AudioInterrupts();
delay(10);
Serial.print("phase down ");
Serial.println(p);
}
Serial.println("phase steady");
delay(2000);
}