まえがき
シンセサイザーとか、名前の響きがカッコいいモノに憧れるのですが、イマイチ分かってません。
ArduinoのMozziライブラリを使えば、なんかそれっぽい事が出来そう??と思い触ってみました。
使用したモノ
- Arduino Uno R3 (互換機) 1個
- 半固定抵抗 10kΩ 〇個
- ジャンパー線 複数本
環境
Arduino IDE 2.3.3
使用ライブラリ
Mozzi 2.0.1
スピーカー配線
サンプルコードの正弦波で440HZを出力するコードを動かしたいので、スピーカーを繋げます。
配線イメージの作成に今回はfritzingを使用しました。
サイトからのダウンロードは有料なので、ネットで無料版を拾って使いました。
手間じゃなければオープンソースなので自分でビルドしても良いかもしれません。
正弦波スケッチ
Mozziの正弦波サンプルと同じです。
#define MOZZI_CONTROL_RATE 64
#include <Mozzi.h>
#include <Oscil.h>
#include <tables/sin2048_int8.h>
Oscil <SIN2048_NUM_CELLS, MOZZI_AUDIO_RATE> aSin(SIN2048_DATA);
void setup(){
startMozzi();
aSin.setFreq(440);
}
void updateControl(){
}
AudioOutput updateAudio(){
return MonoOutput::from8Bit(aSin.next());
}
void loop(){
audioHook();
}
スケッチの詳細はMozziのドキュメントに記されているので説明は省きますが。
筆者的にはsetupの中でやってる事くらいしか理解できません。
半固定抵抗配線
ドキュメントでは、この下にビブラートを加えるサンプルが有ったので、サンプルに付け加える形で半固定抵抗を繋いで音を少し弄ってみたいと思います。
半固定抵抗には、恐らく極性がないのでVINとGNDはどちらでも構いません。
真ん中のピンで抵抗値?電圧?の変化をArduino側のA0ピンで読み取ります。
回路の話で”恐らく”ほど怖いモノはないと思う
不安な人は調べて下さい。
ビブラートスケッチ
#define MOZZI_CONTROL_RATE 128
#include <Mozzi.h>
#include <Oscil.h>
#include <tables/sin2048_int8.h>
Oscil <2048, MOZZI_AUDIO_RATE> aSin(SIN2048_DATA);
Oscil <2048, MOZZI_CONTROL_RATE> kVib(SIN2048_DATA);
float centre_freq = 440.0;
float depth;
void setup(){
kVib.setFreq(6.5f);
startMozzi(MOZZI_CONTROL_RATE);
}
void updateControl(){
depth = analogRead(0) * 0.01;
float vibrato = depth * kVib.next();
aSin.setFreq(centre_freq+vibrato);
}
AudioOutput_t updateAudio(){
return MonoOutput::from8Bit(aSin.next());
}
void loop(){
audioHook();
}
ピン番号を定数化しても良いですが、弄る機会もなさそうなのでanalogRead(0)で直接指定しています。
ここでdepthの値を変化させる以外はドキュメントのサンプルと同じです。
音が小さめですが撮影してみました。
Mozziの機能の1%も使えてないと思いますが、サンプルを眺めて半固定抵抗で値を弄る以外は自分でスケッチを書けそうにないのでAIに聞いてみます。
コメント