見出し画像

Divided Pickupの制作(12)

前回はピックアップ(コイル部)を作成し直したところまで来たが、その先の問題=プログラムの方が進んでいなかった。というのも、開発環境のMaxの方でピックアップからの信号を処理する際に、どうしても高音弦(1、2弦あたり)の信号処理が安定せず、音を一つ弾いているだけなのに目まぐるしく数値が変化する状態であった。原因として考えられるのは(1)高音弦の信号が弱く、それを補うためにゲインをあげるとノイズまで増幅してしまい、信号が乱れる。(2)倍音を拾ってしまい、オクターブ下の波を拾ってしまっている。(3)そもそもそこまでの高音域を拾えない。(4)ピックアップからの信号を増幅しているプリアンプの不具合、、等が考えられるのだが、(4)は配線を繋ぎかえてプリアンプに異常は見られなかった。画面上に表示される数値を見ていると、数字にオクターブごとの変化(約12)が見受けられた。おそらく(2)と(3)の間の問題のような感じである。

試しに現状で、信号(数値)をMIDIのノートナンバーとして、内蔵音源に送ってみると、困ったことが起きていた。Maxでは数値などからMIDIのデータを生成するのに[makenote]を用いるが、トリガーを数値が変化した瞬間に自動で作り出す。すなわち目まぐるしく変化する数値の場合、音も目まぐるしく変化するように発せられてしまう。「ドドド、ミミミミ、ラララララ…」のような感じで音が出る。原因は数値が変化してしまうこと。おそらく一定時間ごとに読み込みと計算が入っているが、その時点すべてにトリガーが出てしまう。これでは忙しないので必要な数値を固定し、他の数値が入ってきても変化しないようにする必要がある。シンセサイザーで言うところの「サンプルアンドホールド」的な感じか。

内蔵音源に繋ぐ

リファレンスで調べると[hold]って言うのがあるな。あーでもちょっと違うか。[maximum]なら最大値を取ってくれそうだが、配列の中の最大値を求めるみたいだ。んー他に何か…そうだ、[peak]がある。ピークインジケーターのピーク。あれなら最大値をホールドしてくれる。問題は、どこでリセットされるかだ。リセットしなければ次の音の周波数が低い場合、その音は取り込まれないことになる。幸いリセットのインレットがあるので何かのタイミングで信号を入れれば良い。ちょうどいいことに、信号のレベルが下がった時にオフになるスイッチが作ってあるので、そこから入れてしまおう。

[peak]

さて実験。概ねばらつきが抑えられてる。ただ、あまり早いフレーズには反応できないようだ。多分、一定時間ごとのピークを取り出していると思われるので、早いフレーズはその間の変動値として吸収されてしまうと思われる。まあ元々ギターシンセとしてではなく、何かをコントロールするためのパラメータとして取り出したかっただけなので、多少の取りこぼしは問題はない。もちろん[peak]以外の方法があるかもしれないので、今後の課題とする。逆に低音弦の方が変に上の周波数を拾っているので、低音弦(特に6弦)の[peak]は要らないかもしれない。

内蔵音源はデフォルトでピアノが設定されている。ただ10chだけはドラムセットになっている。この状態で弦を弾くとPCからピアノの音が鳴り、10弦を弾けばドラムセットの音が鳴る。先に書いたように速いフレーズには着いてこられないので途切れ途切れになるのが欠点だが、連続して「適当に」弦を弾くとピアノとドラムだけのフリージャズのような趣になる。もちろん本当にギターシンセをやるならば、本家ローランドのピックアップを使えばいいだけだ。

さて、これで何をコントロールしよう?シリアルでArduinoと通信して何かを光らせたり、サーボモータで動かすのも可。ProcessingやTouchDesignerで映像的な変化をさせるのも当然できる。楽しみは尽きない。

次回へと続く。


この記事が気に入ったらサポートをしてみませんか?