1

現在、次のコードを使用して、プロジェクトライブラリからオーディオ録音を再生しています。

import flash.media.Sound;
import flash.media.SoundChannel;
import flash.events.MouseEvent;

var sound1:Sound = new audio1();
var sound2:Sound = new audio2();

var mySoundChannel:SoundChannel = new SoundChannel();

function stopSound():void
{
   //This stops all sound in the sound channel. 
   //If there is nothing playing, nothing happens.
   mySoundChannel.stop();
}

//In this function, we create an argument that allows us to tell the function 
//what sound to we want it to play.
function playSound(soundname:String):void
{
   try
   {
      mySoundChannel = this[soundname].play(0, 0);
   }
   catch(error:ReferenceError)
   {
      trace("playSound: That sound name doesn't exist.");
      return;
   }
 }

//Hook up buttons-->
button1.buttonMode = true;
button1.useHandCursor = true;

button2.buttonMode = true;
button2.useHandCursor = true;

button1.addEventListener(MouseEvent.CLICK, button1click);
button2.addEventListener(MouseEvent.CLICK, button2click);

function button1click(evt:Event):void
{
   stopSound();
   playSound("sound1");
}

function button2click(evt:Event):void
{
   stopSound();
   playSound("sound2");
}

ボタンがクリックされたときに、現在再生中のオーディオを一時停止する必要があります。どうすればよいですか?

4

1 に答える 1

0

現在再生中のサウンドを一時停止および再開するには、現在のコードに対して5つのことを行う必要があります。

  1. 現在再生中のサウンドの名前を格納する変数と、オーディオの一時停止位置を格納する変数を作成します。
  2. 一時停止関数を作成します。
  3. 履歴書関数を作成します。
  4. 現在のplaySound関数とstopSound関数を展開して、新しい変数を操作します。
  5. ボタンイベントリスナーを接続します。

ステップ1:

var currentSound:String = "";
var pausePosition:Number = 0;

ステップ2:作成した2番目の変数にオーディオの現在の位置を保存します。mySoundChannel.positionプロパティを使用して、オーディオの現在の再生位置を取得できます。このプロパティは、Number値を返します(pausePosition変数に指定したNumberタイプと一致します)。

function pauseSound():void
{
   //If there's a song to pause...
   if(currentSound != "")
   {
      //Get pause position.
      pausePosition = mySoundChannel.position;
      //Stop the sound directly.
      mySoundChannel.stop();
   }
}

stopSound()を呼び出さなかったことに注意してください。それには正当な理由があります。間もなく、pauseSound()で使用したくないコードをその関数に追加します。

ステップ3:オーディオを再開する関数を作成します。これはplaySound()と同じではないことに注意してください。0(サウンドクリップの先頭)からではなく、pausePositionから再生を開始するように指示しています。

function resumeSound():void
{
   //If there's a song to resume...
   if(currentSound != "")
   {
      //Start playing the current audio from the position we left off at.
      mySoundChannel = this[currentSound].play(pausePosition);
   }
}

ステップ4:ステップ1で宣言した変数を使用しているので、playSound()とstopSound()の動作を調整する必要があります。

playSound()では、サウンド名をサウンドチャネルに渡すだけでなく、サウンド名をcurrentSoundに保存します。

function playSound(soundname:String):void
{
   try
   {
      currentSound = soundname
      mySoundChannel = this[currentSound].play(0, 0);
   }
   catch(error:ReferenceError)
   {
      trace("playSound: That sound name doesn't exist.");
      return;
   }
}

stopSound()では、停止時にcurrentSound変数とpausePosition変数を実際にクリアして、resumeSoundを完全に停止した後にオーディオが開始されないようにする必要があります。

function stopSound():void
{
   //This stops all sound in the sound channel. 
   //If there is nothing playing, nothing happens.
   mySoundChannel.stop();

   //Clear our variables.
   currentSound = "";
   pausePosition = 0;
}

GOTCHA警告:通常、次のコードの2番目の引数(5がある場合)に0以外の整数を渡すことで、オーディオをループさせることができます。

mySoundChannel = this[currentSound].play(0, 5);

上記のコードでは、サウンドは最初から再生され、5回繰り返されます。

ただし、0以外の位置からオーディオを開始している場合、実際に発生するのは、オーディオが最初ではなく、開始した位置でループすることです。

つまり、このコードを使用する場合:

mySoundChannel = this[currentSound].play(1000, 5);

サウンドは5回ループしますが、サウンドがループ内で最初からやり直すたびに、サウンドの先頭(0)ではなく、位置1000から再生が開始されます。

それがあなたの質問に答えることを願っています!

于 2012-11-08T20:35:58.953 に答える