Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp
- Committer:
- davolfman
- Date:
- 2017-11-09
- Revision:
- 1:f3350a372732
- Parent:
- 0:b2f7400596ce
- Child:
- 2:5454dee210ed
File content as of revision 1:f3350a372732:
#include "mbed.h" AnalogOut DAC0(PA_4);//Not labeled in the docs for the f401, but seems to be for all AnalogOut DAC1(PA_5); AnalogIn ADC0(PA_0); AnalogIn ADC1(PA_1); //AnalogIn ADC2(PA_2);//not labeled as such in MBED's docs for f401, yes 446 //AnalogIn ADC3(PA_3);//not labeled as such in MBED's docs for f401, yes 446 //AnalogIn ADC4(PA_4);//we're using these for output //AnalogIn ADC5(PA_5);//we're using these for output AnalogIn ADC6(PA_6); AnalogIn ADC7(PA_7); //AnalogIn ADC8(PB_0);//lets leave the 2 we aren't using in a single port //AnalogIn ADC9(PB_1);//that way we know there's not ADCs on one of them AnalogIn ADC10(PC_0); AnalogIn ADC11(PC_1); AnalogIn ADC12(PC_2); AnalogIn ADC13(PC_3); AnalogIn ADC14(PC_4); AnalogIn ADC15(PC_5); //Renaming ports #define inVol ADC0 #define inModAmt ADC1 #define inCarA ADC6 #define inCarD ADC7 #define inCarS ADC10 #define inCarR ADC11 #define inModA ADC12 #define inModD ADC13 #define inModS ADC14 #define inModR ADC15 #define outMono DAC0 #define numKeys 88 #define PI M_PI //possible constants int carrierIncrements[numKeys]; const int attackLimit = (0x1 << 16) - 1; const int fixed2Pi = (int) ((2.0 * PI) * (0x1 << 16)); //non-constants //Most of these will be recalculated or reset on every input cycle of the main // loop, as appropriate int FMmult; int Volume; int modVol; int modAmpI; int carAmpS; bool keysPressed[numKeys]; int carrierPhases[numKeys]; int modulatorPhases[numKeys]; short envelopeStatesC[numKeys]; short envelopeStatesM[numKeys]; int envelopeAmpsC[numKeys]; int envelopeAmpsM[numKeys]; int modA; int modD; int modS; int modR; int carA; int carD; int carS; int carR; int fastSin(const int phase){ return 0; } void synthesize(){ carAmpS = 0; for(int i = 0; i < numKeys; ++i){ if(keysPressed[i]){ if(envelopeStatesC[i] < 2) envelopeStatesC[i] = 4; if(envelopeStatesM[i] < 2) envelopeStatesM[i] = 4; if(envelopeStatesC[i] == 4){ envelopeAmpsC[i] += carA; if(envelopeAmpsC[i] >= attackLimit){ envelopeAmpsC[i] = attackLimit; envelopeStatesC[i] = 3; } } if(envelopeStatesM[i] == 4){ envelopeAmpsM[i] += modA; if(envelopeAmpsM[i] >= attackLimit){ envelopeAmpsM[i] = attackLimit; envelopeStatesM[i] = 3; } } if(envelopeStatesC[i] == 3){ envelopeAmpsC[i] += carD; if(envelopeAmpsC[i] <= carS){ envelopeAmpsC[i] = carS; envelopeStatesC[i] = 2; } } if(envelopeStatesM[i] == 3){ envelopeAmpsM[i] += modD; if(envelopeAmpsM[i] <= modS){ envelopeAmpsM[i] = modS; envelopeStatesM[i] = 2; } } }else{ if(envelopeStatesC[i] > 1) envelopeStatesC[i] = 1; if(envelopeStatesM[i] > 1) envelopeStatesM[i] = 1; if(envelopeStatesC[i] == 1){ if(envelopeAmpsC[i] <= 0){ envelopeStatesC[i] = 0; envelopeAmpsC[i] = 0; }else{ envelopeAmpsC[i] -= carR; } } if(envelopeStatesM[i] == 1){ if(envelopeAmpsM[i] <= 0){ envelopeStatesM[i] = 0; envelopeAmpsM[i] = 0; }else{ envelopeAmpsM[i] -= modR; } } } if(envelopeAmpsC[i] > 0){ modulatorPhases[i] += (Fmult * carrierIncrements[i]) >> 16; modAmpI = fastSin((((modulatorPhases[i] * envelopeAmpsM[i]) >> 16) * modVol) >> 16); carrierPhases[i] += ((carrierIncrements[i] + modAmpI) * fixed2pi) >> 16; carAmps += (fastSin(carrierPhases[i]) * envelopeAmpsC[i]) >> 16; } } outMono.write_u16(((carAmps / numKeys) * Volume) >> 16); } int main() { }