动作脚本,在几个音频按钮上添加暂停按钮

时间:2012-11-08 20:03:09

标签: actionscript-3

我目前正在使用以下代码播放项目库中的录音。

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");
}

单击按钮时,我需要暂停当前播放的音频。我该怎么做?

1 个答案:

答案 0 :(得分:0)

您需要对当前代码执行五项操作才能暂停和恢复当前播放的声音:

  1. 创建一个存储当前播放名称的变量 声音,以及存储音频暂停位置的变量。
  2. 创建暂停功能。
  3. 创建简历功能。
  4. 展开当前的playSound和stopSound函数以使用新变量。
  5. 连接按钮事件监听器。
  6. 第1步:

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

    第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()不同。我们告诉它从pausePosition开始播放,而不是从0开始播放(声音片段的开头)。

    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警告:通常,你可以通过在第二个参数(我有5个)中传递0以外的整数来循环音频:

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

    在上面的代码中,声音将从头开始播放,并重复五次。

    但是,如果您从0以外的任何位置开始播放音频,实际发生的是音频将在您开始的位置循环,而不是在开头。

    也就是说,如果您使用此代码:

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

    声音将循环五次,但每次声音在循环中重新开始时,它将从位置1000开始播放,而不是声音的开头(0)。

    我希望能回答你的问题!