2012-04-20 35 views
0

保存如何從一個麥克風記錄聲音,並將其從下面的代碼錄製聲音,並使用AS

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
      xmlns:s="library://ns.adobe.com/flex/spark" 
      xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> 
<fx:Script> 
    <![CDATA[ 
     import flash.events.SampleDataEvent; 
     import flash.media.Microphone; 
     import flash.net.FileReference; 
     import mx.controls.Alert; 
     import flash.net.FileReference; 


     [Bindable] private var microphoneList:Array; 
     protected var microphone:Microphone; 
     protected var isRecording:Boolean = false; 
     protected function setupMicrophoneList():void 
     { 
      microphoneList = Microphone.names; 
     } 
     protected function setupMicrophone():void 
     {  
      microphone = Microphone.getMicrophone(comboMicList.selectedIndex); 
     } 
     protected function startMicRecording():void 
     { 
      Alert.show("In recording"); 
      isRecording = true; 
      Alert.show("In recording1"); 
      microphone.addEventListener(SampleDataEvent.SAMPLE_DATA, gotMicData); 
      Alert.show("In recording22"); 
     } 
     protected function stopMicRecording():void 
     { 
      isRecording = false; 
      microphone.removeEventListener(SampleDataEvent.SAMPLE_DATA, gotMicData); 
     } 
     private function gotMicData(micData:SampleDataEvent):void 
     { 
      Alert.show("In mic data"); 
      // micData.data contains a ByteArray with our sample. } 
      try{ 
      var file:FileReference = new FileReference(); 
      file.save(micData.data ,"Testsound.flv"); 
      } 
      catch(e:Error) 
      { 
       Alert.show("In gotomicdataexception"+e); 
      } 
     } 

     ]]> 
</fx:Script> 
<fx:Declarations> 
    <!-- Place non-visual elements (e.g., services, value objects) here --> 
</fx:Declarations> 
<mx:ComboBox x="150" id="comboMicList" dataProvider="{microphoneList}" /> 
<mx:Button x="250" id="startmicrec" label="Start Rec" click="startMicRecording()"/> 
<mx:Button x="350" id="stopmicrec" label="Stop Rec" click="stopMicRecording()"/> 
<mx:Button x="50" id="setupmic" label="Select Mic" click="setupMicrophone()"/> 
<mx:Button x="450" id="playrecsound" label="Play sound" click="playbackData()"/> 

+0

不知道編碼器保存聲音ByteArray的FLV,但micRecord庫(http://code.google.com/p/ micrecorder /)有wav編碼器。嘗試一下。 – Art 2012-04-20 13:48:17

+0

@Art:我的問題主要是關於保存文件而不是格式。如何在錄製文件後保存文件。 – Rajeev 2012-04-20 14:18:56

+0

@Rajeev通常,在課程中發佈相同問題的三個版本通常不被認爲是好的禮儀兩天。 – JeffryHouser 2012-04-20 15:26:30

回答

0

這是你更新的代碼,將提供您能力保存文件中記錄後保存。但無論如何,你需要編碼的ByteArray到像WAV或MP3格式:

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
       xmlns:s="library://ns.adobe.com/flex/spark" 
       xmlns:mx="library://ns.adobe.com/flex/mx" 
       minWidth="955" minHeight="600" 
       creationComplete="this_creationCompleteHandler(event)"> 
    <fx:Script> 
     <![CDATA[ 
      import mx.events.FlexEvent; 


      [Bindable] private var microphoneList:Array; 
      protected var microphone:Microphone; 
      protected var isRecording:Boolean = false; 
      private var soundBytes:ByteArray = new ByteArray(); 
      protected function setupMicrophoneList():void 
      { 
       microphoneList = Microphone.names; 
      } 
      protected function setupMicrophone():void 
      {  
       microphone = Microphone.getMicrophone(comboMicList.selectedIndex); 
      } 
      protected function startMicRecording():void 
      { 
       trace("In recording"); 
       isRecording = true; 
       trace("In recording1"); 
       microphone.addEventListener(SampleDataEvent.SAMPLE_DATA, gotMicData); 
       trace("In recording22"); 
      } 
      protected function stopMicRecording():void 
      { 
       isRecording = false; 
       microphone.removeEventListener(SampleDataEvent.SAMPLE_DATA, gotMicData); 
       saveMicData(); 
      } 

      private function saveMicData():void 
      { 
       trace("In mic data"); 
       // micData.data contains a ByteArray with our sample. } 
       try{ 
        var file:FileReference = new FileReference(); 

        file.save(/*You need encoded soundBytes here*/soundBytes ,"Testsound.wav"); 
       } 
       catch(e:Error) 
       { 
        trace("In gotomicdataexception"+e); 
       } 
      } 

      private function gotMicData(event:SampleDataEvent):void 
      { 
       while(event.data.bytesAvailable) 
       { 
        var sample:Number = event.data.readFloat(); 
        soundBytes.writeFloat(sample); 
       } 
      } 

      private function playbackData():void 
      { 

      } 

      protected function this_creationCompleteHandler(event:FlexEvent):void 
      { 
       setupMicrophoneList(); 
      } 



     ]]> 
    </fx:Script> 
    <s:layout> 
     <s:VerticalLayout /> 
    </s:layout> 

    <mx:ComboBox id="comboMicList" dataProvider="{microphoneList}" /> 
    <mx:Button id="setupmic" label="Select Mic" click="setupMicrophone()"/> 
    <s:HGroup> 
     <mx:Button id="startmicrec" label="Start Rec" click="startMicRecording()"/> 
     <mx:Button id="stopmicrec" label="Stop Rec" click="stopMicRecording()"/> 
     <!--<mx:Button id="playrecsound" label="Play sound" click="playbackData()"/>--> 
    </s:HGroup> 
</s:Application>