F401REにてアナログモデリングシンセもどきを作ってみました。 リングモジュレーターっぽいことやってみてます。正弦波、三角波、矩形波の関数が用意してあります。sin(2pift)のftをサンプリングレートごとに積分したものをiftとしてます。iftのポインタを関数に与えるだけで特に計算は入りません。
Diff: main.cpp
- Revision:
- 6:e3ed48abbd53
- Parent:
- 5:f798a173eefa
- Child:
- 7:725b3bc34e7e
--- a/main.cpp Thu Jul 21 12:20:51 2016 +0000 +++ b/main.cpp Fri Jul 22 11:44:22 2016 +0000 @@ -14,25 +14,25 @@ int main() { - double keika_t,data,late; + double ft,data,late; int freq_out = 5000; late = 20 * 0.001 * 0.001; - + mypwm.period_us(20); flipper.attach_us(&flip,20); while(1) { - + if(flip_flag == 1) { - - if(sw == 0) data = keika_t; - else data = sin(6.28 * keika_t * freq_out) + 1; - + + if(sw == 0) data = ft; + else data = sin(6.28 * ft) + 1; + mypwm.write( data / 20 ); - if(keika_t + late > 1) keika_t = keika_t + late - 1; - else keika_t += late; + ft += late * freq_out; + if(ft > 1) ft--; flip_flag = 0; }