snapshot
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
// One way of thinking about FM synthesis is to see it as vibrato.
|
||||
// You make a pitch, then vary it up and down at some rate.
|
||||
// You can change the speed of the pitch variation (modulation frequency), and also the amount of variation (modulation index).
|
||||
// In FM, usually only one of the waveforms - the carrier that provides the initial pitch - is sent to the output.
|
||||
// The frequency of the the carrier wave is continually adjusted at a rate equal to the frequency of the second wave (the modulator).
|
||||
// So at any given point in time, the frequency of the carrier can increase by an amount equal to the current amp of the modulator.
|
||||
// This has some interesting effects.
|
||||
|
||||
#include "AudioTools.h"
|
||||
#include "AudioTools/AudioLibs/MaximilianDSP.h"
|
||||
|
||||
// Define Arduino output
|
||||
I2SStream out;
|
||||
Maximilian maximilian(out);
|
||||
// Maximilian
|
||||
maxiOsc mySine,myOtherSine;//Two oscillators
|
||||
|
||||
|
||||
void setup() {//some inits
|
||||
// setup logging
|
||||
Serial.begin(115200);
|
||||
AudioToolsLogger.begin(Serial, AudioToolsLogLevel::Info);
|
||||
|
||||
// setup Aduio output
|
||||
auto cfg = out.defaultConfig(TX_MODE);
|
||||
out.begin(cfg);
|
||||
maximilian.begin(cfg);
|
||||
}
|
||||
|
||||
void play(float *output) {
|
||||
|
||||
// In this example, the 'myOtherSine.sinewave' is at an amplitude of 1, it's original amplitude.
|
||||
// This is pretty simple and not too useful.
|
||||
//output[0]=mySine.sinewave(440*myOtherSine.sinewave(1));
|
||||
|
||||
// Perhaps you should comment out the above line and uncomment the below one instead
|
||||
// It shows how the frequency of the carrier is altered by ADDING a second waveform to its frequency value.
|
||||
// The carrier frequency is 440, and the modulation frequency is 1.
|
||||
// It also shows how the modulation index works. In this case the modulation index is 100
|
||||
// Try adjusting the modolation index. Also, try altering the modulation frequency.
|
||||
output[0]=mySine.sinewave(440+(myOtherSine.sinewave(1)*100));
|
||||
output[1]=output[0];
|
||||
|
||||
}
|
||||
|
||||
// In complex FM systems you can have lots of modulators stacked together in interesting ways, and theoretically this can make any sound.
|
||||
// John Chowning is the guy you probably want to talk to about that.
|
||||
|
||||
// Arduino loop
|
||||
void loop() {
|
||||
maximilian.copy();
|
||||
}
|
||||
Reference in New Issue
Block a user