2011-02-02 2 views
0

В следующем коде как может индикатор быть присоединено к звуку и указывают на его прогрессприсоединить ProgressBar

<mx:Script> 
     <![CDATA[ 

      import flash.media.*; 
      import flash.net.NetStream; 

      [Embed(source="new1.mp3")] 
      [Bindable] 
      public var sndCls:Class; 

      public var snd:Sound = new sndCls() as Sound; 
      public var sndChannel:SoundChannel; 
      private var recordingState:String = "idle"; 

      public function playSound():void { 
       sndChannel=snd.play(); 
      } 

      public function stopSound():void { 
       sndChannel.stop(); 
      } 

     ]]> 
    </mx:Script> 


    <mx:Button label="Play" click="playSound()" /> 
    <mx:ProgressBar x="30" y="36" mode="manual" id="audioprogress" label="" 
        labelPlacement="bottom" width="220" fontSize="10" 
        fontWeight="normal"/> 
</mx:Application> 

ответ

1

Вот самый простой способ я знаю, как:

Во-первых, создать две функции в вашем сценарий раздела:

public function get bytesLoaded():Number { 
    if(sndChannel == null) 
     return 0; 

    return sndChannel.position; 
} 

public function get bytesTotal():Number { 
    return snd.length; 
} 

public function clearProgress():void { 
    sndChannel = null; 
} 

Затем измените ваш ProgressBar в режим «опрашиваемого» и установите источник this

<mx:ProgressBar ... mode="polled" source="{this}" /> 

отлично работает для меня :)

Примечания функции должна быть названа bytesLoaded и bytesTotal. Он является частью режима опроса ProgressBar. Если вы действительно хотите «ручной» режим, вам нужно создать таймер, который сложнее, чем этот механизм.

+0

Спасибо, что это сработало, поэтому, если песня снова воспроизводится, как сбросить инициализацию индикатора выполнения снова. – Rajeev

+0

@Rajeev: просто обнуление 'sndChannel' должно сделать это. Также, как только вы снова нажмете кнопку воспроизведения, прогресс вернется к нулю. Если вы хотите, чтобы он вернулся, прежде чем вы нажмете воспроизведение, вы всегда можете переключиться в «ручной» режим ('audioprogress.mode =" manual "'), установите прогресс ('audioprogress.setProgress (0, snd.length)') а затем вернуться к «опросу». Но, если вы это сделаете, убедитесь, что sndChannel имеет нулевое значение или что-то в этом роде, потому что 'ProgressBar' снова начнет задавать вопрос. Если это тот же «sndChannel», то прогресс будет установлен прямо туда, где он был. Надеюсь, что поможет :) –

+0

может понравиться и отредактировать ответ и дать мне код. Спасибо за помощь.Действительно! – Rajeev

 Смежные вопросы

  • Нет связанных вопросов^_^