越後妻有アートトリエンナーレ作業終了

http://www.echigo-tsumari.jp/

日曜から始まった越後妻有アートトリエンナーレに出品している某友人の作業がなんとか終わる。もう、ここ2ヶ月くらいこの作業で週末はなくなり、かなりの確立で新潟に出向いて準備していた状況から脱してほっとする。


某友人の作品は、ビデオインスタレーションなわけですが、今回の僕の役割は作品用の曲を作ることと、2台のDVDプレーヤをフレーム精度で同期するシステムの設計、構築。

音は、当初スタティックで秋の感じのもの、というキーワードをもらい、いくつか既存の曲でピックアップしたところ、Taylor DeupreeのStil.が近いという。早速いくつかサンプルを用意してみる。スタティックとはいえ、ミクロレベルでの微妙な動きが重要だと思い、granularを使って粒子を揺らしていくことに。使ったソフトはAudioMulch(http://www.audiomulch.com/)。

ひとつは以前にWindows 98のスワップファイルから取り出したノイズ音源を使い、もうひとつは新世界の冒頭部分を使ってみる。秋っていうキーワードだったし。で、実際に持っていって聞かせたところ、ゴージャスすぎ、とのこと。もっと冷たく、圧迫感のある不快な音。季節も冬をイメージして、とのこと。

newworld-test2_1.mp3
anotherworld-test_1.mp3


それでは、と、不快な音というキーワードから耳鳴りの音を基本としてみようかな、と。というわけで、16KHzのサイン波をgranularに突っ込んでみる。普通に考えればサイン波をぶった切ったところで大して変わらない気がするけど、切り口が0でないところになるからか、微妙な歪感が出てくる。これに、薄くホワイトノイズにフランジャをかけたものを入れて、さらに低域に何か欲しいなぁ、と同じくノイズをLPFに通して低域のみの状態にしたものとあわせる。正直言って、この音を聴いていると自分の耳鳴りが増幅されてきて、耳鳴りがひどくなる(^^;)。

この音を持っていったところ、思いの他反応がよく、採用となる。もっと時間かかると思っていたので一安心。

sin-2.mp3

さて、続いてシステムの方ですが、2つの映像ソースをフレーム単位で同期再生する、ということで検索してみたところPioneerのDVD-V730という機種に遭遇する。

http://wwwbsc.pioneer.co.jp/product/v730/

RS-232Cもついているのでプレーヤ同氏をつなげば勝手に同期再生できるのかな、と当初思っていたわけだけど、どうも違うらしいことが

https://wwwbsc.pioneer.co.jp/enq_box/dvd-v730/dvd-v730.html

からダウンロードできるマニュアルからわかってくる。結局、制御するのにやはりコンピュータが必要になりそう。あと、同期再生もblackburst信号がないとだめみたいだ。

ひとまず、自分の使える言語(PerlとPHPくらいしかないんですけどね。あ、あとMax/MSPか。)でシリアルコントロールできるものがないかチェックしてみると、

http://search.cpan.org/~bbirth/Win32-SerialPort-0.19/lib/Win32/SerialPort.pm

というPerlのモジュールを見つける。これならできそうだ:)。LinuxなどPOSIX互換向けに

http://search.cpan.org/~cook/Device-SerialPort-1.002/SerialPort.pm

というのもあるんで、開発はWindowsでやって、実際の運用はLinuxでやろうかな、と。podのマニュアルのサンプルコードをコピペしつつ組んでみるがどうも動かない。試しにTeraTermで直接コマンドを入力すると、こっちはちゃんと反応する。もしかして、と思って改行コードを色々と変えてみると、どうも「\n」ではなく「\r」じゃないといけないらしい。テスト用に作ったのがこんな感じ。

#!c:/Perl/bin/Perl.exe

use Win32::SerialPort qw( :STAT 0.19 );

$Configuration_File_Name = "dvd-730.cfg";

$PortObj = tie (*FH, 'Win32::SerialPort', $Configuration_File_Name) || die "Can't tie: $^E\n"; ## TIEHANDLE ##
$PortObj->are_match("\r");
$PortObj->lookclear;

print FH "OP\r"; ## PRINT ##
&myReadIn();

sleep 4;

$PortObj->lookclear;
print FH "CO\r";
&myReadIn();

$PortObj->lookclear;
print FH "RJ\r";
&myReadIn();

