·您当前的位置:首页 > 技术教程 > AS2与AS3技术 >

[AS3]AS3.0加载外部MP3文件解决ID3信息乱码的问题代码示例

时间:2012-08-28 10:44baidu.com
[AS3]AS3.0加载外部MP3文件解决ID3信息乱码的问题代码示例,AS3加载外部MP3文件,需要显示ID3信息时,很多都是乱码。解决的办法是添加一个函数。

AS3加载外部MP3文件,需要显示ID3信息时,很多都是乱码。解决的办法是添加一个函数。

  1. package  
  2. {  
  3.  import flash.display.Sprite;  
  4.  import flash.events.Event;  
  5.  import flash.events.MouseEvent;  
  6.  import flash.media.Sound;  
  7.  import flash.media.SoundLoaderContext;  
  8.  import flash.net.URLRequest;  
  9.  import flash.utils.ByteArray;  
  10.  public class LoadSoundExample extends Sprite  
  11.  {  
  12.   private var _sound:Sound;  
  13.   private var dian:Array;  
  14.   private var urlReq:URLRequest;  
  15.   private var mp3URL:String = "the dawn.mp3";  
  16.   private var buffer:SoundLoaderContext;  
  17.   public function LoadSoundExample()  
  18.   {  
  19.    urlReq = new URLRequest(mp3URL);  
  20.    _sound = new Sound();  
  21.    buffer = new SoundLoaderContext(50000);  
  22.    _sound.load(urlReq,buffer);  
  23.    _sound.play();  
  24.    _sound.addEventListener(Event.ID3, onID3);  
  25.    playBtn.addEventListener(MouseEvent.CLICK, clickHandler);  
  26.    pauseBtn.addEventListener(MouseEvent.CLICK, clickHandler);  
  27.    addEventListener(Event.ENTER_FRAME, onEnterFrames);  
  28.   }  
  29.   private function onID3(e:Event):void  
  30.   {  
  31.    _txt.text += EncodeUtf8(_sound.id3.songName+"\n");  
  32.    _txt.text += EncodeUtf8(_sound.id3.artist + "\n");  
  33.    _txt.text += EncodeUtf8(_sound.id3.album + "\n");  
  34.    _txt.text += EncodeUtf8(_sound.id3.year + "\n");  
  35.   }  
  36.   private function onEnterFrames(e:Event):void  
  37.   {  
  38.    var barWidth:int = 200;  
  39.    var barHeight:int = 5;  
  40.    var loaded:int = _sound.bytesLoaded;  
  41.    var total:int = _sound.bytesTotal;  
  42.    if (total > 0)  
  43.    {  
  44.     graphics.clear();  
  45.     graphics.beginFill(0xffffff);  
  46.     graphics.drawRect(10, 10, barWidth, barHeight);  
  47.     graphics.endFill();  
  48.     var percent:Number = loaded / total;  
  49.     graphics.beginFill(0xff0000);  
  50.     graphics.drawRect(10, 10, barWidth * percent, barHeight);  
  51.     graphics.endFill();  
  52.    }  
  53.   }  
  54.   private function clickHandler(e:MouseEvent):void  
  55.   {  
  56.    switch (e.target.name)  
  57.    {  
  58.     case "playBtn":   
  59.      _sound.play();  
  60.      break;  
  61.     case "pauseBtn":   
  62.      _sound.close();  
  63.      break;  
  64.    }  
  65.   }  
  66.   private function EncodeUtf8(str:String):String  
  67.   {  
  68.    var oriByteArr:ByteArray = new ByteArray();  
  69.    oriByteArr.writeUTFBytes(str);  
  70.    var tempByteArr:ByteArray = new ByteArray();  
  71.    //trace(str);  
  72.    for (var i = 0; i < oriByteArr.length; i++)  
  73.    {  
  74.     if (oriByteArr[i] == 194)  
  75.     {  
  76.      tempByteArr.writeByte(oriByteArr[i + 1]);  
  77.      i++;  
  78.     }  
  79.     else if (oriByteArr[i] == 195)  
  80.     {  
  81.      tempByteArr.writeByte(oriByteArr[i + 1] + 64);  
  82.      i++;  
  83.     }  
  84.     else  
  85.     {  
  86.      tempByteArr.writeByte(oriByteArr[i]);  
  87.     }  
  88.    }  
  89.    tempByteArr.position = 0;  
  90.    return tempByteArr.readMultiByte(tempByteArr.bytesAvailable, "chinese");  
  91.   }  
  92.  }  

 

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器