「ミッドジャパン音の芸術祭」が終了し、明日から日常が戻ってくると思われる。
僕はアートラボあいちへの作品展示とワークショップのプレゼンで参加させて貰った。
全体の話はおいておいて、とりあえず今日は展示させて貰ったarrowについて書く。

リポジトリは以下。
https://github.com/yugapanda/arrows

arrowは、鑑賞者同士の位置を、音楽としてマッピングする試みで、その補助として映像を伴っている。
まずは動画を観てもらったほうがわかりやすいと思う。

arrowは人らしきものを検知すると、対応する位置にEffectと呼ばれるオブジェクトを生成する。
Effectには4種類あり、それぞれ

  • Tempo Effect
  • Rhythm Effect
  • Tonal Effect
  • Melody Effect

という名前がついている。

「どのEffectが割り当てられるか」は検知された順番に依存している。

  • 最初に、Tempo Effectが作成される
  • 次に、Rhythm Effectが作成される
  • 3番目に、Tonal Effectが作成される
  • 4番目以降は、いくつでもMelody Effectが作成される

それぞれに名前の通りの機能を持っていて、音楽の要素を以下の方法で決定している。

Tempo Effect

  • 場にTempo Effectしかない場合、テンポは40である
    • その場合、Tempo Effectは40のTempoで16分音符を刻む速さで輪を出すが、音は鳴らない。
  • もし、場にTempo Effect以外のEffectがあった場合、テンポはTempo Effectとその他のEffectの距離の平均を0〜200のテンポにマッピングする。
  • もしMelody Effectが発音する場合、そのMelody Effectに対して白い円をShootする

Tonal Effect

  • Tonal Effectは、その他のEffectとの距離の平均を用いて調声を決定する
  • Melody Effectが場に存在していない場合には、Bassの音だけが鳴る
  • Bassは常にその調の主音である
  • Tonal Effectは他全てのEffectに対してハの字をshootする

Rhythm Effect

  • Rhythm Effectは、Melody Effectとの距離に応じてRhythmを生成する。
  • Melody Effectがない場合には、何もしない
  • Rhythm EffectはそれぞれのMelody Effectとの距離で16パターンのユークリッドリズムを作成する
  • Rhythm Effectは発音するMelody Effectに対し直線をShootする

Melody Effect

  • Melody Effectは、その他全てのEffectとの距離によって長調のどの機能の音(主音、上主音、中音…)になるかとオクターブを決定する
  • 決定された機能は、Tonal Effectがその瞬間に選択している調の音高になる
  • Melody Effectが決定した音高が、Rhythm Effectが決定したリズムで、Tempo Effectが決定したテンポで発音される
  • Melody Effectは発音する際に減衰する色のついた円を広げる

ちょっとルールを複雑にしすぎたなと思うけど、もう少し人間位置推定のアルゴリズムが良くなればそのままでもいいかも、という気もしてる。

技術的な詳細

全体図

全体図

拡張する前提でそこそこ細かく分割して作ったが、結局Arrow-Coreが音楽のルール生成も受け持ってしまった。
(MAXでそのあたりの作り込みをしたくなったが、音楽ルールを生成するためだけの別アプリケーションを挟む気にもなれなかった…)
どうせならArrow-Coreが映像生成ルールまで受け持ってArrow-Graphは描画だけ、というところまでいければもう少し拡張が容易だったかも知れない。
具体的にはプロジェクタとPCを好きなだけ増やす事ができそうな気がする。
今回プロジェクタの画角が狭すぎた事が大きな反省点のうちの1つなので、そのうちその拡張は是非したい。

以上!