6. Mozziでノコギリ波を出力する

今まではサイン波(正弦波)のテーブルを利用して音を出力していました。
今回はノコギリ波(鋸歯状波)の出力に挑戦してみます。

前回からの変化は03,07,28,32,37行目だけです。
ノコギリ波のテーブルを指定して、適切な変数に格納してあげれば動いてしまいます。
非常にわかりやすい構造です。

#include <MozziGuts.h>
#include <Oscil.h> // オシレーターのテンプレート
#include <tables/saw2048_int8.h> // オシレーター用のノコギリ波テーブル
#include <mozzi_midi.h> //Pdの[mtof]オブジェクトの代わり

// use: Oscil <table_size, update_rate> oscilName (wavetable)
Oscil <SAW2048_NUM_CELLS, AUDIO_RATE> aSaw(SAW2048_DATA);// 配列変数SAW2048_DATA2048の8bitデータをaSawに格納

// use #define for CONTROL_RATE, not a constant
#define CONTROL_RATE 64 // コントロールレートの設定

float val = 0.f;
float pitch = 0.f; // 音の高さ (pitch) の変数
int sensorValue;
int pin = 0;

void setup(){
  startMozzi(CONTROL_RATE); // Mozziの初期化と処理開始
}

void updateControl(){ // Mozziの音出力設定はこの領域に書き込む

  sensorValue = mozziAnalogRead(pin); //Mozzi処理のバックグラウンドでセンサ値を読み込む

  val = map(sensorValue, 0, 1024, 0, 127); //センサの値を0~127にマッピング

  if(val < 128 && val > 0){ // 1~127の値であれば...
    pitch = val; //pitchに値を格納する
    aSaw.setFreq(mtof(pitch)); // pitchを周波数に変換し、オシレーター設定に代入する
  }
  else{ // その他の値がきた場合は...
    pitch = 0; //pitchを0にして...
    aSaw.setFreq(0.f); // オシレーターを止める
  }
}

int updateAudio(){
  return aSaw.next(); // オーディオの繰り返し出力処理
}

void loop(){
  audioHook(); // 再生のために必要
}

 
回路は第4回の可変抵抗のものを流用してください。
pot