2017年6月6日火曜日

キックマシン KIK01 Nucleo(mbed)でプロトタイピング

Nucleo F446REを使ってmbedでプログラムを書いて音出ししてみた。


Nucleo F446REは12bit DACを内蔵しているので、入力のPOTをつないだだけ。楽だな~

エンベロープ


パラメータは、振幅と周波数それぞれのエンベロープで、上図のようにAR型とした。

Attack Attack時間
Release Release時間
V0 初期出力値
V1 最大出力値
V2 最終出力値
Tau0 Attackの時定数
Tau1 Releaseの時定数

時定数によってカーブの深さが変わる。

入力デバイス


Nucleo F446REは仕様上はADC16chとなっているが、UARTやDAC出力などとかぶっているので使用状況によって制限される。今回は12個のAnalogInを使った。

エンベロープのアップデート・レート


動画では聞き取りにくいかもしれないが、1kHzあたりにノイズが乗っている。

WaveSpectraでFFT

パラメータを調節してノイズがわかりやすくしてみた。1kHzの整数倍で2個ずつ現れている。これは、エンベロープ波形を1m秒(1kHz)ごとに更新しているので、エイリアスが出ているのだと思う。(サンプリング周波数を境に折り返し)

波形自体のサンプリング周波数は96,000Hz、12bitDACから出力しているのでこちらは可聴域ではそれほど問題ないと思う。

試しにエンベロープ波形の更新レートを48,000Hzにしたらこのようなノイズはなくなった。

エンベロープの先頭の波形


WaveSpectraでFFT

上図のようにエンベロープの先頭で値が飛ぶので、クリック音というかプチプチ言う。波形の位相を調整して0から始まるようにすれば改善する?

mbed repository:
https://developer.mbed.org/users/ryood/code/KIK01_Proto01/ Revision:11

メモ:


かなり高速に処理する必要がありそうなので、処理時間を計測する。

Nucleoだけでもそこそこ使えそうだが、サイン波形を歪ませたいので振幅変調はアナログ回路で行う。うまくいけばサイン波発生回路もアナログでやってみる。

入力デバイスはPOTだとパネルに大量に並べる必要がありそう。ベースマシンとは違ってリアルタイムにパラメータをいじる必要はあまりなさそうなので、ロータリーエンコーダーを使って操作子数を減らしてみる?

ベースマシン用に作ったPOTパネルを使ってみたが、操作子を並べたものを作っておくと便利。