
先日仕事でAS3サイトを制作したのですが、そのサイトのサウンドオンオフボタンの演出として、SoundMixer.computeSpectrumを使った表現をなんとしてでもやる、というものがありました。しかし実際やってみると、なかなか地雷いっぱいトラブルいっぱいで難しかったです。というわけで、その地雷とその対処法。
若干ですが、久しぶりですね。
FMSで音声再生中はSoundMixer.computeSpectrumが使えない
セキュリティの観点から、SoundMixer.computeSpectrumできないようにしているみたいなのですが、そのためにただ単にFMSで映像のストリーミングをするだけでも、セキュリティエラーが出てしまいます。
そのため、FMSストリーミング中だけは、演出をフェイクのものにすることで、泣く泣くこの問題を回避することにしました。
ただもしかしたら、FMS3(FMSSとか?)で、それを回避するサーバーサイドプログラムを組めば、イケルのかな?とか、思いました。ちょっと自分的には高度すぎる上に今回は仕様も確定して納期も近かったのであまり詳しくは調べなかったのですが。
MovieClipのタイムラインに配置したサウンドや、FLVを、SoundMixer.computeSpectrumが解析しない
MovieClipのタイムラインのどこかのフレームを選択して、Flash CS3の「プロパティ」パネルから、音声を配置しても、その音声は解析されません。さらに、音声付きのFLVをフレームに置いた場合もやっぱりSoundMixer.computeSpectrumが反応しません。
一見Flash CS3の「ムービーのプレビュー」で確認すると、ちゃんと反応しているのですけど、例えばスタンドアロンプレイヤーでSWFを再生させたり、どこかのウェブサーバーに置いて、インターネット経由で見たりすると、反応しないのです。
おそらくこれは、FlashPlayer 9のバグだと思うのです。
ただ、今回のプロジェクトでは、偶然にも別のFLVや音声が、URLRequest経由のストリーミングを、ある地点で再生開始した瞬間から、今までの音も反応するようになったので、おそらく何らかの音声ストリーミングがSWFを走った瞬間から、SoundMixer.computeSpectrumは解析を開始するのだと予想しました。
なので、一番最初のフレームで、ダミー、空の音声ファイルをストリーミングしておいて、SoundMixer.computeSpectrumがいつでも再生できるように準備をさせておくことで対応することができました。
Firefoxなどで、別のタブでYoutubeや何かの音声を流したりしていると、SoundMixer.computeSpectrumは、その音声も含めて解析しようとするので、ドメインの不一致で、サンドボックス障害になる
FACEsでnabeさんが解説されていますが、これはIE6ではおこらず、Firefox2で確認できました。FlashPlayerのプラグイン毎の構造の違いによるものなのでしょうか。まさかこれもFlashPlayerのバグではないでしょうね・・・。
こればっかりはどうしようもありませんでした・・・ポップアップでフルスクリーン表示するコンテンツだったので、そこは起こりづらい現象であるということから、nabeさんのように、やはりtry/catchでフェイクにしました。
以上三点をふまえて
何かとSoundMixer.computeSpectrumが問題になったので、今後しばらくはプロジェクトで使わないかもしれません・・・。
もし何か上の3つ以外の問題点、または関連する情報でもいいので色々何かご存知でしたら教えてください。


コメント (2)
こんにちわ。Facesに記事を書いたものです。
なるほどーFireFoxでしか起こらないんですね。そこまで気づきませんでした。
投稿者: nabe | 2008年02月25日 18:40
Macでは確認していないのですが、Firefoxだけではなく、Netscape系のエンジンを持ったブラウザでなるみたいです。
すごく記事参考になりました。また書いてくださいね!
投稿者: feb19 | 2008年02月27日 10:25