SWF と同じディレクトリにない Actionscript 3 でサウンドを再生するにはどうすればよいですか?
-
01-07-2019 - |
質問
SWF に多数の外部サウンドを含むプロジェクトがあります。それらを再生したいのですが、サウンド オブジェクトに新しい URL をロードしようとすると、次のいずれかで失敗します。
エラー #2068:無効なサウンド
または、次のようにして ioError を発生させます
エラー #2032 ストリーム エラー
// "http://.."、"file://.."、"//.."、".." というプレフィックスを付けたパスで試行します)
var path:String = "http://../assets/the_song.mp3";
var url:URLRequest = new URLRequest( path );
var sound:Sound = new Sound();
sound.addEventListener( IOErrorEvent.IO_ERROR, ioErrorHandler);
sound.addEventListener( SecurityErrorEvent.SECURITY_ERROR, secHandler);
sound.load(url);
解決
さて、mp3 をディレクトリに入れてテストを行ったところです。 soundTest/assets/song.mp3
次に、別のディレクトリに mp3 を呼び出す swf を作成します。 soundTest/swfs/soundTest.swf
そして私が使用するとき var path:String = "../assets/song.mp3";
その後、エラーなしでコンパイルされます。
実際のディレクトリ構造はどのようなものですか?
他のヒント
完全な URL を入力する場合を除き、http:// または file:// を使用しないでください。
サウンドは、完全な URL または相対 URL から MP3 ファイルをロードできます。URL が正しく有効であることを確認する必要があるだけです。
たとえば、ファイルへのフルパスが次の場合、 http://www.something.com/assets/the_song.mp3, の場合、「/assets/the_song.mp3」というパスが機能します。
FireFox 用の httpfox をダウンロードする必要があります。この SNIFFER を使用すると、ブラウザ内をどのようなデータが流れているかを確認できます。ロード中のファイルをそれぞれのパスを含めて確認でき、POST 変数や GET 変数をスニッフィングすることもできます。これにより、ファイルのプル元が表示され、それに基づいて相対パスを修正できます。
https://addons.mozilla.org/en-US/firefox/addon/6647
重要:
SWF から呼び出されるすべての外部アセットは、SWF ではなく、Web 上にロードされるときにロードされる HTML ファイルに関連します。唯一の例外は、これは AS3 から始まったものですが、FLV は SWF に相対的であり、他のすべてのアセットのように SWF をロードする HTML ドキュメントではありません。これが、スニファーが重要なツールである理由です。私は、スニファー内の URL が奇妙なパスを呼び出していることに気づくまで、しばらく頭を悩ませていました。
以下はサウンドをロードする方法です。
var soundRequest:URLRequest = "path/to/file.mp3"; var s:Sound = new Sound(soundRequest); var sChannel = s.play(0, int.MAX_VALUE); //Causes it to repeat by the highest possible number to flash. //Above starts the sound immediatly (Streaming);
//Now to wait for completion instead, pretend we didnt start it before.
s.addEventLister(Event.SOUND_COMPLETE, onSComplete, false, 0, true);
function onSComplete(e:Event):void { var sChannel = s.play(0, int.MAX_VALUE); //Causes it to repeat by the highest possible }
RTMP と HTTP の両方のプロトコルで、パスは「path/to/mp3:file.mp3」または「path/to/mp3:file」である必要があります。私は思い出せる。両方チェックしてください。