Bug-org 520417 Redesign nsSound structure
初回投稿日時: 2009-10-18 01:37:25
最終更新日時: 2009-10-18 02:06:29
カテゴリ: Mozilla Core バグ修正
SNS:
Tweet (list)
いい加減に問題が山積していたnsSoundまわりを再設計するというバグです。
当初はシンプルにnsSoundのインスタンスを隠蔽して、全プラットフォーム、別のスレッドで再生することでUI操作を妨害しないように、というシンプルなパッチを出しましたが、色々な理由から却下されました。
rocの提案により、nsSoundの機能をシステム音再生機能とWAVEファイルの再生機能とに分割し、なおかつWAVEファイルの再生はaudio要素を使うように、という話になり、そのように実装しています。
nsISoundは今回の修正により、Gecko 1.9.3(つまりFx3.7以降)ではobsoleteとなりました。互換性のため、引き続きnsISoundはサポートされますが、新たなAPI、定数の追加等は行われません。
nsISound::init()は残っていますが、必要なくなったため、何もしないようになっています。
nsISound::play()はnsISoundPlayer::play()に置き換わりました。
nsISound::PlaySystemSound()に相当する新しいメソッドは用意されていません。nsSound::Play()は各プラットフォームでできるだけ以前の動作と同じ結果になるように新しいインターフェースのメソッドを呼び出しますが、動作がプラットフォーム毎に異なっているため、あまり利用価値はありません。
nsISound::playEventSound()はnsISystemSoundService::playEventSound()に置き換わりました。
nsISound::beep()はnsISystemSoundService::beep()に置き換わりました。
nsISystemSoundService::playAlias()はWindowsと、OS/2でのみサポートされていたサウンドの別名による再生が実装されています。ですが、互換のためのものなので、利用機会はほとんど無いかと思います。
新旧のインターフェースの同名メソッドではパラメータに変更は無いため、利用側のコードは、nsISoundをcreateInstanceしていた部分をnsISystemSoundServiceかnsISoundPlayerのインスタンスをgetServiceで取得するように変更し、nsISoundの定数を使っていた部分はnsISystemSoundServiceに同じ定数を定義しているので、インターフェース名を書きかえるだけで新しいインターフェースを直接使うコードに書きかえることができます。
新しい二つのインターフェースは共にシングルトンで実装されていますので、createInstanceを利用してもgetServiceと同じ結果が返りますが、コードの意味上、よろしくないので、後者を使うようにしてください。
nsISoundは引き続き利用可能ですが、createInstanceを実行するとその度にインスタンスが生成され、さらに、その実行時に新しいインターフェースのインスタンスを取得して、同じメソッドを呼び出すだけなので効率が悪く、利用価値はありません。