メディアオブジェクトの取り扱い

ProjectBuilderのImport Objectメニュー(CProjectBuilder>>importObject)で、外部で作成済みの各種オブジェクトをプロジェクトに取り込むことができます。現在のコードでは以下のファイル拡張子を認識するようです

  • ZIP,SQP ※SQPって何?
  • 画像(GIF,JPEG,PNG,BMP
  • 音声・音楽(WAV,MP3,AU,MID)
  • 動画(MPG,JMV)

読み込んだ結果は、Tweak-Maker-ResourceカテゴリーのCMediaResouceの各サブクラスのインスタンスになります。それをCImagePlayer,CSoundPlayerといったプレイヤ中に取り込み、グラフィカルオブジェクトとして表示します。
以下気づいた点です。

  • ファイルの数が多いとCFileDialogの表示はとても遅いですね。
  • ファイルの拡張子名がハードコードされているのは、Windows作法では不細工ですね。
  • CMediaResourceはいわゆる C-Objectではないのですが、これはTweak作法としてどうなんでしょう?
  • 画像については、CImagePlayerによる表示までちゃんと実装されています。某ビッグイベントにおいてCBook改とともに実戦投入され活躍することと思います。
  • 音声系については、取り込み→再生処理までは実装されていますが、プレイヤ(コスチューム)がまだほとんど実装されていませんので、画面には表示できません。
  • MIDIについては、取り込み処理も再生処理も実装されていません。まだ少しは遊べるところが残っていてほっとしました。
  • 動画系は、取り込み処理しか実装されていないようです。再生処理もプレイヤ(コスチューム)も実装されていません。(実装が空とはいえせっかくCMoviePlayerクラスがあるのに、CSoundPlayerのインスタンスを作っているのはバグでしょうね)
  • 取り込んだメディアオブジェクトを統一的にプレイヤとして表現するという方針がコード中におぼろげに見えていますが、どのようなUIメタファを構成していくのかはまだ示されていません。たとえば Mac由来のデータをアイコンで示すデスクトップをTweak世界上に作ることもできるわけです。一方、従来のMorphic世界では、外部の特定種類のファイルをアプリ(ScorePlayerMorphなど)で直接開くということになっていて、メディアオブジェクトというUIメタファには手をつけていませんでした。

音声再生の例(プロジェクト内のコードを想定):

file := FileStream readOnlyFileNamed: 'ringin.wav'.
aSoundPlayer := self island project importSoundFrom: file. 
file close.
"本来は CSoundPlayerに再生インターフェースが用意されると思われるが、
現状このクラスは何も機能がないので、直接CSoundResourceにアクセスする"
aSoundPlayer value play.