ピアノ弾けないけど、ヤマハ電子ピアノPiaggero NP-32を買った
電子ピアノを買いました。ピアノなんか弾いたことないけど、USBでPCと繋がるらしいので、何か面白いプログラムが作れるかなぁ…なんて期待しつつ。
YAMAHA Piaggero NP-32
76鍵。フルサイズ(88鍵)と比較すると、低音側の7鍵と高音側の5鍵が無い。奥行きがコンパクト(26cm)な分、横幅は広め(125cm)。底面はフラットではなく、四隅にゴム脚があり、中央手前に補助的な脚が1つ。小さい机やコタツに置いて使う場合、四隅の脚が宙に浮くので安定しません(工夫すれば何とかなるレベル)。専用スタンドは3000円前後するので、私はSPF材で自作しました(1x4を3本使用)。ヘッドフォン用のフック付き。
ヘッドフォンジャックは標準サイズ(6.35mm)。特にノイズは感じません。ボリュームの範囲も不満なしです。消費電力は18W。付属のACアダプタは12Vの1.5A。乾電池(単三6本)でも駆動可能とのこと。でもUSBの5V1Aを昇圧して駆動するのは、さすがに無理かなぁ。
USB TO HOST
USBコネクタ(Bタイプ)が付いてるので、PC(Linuxマシン)に繋いでみました。dmesgはこんな感じ。
[ 425.950012] usb 1-7: new full-speed USB device number 6 using xhci_hcd
[ 426.130676] usbcore: registered new interface driver snd-usb-audio
JavaのMidi系クラスを使って制御できそうです。Midiデバイスの一覧を表示させてみると:
(import javax.sound.midi.MidiSystem
javax.sound.midi.ShortMessage)
(map #(.getName %) (MidiSystem/getMidiDeviceInfo))
;("Gervill"
; "Piaggero [hw:1,0,0]"
; "Piaggero [hw:1,0,0]"
; "Real Time Sequencer")
Piaggeroが2つ認識されているのは、Input用とOutput用に別れてるためです。Output用のデバイスを制御して、音を鳴らしてみましょう。
(let [dis (MidiSystem/getMidiDeviceInfo)
dev (MidiSystem/getMidiDevice (aget dis 2))
rcv (.getReceiver dev)
msg (ShortMessage.)]
(.setMessage msg ShortMessage/NOTE_ON 0 60 50)
(.send rcv msg -1)
(.setMessage msg ShortMessage/NOTE_ON 0 64 50)
(.send rcv msg -1)
(.setMessage msg ShortMessage/NOTE_ON 0 67 50)
(.send rcv msg -1))
devは、com.sun.media.sound.MidiOutDeviceオブジェクトです。setMessageメソッドの引数には、アクション(NOTE_ONは「打鍵しろ」の意味)、ポート(デフォルトが0なのかな?)、音階(60が真ん中のC)、音量(単位不明)を指定してます。アクションは非同期に実行されるようです。ドミソの和音が鳴りました(厳密には少し時差がある)。
サステインペダルは別売り
打鍵の反対が離鍵。ピアノという楽器は、打鍵してから離鍵するまで音が響くようになってるんですね。で、離鍵したあとも響き続けるようにするのが、サステインペダル(ダンパーペダル)というフットスイッチ。これは別売りで、3000円前後。
ハーフペダル(半押し? 半踏み?)対応の機種の場合、ピアノ本体とはステレオプラグ(これも標準サイズ)で接続するようになっています。ステレオプラグには端子が3つあり、先端側からL, R, GNDです。いろんな組み合わせで短絡させてみたところ、LとRをショートしたときだけ残響が確認できました。ハーフペダルはどうするんだろう? 可変抵抗器でも入ってるのかな? いずれにしろ、これも自作できそうですね。