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(); // 正弦波の表からデータを返す。
}