ここでは、PCのキーボードを簡易的に鍵盤のようにするパッチを紹介します。
結論からいうと、「厳密にいうと、Pdのキー入力オブジェクトでは、鍵盤の代わりにPCのキーボードを使うことはできない」と考えた方がよいです。
MIDIキーボードを使うと鍵盤表現は楽です。MIDIキーボードが使えたり、MIDIデバイスを自作できれば、音楽をやっている人にも直感的な「鍵盤」が作りやすいです。
参考書やサイトでは、鍵盤の代わりにPCキーボードを使う例があったりしますが、鍵盤に似たものであって、鍵盤に代わることはできません。特に和音を表現しようとすると、キーが連打されてブツブツと音が切れることがあります。
その理由は、PCのキーボード入力は、鍵盤と違って、意図せず連打されてしまいます。しかもこの連打の速度は各PCやOSの設定によって異なります。これはProcessingなどでも同様です。
たとえば、テキストエディタで「a」「b」のキーを同時に押すと、「abababababab」と交互に打ち込まれます。PCは「a」「b」が交互に連打されている(キーが押されたり、離されたりしている)のと区別がつきません。
それでも、音楽作成ソフトなどで鍵盤のように使える機能がありますが、これはUSBのHIDドライバ経由で監視し、同時にどのキーを押しているかを見ています。
PdにPCのキーボード入力を検出するオブジェクトは、[ key ] ・[keyup ]・ [keyname ] の3種類あります。
pdws4-2-1.pdは、[ key ] ・[keyup ]・ [keyname ] の結果をPdウィンドウに表示するものです。
[ key ]は、押されたキーのASCIIコードを返します。
[ keyup ]は、離されたキーのASCIIコードを返します。
[ keyname ]は、キーが押されたか離されたか(0か1)と、キーの名前(シンボル)を返します。
※[ keyname ]は2つの値を出力するので、[ pack ]オブジェクトをつかって、float型とsymbol型の2個データが揃った時に出力されるようにしています。
キー入力でbangを出力する部分のみ、作ってみましょう。
Pdは、bangが出力できれば何とでもできるので、シンプルに考えることができます。
先週の「pdws3-3-3_4file.pd」に、キー入力を組み込んでみます。
「キー入力でbangを出力する」例から、キー入力部分([ key ] ・[ keyup ]・ [ keyname ]のいずれか好きなもの)をコピー&ペーストし、適当な位置に移動します。
bangの出力をサウンドを鳴らすオブジェクトにつなぎます。[ metro ]につないでも面白いと思います。
鍵盤ぽい感じで、短く押したら短い音に。長く押したら長い音になるプログラムです。
[key]や[keyup]を組み合わせても同じようなことができそうですが、[ keyname ]がわざわざPdに用意されているのは、おそらく便利だからだと思います。
[ swap ]や[ mtof ]は、よく使うので覚えておくとよいです。