0

外部の mp3 ファイルを使用して as3 コードでサウンドを再生しようとしています。

だからここに私が使用しているコードがあります:

    private function playSound():void
    {
        trace("loading sound");
        var mySound:Sound = new Sound();
        mySound.addEventListener(IOErrorEvent.IO_ERROR, handleIOError);
        mySound.load(new URLRequest("Menu.mp3"));
        mySound.play();
        trace("playing sound");
    }

    private function handleIOError(evt:IOErrorEvent):void
    {
        //handle error if needed
    }

音楽はまったく再生されません。

「読み込み音」と「再生音」のトレースが表示されるので、コードが実行されています。

mp3 ファイル Menu.mp3 は、プロジェクトの実行に使用される .fla ファイルと同じフォルダーにあります。これは正しいディレクトリですか? 動かしてみましたが、それでも音を再生できませんでした。

どんな助けでも大歓迎です、ありがとう!

4

1 に答える 1

1

役立つかもしれないいくつかの提案があります:

  1. mySound をクラス レベル プロパティとして宣言します。変数はローカルであるため、ガベージ コレクターが時期尚早に変数を破棄している可能性があります。

  2. mySound.play() は SoundChannel オブジェクトを返します。これをクラス レベルのプロパティに格納してみてください。

  3. サウンドをロードする直前に、Event.COMPLETE のサウンドにイベント リスナーを追加します。このイベントが発生した後にサウンドを再生してみてください。そのままでは、ロードされる前にサウンドを再生しようとしている可能性があります。

    プライベート var mySound:Sound;
    プライベート var mySoundChannel:SoundChannel;

    プライベート関数 playSound():void
    {
        mySound = 新しいサウンド();
        mySound.addEventListener(IOErrorEvent.IO_ERROR, handleIOError);
        mySound.addEventListener(Event.COMPLETE, handleLoadCompletion);
        mySound.load(new URLRequest("Menu.mp3"));
    }

    プライベート関数 handleLoadCompletion(evt:Event):void
    {
        mySoundChannel = mySound.play();
    }

    プライベート関数 handleIOError(evt:IOErrorEvent):void
    {
        // 必要に応じてエラーを処理する
    }

編集: docs を確認した
後、提案 3 は必要ないと思います。

于 2013-01-16T05:59:22.157 に答える