1

AS3/Flash でサウンドを使用することはめったにありません。Flash Pro CS6 を使用していますが、メイン SWF にロードされた外部 SWF に埋め込まれたサウンドへのアクセス、制御 (再生、停止など) の方法がわかりません。

メイン SWF に組み込むと、それらを簡単に制御できます。しかし、外部からロードされた SWR では、あらゆる種類のエラーが発生します。このアプリでは、それらを外部 SWF に埋め込む必要があります。

いくつかの解決策を読みましたが、どれもうまくいかないようです。

Flash CS6 インポート ツールを使用して、soundSegment1.mp3 という mp3 ファイルにサウンドを埋め込み、Flash でアクション スクリプト プロパティ パネルを開いて、クラス名 SoundSegment1 を選択します。次に、クラス コードを編集して、SoundSegment1.as というファイルを作成します。このファイルは、同じディレクトリ内のドキュメント クラス main.as のすぐ隣に保存されます。SoundSegment1 クラスのコードは次のようになります。

package  {

    import flash.media.*;


    public class SoundSegment1 extends Sound 
    {

        public function SoundSegment1 () 
        {
            // no code in here
        }


        public function playSound()
        {
            var soundSegment1:Sound = new SoundSegment1(); 
            var channel:SoundChannel = soundSegment1.play();
        }
    }
}

次に、私の main.as で、次のようなこのサウンドを再生する試みをいくつか行いました。

var fileLocation:URLRequest = new URLRequest(SWFToLoad);
loader.load(fileLocation);
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressListener);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeListener);
loader.contentLoaderInfo.addEventListener(Event.INIT, initListener);

function initListener(e:Event):void // I also placed this code on the completeListener and it didn't work
{
    loader.content.soundSegment1.playSound(); // doesn't work.

}

私は得る:

Line XXX 1061: Call to a possibly undefined method playSound through a reference with static type flash.display:DisplayObject.

または、 Main.as ファイルのどこでも次のようなことができるはずだということも読みました。

var theClass:Class = Class(loader.content.getDefinitionByName("SoundSegment1"));
var theSound:theClass = new theClass();
theSound.play()  //doesn't work either.

私もcompleteListenerを試しました:

var TheClass:Class = e.target.applicationDomain.getDefinition("SoundSegment1") as Class;
var theSound:TheClass = new TheClass();
theSound.play()  //doesn't work either.

私は得る:

ReferenceError: Error #1065: Variable SoundSegment1 is not defined.
    at flash.system::ApplicationDomain/getDefinition()

私は立ち往生しており、これを機能させる必要があります。あなたの助けに心から感謝します。

提供されたヘルプに事前に感謝します。単純にメインの SWF に埋め込んだり、外部から 1 つずつ個別にロードしたりすることはできないため、実際に機能させる必要があります。

再度、感謝します!

4

1 に答える 1

0

Kirupa のユーザー SnickelFritz は、複数のサウンドを使用する場合に非常に強力な、はるかに簡単なコードで素晴らしい回答をくれました。ファイルごとに複数のローダーを使用する代わりに、SWF ごとに 1 つのプリローダーのみを使用できるため、これは素晴らしいことです。

main.as ファイルのコード

http://www.kirupa.com/forum/showthread.php?305098-Playing-a-embedded-sound-in-an-external-swf

package
{
    import flash.display.*;
    import flash.media.*;
    import flash.events.*;
    import flash.net.*;

    public class Main extends MovieClip
    {
        var swf:MovieClip;

        public function Main()
        {
            var l:Loader = new Loader();
            l.contentLoaderInfo.addEventListener(Event.COMPLETE, swfLoaded);
            l.load( new URLRequest("child.swf") );
        }

        private function swfLoaded(e:Event):void
        {
            swf = e.target.content as MovieClip;
            addChild(swf);

            swf.playSound();

        }
    }
}

読み込まれた swf「child.as」のコード

package
{
    import flash.display.*;
    import flash.media.*;
    import flash.events.*;
    import flash.net.*;

    public class Child extends MovieClip
    {
        private var s:Sound1;
        private var sc:SoundChannel;

        public function Child()
        {
            s = new Sound1();
            sc = new SoundChannel();



// All of the following lines are actually optional, if all your graphic  elements are already inside the swf prepared in flash pro

            var g:Graphics = this.graphics;
            g.beginFill(0x666666);
            g.drawRect(0,0,550,400);
            g.endFill();
        }

        public function playSound():void
        {
            sc = s.play();
        }
    }
}

アドビ フォーラムのユーザー「kglad.com」も良い回答をくれました。

http://forums.adobe.com/message/5681137#5681137

于 2013-09-14T18:37:07.180 に答える