MozziWS 1_5

Pure Dataから離れて、Mozziだけでセンサ入力から音を出す

ここまでPure DataとともにMozzi学んできましたが、MozziはArduino上で動くため当然のことながらPdは必ずしも必要ありません…(ごめんなさい)

ですが、簡単なシリアル通信のプログラムを学習しましたので、ProcessingやopenFrameworks、Max/MSPなどのソフトウェア、プログラミング環境からMozziをコントロールするノウハウが提供できたと思います。

ここで、ソフトからはいったん離れてArduinoのみでMozziを操作する段階に移行したいと思います。 今回は第3回のプログラムをハードウェア上で実装したいと思います。

ハード (以下は例です)

  • Arduino Unoなど (16MHz駆動のみ対応→MozziのHPを参照のこと)
  • ジャンプワイヤ (数本)
  • ブレッドボード (1枚, なくてもいい)
  • オーディオジャック
  • スピーカ (ジャックに対応するもの)
  • 可変抵抗 (5KΩBカーブなど)

ソフト

  • Arduino
  • Mozzi

作業

1) Arduinoとステレオミニジャック, 可変抵抗を 赤:Digital 9番ピン,黒:GND, 可変抵抗の足をそれぞれVCC, Analog0, GND のように接続し、USBケーブルでArduinoをPCに接続してください。

2) メニューバーからツール (Tools) を選び、マイコンボード(Board) から使用するArduinoを選択してください

3) 同様にツール (Tools) からシリアルポート (Serial Port) を選び、Arduinoが接続されているUSBポートを選択してください

4) ページ下部のソースを参考にプログラムを書き込んでください

5) ArduinoIDEウィンドウの矢印 (→) マークをクリックし、Arduinoにスケッチを書き込んでください (pdパッチが開いている場合は[close]を押すか、 閉じてから書き込み)

6) 可変抵抗をまわすと音が出力されます

 1#include <MozziGuts.h>
 2#include <Oscil.h> // オシレーターのテンプレート
 3#include <tables/sin2048_int8.h> // オシレーター用のサイン波テーブル
 4#include <mozzi_midi.h> //Pdの[mtof]オブジェクトの代わり
 5  
 6// use: Oscil <table_size, update_rate> oscilName (wavetable)
 7Oscil <SIN2048_NUM_CELLS, AUDIO_RATE> aSin(SIN2048_DATA);// 配列変数SIN2048_DATA2048の8bitデータをaSinに格納
 8  
 9// use #define for CONTROL_RATE, not a constant
10#define CONTROL_RATE 64 // コントロールレートの設定
11  
12float val = 0.f;
13float pitch = 0.f; // 音の高さ (pitch) の変数
14int sensorValue;
15int pin = 0;
16  
17void setup(){
18  startMozzi(CONTROL_RATE); // Mozziの初期化と処理開始
19}
20  
21void updateControl(){ // Mozziの音出力設定はこの領域に書き込む
22  
23  sensorValue = mozziAnalogRead(pin);
24  
25  val = map(sensorValue, 0, 1024, 0, 127); //センサの値を0~127にマッピング
26  
27  if(val < 128 && val > 0){ // 1~127の値であれば...
28    pitch = val; //pitchに値を格納する
29    aSin.setFreq(mtof(pitch)); // pitchを周波数に変換し、オシレーター設定に代入する
30  }
31  else{ // その他の値がきた場合は...
32    pitch = 0; //pitchを0にして...
33    aSin.setFreq(0.f); // オシレーターを止める
34  }
35}
36  
37int updateAudio(){
38  return aSin.next(); // オーディオの繰り返し出力処理
39}
40  
41void loop(){
42  audioHook(); // 再生のために必要
43}

Pure Dataを使っていた頃よりもシンプルになったと思います。 「最初からこっちでやれ!」と言われてしまいそうですが、Arduino IDEで色々といじる前に多彩な音に触れてもらいたいと思い、こういった流れで入門編を執筆しています。

また、Pure Data等のソフトウェアでセンサ値の加工をしたり、アルゴリズムコンポジションの結果をArduinoから出力したり…といった使い方にもつながると思います。 次回からはいよいよArduinoスケッチの中身に迫っていきたいと思います。

NEXT 次へ

MAIN PAGE メインページへ