2007年05月14日

MIDI -> CV/GATEコンバータ(3) @ 電子工作

MIDI -> CV/GATEコンバータにピッチベンドを仮実装しました。ピッチベンドのLSBを無視して、MSBだけを現在は使っているので、大雑把な形になってます。(^_^;) 最終的にはLSBも使って、更にMIDIでベンド幅の設定をできるようにする予定です。ただ、LSBを使うといっても今のDACだと14bitのピッチベンド情報を全て生かせないので、12bit 2ch出力ではなく、1chをベンドに割り当てた方がよいかなと思ったりもしてます。この場合、MIDIでベンド幅の設定が出来なくなってしまうので、ちょっと不便かなと思ったり・・・。

それから、レガートっぽく弾いた場合の対策も修正しました。SH-101の場合、少しタイミングをずらして鍵盤二つを同時に押し、あとに押した方を離すと最初に押した鍵盤が発音するのですが、これと似たようなことを以前は自作コンバータでやっていました。しかし、これだと鍵盤三つ以上の場合に具合悪いので、バッファーを増やしました。両手の指全部よりも多いバッファーにしたので、演奏上はこれで問題ないはず。ただ、鍵盤を離して他の音が鳴る場合のポルタメントの扱いに悩み中です。オフベロシティに対応した鍵盤を持ってないので、オフベロシティに依るコントロールをするか否か迷い中です。この他にもポルタメントその物の扱いも迷い中です。考えられる設定を全て入れて、ユーザーが設定できるようにしてしまう方法も有りかなと思ったり・・・。

今のところの仕様としてはベロシティで時間当たりの変化量が決まります。つまり、音程が離れると同じベロシティでも時間が長くなることになります。その他にも、変化の仕方をテンポに同期させられるようにしようかなと思っています。テンポに同期すれば、ポルタメントを絡めたシーケンサーのデータ作りが楽になると思います。ベロシティで時間当たりの変化量を決定し、その基準時間をテンポに依存させる予定です。MIDIクロックだと粗いので、少々心配なのですが、滑らかにする方法も一応考えているので、何とかなるでしょう。

それにしても、開発環境のバグなのか、癖なのか分かりませんが、配列の扱いに悩まされました。当初、a[64]みたいな形で領域確保していたのですが、他の変数の領域に浸食しているのか、挙動不審になり、それが配列の確保した領域が大きすぎだった事になかなか気付きませんでした。結局a[50]までが限界と分かり、解決したのですが、この中途半端な数値は理解できません。

この妙な仕様に気付くまで試行錯誤してしまったので、ソースが可成り汚れてしまいました。何処かで綺麗に書き直さないといけないですね。徐々に複雑になってきているので、このままだと整理が出来なくなってしまいます。(^_^;)

閲覧数: 5212 / はてなブックマークusers

blog comments powered by Disqus

関連日記

アマゾン広告

この日記ページは閲覧数などの条件に応じて、閲覧制限を行っています。他からリンクしていただいても、そのリンクから辿った閲覧者が当ページの内容をご覧頂けない場合があります。ご了承下さい。

▼日記検索

Mac

Shade

3D

Flash

ゲーム

ウェブ

音楽

映画

デジカメ

Windows

Linux

携帯電話

テレビ

広島

電子工作

iOS

▼ 最近のトラックバック

▼ランキング

▼関連サイト