close FH || warn "close failed"; ## CLOSE ##
undef $PortObj;
untie *FH; ## DESTROY ##

sub myReadIn {
my $gotit = "";
my $match1 = "";
until ("" ne $gotit) {
$gotit = $PortObj->lookfor; # poll until data ready
die "Aborted without match\n" unless (defined $gotit);
last if ($gotit);
$match1 = $PortObj->matchclear; # match is first thing received
last if ($match1);
sleep 1; # polling sample time
}

printf "gotit = %s\n", $gotit; # input BEFORE the match
my ($match, $after, $pattern, $instead) = $PortObj->lastlook;

if ($match1) {
$match = $match1;
}
printf "lastlook-match = %s -after = %s -pattern = %s\n", $match, $after, $pattern;
}

そのあと、実際に2台のDVDプレーヤをPCにつないで実験したところ、blackburst信号を入れなくても1,2フレームのずれ程度で同期再生できてしまっている。やはり業務用の機材はこのあたりの精度が高いなぁ。まあ、でもやはりフレーム精度で、という要望なので、blackburst信号をどうやって得るかちょっと考えてみる。

普通に検索すると

http://www.imagenics.co.jp/html/products/sg-701.htm

のような業務用の、しかも高価なデバイスしか出てこない。某友人に確認すると、ほとんど予算がもうないらしく、とても購入、あるいはレンタルの代金を望めそうにない。

で、ここで高校時代放送部で強引にやっていたことが役に立つ。blackburst信号というのは、普通にテレビに映すと黒の画面になる。黒のフレームとフレームの間に同期信号が含まれていて、これを映像機材間の基準信号として利用しているわけだ。なので、映像さえ安定していれば、別にわざわざシンクジェネレータの信号を使わずとも、普通の映像信号がそのままblackburst信号代わりに利用できる。

その考えのもと、確か昔安いテストパターンジェネレータが売っていたよな、と検索を開始。見事発見。

http://www.kyohritsu.com/CATALOG/TESTER/av1200_cart.html

こいつをシンクジェネレータとしてDVDプレーヤに入力したところ、見事にフレームシンクされる;)。もちろん、imagenicsなどのものと比べたら安定していないとは思うけど、今回の予算規模+用途としてはこのレベルでOK。

同期のテストもできたし、後はスクリプトを仕上げるだけ。実際に操作するのはちょうど素人な方々なので、ずっと前から少し興味があったPerlTkに手を出してみる。うまくデザインできないけど、一応ボタンとかちゃんと機能するものを用意して納品。

実際にLinuxに載せてテストしてみたところ、どうしてもある程度時間がたつと負荷が極端に上がり、最終的にはボタンなども操作できない状態におちいってしまう。このままでは運用上問題あるので、LinuxをやめてWindowsXPに戻す。WinXPで同じようにテストしたところ、こちらは問題なく動く。ううん。どうしてでしょう。いずれにしても、WinXPで本番も進めるように変更する。

現場で某友人に一通り操作を説明するが、結構なレベルまでわかりやすくして用意したつもりが、それでもまだ難しいという。しょうがないので、コンピュータの操作としては、起動時に電源ボタンを押すだけにして、後は自動的に起動するようにし、終了に関しても時間がきたらプログラムが自ら終了し、OSも時間設定で自動シャットダウンするように仕込む。

無事に動作も確認し、ようやく完了したと思って東京へ戻ったところ、次の日にいきなり電話がかかってきてPCのプログラムが動いていない、という。泣きながら3時間かけて新潟県は松代の現場に出向いたところ、確かに動いていない。シリアルの接続を確認するが特に外れていたりはしていない。

おかしい、と思いつつ色々と確認すると、シリアルの速度が9600から4800に落ちてしまっていることがわかる。確か一度設定したら電源を切っても残るはず、と思っていたのだが…。とりあえず、デフォルトの4800baudにしておけばこれ以上変わることはないだろう、と思いプログラムを若干修正し、なおかつプログラムの状況がもう少しわかるよう色々とprint文を入れて状況把握しやすいようにしておく。こうしておけば、またなにか問題が起きてもどの段階で止まっているかもう少しわかるかな、と。

そんなわけで、滞在時間2時間でまた東京への電車に飛び乗る。疲れました…。

twitter

ウェブページ

Powered by Movable Type 4.261
Creative Commons License
このブログはクリエイティブ・コモンズでライセンスされています。