見出し画像

作曲ソフトから音楽のビジュアライズにチャレンジする。その1

普通の作曲ソフトと他のソフトを連携させてみたい!

クリエイティブコーダーたちが愛用しているAbleton liveにはAbleton linkやMax for liveといった機能が備わっておりOSCや様々なAPIを駆使して他のソフトと連携しながらライブを行うことが可能です。

クリエイティブな用途のDAWはAbleton一択!みたいな雰囲気に異議を唱えたくなり一般的なDAWと他のソフトを連携させる方法を考えてみました。

今回は、一般的なDAWとクリエイティブコーディングの環境を連携させて音楽のビジュアライズにチャレンジしてみたいと思います。


プラットフォームを選ぶ。

今回はひとまずMacでよく利用されるLogic Pro Xをいじってみました。理由は多くのミュージシャンが利用していることと日本語のチュートリアルがたくさんあるため調べ易そうということが挙げられます。一番の決め手はフリートライアルが90日間利用できることでした。

基本的にはDAWのトラックから外部へMIDIを送れるものであればどんなDAWを使っても大丈夫です。

ビジュアライズにはCycling74のMax8を使いました。

今回使った環境:macOS Catalina 10.15.4 , Logic Pro X 10.5 ,  Max 8.1.3


やることの概要

1.Logicから外部にMIDIを送るトラックを用意して楽曲の情報を送信する。

2.Max側で受け取ったMIDI情報をもとにビジュアルを動かしてみる。


今回作った成果物

こちらに置いておきました。Logicのプロジェクトファイルはzipになっています。


キックの音を拾って映像を動かしてみる。

まずはLogic Pro Xを立ち上げて新規のプロジェクトを作ります。

ここでは最初にソフト音源からドラムマシンを選択してみましょう。

画像1

トラックのタイムラインの中でcontrol を押しながらMidiのリージョンを作成を選択してMIDIを打ち込むための箱を用意します。続いて、commandキーを押しながらマウスが鉛筆マークになった状態でピアノロール上でノートを配置していきます。今回は単純にC1に等間隔にノートを配置してキックを鳴らし続けてみました。1小節で4回打ちます。

画像2

次に外部にMIDIを送るトラックを新たに作成します。

トラックの追加を行う前にMax8を起動します。Max8を起動してからトラックを追加する際に外部MIDIのトラックを選択します。

画像3

追加したトラックのMIDIの送付先はを to Max1に設定します。この状態でドラムのキックのトラックからノート情報の入ったリージョンを丸ごとコピーして外部向けMIDIトラックに貼ってみます。

この状態でトラックを再生すれば外部のMIDI機器に演奏情報を飛ばすことができるというわけです。次にMIDIを受信するためにMAXでパッチを作ります。

画像4

Maxでの画面では[notein "to Max1" 1]というオブジェクトを配置しています。これはMIDIからピッチの情報を取得することができます。ここではto Max1で受けた演奏情報を取り出しています。[join]のオブジェクトでのしたについているメッセージの(36 0)という情報、これはLogicのキックの演奏に合わせてMIDIノートの番号が送られます。C1ならば36、C#1ならば37、D2ならば38というような要領です。演奏に合わせてMax側のメッセージが変化していくのがわかるかと思います。

[notein]のオブジェクトではMIDIのノート情報が入るときに一緒にvelocityの情報も入ってきます。これは音を鳴らす強さの度合いの情報です。0では音が鳴り止んでいる状態を表します。

さて、これでLogicとMaxの間で情報の橋渡しができるようになりました。

ここからMaxのVizzieを利用してビジュアルを作ってみます。あまり丁寧には解説しないですがとりあえず動けばオッケーくらいのサンプルでいこうと思います。

スクリーンショット 2020-05-19 23.39.21

[notein]と[join]の下に配置した[route]オブジェクトはリストの先頭を読み取って対応するアウトレットからリストの要素を出力します。このケースではMIDI noteとvelocityが一緒になったリストを読み取り、対応するアウトレットにデータを渡します。ドラムであれば事前にどの音色がどの note numberかを調べておき、[route]オブジェクトで必要な番号をアトリビュートに書き込んみます。

そして今回はキックの音色を拾いたいのでC1=36番からvelocityをピックアップします。もしも0より大きい値が来たら[line]オブジェクトにメッセージを送るというような仕組みを組んでいます。[line]では指定された秒数をかけて指定された値から値へと間でランプ波を出していくような働きをします。

今回はVizzieの詳しい解説は省きますが興味を持った方はぜひチュートリアルを探してみてください。

次回はDAWのオートメーション機能とMIDI CCを使った連携にチャレンジしてみたいと思います。



この記事が気に入ったらサポートをしてみませんか?