タイトル | 鶴薗賢吾のCocoaはやっぱり!出張版》Cocoa版ムービープレイヤをチェック(4) | カテゴリー | QuickTime, Cocoa, 鶴薗賢吾のCocoaはやっぱり!出張版 |
作成日 | 2001/8/18 13:49:56 | 作成者 | 新居雅行 |
■ 情報ウィンドウ Movie Propertiesウィンドウには、現在表示しているムービーの情報を表示していますが、これらの情報は、NSMovieやNSMovieViewから得ることは出来ません。そのため、こちらでもQuickTime APIを呼び出しています。awakeFromNibの一番最後の行に、以下の記述があります。
setMoviePropertyWindowControlValues:メソッドで、Movie Propertiesウィンドウの中身を順に初期化しています。各項目は、以下の関数もしくはメソッドを呼んで初期化を行っています。
これらを順に見ていきましょう。ただし、トラック数の取得は、専用のQuickTime APIを呼んでいるだけですので省きます。 ■■ 自動再生かどうかの取得 QTUtils_IsAutoPlayMovie ( QTUtils.c ) QuickTimeムービーの中には「ユーザーデータ」という、アプリケーション固有のデータを格納する場所があります。そのデータの中にQuickTime Playerが使っているいくつかのデータがあり、ムービーを開いたときに自動的にムービーを再生開始するかを決める「play」という名前のフラグがあります。この関数では、そのフラグを取得しています。 GetMovieUserDataでユーザーデータ全体を取り出して、GetUserDataItemで、その中から「 play 」という名前のデータを取り出しています。
■■ メディアタイプリストの取得 buildTrackMediaTypesArray: ( MyMovieController.m ) メディアタイプリストは、buildTrackMediaTypesArray:メソッドで作成し、結果は、MyMovieControllerクラスのmovieTrackMediaTypesArrayという文字列の配列に格納されます。メディアタイプリストの表示は、NSTableViewというテーブルを表示するためのViewを使用していますが、ここも簡単に説明しておきます。Interface Builderでは、Cocoa-Tabulation Views PaletteにNSTableViewがあります。 NSTableViewは、「dataSource」というアウトレットを持っていて、そこに接続されたインスタンスにメッセージを送り、表示するためのデータをもらうという仕組みになっています。SimpleCocoaMovieでは、このデータの供給を行っているのはMyMovieControllerです。Interface Builderで、NSTableViewをダブルクリックして、InfoウィンドウのConnectionsのOutletsの中にあるdataSourceをクリックすると、MyMovieControllerに接続されていることが分かります。 このdataSourceは、2つのメソッドを実装する必要があります(テーブルの内容を編集する場合は3つ)。
numberOfRowsInTableView:は、行数を配列の要素数を返すcountメソッドを使って行数を返しています。
tableView: objectValueForTableColumn: row:は、行の指定を配列のインデックス値として、配列からobjectAtIndex:を使って、配列の中身、つまりメディアタイプの文字列を返しています。
テーブルの表示については、触りだけですが2つのメソッドを用意するだけで実現できるわけです。 NSTableViewへのデータ表示についてのポイントをまとめると、以下のようになります。
■■ タイムスケールを文字列で取得 GetMovieTimeScaleAsString ( QTUtils.c ) QuickTime APIのGetMovieTimeScaleで、ムービーのタイムスケールを取得します。この数値をMakeMovieTimeScaleDisplayStringという自前の関数を使ってC文字列に変換します。そして、Cocoaとやり取りをするために、C文字列をstringWithCString:を使ってNSStringに変換しています。
★ NSString : C文字列からNSStringを生成する [書式] + (id) stringWitCString : (const char *) cString [入力] cString : C文字列 [出力] 返り値 : 変換されたNSStringの文字列 文字列のやり取りについてのポイントは、以下の通りです。
■■ ムービーの長さを文字列で取得 GetMovieDurationAsString ( QTUtils.c ) GetMovieDurationとGetMovieTimeScaleがQuickTime APIで、ムービーの長さとタイムスケールを取得します。割り算をすることで秒単位の値になりますので、これをMakeMovieTimeDisplayStringという自前の関数を使って「00:00:00」のフォーマットのC文字列に変換しています。先程と同様に、NSStringに変換しています。
■ タイムスケール 「 タイムスケール 」という言葉を何度か使ってきましたが、これについて説明しておきます。これは、QuickTimeの用語なのですが、QuickTimeで時刻や時間を表す場合、このタイムスケールを基準にした値を使います。サンプルで使用しているMovieFile.movでは、600というタイムスケールの値を持っていますが、これは、1/600秒を1とする時間軸をこのムービーが持っていることを表します。タイムスケールの値が大きいほど、精度の高い時刻指定が可能になり、逆に小さくすると、長い時刻指定を行うことが出来ます。 先程出てきましたGetMovieDurationというQuickTime APIでムービーの長さが得られますが、MovieFile.movは、1800という値になっています。これをタイムスケールの600で割ることで3秒のムービーであることが分かります。 [鶴薗賢吾] (続く) | |
関連リンク | Cocoaはやっぱり! |