ChuckPolyStep64

DSC09778


PICnomeで使うのにChucKでPolyphonicなMIDI Noteを出力する簡単なStep Sequencerつくりました。
もちろん、本家monomeでも大丈夫だと思う。


ChucKを初めて触ってよく分からんままに作り始めたので、最低限無いと困る機能しか実装してないです。
ファイルはgithubに置いてますので、ここからダウンロードしてくださいまし。


miniAudicleで使うことを前提にしてるので事前にインストールが必要です。原因が分からないけど、鳴らす音源側のMIDI PortがChucKから見えない/音源側からChucKのMIDI Portが見えない組み合わせがある(その場合の方が多いかも・・・)ので、Max上で単純にMIDI NoteをスルーするだけのMIDI Bridgeを入れておいたので必要なら使ってください。何らかの方法でもうちょっとスマートに解決したいけど。

ChucK側から見てMIDI Portのリストの最初のやつに自動で接続するようにしてるので、

    1. Max(必要な場合のみ)
    2. 何か音源
    3. ChucK

の順で起動してください。って、めっちゃ面倒ですね。昔のrewireを思い出す・・・。

MIDIのルーティングをIAC Driver経由にすることでMax不要でした。また、これなら起動順も気にしないで済むので、色々面倒が解決します。(※Macの場合です。)

Audio MIDI設定で以下のように設定しておくだけです。


OSCのPrefixは/chuckになってます。
Add Shred(スクリプトの実行)したときに/sys/prefixで自動で指定するので、Serial側の事前設定は不要です。
MIDIチャンネルは現状Ch.01で固定で済ませてます。
LED0 0〜0 7までの1行目は機能ボタンとして割り当てて、残りの2〜8行のLED列はそれぞれのNoteのキーを割り当ててます。


1行目の機能割り当ては以下です。

LED 0 0 Start/Stop
LED 0 1 割り当て無し
LED 0 2 全部のキーのオクターブ下げ
LED 0 3 全部のキーのオクターブ上げ
LED 0 4 発音のDuration下げ(+10ms)
LED 0 5 発音のDuration上げ(-10ms)
LED 0 6 BPM下げ(+2beat/sec)
LED 0 7 BPM上げ(+2beat/sec)


物理的制限でキーの割り当てが7音階分しかなくて、オクターブ単位で上下するようにしちゃったので、遺憾ながらG、G#、A、A#、Bが永久的に鳴らないという。
1Shotのトリガーを想定してたんでこうなったんですけど、さすがにこれはもう少し細かいSTEPで上下するようにした方がいいかな。。。


以下、補足。
Prefixの変更は

"/chuck" => string prefix; //OSC Message prefix

を適当に書き換えで。


2番目以降のMIDI Portに接続するようにするには

if (!midiOutPort.open(0)) me.exit();

のopen()の引数を変更です。

for(0=>int i; true; i++){ 
   if (!midiOutPort.open(i)) me.exit(); 
   if (midiOutPort.name() == " to MaxMSP 1") break;
  <<<"MIDI device:"+midiOutPort.num()+"->"+midiOutPort.name()>>>;
} 

ってやって、デバイス名でMIDIポートを引っかけてもいいんだけど、デバイス名の頭に半角スペース入ってたりして、混乱するので止めてます。


音源との間にいちいちMax経由するのがイヤだなぁ。というとか、何とかならんのですかね。これ。
こんなことなら普通にMaxで作ればよかった。かも。


ChuckPolyStep64Screen


まぁ、何にせよmeeqが高機能でオススメです(笑


機能をいっぱい盛り込むならmeeqとか64Stepみたいなページ(というか機能の)切り替え必須ですね。
現場で集中して使うときにページ切り替えはミスする余計な要素かと思って今回はあえて避けたけど。自動演奏的な方向には行かないとして、64個のボタンでやりくりするにはページ切り替えは避けられないのかな。
それとも、PICnome256とか?