隨筆-193  評論-715  文章-1  trackbacks-0
          Recently, I had spent a lot of time on sound playback of Flash Player 10, but I can't slove a performance issue in none-ActiveX architecture. I will get stutter/machine gun sound when I load a heavy load web page at the same time in Firefox/Chrome/Safari. this case don't happen in IE, and I always get smooth sound.

          The root cause of this issue is used to extract method of Sound class for retract samples, and then play by extracted samples. You may ask me, why don't use play method of Sound class directly? I think I only answer you that it's business requirements.

          Following are my test code:
          package {
              
          import flash.events.Event;
              
          import flash.events.SampleDataEvent;
              
          import flash.media.Sound;
              
          import flash.net.URLRequest;
              
          import flash.system.System;
              
          import flash.utils.ByteArray;

              
          public class Extract {
                  
          private var sourceSnd:Sound = new Sound();
                  
          private var outputSnd:Sound = new Sound();
                  
          private var urlReq:URLRequest = new URLRequest("11k.mp3"); //this file has 575 frames
                  
          //        private var urlReq:URLRequest = new URLRequest("44k.mp3");  //this file has 1150 frames
                  private var samplesCount:uint = 0;

                  
          public function play():void {
                      sourceSnd.load(urlReq);
                      
          //            sourceSnd.play(); // if use source sound to playing, we will not be got machine gun sound.
                      sourceSnd.addEventListener(Event.COMPLETE, loaded); //use this approach, we will be got stutter.
                  }


                  
          private function loaded(event:Event):void {
                      outputSnd.addEventListener(SampleDataEvent.SAMPLE_DATA, processSound);
                      outputSnd.play();
                  }


                  
          private function processSound(event:SampleDataEvent):void {
                      var bytes:ByteArray 
          = new ByteArray();
                      var samplesPerTime:uint 
          = sourceSnd.extract(bytes, 8192);
                      samplesCount 
          += samplesPerTime;
                      
          //            trace("samplesCount:" + samplesCount + ",samplesPerTime:" + samplesPerTime);
                      event.data.writeBytes(bytes);
                      
          //            flash.system.System.gc();
                  }


              }

          }

          You can refer to following test steps for reproduce stutter/machine gun sound issue:
           
          1, Run/debug test application in Firefox, you will get smooth sound at once.
           
          2, Open a new tab in the same window, and open a heavy load web page (for example: http://www.taobao.com)
           
          3, You will get stutter when a heavy load page is loading.

          If you interest in this problem also, we can study it together.
          posted on 2010-03-05 12:15 Robin's Programming World 閱讀(1580) 評論(0)  編輯  收藏 所屬分類: Flex & Flash
          主站蜘蛛池模板: 郁南县| 乐亭县| 普安县| 丰镇市| 阿图什市| 吉木乃县| 绵竹市| 礼泉县| 肇东市| 惠东县| 淳安县| 嘉鱼县| 延津县| 团风县| 绩溪县| 古田县| 远安县| 普兰店市| 连平县| 双城市| 巩义市| 鱼台县| 确山县| 宁津县| 淮滨县| 浑源县| 贵州省| 内江市| 崇仁县| 岳池县| 和龙市| 化德县| 麻栗坡县| 松桃| 虞城县| 达日县| 嘉鱼县| 荔波县| 桑日县| 洱源县| 江口县|