您的位置:首页 > 其它

flex 录音 可转mp3 可提交服务端 无需fms

2013-10-09 00:08 162 查看
http://blog.csdn.net/zj7758/article/details/8504089

<?xml version="1.0" encoding="utf-8"?>

<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"

        xmlns:s="library://ns.adobe.com/flex/spark"

        xmlns:mx="library://ns.adobe.com/flex/mx"

        initialize="windowedapplication1_initializeHandler(event)">

 <fx:Script>

  <![CDATA[

   import com.adobe.audio.format.WAVWriter;

   

   import fr.kikko.lab.ShineMP3Encoder;

   

   import mx.events.FlexEvent;

   import mx.rpc.events.ResultEvent;

   import mx.rpc.http.HTTPService;

   private var _loader:URLLoader; 

   

   protected function windowedapplication1_initializeHandler(event:FlexEvent):void

   {

    init();

    

//    registerClassAlias("com.gameabc.game.voice.controller.vo.LoadUpVoiceVO",LoadUpVoiceVO);

//    

//    _loader = new URLLoader();  

//    _loader.dataFormat = URLLoaderDataFormat.BINARY;  

//    _loader.addEventListener(Event.COMPLETE, loaderHandler);  

//    _loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, loaderHandler); 

//    _loader.addEventListener(IOErrorEvent.IO_ERROR, loaderHandler);  

//    

//    // post二进制数据给服务端

////    var vo:LoadUpVoiceVO = new LoadUpVoiceVO;

////    vo.value="testtesttestValue";

////    vo.time=123456;

////

////    var aa:ByteArray = new ByteArray();//数字型数组

////    var aaStr:String = "aaaaaaaaaaaaaaaaaaaa";

////    aa.writeUTF(aaStr);

////    var bb:ByteArray = new ByteArray();//字符串型数组

////    var bbStr:String = "bbbbbbbbbbbbbbbbbbbbbb";

////    bb.writeUTF(bbStr);

////    var value:Array = [aa,bb];

////    vo.byteArrays = value;

//    

//    var vo:TakeVoiceVO = new TakeVoiceVO();

//    vo.value="take";

//    vo.time=12345;

//    vo.voiceId=100004;

//

//    var out:ByteArray = new ByteArray();

//    out.writeObject(vo);

//    

//    var request:URLRequest = new URLRequest("http://localhost:8080/Game_Voice/voice.take");

//    request.data = out;

//    request.method = URLRequestMethod.POST;

//    

//    _loader.load(request);

   }

   

   private function loaderHandler(event:*):void {  

    trace(event.type);  

    switch(event.type) {  

     case Event.COMPLETE:

      // 接收到的服务端数据

      var start:Number=getTimer();

      var byte:ByteArray = _loader.data as ByteArray;

      trace(byte.length);

      byte.uncompress();

      

//      var obj:LoadUpVoiceResultVO = byte.readObject();  

//      var end:Number=getTimer();   

//      trace("耗时:" + (end - start) + "毫秒"); 

//      trace(obj);

//      trace(obj.voiceIds);

//      trace(obj.voiceIds.length);  

//      trace(obj.voiceIds[0]);

//      trace(obj.voiceIds[1]);

      var obj:TakeVoiceResultVO = byte.readObject();

      trace(obj);

      if(null == obj)return;

      trace(obj.voiceId);

      trace(obj.voiceBytes.length);

      trace(obj.voiceBytes.readUTF());

      break;  

    }  

   }  

   

   public function httpResult(event:ResultEvent):void  

   {  

    trace("aaaaaaaaaaaaaaaaaaa")

    trace(event.result);   

   }  

   

   [Bindable] 

   public var isRecording  :Boolean = false;

   

   private var _timer   :Timer = new Timer(1000, 20); 

   private var _recordByte  :ByteArray;

   private var _microphone  :Microphone;

   

   private function init():void { 

    _microphone = Microphone.getMicrophone(); 

    

    if (_microphone==null) { 

     return; 

    } 

    

    _timer.addEventListener(TimerEvent.TIMER, function (e:TimerEvent):void {  

    }); 

    

    _timer.addEventListener(TimerEvent.TIMER_COMPLETE, _stopRecordHandler); 

    

    _microphone.rate = 5; 

    _microphone.encodeQuality = 1;

    _microphone.setUseEchoSuppression(true);

    _microphone.setLoopBack(false);

    _microphone.setSilenceLevel(0,0);

    _microphone.gain=50;

   }

   

   

   private function _playRecordHandler(e:MouseEvent):void{ 

    _recordByte.position = 0; 

    var soundOutput:Sound = new Sound(); 

    soundOutput.addEventListener(SampleDataEvent.SAMPLE_DATA, _playSoundSampleDataHandler);

    soundOutput.play();      

   } 

   

   private function _playSoundSampleDataHandler(e:SampleDataEvent) : void    {            

    if (!_recordByte.bytesAvailable > 0)   { 

     return; 

    } 

    var i:int = 0; 

    var _length:Number; 

    while (i < 8192)       {                 

     _length = 0; 

     if (_recordByte.bytesAvailable > 0)    { 

      _length = _recordByte.readFloat(); 

     } 

     e.data.writeFloat(_length); 

     e.data.writeFloat(_length); 

     i++; 

    }             

   }    

   

   private function _startRecHandler(e:MouseEvent):void {    

    isRecording = true; 

    _recordByte = new ByteArray(); 

    _microphone.addEventListener(SampleDataEvent.SAMPLE_DATA, _microphoneSampleDataHandler);

    _timer.reset(); 

    _timer.start();   

   } 

   

   public function _stopRecordHandler(e:Event = null) : void     {  

    _timer.stop(); 

    isRecording = false; 

    _microphone.removeEventListener(SampleDataEvent.SAMPLE_DATA, _microphoneSampleDataHandler);               

   }     

   

   private function _microphoneSampleDataHandler(e:SampleDataEvent):void { 

    _recordByte.writeBytes(e.data);    

   }

   private function _saveWavHandler(e:Event = null) : void    { 

    var _wavWriter :WAVWriter = new WAVWriter();

    _wavWriter.numOfChannels = 1;

    _wavWriter.sampleBitRate = 8;

    _wavWriter.samplingRate = 5100;

    

    var _resultSamples:ByteArray = new ByteArray(); 

    

    

    _recordByte.position = 0;  

    _wavWriter.processSamples(_resultSamples,_recordByte, _wavWriter.samplingRate, 1);

    var _file  :FileReference = new FileReference(); 

    _file.save(_resultSamples, "FP10MicphoneRecord.wav"); 

    

//    _resultSamples.position = 0;

//    

//    mp3encoder = new ShineMP3Encoder(_resultSamples);

//    mp3encoder.addEventListener(Event.COMPLETE, onEncoded);

//    mp3encoder.start();

    

   } 

   

   private function onEncoded(e:Event):void{

//    myTI.text = "mp3 encoded";

    mp3encoder.mp3Data.position = 0;

    mp3encoder.saveAs("monSon.mp3");

    

//    var _file  :FileReference = new FileReference(); 

//    _file.save(_resultSamples, "FP10MicphoneRecord.wav"); 

    

   }

   

   private var mp3encoder:ShineMP3Encoder;

   

  ]]>

 </fx:Script>

 <fx:Declarations>

  <!-- 将非可视元素(例如服务、值对象)放在此处 -->

 </fx:Declarations>

 <s:Button id="start" x="72" y="69" label="开始" click="_startRecHandler(event)"/>

 <s:Button id="end" x="72" y="143" label="结束" click="_stopRecordHandler(event)"/>

 <s:Button id="save" x="72" y="225" label="保存" click="_saveWavHandler(event)"/>

 <s:Button id="ting" x="72" y="291" label="听" click="_playRecordHandler(event)"/>

</s:WindowedApplication>

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: