2013-11-19 2 views
1

Я играю файлы m4a, которые требуют, чтобы я использовал объект NetStream и хочу управлять звуком с помощью объекта SoundChannel (поскольку это единственный способ, которым я знаю, синхронизировать элемент управления HSlider с аудиофайлом). Моя проблема в том, что я не могу подключить звуковой канал к источнику звука. Обработчик события button1_clickHandler даже не распознает существование объекта SoundChannel. Есть ли способ управлять этим типом аудиофайла с помощью SoundChannel? Если нет, как я могу установить положение HSlider - я пытался использовать HSlider.value, но это почему-то переопределяется.Как управлять файлом m4a

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" minWidth="955" minHeight="600" creationComplete="init()"> 
    <mx:Script> 
     <![CDATA[ 
      private var audioExample:AudioExample_M4A; 
      public function init():void{ 
       audioExample = new AudioExample_M4A(); 
      } 
      private function button1_clickHandler(event:MouseEvent):void{ 
       if(audioExample.soundChannel){ 
        audioExample.soundChannel.stop() 
        trace("Yes") 
       }else{ 
        trace("No") 
       } 

      } 
     ]]> 
    </mx:Script> 
    <mx:Button label="Play/Pause" click="button1_clickHandler(event)"/> 
</mx:Application> 

Вот файл класса AudioExample_M4A.as:

package { 
    import flash.display.Sprite; 
    import flash.events.*; 
    import flash.media.SoundChannel; 
    import flash.media.Video; 
    import flash.net.NetConnection; 
    import flash.net.NetStream; 

    public class AudioExample_M4A extends Sprite { 
     public var soundChannel:SoundChannel= new SoundChannel();; 
     public var temp:String = new String() 

     public var audioURL:String = "badge.m4a"; 
     private var connection:NetConnection; 
     public var stream:NetStream; 

     public function AudioExample_M4A() { 
      connection = new NetConnection(); 
      connection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); 
      connection.connect(null); 
     } 


     private function netStatusHandler(event:NetStatusEvent):void { 
      switch (event.info.code) { 
       case "NetConnection.Connect.Success": 
        connectStream(); 
        break; 
       case "NetStream.Play.StreamNotFound": 
        break; 
      } 
     } 

     private function connectStream():void { 
      stream = new NetStream(connection); 
      stream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler); 
      stream.client={onMetaData:function(obj:Object):void{ 
       trace("metadata: duration=" + obj.duration); 
       } 
      } 
      soundChannel = stream.play(audioURL) as SoundChannel; 
     } 
}} 

ответ

1

Вы не управления NetStream объект с SoundChannel объекта. Это два различные способы воспроизведения медиа и, насколько я знаю, не имеют общей базы.

Для обеспечения слайдера для управления положением указателя, вам нужно сделать следующее:

  • Получить положение ползунка в процентах (slider.position * slider.minimum/slider.maximum в Спарк, не уверен в MX)
  • Get продолжительность песни. Это извлекается через NetStream.onMetaData
  • Вызвать NetStream.seek() с аргументом процента ползунка, умноженным на продолжительность (seek() ожидает значение в секундах). Таким образом, NetStream.seek(duration * positionPercentage)
Смежные вопросы