F401REにてアナログモデリングシンセもどきを作ってみました。 リングモジュレーターっぽいことやってみてます。正弦波、三角波、矩形波の関数が用意してあります。sin(2pift)のftをサンプリングレートごとに積分したものをiftとしてます。iftのポインタを関数に与えるだけで特に計算は入りません。
main.cpp
- Committer:
- gitakichi
- Date:
- 2016-07-20
- Revision:
- 3:5cae780fe61e
- Parent:
- 2:47210a089f76
- Child:
- 4:3f3d369ca0e3
File content as of revision 3:5cae780fe61e:
#include "mbed.h" Ticker flipper; PwmOut mypwm(PC_8); DigitalOut myled(LED1); //int data; float data_sin; bool flip_flag; float keika_t; #define late 0.00001 //100khz-1 #define freq_out 3000 void flip() { //if(data > 100) data = 0; //else data++; //data_sin = sin((data/100)*6.28) + 1; flip_flag = 1; } int main() { mypwm.period_us(10); flipper.attach_us(&flip, 10); float keika_t; //printf("pwm set to %.2f %%\n", mypwm.read() * 100); while(1) { if(flip_flag == 1) { data_sin = sin(6.28 * keika_t * freq_out) + 1; mypwm.write( data_sin / 10 ); if(keika_t + late > 1) keika_t = keika_t + late - 1; else keika_t += late; flip_flag = 0; } } }