12:44)とある方の依頼で、「iTunesのライブラリをランダムに最初の2秒再生し続けていくプログラム知らない?」というものがきて色々探してみたんだけど、どうもいいのが見つからないので、http://stackoverflow.com/questions/14674517/how-to-set-itunes-11-in-shuffle-or-repeat-mode-via-applescriptとhttp://veadardiary.blog29.fc2.com/blog-entry-4587.htmlを参考にして、AppleScriptで、シャッフルをONにしてランダムに選曲したものを指定した間隔で再生し続けていくものを作ってみました。変数のplayTimeが再生時間、skipTimeは頭から何秒スキップして再生開始するか指定できるようにしてあります。依頼のあったリクエストの場合はplayTimeが2でskipTimeが0というようなことになります。11.0.4でしか確認していないです。英語環境だとうまく動かないかも。iTunesが11以外のバージョンでもうまく動かないかも。使ってみると、iTunesの中で埋もれていた曲が色々とみつかって、けっこう面白いです。開催されている「音楽とアート」展に出品されている、坂本さんと高谷さんの「collapsed」の音部分のプログラムを担当させていただきました。展示されているスペースにも、展覧会のカタログにもあまり詳細が語られていることはないので、ここでは自分が担当したパートでどういうことを行なっているのか説明したいと思います。Proから構成されています。Pro上でMax6とともにLaserコントロール用のプログラムが動いています。僕は、Max6を利用しMIDIピアノの制御、並びにMIDIピアノに仕込んだマイクから来た音の音響処理、そしてその出力の制御を担当していました。orchestraの古舘さんが担当しています。「collapsed」は3つのテキストをもとに動作しています。テキストはプラトンの「国家」の洞窟の比喩の部分、ダニエル・クインの「イシュマエル」、そしてウィリアム・バトラー・イェイツの「自我と魂の対話」の3つを利用しています。3つのテキストはランダムに選ばれ処理されていきます。テキストのデータは、それぞれ行単位、単語単位でデータベースに保持されています。データベースエンジンは、Max6からJavaScript経由で扱えるということでsqlite3を使っています。テキストが選ばれると、テキストから順番に1行取り出されます。ここで、2台のピアノのうちどちらがプライマリでどちらがセカンダリか、ランダムに選択されます。ピアノの関係性が決まると、続いてその行に含まれている単語が順番に取り出されます。単語はさらに音素(phoneme)に分解されます。Dictionaryを利用しています(http://www.speech.cs.cmu.edu/cgi-bin/cmudict)。この辞書は、125,000の単語についてそれぞれ音素に分解したデータを持っています。この辞書を、同じくsqlite3形式に変換して、Max6の中からJavaScriptで呼び出しています。選択された単語を元に辞書を検索し、合致すると音素に分解された文字列が得られるようになっています。今回利用した辞書には84種類の音素が使われていました。それぞれの音素に対して、MIDIピアノで利用している88鍵の範囲のMIDIノートナンバーをあらかじめ固定で割り当ててます。4鍵盤分足りてはいませんが、アルファベットを鍵盤にマップしようとした場合26種類しかなく、また統計的に"e"の文字が最も多く出現するなど傾向がわかっているため、テキストからMIDIへ変換した際に多様性が出てこないということで今回の変換要素には利用しませんでした。単語の音素が得られると、先ほどのMIDIノートの割り当てでまず音程が決まり、それぞれの音素に対して音の長さ(ゲートタイム)と音の大きさ(ベロシティー)が、指定された範囲の中からランダムに選ばれ設定されます。開発段階では、各音素でそれぞれゲートタイムもベロシティーも固定で割り振っていたのですが、その場合特定の単語は特定のフレーズとして表現されるため、どの単語がMIDIで演奏されているかがわかるようになります。坂本さんとしては可能な限り判別できる要素は省きたいとのことで、ゲートタイムもベロシティーもランダムに割り振ることになりました。MIDIデータが決まると、それぞれMIDIピアノに送られます。プライマリピアノへは即時送信されますが、セカンダリピアノへは1分後にデータが送られるようになっています。2台のピアノが対話、輪唱しているような状況になるわけです。実際、演奏されているのは各単語の発音が変換されたものなので。同時に、レーザーのプログラム側に送るデータも準備され、送信されます。レーザー側には単語そのものと、各音素のゲートタイムがOpenSoundControlプロトコルで送られます。各音素のゲートタイムは、レーザー側で壁面に文字が投影される際のタイミングに利用されています。ひとつの単語が処理されると、次の単語について同様に処理が行われます。一行分のデータが処理されると、テキスト内から次の行が取得され、同様に処理が繰り返されていきます。MIDIピアノで単語が演奏されると、ピアノ内に仕込まれたマイクで音が拾われ、Max6の中で音響処理されます。具体的にはEQとリバーブで音を可能な限りぼかすようにしています。処理された音は、天井付近に設置されている8台のスピーカーへ送られ、再生されます。この時、プライマリピアノの音はプライマリピアノに最も近いスピーカーから順に音が出力され、セカンダリピアノの音はセカンダリピアノに最も近いスピーカーから順に音が再生されるようになっています。展示スペース自体にかなり長めの残響特性があるのですが、その後に微かにモワッとした音が空間を駆け巡ります。以上のような仕組みで、あのスペースに置かれている2台のピアノはコントロールされています。ランダムに演奏されているだけ、と感じられるかもしれませんが、上記のように全て選択されたテキストに基づいて演奏されています。この説明を読んでから再度会場に足を運んでいただき、1、2時間ほどソファーに座って体験すると、あるいは関係性がより明確になるかもしれません。昨日はご本人がいらっしゃって、パッチを動かしながら色々と確認。認識の違う部分があり、そこがそこそこインパクトのある部分だったので、ほぼ徹夜で改修してみているんだけど、どうもうまくいかない...。jsオブジェクトがハングするときになにもエラーを残してくれないので、そこが一番つらい...。twitterの方に画像を流した通り、99年のオペラLIFEで使用したヤマハのカスタムメイドMIDIピアノが2代届く。このMIDIピアノをMaxから制御して色々とやるわけだけど、今日はこの調律から始まって、MIDIの制御ができるかどうかの確認、実際にプログラムを動かして音の感じとか微調整していくことになりそう。明日、高谷さんチームの古舘さんがいないので、今日はかなり遅くまでレーザー側との調整作業になりそう。昨日の作業で高谷さんパートでどういう情報が必要なのかを確認したんだけど、変換するマップが決まらないと生成ができないので、とりあえずDBのスキーマ変更やマップのためのテーブルを用意したり、マップさえ決まれば各ノートのdurationを計算してDBに投入するためのスクリプトを書いたりして終わる。UCXを持って行くことに。午前中になんとか会場入りして、音だけで自走できるところまで仕上げつつ、ピアノとご本人の到着を待つ感じになりそう。ちなみに、今回の展覧会のサイトなどにLIFE-fiiの画像が使われているけど、LIFE-fiiの展示は行なわれません(^^;;)。spins」は新作で画像がなかったんでいつの間にかLIFE-fiiの画像が使われていたとのこと(^^;;;)。紛らわしくてすみません...。11:55)今日から「アートと音楽」展の『collapsed』設営開始。いっても、まだMIDIピアノは入っていないので、高谷さんのパートとの調整+今週のスケジュールというか段取り+まだ完全にパッチが出来上がっていないので、その仕上げ作業、といった感じになりそう。パッチは本当は9月中に仕上げるつもりだったのが、こんなギリギリまで作業することになってしまいそこそこ焦っているんだけど、なかなかのらない時に画面に向かっていても作業は進まないもので、そのあたり集中力とかほんと散漫...。10:45)早朝6時から都内某所の林の中でデバイスのテストをしてきました。備えなしに乗り込んだら蚊に刺されまくって大変...。耐えられなくて途中で虫よけスプレーを調達してきてもらったりしていました。arudino用のシールドには新たにopenlog(http://www.switch-science.com/products/detail.php?product_id=389)をのせて、RS-422と両方出記録できるかどうかを試していたんだけど、どうも422の方がうまく出力されてこない。XPと試したけどなぜかなにもデータが流れてこない。手を尽くしても改善しないので、持ち帰って再検証ということに。ちなみに、openlogの方は、商品ページで謳っているような57600なんてスピードは出ず19200で利用している状況。あるけど、一応書き損じは起していないみたい。いずれにしても、このあたりの問題は連休中になんとかしないと間に合わない...。ちなみに、前にテストしていたperlでのデータロガーは取りこぼしもなく問題なく利用できることがわかったので、これを少々いじって本番で利用する予定。それよりも大きな問題は台風。実際の現場は宮崎の諸塚村の山の中なんだけど、羽田から飛び立てるんだろうか...。03:45)来週から某所で森林の中の樹の生体電位を測定する、という作業を行なう。ここしばらくその準備を進めているんだけど、予算が大幅カットされたこともあって色々と準備が追いついていない状況。その予算もようやく先週末に目処がついて、色々と動き出しているんだけど、特に、記録した生体電位を音響化する部分について、まだなかなかこれだ!というものが出てきていない。そこでもんもんとしていても先に進まないので、ひとまず記録のための環境をまずはしっかり準備していくことに。Xで取得できるかテストしているところ。なんでテストしているかというと、Perlでやっているから(^^;)。これで問題がなければ機材的にだいぶ楽になる。問題ないと思うんだけど...。16:53)ものすごく久々なエントリーとなってしまいました...。