feb19.jp

Nobuhiro Takahashi
Designer / Engineer

AS3のSoundMixer.computeSpectrumの問題点と対処法

AS3のSoundMixer.computeSpectrumの問題点と対処法

先日仕事で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つ以外の問題点、または関連する情報でもいいので色々何かご存知でしたら教えてください。

Tweet Share Bookmark

Navigation

prev: AS3でAS2のMovieClip.enabledはどうなった
next: 数学でつまずくのはなぜか

Recently Entries