现在的位置: 首页 > 综合 > 正文

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

2017年10月31日 ⁄ 综合 ⁄ 共 5983字 ⁄ 字号 评论关闭

<?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>

抱歉!评论已关闭.