0

ボタンを使用して簡単なフラッシュ プレイリストを作成しています。私の段階では、曲 1、曲 2、停止、再生のボタンである 4 つのボタンがあります。私はこれのための作業コードを持っていますが、以前のコードは曲ごとに停止ボタンと再生ボタンがあるので、これを動的に停止して再生するように作成したため、修正することにしました。曲ごとに、関数はロードする曲のファイル名を変更します。

ここにキャッチがあるので、最初に曲 (song1 または song2) を選択し、[停止] をクリックします。次に、新しい曲を選択すると、このエラーが表示されます

エラー: エラー #2037: 関数が正しくない順序で呼び出されたか、以前の呼び出しが失敗しました。flash.media::Sound/_load() で flash.media::Sound/load() で、playlist_fla::MainTimeline/songSelect1() で

2 番目の関数を呼び出していないと思います。その中に入れたトレースが見えないためです。

前もって感謝します

var mySound:Sound = new Sound();
var myChannel:SoundChannel = new SoundChannel();
var myTransform = new SoundTransform();
var lastPosition:Number = 0;
var song;

song1.addEventListener(MouseEvent.CLICK,songSelect1);
function songSelect1(e:MouseEvent):void{
    song = "<filenameofthe1stsong>";
    mySound.load(new URLRequest(song));
    myTransform.volume = 0.5;
    myChannel.soundTransform = myTransform;
    lastPosition=0;
    trace(1);
}

song2.addEventListener(MouseEvent.CLICK,songSelect2);
function songSelect2(e:MouseEvent):void{
    song = "<filenameofthe2ndsong>";
    mySound.load(new URLRequest(song));
    myTransform.volume = 0.5;
    myChannel.soundTransform = myTransform;
    lastPosition=0;
    trace(2);
}

btnStop.addEventListener(MouseEvent.CLICK,onClickStop);
function onClickStop(e:MouseEvent):void{
    lastPosition = myChannel.position;
    myChannel.stop();
}

btnPlay.addEventListener(MouseEvent.CLICK,onClickPlay);
function onClickPlay(e:MouseEvent):void{
    myChannel = mySound.play(lastPosition);
    myChannel.soundTransform = myTransform();
}
4

1 に答える 1

0

修正:

アドビによると:

load() が Sound オブジェクトで呼び出されると、後で別のサウンド ファイルをその Sound オブジェクトにロードすることはできません。別のサウンド ファイルをロードするには、新しい Sound オブジェクトを作成します。

そのため、新しいサウンド オブジェクトを作成することが、それを修正する唯一の方法です。

- - - 元の投稿 - - -

フラッシュ設定でデバッグを有効にすると、問題の原因となっている行を正確に特定するのが簡単になります。とはいえ、サウンド変換を 2 回定義することを除けば、コードが間違っているようには見えません。これを試して:

var mySound:Sound = new Sound();
var myChannel:SoundChannel = new SoundChannel();
var myTransform = new SoundTransform();
myChannel.soundTransform = myTransform;

var lastPosition:Number = 0;
var song;

song1.addEventListener(MouseEvent.CLICK,songHandler);
song2.addEventListener(MouseEvent.CLICK,songHandler);
btnStop.addEventListener(MouseEvent.CLICK,onClickStop);
btnPlay.addEventListener(MouseEvent.CLICK,onClickPlay);

function songHandler(e:MouseEvent):void {
    switch (e.currentTarget.name) {
        case "song1":
            songSelect("<filenameofthe1stsong>")
            break;
        case "song2":
            songSelect("<filenameofthe2ndsong>")
            break;
    }
}

function songSelect(songPath:String):void {
    mySound.load(new URLRequest(songPath));
    myChannel.soundTransform.volume = 0.5;
    lastPosition = 0;
    trace("Loading " + songPath);
}

function onClickStop(e:MouseEvent):void {
    lastPosition = myChannel.position;
    myChannel.stop();
}

function onClickPlay(e:MouseEvent):void {
    myChannel = mySound.play(lastPosition);
    myChannel.soundTransform = myTransform();
}
于 2013-02-15T15:32:29.670 に答える