Toneより高機能の音声出力のためのライブラリ。
外側に書く内容
#include <MozziGuts.h> #include <Oscil.h> #include <tables/sin2048_int8.h> // 正弦波の表 #include <mozzi_midi.h> // 音の高さを周波数に変換するためのmtof()関数を用いるため。 #define CONTROL_RATE 64 // 下記updateControlが1秒間に呼び出される頻度。2のべき乗を設定。 Oscil <SIN2048_NUM_CELLS, AUDIO_RATE> aSin(SIN2048_DATA); // AUDIO_RATEはサンプリング周期。デフォルトは16384Hz
setup()の内容は、少なくともstartMozziを含むこと。CONTROL_RATEは上記で定義されている。
void setup(){ startMozzi(CONTROL_RATE); aSin.setFreq( mtof(60) ); // 中央のド }
loop()の内容は必ず次のようにする。これ以外を書かないこと。
void loop(){ audioHook(); }
updateControlでは外部機器との入出力や、音程、音量などの制御を行なう。analogReadの代わりに、mozziAnalogReadを用いること。
void updateControl(){ int r; r = mozziAnalogRead(A0); r = map( r, 0, 1023, 0, 127 ); aSin.setFreq( mtof(r) ); }
updateAudioは音波の次のサンプル値を返す。
int updateAudio(){ return aSin.next(); // 正弦波の表からデータを返す。 }