やっぱ、だめかー。RJBさんのをそのまま移植もあれなんだけど、いつも、おんぶに抱っこなんでココは一つオリジナルの奴までいかなくても、なんか、ちょっと違うかもなやつをAVRで、という事で、アルゴ堂さん仰る通り、固定小数点のデルタ式、なんか、やってみようかとか。
> これ、ディスプレイに直線を描くときに、よく、お世話になるやつですね。
ええ、馴染み深いアルゴリズムを試してみようかと。
> やはり、固定小数点のデルタを作っておいて、これを毎回加算する方が返って演算が楽だと思います。これなら、割り込み毎に加算するだけ。0.5の補正で丸めれば、最小精度
まさに、20年以上前に色々ご教授いただいたままのテクですね。基本は大事と...。
で、アルゴリズムはともかく、仕様をどうしようかなと。 JRBさんのCVEG(マイコンタイプ)は、「ちなみに」というタイトルで2006年08月06日に投稿いただいてる記事で発表いただいてます。 氏のブログとかその周辺の日付けをチェックすると、EGの最少タイミングは1mS以下からスタートで30秒ぐらいまで引張るらしい。
ミニムーグのパネルの写真を検索してみるとEGのアタックは最初の目盛りが10ms、最大の目盛りは10秒。ただ、これ、ツマミの1、9の位置で、それぞれ、成り行きの最速/最遅ポジションの0と10があるし、いろんなソフトシンセのカタログとか見ると、EGのアタック最速は、1mSかもなあと。 最長については、オレ様シンセ的には15秒も要らない。メロディを演奏する前提なら、5秒もあれば十分かなと。 先日の路上オフの、色々聞いたんだけど、オッショさんが、時間をかけて実際に使いながらトリミングして得たEGの最長時間は4.5秒ほど。所長君に到っては、3秒で十分とのこと。 いや、白状すると、僕も5秒ってのは、行き過ぎたオレ様仕様にならないように膨らませた数字で、気持ち的にはもう永遠に近いぐらい長い気がしてたりもする。いや、効果音に使うのなら、10秒は短いかもしれないけど、メロディ専用シンセなら4秒で十分かな?
RJBさんのソフトとの差別化の為に、EGと、LFOの出力が同時に取れるソフトってどうかなと。いうわけで、LFOのタイミング、どれくらい必要なのか考えてみた。 路上オフのとき、ブレタンさんに、「音楽のわからねえ、技術屋」呼ばわりされて、かなりカチンときたので、ちゃんと音楽に、根拠を求めて数字をだしてみようかなと。
テンポ90BPMで、全音符って0.38Hz(2.4s)。キリのいいところで、0.3Hzなら、3.33s。18pbmの四分音符。テンポ72bpmの全音符。僕の曲ではありえないテンポ200bpmの16分音符は、16Hz(36.5mS)。とりあえず、ビブラートに使うLFOとしては最高はそんなに早くなくてもいよさそうなので、仕様としては0.3Hz(3.3s)から16Hz(63.5ms)かなと。
EGは、むりとしても、せっかくなので、ブレゼンハムのアルゴリズムを生かすなら、16Hz(63.5ms)を大急ぎでステップすると(1ステップごとに出力が1段増えるとして256段だから63.5msを256で割って)248us。周期的に動かすこと考えると、行って戻って1周期だから、この半分で124us。 このタイミングをEGと共用で使えないかなと。最短を1mSとするなら、4サイクルでトップになれば、OK。最長4秒は、32258サイクル0x7E02。符号付16ビットの数字で管理できそう。
音楽的な根拠から得た数字で、ソフトウエア的にも無理なさげな仕様として、EGのタイミングは1msから4s程度、LFOは0.3Hzから16Hzまでとしてみようかな。
|