2015年8月8日土曜日

Visual Studioでリズムマシンのテストプログラムを作った



と言っても波形生成だけに絞ったCUIプログラムです。パラメーターもソースの#defeine等で直書きです。

波形は浮動小数点のText形式で出力して「GoldWave(http://www.goldwave.com/)」で読み込んで再生しました。

波形コンバートにはSoX(http://sox.sourceforge.net/)を使っていましたが、GoldWaveならコンバートも再生も一緒にできてなかなか便利です。

お金がなくてSoundForgeのアップグレードができないと言う事情もあって、シェアウェアで済ますという・・・

Visual StudioのプロジェクトはGithubで公開しています。
https://github.com/ryood/DDS_RhythmMachine_Test
https://github.com/ryood/DDS_RhythmMachine_Test/blob/master/DDS_RhythmMachine_Test/DDS_RhythmMachine_Test.cpp

Visual Studioもタダになったので気兼ねなく使えるようになりました(^q^;
Windowsでプログラムを書くにはCUIプログラムも含めてなんだかんだ言ってもVisual Studioが一番楽です。

プログラムは、トラック別(kick, snare, hihatなど)にシーケンスを組めるようにしました。
シーケンスはbitfieldを使って0/1で詰め込もうかと思いましが、Velocityを入れるつもりで8bitの配列にしました。

kickはサイン波、snareはTR-808のSnareのサンプリング音を加工、hihatはホワイト・ノイズでそれぞれ符号付き16bitでテーブルを作成。テーブル長は1024Wordです。

Decayは線形補完です。
→Decayの処理にバグがあるのでKickの波形が0まで落ちてなくてちょん切れてます。BPMを中途半端な値にするとノイズが出そうだな、これは。

途中で-1.0~1.0の浮動小数点に変換して演算していますが、ここを整数か固定小数点演算に改変すればARMなら余裕で処理できそうだし、がんばればArduino Unoでもいけるかもしれません。

組み方の方針

これ以上高機能にしてもマイコンに落としこむ時に苦労しそうなので、一旦ArduinoかPSoCで組んで見ようと思います。

NucleoやLPCも考えてましたが、せっかくPSoCに慣れてきたのでArduinoでムリならPSoCでやってみようと思います。


今まで使っていたPSoC 4の上位バージョン。上がPSoC 5LP Prototyping Kit、下が『トランジスタ技術増刊 基板付き体験編ARM PSoCで作るMyスペシャル・マイコン 2013年 12月号 [雑誌]に付属の基板です。

トラ技増刊の方は入手難ですがPrototyping Kitはしばらく大丈夫そうです。

どちらも、まだ全く触ってないですが(^q^;;;;;

メモ:

  • ホワイトノイズは再生周波数を上げれば音が高く聴こえるんだろうか?
  • Snareの波形は基本波形とノイズの合成でできないか?
  • ワンショットの音は1024 wordだと少なすぎる気がする
  • シーケンス入力用のスイッチ(×8とか×16)は明らかにマイコンのピンが足りないのでなんか考える
  • アナログのサイン波発振回路やノイズ生成回路とVCA(マイコンで電圧制御)の組み合わせで、なんちゃってアナログリズムマシンができるかも?