SWF と同じディレクトリにない Actionscript 3 でサウンドを再生するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/108276

質問

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」である必要があります。私は思い出せる。両方チェックしてください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top