Novation LaunchpadとMaxを使ったLEDスペアナの作り方

LED表示ができるMIDIコントローラを使って、スペアナを作ってみました。LEDの光がパッドで拡散されて点灯領域が広くなるので、実物はなかなか見ごたえがあります。まずは次の動画をご覧ください。

Launchpad

使ったデバイスは Novation のMIDIコントローラ Launchpad です。PCとLaunchpadはUSBで接続します。

80個の整列されたパッドのそれぞれにLEDが仕込まれています。私が持っているのは赤緑2色のタイプですが、最新型ではフルカラーLEDになっているようです。次の写真はすべてのパッドをアンバー色(赤と緑の同時点灯)で表示させたところです。

LPdisp01

Launchpadは本来、音楽制作やライブで使われるものです。具体的に説明するよりも、次の動画を見ればよくわかるでしょう。格好良くて、つい何回も見てしまいます。

なお今回の制作は、LaunchpadのLED表示機能をPCからコントロールするだけなので、音楽的才能や演奏能力は全く関係ありません。念のため。

LEDの制御仕様

まずは、LaunchpadのLEDを点灯させる方法を理解する必要があります。

LaunchpadはMIDIデバイスなので、パッドの位置に対応したMIDIノートメッセージを送信することでLEDを制御できます。パッドの位置とMIDIノート番号(音の高さに相当)との関係はプログラミングマニュアルに記載があり、X-Yレイアウトモードの場合は下図のようになっています。

LP01

LEDの色は、MIDIノートのベロシティ値(音の強さに相当)を変えることで制御できます。プログラミングマニュアルでは下のように描かれています。

LP02

従って点灯させたいパッドに対して、対応するMIDIノート番号とベロシティ値でノートオン(音を出す命令)メッセージを送ればよい、ということになります。また、消灯させるときにはノートオフ(音を止める命令)メッセージを送ります。

ここで気を付けないといけないのは、点灯色を変える前にいったんノートオフ信号を送ることです。ノートオン状態のままでベロシティ値の異なるノートオンメッセージを同じパッドに送っても、LEDは反応しません。私は最初、ここでつまずきました。

プログラミング言語 Max

PC側からは、オーディオ信号を周波数スペクトラムに変換して、LaunchpadにMIDIノートメッセージを送信する必要があります。これができるプログラミング言語はCやVisual Basic、pythonなどいろいろあると思いますが、今回使ったのはCycling ’74のMaxです。

Maxはグラフィカルなプログラミング言語で、ブロック化されたモジュールをパッチコードで接続することで、プログラムを作り上げていきます。この記事の執筆時点での最新版はMax7です。

モジュールは音声や映像の処理機能を持つものが多く準備されており、芸術やクリエイティブ分野への応用可能性を強く感じさせます。開発の雰囲気は下の動画がわかりやすいです。

欠点はユーザーの絶対数が少なく、ネットで検索しても情報が(特に日本語で)見つかりにくいことでしょうか。開発に慣れるまでは、付属のヘルプにかなり頼らざるを得ないと思います。付属のヘルプやチュートリアルの内容はそれなりに充実してはいますが、英語です。

制御プログラムを作る

では、Maxで実際に作ったスペアナ処理のプログラム(Maxではパッチャーと呼ばれます)を見てみます。下のスクリーンショットがメインのパッチャーです。

Maxprog01

Maxの言語仕様を知らないと理解困難だと思いますが、処理の流れは次のような感じです。

音声ファイル(.wav)からオーディオ信号を読み込んでゲイン調整し、信号を分岐させて8つのバンドパスフィルタに入力します。フィルタの中心周波数は、スペアナの表示周波数に合わせてあります。図の”reson~”がバンドパスフィルタのオブジェクトです。

一般にこの手のプログラムではFFT(高速フーリエ変換)が多用されますが、このパッチャーではFFTを使う代わりに、通過帯域の異なるバンドパスフィルタの組み合わせを用いました。Maxではバンドパスフィルタがブロック(オブジェクトと言います)1個で実現でき、フーリエ変換で周波数値を換算し直す必要もなく、視認性の良いパッチャーが作れるからです。

帯域を細くしたオーディオ信号は”p disp”と書かれたオブジェクトに入ります。このオブジェクトはサブパッチと呼ばれ、プログラミング言語で言うところのユーザ関数のようなものです。サブパッチでは、LaunchpadでLEDを点灯させるためのMIDIノートメッセージを表示周波数ごとに作成します。中身は後述します。

8つの表示周波数に対応したMIDIノートメッセージは、”p 8to1″と書かれたサブパッチで統合され、順番にMIDI信号として出力されて、LaunchpadのLEDを点灯させます。

“p disp”のサブパッチの中身はこのようになっています。

Maxprog02

サブパッチではまず、一定時間ごとにオーディオ信号のピーク値を検出します。ピーク値を対数に変換して、+3dBごとにLEDの点灯数が1個増えるように設定したマトリクスに入力します。マトリクスには、あらかじめLEDの点灯色に合わせたベロシティ値も設定されています。

Launchpadで表示させるパッドの位置に合わせてMIDIノート番号を計算し、マトリクスのMIDIベロシティ値と組み合わせてMIDIノートメッセージを構築します。9つのMIDIノートメッセージをまとめてメインのパッチャーに戻しています。パッチャーの概要はこのような感じです。

パッチャーをロックしてから”midiout”をダブルクリックしてMIDI出力をLaunchpadに設定します。音声ファイルを再生すると、音に合わせてLaunchpadが光ります。

LPdisp03

実はこのパッチャーは完全ではありません。MIDIノートメッセージを送る頻度が多すぎて、実行中はMaxの操作が重たくなります(Launchpadの表示側は問題ないのですが)。あと少し改良が必要です。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク