だが机上の面積を大きく専有するつまみのたくさんついたキーボードを使わなくても、ピッチベンドやアフタータッチなどを使ってこれを操作できる筈だ。そのためにはひと工夫必要だ。ちょっと作ってみた。
普通、Novationなどが発売しているツマミのたくさんついたキーボードは、NRPNというMIDIの信号を使って、エフェクトのパラメーターをセットしているらしい。
NRPNというのは、ピッチベンドやノートオン・ノートオフなどの標準的なMIDIの信号以外の信号のことをいう。 MIDIは1980年代からあるとても古い規格だが、当時から将来の拡張性を考え、信号に色々な拡張コマンドが作りこまれている。そのひとつが NRPNだ。
Yoshimi には、NRPNを決まった順番で受け取ると、それをYoshimiのエフェクト値にセットするような仕様がある。
これを何らかの方法でYoshimiに送り込んでやればよいのだが、。一番簡単な方法は、恐らく、つまみのついたキーボードをPCにつないで、それを回すことだ。これをシーケンサーに録音すれば、自動化することもできる筈だ。
だがつまみのついたキーボードを持っていない場合、シーケンサー上でそれを送り出すようにプログラミングしてやらなければならない。だが、Linuxには柔軟にNRPNを送り出すようにプログラムできる機能を持ったシーケンサーがない。
Linuxは、自由に使えて、とても堅牢で柔軟なOSだが、商用OSに比べるとどうしてもソフトウェアが貧弱で苦労することが多い。
先日僕は実に10年ぶりにWindowsを触ってみたのだが、動いているのか動いていないのかはっきりしないふにゃふにゃした使用感は、10年前と何も変わらず、Windowsにはもう戻れない体になってしまったことを思った。
AppImage や Snappy の普及でLinuxのソフトウェア充実にはずみがついてくれれば嬉しいのだが、それはしばらくは難しそうだ。
そこで考えたのは、MIDIパッチベイをつかって、既存の信号(ピッチベンドなど)を NRPNに置き換えて送り出してやればよいだろう…ということだ。
これは簡単にできそうな気がしたが、2018年現在、Ubuntuにはこれを簡単に実現する パッチベイ・ソフトがなかった。かなりの時間をかけて探したが、手軽なパッチベイ・ソフトは全く見つからななかった。
そんななか mididings というソフトを見つけた。これはパッチベイではあるのだが、どちらかというと python をつかった パッチベイを実現するスクリプティング・フレームワークとでもいうべきシステムで、お手軽とは全くの対極に位置するようなシステムだった。
調べてみると、これを使うことで、受け取ったMIDI信号を、リアルタイムでとても柔軟に変更できることがわかった。若干面倒くさいが、これをつかってプログラムを組んでみた。
以下のプログラムを使うと、アフタータッチで yoshimi のインサートエフェクトの1番目のエフェクタのパラメータを操作することができる。
アフタータッチは、ポリフォニック(和音の時、押されている全てのキーの圧力をMIDI信号として送り出す)なので、それをEQなどの単一の値に割り当てるときは、ちょっと工夫が必要だ。今回は、押された全てのキーの圧力を平均して送り出すようにコーディングしてみた。
from mididings import * import mididings.event as _event class NRPNModifier(object): def __init__( self ): self.notes = {} def __call__(self, ev): print ev print ev.type if ev.type == NOTEON : self.notes[ ev.note ] = 0 return ev elif ev.type == NOTEOFF : del self.notes[ ev.note ] return ev elif ev.type == POLY_AFTERTOUCH : # print 'note' + str( ev.note ) self.notes[ ev.note ] = ev.value avg = int( sum( self.notes.values() ) / len( self.notes ) ) print avg return [ _event.CtrlEvent(ev.port, ev.channel, 0x63, 8), _event.CtrlEvent(ev.port, ev.channel, 0x62, 0), _event.CtrlEvent(ev.port, ev.channel, 0x06, 11), _event.CtrlEvent(ev.port, ev.channel, 0x26, avg ) ] else: return ev if __name__ == '__main__': import sys run( Process( NRPNModifier() ) )これは基本的に、ただの python で書かれたプログラムなので、このテキストを何らかのファイルに保存した後で
> python [ファイル名]と実行すればよい。 実行には mididing が必要だ。もしubuntuを利用なら
sudo apt update sudo apt install mididingsを実行して、インストールしておく。
実行すると midiポートが作成されるので、これを patchage などで 必要なデバイスに接続する。
うまくいかなかったら、midisnoop などをつかってデバッグする。
このプログラムの著者は、このプログラムの再配布をライセンス条項 WTFPL v1 によって許可する。
参照:
https://groups.google.com/forum/#!topic/mididings/t8V5MItcfoc