0

変数のスコープに問題があります。これは簡単に修正できるはずですが、見つかりません。

関数内のサウンド チャネルを介してサウンドを再生する必要があります。次に、サウンド チャネルの位置を読み取る別の関数が必要です。しかし、それを再生する関数の新しい変数のために、それを見ていません。関数の外で再生すると、別の関数から位置を取得できますが、関数でサウンドを開始すると、別の関数はチャンネル位置を読み取ることができません。これを修正するにはどうすればよいですか。

コード

import flash.filesystem.File; 
import flash.filesystem.FileMode; 
import flash.filesystem.FileStream;

var lastPosition:Number = 0; var CrossAudio = new Sound();
CrossAudio.load(new URLRequest("Cross.mp3"));

function playCross() {

    PapaAudioChannel = CrossAudio.play();


}
bt_play.addEventListener(MouseEvent.CLICK, playA);

function playA(event:MouseEvent):void    {   
trace(PapaAudioChannel.position);  // Does not work
/// It can't doesn't recognize the PapaAudioChannel because 
 /// it began playing in another function. 

}

オーディオの位置を確認する 2 番目の関数を取得するにはどうすればよいですか。再生と一時停止ボタンでオーディオを開始する必要があるため、再生は関数で開始する必要があります。

ありがとう

4

1 に答える 1

0

私の知る限り、サウンドは少し遅れて開始される可能性があるため、play() ステートメントの直後にサウンドの位置をトレースすることはお勧めできません。

編集

ところで、PapaAudioChannel定義されているとすれば、どこに定義されているのでしょうか。(これはAS3なのでそうあるべきです)

関数内で var を定義すると、関数の最後で、その関数と共に終了します!

PapaAudioChannelそのため、グローバル スコープで次のように定義することができます。

import flash.filesystem.File; 
import flash.filesystem.FileMode; 
import flash.filesystem.FileStream;

var PapaAudioChannel:SoundChannel; // defines variable

var lastPosition:Number = 0; var CrossAudio = new Sound();
CrossAudio.load(new URLRequest("Cross.mp3"));

function playCross() {

    PapaAudioChannel = CrossAudio.play();

}

bt_play.addEventListener(MouseEvent.CLICK, playA);

function playA(event:MouseEvent):void {   

    trace(PapaAudioChannel.position);

}
于 2013-02-13T13:30:20.403 に答える