電音の工場ブログ

当ブログは…

自作エフェクターシンセサイザ製作のネタや開発覚え書きなど、筆者の電音活動を記録しています。お探しの記事が見つからない方は、検索カテゴリ一覧をご利用ください。

スパマーが来訪すると、ときどきコメントをはてなユーザのみに絞ったり開放したりすることがあります。

2005-05-15

2年前のMIDI同期LFO

|  2年前のMIDI同期LFO - 電音の工場ブログ を含むブックマーク はてなブックマーク -  2年前のMIDI同期LFO - 電音の工場ブログ  2年前のMIDI同期LFO - 電音の工場ブログ のブックマークコメント

id:Chuck:20050510#p1 の記事にRJBさんからトラックバックをいただいたので、ふっと、2年まえの開発ノートを引っ張り出してきた。筆者は物覚えが悪いので、自分でやったことであっても終わるとすっかり忘れてしまう。当時のMIDI-LFOの実現方法をここにまとめておこうと思う。

あ、

MFSH向けにはもっとずっと簡単なアルゴリズム・実装になりますので、製作を考えている方はご安心を。

実現方法

アルゴリズムそれ自体と実装を分けて説明しがたいので渾然としつつも、パラメータとしては以下。

  • LFO周期を512ステップとする
  • MIDIでは 1拍中に24回 F8h が送られる
  • LFOの1周期分の拍数が与えられる

その上で、

  1. F8h間の時間間隔を測定する
  2. LFOのテーブルアドレスをひとつ進めるのに必要な時間を計算する
  3. その時間でタイマ割り込みをかけて、LFOテーブルアドレスを進めつつ、LFO値を出力する
  4. LFO 1周期分の拍数で LFOのテーブルアドレスをリセットし誤差の蓄積を解消する

というのが、基本的なアルゴリズム。

その外側での制御として、Song Start(FAh)、Song Stop(FBh)、Song Continue(FCh) の対処を行っている。

実装

F8h間隔から LFOテーブルアドレス更新周期を算出するのに、若干の演算が要る。具体的には、

 \frac{24}{512} × 拍数 × F8h間隔

拍数で場合わけをしてシフトと加算に分解して実装した。これは実質的には1より小さい数を掛けることになるので、F8間の時間間隔は16ビットタイマで計測し、演算の誤差に対する考慮とした。

AVR AT90S2313 (1Kワード)を gcc で開発し、正弦波*1といくつかのLFO周期のものを実装したが、コード領域が溢れてしまった。そのため AT90S8515 (4Kワード)に切り替えて、LFO波形と周期、初期位相のバリエーションを増やして実装した。ブレッドボード上で試験したところで検討停止、現在に至る。

仕様

なぜ仕様の方が後にくるかというと、AVRの容量がいっぱいになったので、出来高払いの仕様であったから。

  • テンポ保証は 40~240 bpm。実力はもっとあったと思う。
  • LFO周期:1/3, 1/2, 1, 2, 3, 5, 6, 8 拍
    • 三連符・シャッフル、ワルツ対応で 1/3, 3 が必要
    • 6拍はワルツの2小節、8拍は4拍子の2小節
    • Take fiveをやるのに5拍子が必要。
  • 初期位相の変更:0°, 90°, 180°, 270°
  • LFO波形:正弦波、三角波

新版のMIDI同期LFOの構想

|  新版のMIDI同期LFOの構想 - 電音の工場ブログ を含むブックマーク はてなブックマーク -  新版のMIDI同期LFOの構想 - 電音の工場ブログ  新版のMIDI同期LFOの構想 - 電音の工場ブログ のブックマークコメント

RJBさんが MIDI同期LFOの仕様を考えておられる(http://rjb.cocolog-nifty.com/blog/2005/05/midilfo_11ee.html)ので、筆者としては新版の構想を考えてみる。

基本路線は id:Chuck:20050515#p1 を踏襲しつつ、次の変更を加えたいと考えている。

  • 正弦波出力は二重積分法で演算生成する
  • 初期位相は 0°~ 360° 連続可変
  • LFO波形に鋸歯状波を加える

演算によりLFO波形を得るというのは、Rossler や Lorenz*2の Attractor の Chaotic *3LFO へ繋げたいと考えているためだが、実装できるかなぁ?

*1:1/4周期 128ステップのみEEPROM記録、折り返して1周期 512ステップを作った。

*2除算あり。 誤り訂正。

*3http://astronomy.swin.edu.au/~pbourke/fractals/lorenz/

geniegenie2005/05/15 13:53おお楽しみっ! BlackFinの出番かな?

ChuckChuck2005/05/15 15:31Chaotic LFO は Mega AVR での実装を考えています。乗算器を内蔵しているのでできる範囲が広がるだろうと考えています。

RJBRJB2005/05/15 23:16うわぁ~すごいスペックですね!じゃ僕は、手抜きスペックの方で!?
3連系は1拍or2拍(2拍3連)で同期すればまぁいいかと思っていましたが、5拍子までは、眼中にありませんでした(笑)。
向ヶ丘遊園♪向ヶ丘遊園♪・・・

ChuckChuck2005/05/16 06:55AT90S2313 を使っていたものの、拍数を増やしたら溢れてしまいました。じゃ AT90S8515 にしたら、今度はたくさん入るので仕様が膨れました (^^; 厳選して 2313クラス(PICなら 16F627/628クラス)に収めるのが美しいかと。

トラックバック - http://emusic.g.hatena.ne.jp/Chuck/20050515