タイトル | 鶴薗賢吾のCocoaはやっぱり!出張版》Cocoa版ムービープレイヤをチェック(3) | カテゴリー | QuickTime, Cocoa, 鶴薗賢吾のCocoaはやっぱり!出張版 |
作成日 | 2001/8/18 13:48:25 | 作成者 | 新居雅行 |
■ ムービーの制御 ( MyMovieController.m ) ムービーが表示できたので、次は、5つのボタンでの再生や制御について調べます。先頭に飛ぶ(goToBeginning:)、コマ戻し(stepBack:)、コマ送り(stepForward:)、末尾に飛ぶ(goToEnd:)は、ほぼ似たような処理になっているのと、NSMovieViewに対応するメソッドがあるため、goToBeginning:のみを代表として説明します。goToBeginning:の処理の中心は、この行です。
メソッド名そのままなのですが、ムービーの再生位置を先頭に戻すメソッドであるgotoBeginningを呼んでいます。前後の行にはムービーの再生状態をキープするための自前のメソッドがあります。
この2つのメソッドの中で扱っている再生状態というのは、「再生しているかどうか」と「再生スピード」の2つです。再生しているかどうかは「isPlaying」で取得できます。逆に、再生と停止は「start:」と「stop:」を使います。再生スピードを得るには「rate」、再生スピードを変えるには「setRate:」を使用します。 ★ NSMovieView : 再生開始 [書式] - (void) start : (id) sender [入力] sender : メッセージの送信者 ★ NSMovieView : 再生停止 [書式] - (void) stop : (id) sender [入力] sender : メッセージの送信者 ★ NSMovieView : 再生中かどうかを取得 [書式] - (BOOL) isPlaying [出力] 返り値 : 再生中 - YES、停止 - NO ★ NSMovieView : 再生速度を変更 [書式] - (void) setRate : (float) rate [入力] rate : 再生速度 ( 1で等速再生、0で停止、負の値は逆転再生 ) ★ NSMovieView : 再生速度を取得 [書式] - (float) rate [出力] 返り値 : 再生速度 ( 1で等速再生、0で停止、負の値は逆転再生 ) NSMovieViewのメソッドは、QuickTime Playerのメニューをそのままメソッドにしたようなものが多く、分かりやすいものばかりですので、リファレンスを見ながらソースを追ってみてください。 ■ 再生ボタンの制御(MyMovieController.m) 再生ボタンは、他のアクションよりもちょっと複雑です。ムービー再生中は、再生ボタンが停止ボタンに変化するためです。再生ボタンは、MainMenu.nibの定義では play:メソッドを呼び出すようになっています。クリックされると、play:メソッドが起動されて、start:メソッドでムービーの再生を行います。
その後の処理で、再生ボタンのタイトルをsetTitle:で「 || 」に変更して、クリックされたときに呼び出すメソッドをsetAction:で「 stop: 」に変更しています。
このように、状態に応じてアクションを切替えているわけです。その逆の動作をstop:メソッドでは行っています。まず、stop:で再生を止めて、resetPlayButtonForMovieStopState:を呼びます。
resetPlayButtonForMovieStopState:は、以下のような処理になっています。これで、再生ボタンに戻ります。
ここでのポイントは、以下のように、動的にアクションを変更できることです。
■ QuickTime Frameworkの使用 続いては、QuickTime Frameworkの使用方法についてです。QuickTime Frameworkを使用するためには、まず「プロジェクトにフレームワークを追加する」という作業が必要です。Project Builderの「プロジェクト → フレームワークを追加...」メニューを実行して、ファイルパネルより「QuickTime.framework」を選択します。 そして、QuickTime Frameworkを使うソースの先頭部分に「 #import
と書かれています。これは、QuickTime自身を初期化するもので、QuickTimeを使用する前に必ず呼ばなければなりません。また、QuickTime Frameworkでは、ムービーを「Movie」という構造体で扱い、関数インターフェイスもMovieを使っています。そのため、NSMovieのインスタンスをそのまま渡すことは出来ません。NSMovieからMovie構造体を取り出す「QTMovie」というメソッドが用意されているので、これを使います。
こうして取り出した、Movie構造体の変数を使ってQuickTime Frameworkを呼び出します。例えば、stepForward:を見てみますと、
という行があります。IsMovieDoneという関数がQuickTime APIで、ムービーを再生し終わって最後のフレームにいるかどうかを返すものです。このように、Movie構造体さえ取得できれば、後は、Cの関数を呼び出すのと同じです。Carbonアプリケーションとも記述は共通ですので、QuickTimeのサンプルコードは、Carbonアプリケーション用のものを参考にすることが出来ます。 QuickTime Frameworkを使用するためのポイントをまとめておきましょう。
[鶴薗賢吾] (続く) | |
関連リンク | Cocoaはやっぱり! |