Ableton Liveの各クリップスロットの音量をMaxに連携する。ついでにoFで描画する

  • Posted on: 2015年7月29日
Pocket

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

はじめに

Ableton Liveとは、リアルタイムにセッション感覚でパフォーマンスができる優れたDAWです。
このツールで演奏しながら、同時に音を取得してリアルタイムに映像を生成できると飯が捗るのでは!と思い、掲題のネタに挑戦。
DJやVJの方はよくやる既出テクニックかもしれません。

「クリップスロット」とは、Live上でオーディオインプットやMIDIインプットでフレーズ録音してサンプリングの素材を固めておく単位です。
通常、バスドラ、ハットなど個々のドラム素材ごとに1スロット、ベース、ピアノ、サウンドエフェクトなど個々の楽器系ごとに1スロットを割り当て、1つの楽曲に20スロットくらいは使うでしょう。
ちなみに私は、30分くらいで作曲も録音もするスケッチ感覚の制作スタイル(←)で、8スロットくらいあればまぁ十分ですw
用途としては例えば、個別にバスドラ音を取り出したり、ベース音を取り出したりして、描画時の変数として持っておくとより楽曲に密接に関連したビジュアライズが可能となるでしょう。

MaxやopenFrameworksは、サウンドビジュアライザーはもちろん、メディアアートやパフォーマンスツールを簡単に作成できるすぐれたツールです。これらのツール同士の連携は簡単でありながらとても強力で、組み合わせ次第で無限の可能性を秘めています。

以下説明になります。間違いなどあればご指摘ください。。

音とは

音とは波形です。(今更だけど、音楽は本当にただの空気の波っていうのが不思議。)
デジタル化する際、波形を数値の連なりで記録します。
この数値の連なりを、超細かくとればとるだけ音は解像度を増し、リアルになりますがその分データ量は膨大になります。
この解像度の細かさは、場面に応じてコントロールしていきます。

庶民的な耳を持つ私には、
・サンプルレート(一秒間に集める標本値の数):44,100 Hz
・ビット数(標本値の桁数、つまりきめ細かさ):32 bit
が実用に十分に思われます。
音楽の制作現場はもっとデカいサイズだと思いますが、ライブパフォーマンスはこんくらいで十分でしょう。
なんにせよ場面に応じて設定していくのが望ましいでしょう。

今回は、32bit程度のfloat値が秒間44,100こ、配列の形で複数ツールで連携します。
今回、複数チャンネル持つので、やりとりするデータはもうちょっと小さくした方が安定度が増すかもしれません。
(私のMacBookProではギリ大丈夫でした…)

データの流れ

Ableton Live →[Audio(8ch)]→ SoundFlower →[Audio(64ch)]→ Max →[OSC(文字列)]→ openFrameworks
という流れで音声をやりとりします。
Audioとは、実際は上記の通り、float値の配列(のはず)です。

手順

1.SoundFlowerのインストール

これを使います。
アイコンはダサいですが、マシン内でのチャンネル管理に重宝します。

BufferSizeは512を選択しました。
BufferSizeとは、1回の情報連携で、どれくらいサンプル値を詰め込むかを表します。
小さい方がレイテンシは少なくなるが高負荷で音飛びもしやすくなる。
生演奏の場合、512を基本にし可能な限り下げていくと良さそう。(個人の見解)

2.Liveの設定

環境設定
環境設定にて、「オーディオ出力デバイス」をSoundFlower(64ch)に変更。
「出力設定」でチャンネルを使う数だけ選択。
ch1
(今回はモノラルチャンネルを8個用意すれば事足りました)
sesview
各クリップスロットの「Audio To」を「Ext. Out」に変更して、上で用意したチャンネル番号を割り当てます。

3.Maxのパッチ作成

adc~オブジェクトを使えば、簡単にチャンネル別にオーディオ音を取得できます。
audio1
・Audio Setup(ロック時にadc~をダブルクリック)で、入力をSoundFlower(64ch)に変更します。
・「I/O Vector Size」は、SoundFlowerのBufferSizeと同じに設定します。
・「Signal Vector Size」は、(たぶん)ビット数なので、32とします。

I/Oマッピングを使えば、SoundFlowerの入力chを、adc~のアーギュメントと対応付けることができます。つまり、Live、SoundFlower、Maxで一貫してチャンネルを割り当てることができます。
patch1
今回私が作ったのは、後続のopenFrameworksが描画に専念できるよう、ちょうどいいデータにしてOSCで送信する機能です。
実際単純で以下をしただけです。
・音量の良い感じの見せ方として、平方根をとる
・oFの描画で扱いやすいように、50倍してint型にしておく

4.openFrameworksで描画

ここではOSCで受け取った数字を、直方体の高さと影の長さに代入。
もちろん描画が最もセンスを問われますが、今回もスケッチ(習作)ということでこんなもんで。。

ただおそらく、Maxで送信するデータをoFが全部使っているわけではなく、適当に間引いたりしてよりエコな実装を追求することはまだまだ可能に思います。
奥が深いので、今後の宿題とします。。

最後まで読んでいただきありがとうございました!

Pocket