#include <MsTimer2.h> #define MOD_RATE 10 // ms int16_t beatLen = 50; int16_t decayLen = 20; int16_t level = 4095; int16_t decay_delta; int16_t mod_value; int16_t tick; void outADSR() { tick++; if (tick > beatLen) { tick = 0; //モジュレーション波形を初期化する mod_value = level; decay_delta = level / decayLen; } Serial.println(mod_value); mod_value -= decay_delta; if (mod_value < 0) { mod_value = 0; } } void setup() { Serial.begin(9600); MsTimer2::set(MOD_RATE, outADSR); MsTimer2::start(); } void loop() { //Serial.println("a"); }
BPM = 120 → 60s / 120 = 0.5s = 500ms
なので1Beatは500ms
MOD_RATEを10ms、beatLenを50にしているので
10ms * 50 = 500ms
decayLenは減衰の着地(?)地点で0~beatLenを指定。
タイマー割り込みにMsTime2を使用。
0 件のコメント:
コメントを投稿