2015年8月6日木曜日

DDSでリズムマシンのKick波形を出力する

「リズムマシンの構想」(http://dad8893.blogspot.jp/2015/05/blog-post_20.html)をそろそろ試作モードに切り替えたくなってきました。

方針としてはTR-808やTR-909をリスペクトして(^q^;

  • 出力できる波形はミニマムでKick、Snare、Hihatの3つで、それぞれ1波形を元に加工
  • KickのパラメータはLevel(音量)、Tone(音の高さ)、Decay(音の長さ)
  • SnareもKickと同様
  • HihatはLevelとDecay
  • シーケンスを打ち込めるようにする

ぐらいから始めてみたいと思います。

まずはVisual Studioでぴゅんぴゅん3号で使っているWaveTableのSin波と下降タイプのノコギリ波のデータを元に、TR-808のKickの様なサイン波Kickを作ってみました。


Visual StudioのProjectはgithubで公開しました。
https://github.com/ryood/DDS_Kick_Test_Visual_Studio
https://github.com/ryood/DDS_Kick_Test_Visual_Studio/blob/master/DDS_Kick_Test01/DDS_Kick_Test01.cpp

とりあえず単純に波形を掛けあわせて振幅変調しましたが、このままではDecayとBPMが分離できないのでなんか手を考えないとダメっぽいです。
→Kick音のDecayを短くしようとするとBPMが上がってしまう。

あくまでもDDSにこだわってDecayのつまみをいじった時にDecay用の波形テーブルを生成する

とか

Decay波形はDecay値をもとに線形補完して振幅変調する値をリアルタイムに生成する

とかがぱっと思いつきますが

予定している波形データは多くても16bitの整数なので32bit CPUならリアルタイムに掛け算してもそんなにコストはかからないのか・・・

このあいだ買ったDSPの本『音遊び!BlackfinDSP基板でディジタル信号処理初体験 2015年 04月号[雑誌]インターフェース増刊 で、固定小数点演算の使い方が載っていたので、固定小数点演算を試してみるのもありそうです。

う~ん、しばらくはVisual Studioで波形生成のエンジン部を考えながら実験かな?

今回は久しぶりにですます調で書いてみました。