Q:Cocoa ベースのアプリケーションで、現在 NSMovie を使用してサウンドを再生しています。これには、ステータスサウンドや警告音などが含まれています。NSMovie の実装で、常にではありませんが、音飛びや欠落が生じることがあるため、Mac OS X 10.3 にとっては NSSound のほうが適しているのかどうか知りたいのです。 A:そのとおりです!
NSSound は、(今でも一部の処理に QuickTime を使用するため)QuickTime がサポートしているオーディオエンコーディングとファイルフォーマットをサポートしていますが、Mac OS X 10.3 以降では、NSSound が CoreAudio も再生に使用でき、クラスの柔軟性が高くなりました。
ファイルのサポートに注目します。詳細は次のとおりです。NSSound イニシャライザはまず、CoreAudio を使用して、ファイルを初期化しようとします。これが失敗すると、NSSound は QuickTime を利用しようとします。これが失敗すると、NSSound の初期化は失敗となります。
現在、特定の NSSound オブジェクトがエンジンとして CoreAudio または QuickTime のどちらを使用しているかを(NSSound API で)見分ける方法はありません。
ファイルタイプが <AudioToolbox/AudioFile.h> でサポートされていて、エンコード形式にコーデックサポート(常にサポートされているリニア PCM は例外)がある限り、NSSound はCoreAudio AudioFile API でサポートしているファイルに CoreAudio を使用します。
上記の情報を考えると、NSSound は CoreAudio 実装を使用してAIFF、WAVE、NeXT、SD2、AU、および MP3 ファイルを再生し、他のものはすべて QuickTime で再生します。このリストは Mac OS X 10.3 に適用され、将来拡張される可能性があります。
さらに、NSSound オブジェクトが実際に CoreAudio を使用する場合、CoreAudio 実装は非常に軽量であるため、ほとんど音飛びのない(注意を参照)音声だけでなく、QuickTime 実装を大幅に上回るパフォーマンスの向上が得られます。
|
注意: CoreAudio 実装では、サウンドを初期化する際にすべてのサウンドデータがロードされ、すべてのオーディオ変換と(AudioDevice に対する)ハンドオフがリアルタイムスレッドで実行されます。そのため、ページインの必要が生じる非常に大きなサウンドファイルを扱わないかぎり、非リアルタイムスレッドはオーディオ再生にまったく影響を与えずに任意のプロセッサ時間を利用できます。
|
参考資料:
[2004 年 2 月 4 日]
|