タイトル鶴薗賢吾のCocoaはやっぱり!出張版》Cocoa版ムービープレイヤをチェック(5)カテゴリーQuickTime, Cocoa, 鶴薗賢吾のCocoaはやっぱり!出張版
作成日2001/8/18 13:51:9作成者新居雅行
■ QuickTimeコールバック
実は、このサンプルコードには、もう1つ重要な意味を持っています。QuickTimeのコールバックをCocoaアプリケーションから利用しているというところです。
再生ボタンがクリックされたら、再生ボタンを停止ボタンに切替え、また、停止ボタンがクリックされたら、再生ボタンに戻していました。しかし、これだけでは不十分です。
ムービーを最後まで再生してしまったときに、再生が止まります。この時にも、停止ボタンを再生ボタンに戻さなければならないわけです。しかし、再生が終わったことを直接的に知る手段は、NSMovieやNSMovieViewには用意されていません。このため、QuickTimeコールバックを使って、ムービーを再生し終わった時に、MyCallbackProcという関数を呼んでもらうようにしています。
MyCallBackProcが呼ばれると、以下のようにresetPlayButtonForMovieStopState:を呼び、停止ボタンが押された時の処理に流れるようになっています。

 MyCallBackProc
   → adjustPlayButtonForMyMovieControllerObject:
     → resetPlayButtonForMovieStopState:

resetPlayButtonForMovieStopState:では、setTitle:でタイトルを「 > 」に変更し、setAction:でアクションを「 play: 」に変更しています。

[ playButton setTitle : @">" ]; // タイトル変更
[ playButton setAction : @selector(play:) ]; // アクション変更

QuickTimeのコールバックについては、この記事で扱うにはやや高度なのと、QuickTime自身の話題になってしまいますので、入り口だけ示すというところにとどめたいと思います。また、Cocoaのスタイルからすると、コールバックを使うよりも、NSMovieViewのデリゲートで実現するのがスマートではないかと思っているのですが、将来的には、NSMovieViewが拡張されてそのようになるかもしれません。

■ サンプルプログラムの改造の勧め
以上で、ムービーの扱いについて、ある程度理解していただけたのではないかと思います。これをベースに改造してオリジナルのソフトウェアを作ってみると、より理解が深まると思います。音量調整のスライダーを参考に、再生速度を変えられるようにしてみるというようなものであれば、簡単に実現できます。多少Cocoaの知識があれば、NSOpenPanelを使ってファイルをユーザーが選択出来るようにもできます。また、NSMovieは、QuickTimeによって駆動されているためMP3の音楽のファイルをオープンすることもできます。NSTableViewにプレイリストを表示して、MP3プレイヤーにチャレンジしてみるのもよいかと思います。
[鶴薗賢吾]
関連リンクCocoaはやっぱり!