Macintosh Developer Online (MDOnline)


2001年1月25日発行号 - 日本語版iTunes公開



少し前に、iTunesのラジオ放送で、RFKというプログレ専門のチャンネルがあることを紹介しましたが、今日になってリストから消えていました。ま、ですが、Trippin’Radioといういかにもという名前のチャンネルがありました(笑)。あと、New Ageというジャンルが増えているのですが、1チャンネルだけで聞くことができません。Progressive Rockというチャンネルがあるのですが、やはりこれも聞くことができません。あと、日本語版のiTunesは文字列の右端が少し欠けるような気がします。何かの設定があるのかもしれませんし、英語版を使っていた影響なのかもしれません…。英語版を使っているユーザ向けの文書を早く参照できるようにしてほしいですね。また、Tech Info Libraryに、iTunes関連の文書なども含めて新たに公開されていますが、これは明日の配信でお届けします。
(新居雅行 msyk@mdonline.jp


iTunes、Disc Burnerの日本語版が登場

2001年1月に開催されたMacworld Expo/San Franciscoにおいて発表された、音楽プレイヤソフトのiTunes、およびCD-R/RW書き込みソフトのDisc Burnerの日本語版が公開された。iTunesは、MP3データの再生はもちろん、音楽CDの再生、音楽CDからのMP3データの作成、そしてMP3プレイヤへのデータのやりとりが行える。また、インターネットラジオのチューナとしての機能もある。さらに、Disc Burnerとの組み合わせで、CD-Rによる音楽CDの作成も可能だ。ただし、対応ドライブは、Apple純正のCD-R/RWドライブとなっている。iTunesの使い方は非常に簡単であるが、AppleのWebサイトでは使っているところをQuickTimeムービで参照することができる。iTunesはフリーで利用できる。
なお、英語版のiTunesをすでに使っている人も多いだろうが、そうしたユーザ向けの文書が用意されている。ただし、執筆時点ではエラーとなって参照できないので内容は確認できない。そこで、何が必要なのかを探ったが、どうやら、英語版のiTunesのフォルダ(あるいはアプリケーション)を削除してから、日本語版をインストールした方がいいようだ。英語版をインストールすると、起動ディスクに、iTunesフォルダができている。その状態で日本語版をインストールしても、アプリケーションは英語版のままで置き換わらない。だが、英語版をフォルダごと削除すれば問題はない。なお、MP3データをiTunesフォルダに入れているのなら、そのデータはもちろん退避させる必要がある。こうして日本語版をインストールすれば、ライブラリなどは英語版のものがそのまま再現される。DVD-ROM搭載のiMacやPower Mac G4 Cubeのユーザは、DVD-ROMのファームウエアのアップデートを行っておくのが良いようだ。
なお、インターネットラジオについては、英語版と同じ局になっており、特に日本向けに新たに局が追加されているということはないようだ。

◇iTunes日本語版
http://www.apple.co.jp/itunes/

◇英語版iTunesをインストールした方へ
http://til.info.apple.co.jp/cgi-bin/artnum?id=100451

◇Disc Burnner 1.0
http://www.apple.co.jp/ftp-info/reference/disc_burner_1.0.html

◇iMac/Cube DVD-ROM Update
http://www.apple.co.jp/ftp-info/reference/dvd-rom_update.html

カテゴリ:周辺機器, アプリケーション


【小池邦人のプログラミング日記】2001/1/23<Carbon Event Managerを使う その5>

今回は、ViewJPEGに「Carbon Event Handler」を実装してみます。まずはアプリケーション自身を対象とするEvent Handlerのインストールからです。その中心は、メニュー選択を処理するルーチンとなります。

2001年1月23日現在、Apple ADCメンバーサイトに「CarbonLib 1.2.5a3 SDK」と「Universal Interfaces 3.4b4」がアップロードされています。CarbonLib 1.2.5a3の方は、リリース内容が記載されているドキュメントを読んでみると、幾つかのバグが取れていることが分かります。ただし、実際に自作アプリケーションにリンクして調べてみたところ、CarbonLib 1.2で未実装だったCarbon Event Managerに関する機能は、未だそのままのようです。あちらこちらから不満が噴出している(特に日本では)CarbonLibですので、Appleには早急なバージョンアップと、次なるGM版の発表を望みたいと思います。

ところで、前回インストールしたタイマールーチンで、どのような状況ならばタイマーによる割り込みが継続されるのかを調べてみました。すると、その状況はMac OS 9とMac OS Xでは異なることが判明しました。Mac OS 9では、メニューを選択している最中(メニューアイテム表示中)はタイマーの割り込みが継続され、タイマールーチが呼ばれます。ところが、マウスドラッグによるウィンドウの移動やリサイズの最中には割り込みは発生せず、タイマールーチの実行もストップしてしまいます。それと比較してMac OS Xでは、メニュー選択に加えてウィンドウの移動やリサイズにおいても割り込みは発生し続け、タイマールーチの実行がストップすることはありません。何故に、Mac OS 9ではダメなのに、Mac OS XではOKなのでしょうか?

例えば、タイマールーチンでウィンドウ上にマウスカーソル座標を逐次描画しているとします。この時、QuickDraw描画ルーチンに必要な情報は、ウィンドウのグラフポート(CGrafPtr)です。Mac OS 9でウィンドウを移動すると、このグラフポートに保存されている情報(PixMapのメモリードレスなど)が変化してしまいます。加えて、移動やズームではウィンドウ枠しか表示されず、そうした最中のQuickDrawによる描画は不可能となります。ところが、Mac OS Xではウィンドウサーバが働いているため、ウィンドウへの描画とモニター(画面)への描画は同等ではありません。QuickDrawによる描画は、まずはウィンドウ領域が保存されているオフスクリーンへと行われ、その後にモニターのフレームバッファへと画像転送が行われるわけです。そのため、Mac OS Xでは、ウィンドウがモニター内を移動している最中でも、QuickDrawの描画対象(CGrafPtr)には変化が無く、それによる弊害も生じないわけです。

さて、話しをViewJPEGへのCarbon Event Handlerの実装に戻します。メニュー選択でCarbon Eventを発生させるのには、各メニューアイテムにコマンド(OSType)を割り振る必要があります。コマンドは、SetMenuItemCommandID()により、ソースコード内で追加しても構わないのですが、通常は‘xmnu’リソースとして準備しておきます。ViewJPEGでは、Appleメニュー(ID=128)とFileメニュー(ID=129)の‘xmnu’リソースを準備しています。加えてID=130というリソースも用意されていますが、これはアプリケーションをMac OS Xで起動した時に使う「Quitを外したFileメニュー」に対応させるためです。

 

私は最初、このID番号のリソースを定義するのを忘れていたため、Mac OS Xでのメニュー選択でCarbon Eventが発生せず、しばらくの間「Mac OS X側のバグなのか?」と悩んでしまいました。みなさんも注意してください。

‘xmnu’リソースで割り振られているコマンドを、Carbon Event Manaerでは「HI Command」と呼びます。こうしたコマンドはメニューアイテムだけではなく、ウィンドウ上のコントロール(ボタンなど)にも割り振ることができます。HI Commandには、作業終了は‘quit’、カットは‘cut ’、OKボタンは‘ok ’といった具合に、システム側でタイプが決められているものもあります。使いたい用途のHI Commandが定義済みかどうかは、Universal Interfacesの「CarbonEvents.h」をチェックしてください。

 

以前にお話した「BasicCarbEvents」サンプルの‘quit’コマンドには、「Standard Handler」(ディフォルト処理)として、Quit用のApple Event Handlerを呼び出す処理が用意されていました。将来的には、定義済みのHI CommandにはStandard Handlerが用意される(もう用意されている?)ことが予想されます。よって、アプリケーションで用意したメニューアイテムと同等のHI Commandが既に定義されていれば、それをそのまま利用するのが安全だと思います。

まず最初の仕事は、Carbon Event Handlerのインストールルーチンを記述することです。ViewJPEGでその仕事を行っているのが、setuUpApplicationEvent()ルーチンです。

 

選択されたメニューアイテムのHI Commandを受け取るためには、EventTypeSpecのeventClassに「kEventClassCommand」を、eventKindに「kEventCommandProcess」を代入し、InstallApplicationEventHandler()でHandler名と伴にインストールします。今回は「おまけ」として、EventTypeSpecに「kEventClassMouse」と「kEventMouseMoved」のペアーも代入し、マウスカーソルが移動した時のCarbon Eventも受け取れるようにしてみました。こうしてインストールした2種類のCarbon Eventを処理するためのEvent Handlerルーチンが、myApplicationEventHandler()となります。

 

ルーチンの先頭では、GetEventClass()とGetEventKind()により、処理分岐に使うためのeventClassとeventKindをEvent情報(EventRef)から得ておきます。マウスカーソルが前の位置から移動したことは、この2つのパラメータに、kEventClassMouseとkEventMouseMovedが返ることで判断できます。そこで、GetEventParameter()でEvent情報からマウスカーソル座標(Point)を抽出し、menteCursor()へと処理を渡します。

 

menteCursor()では、マウスカーソルの形状変化を管理しているのですが、マウス位置が変わった時にしかこの処理は呼ばれませんので、CPUパワーの無駄づかいを防ぐことができます。

同じくメニューが選択されたことは、2つのパラメータにkEventClassCommandとkEventCommandProcessが返る事で判断できます。やはり、GetEventParameter()でEvent情報からHI Commandを得て、それをdoMenu()に渡して処理させます。doMenu()では、この値を使い、Case文で適切な処理へと分岐させます。

 

ここまで来れば、今までのメニュー分岐処理と大差ありません。GetEventParameter()により、どんなeventKindでどのような情報を抽出できるのかは、CarbonEvent.hのコメント文に記載されていますので参照してください。

 

本当ならば、この仕様に関しても詳しいドキュメントが欲しいところですが、Carbon Eventの仕様の不確定さが、正式なドキュメントの発表を阻害しているような気がします(涙)。

次回は、画像ウィンドウに対応したCarbon Event Handlerを実装してみます。Carbon Eventの発生を引き金に実行される、ウィンドウのクローズ、ムーブ、リサイズ、ズームといった処理を調べてみます。
[小池邦人/オッティモ]

関連リンク:オッティモ
カテゴリ:Carbon/CF, 小池邦人のプログラミング日記


Objective-CのプログラムからCarbon APIやC++のライブラリを呼び出す方法

Objective-Cで作成されるプログラムから、CarbonのAPI、あるいはC++で作成したライブラリを呼び出す方法が、サンプルコードとしてAppleより公開されている。もちろん、Mac OS X用のCocoa対応アプリケーションであり、Project Builder、Interface Builderでコードは作成されている。CocoaからCarbonを呼び出すのは簡単で、Carbon.frameworkをインクルードしておき、#include があればよい。そうすれば、CarbonのAPIは関数として使えるようになる。C++のクラスを使えるようにするには少し複雑で、C++のクラスをCのコードとして利用できるようなラッピングを行うヘッダファイルを記述する。その上で、メソッドが呼び出されるようになる。Objective-CはCの関数は呼び出すことができるが、C++とのやりとりができる機能が組み込まれていないということだ。非常に簡単なサンプルで、CarbonやC++の関数を呼び出す方法が説明されている。なお、メニューやウインドウのデザインはInterface Builderで行われている。ラジオボタンでどの言語のライブラリを呼び出すかを指定する形式になっているが、メッセージのやり取りはInterface Builderで定義されている。ラジオボタンのクリックによりHelloControllerのメソッドが呼び出される。そして、ボタンが実行するメソッドをプログラムで指定している。実際に、CarbonやC++の呼び出しを行っているのはSayHello.mというソースの部分である。

関連リンク:Platforms and Tools: Project Builder: Cocoa_With_Carbon_or_C++
カテゴリ:アップルからの開発資料, Carbon/CF, Cocoa


QuickTime Streaming Server Ver.3のPreview 2がリリース

QuickTime Streaming Serverの次期バージョンであるVer.3のPublic Preview 2がリリースされている。Preview1がリリースされたのは、2000年10月だ。Ver.3にはスキッププロテクションとして、QuickTime 5のクライアントの組み合わせで通信状態によるデータ落ちに対する対処がなされるといった機能が組み込まれている。また、通信効率も高くなるように改良された。さらに、Webベースの管理ツールが添付され、利用がよりやりやすくなった。動作OSは、Mac OS X Public Betaだけになっている。使用期限が2001年3月15日までとなっている。Darwin Streaming Serverの方は、ファイル名の変更がないので、Preview2としてはリリースされていないものと思われる。なお、Preview1から2への変更点などは公開されていないようだ。インストール方法の文書に若干の間違いがある。tarコマンドで解凍した後、pkgファイルをダブルクリックする必要があるのだが、文書では.tarファイルをダブルクリックするようにとなっている。

関連リンク:QuickTime Streaming Server 3 Preview 2
カテゴリ:QuickTime, サーバー製品