F401REにてアナログモデリングシンセもどきを作ってみました。 リングモジュレーターっぽいことやってみてます。正弦波、三角波、矩形波の関数が用意してあります。sin(2pift)のftをサンプリングレートごとに積分したものをiftとしてます。iftのポインタを関数に与えるだけで特に計算は入りません。
main.cpp
- Committer:
- gitakichi
- Date:
- 2016-07-22
- Revision:
- 6:e3ed48abbd53
- Parent:
- 5:f798a173eefa
- Child:
- 7:725b3bc34e7e
File content as of revision 6:e3ed48abbd53:
#include "mbed.h" Ticker flipper; PwmOut mypwm(PC_8); DigitalIn sw(USER_BUTTON); bool flip_flag; void flip() { flip_flag = 1; } int main() { 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 = ft; else data = sin(6.28 * ft) + 1; mypwm.write( data / 20 ); ft += late * freq_out; if(ft > 1) ft--; flip_flag = 0; } } }