ぐる式 (貳) より引っ越し作業中.未完.

2007年5月26日土曜日

サウンド再生の終了を見張る

昨日の「停止は捕まえられない (その方法を知らん)」の続き. Java の場合だと,逆パノプティコンである observer パターンを使った LineListener インタフェースを実装すると, update で通知が来るようになる.

サウンドの再生を開始したら、それがいつ終了するかを知る手段が必要になります。(中略) SourceDataLine と Clip の両方に使用できるもう 1 つの方法は、ラインがステータスを変更したときにそのラインから通知を受けるように登録することです。これらの通知は LineEvent オブジェクトの形で生成され、OPEN、CLOSE、START、STOP の 4 種類があります。

[ Java Sound API プログラマーズガイド 第 4 章: オーディオの再生 ラインのステータスの監視 より ]

この dependents を使うやり方は, Squeak だと Listener クラスがすでに作ってあるからサブ・クラスを作るだけで済むんだが,複数の監視者がブラ下がったときに二番目以降がどうしても遅れるんだよな〜.まぁ,昨日のやり方だと一回操作するたびに走査が入るからというのが理由だけど.

探索のタイム・ラグを減らすためには, 1) SoundPlayer の ActiveSounds を触るメソッド群に通知フックを仕込んでおく. 2) 通知フックではなく直接送信する. AbstractSound にストッパを追加する必要がある.これぐらいしか思い付かん.どちらも SoundPlayer に通知機能を付加することになるので,イヤんな感じがする. SoundPlayerListener に任せてみて,どうしても遅れが我慢できんようなら SoundPlayer 自体の改造,ということになるのかな〜 orz.いや〜,視覚よりも聴覚を優先したいという意志の現われということにしとけば遅れを気にせんでもエエんだけどさ (笑).

0 件のコメント:

コメントを投稿