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
を実行するとその度にインスタンスが生成され、さらに、その実行時に新しいインターフェースのインスタンスを取得して、同じメソッドを呼び出すだけなので効率が悪く、利用価値はありません。