`
ddh9504
  • 浏览: 112434 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

flex 纯客户端录音

    博客分类:
  • flex
阅读更多

<?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"
      creationComplete="init()">
 
 <s:layout>
  <s:VerticalLayout/>
 </s:layout>
 
 <fx:Script>
  <![CDATA[
   import flash.events.SampleDataEvent;
   import flash.media.Microphone;
   import flash.media.Sound;
   import flash.utils.ByteArray;
   
   import mx.controls.Alert;
   import mx.utils.ObjectUtil;
   
   
   [Bindable] private var microphoneList:Array;
   protected var microphone:Microphone;
   protected var isRecording:Boolean = false;
   protected var soundRecording:ByteArray;
   protected var soundOutput:Sound;
   
   private var urlReq:URLRequest;
   private var sourceSnd:Sound;
   private var outputSnd:Sound;
   private var sChannel:SoundChannel;

   
   protected function init():void
   {
    
    
    urlReq= new URLRequest("a.mp3");  
    sourceSnd=new Sound();
    sourceSnd.load(urlReq);
    sourceSnd.addEventListener(Event.COMPLETE, function(e:Event):void{
     //outputSnd=new Sound();
     //outputSnd.addEventListener(SampleDataEvent.SAMPLE_DATA, processSound);
     //outputSnd.play();
     
        
     
     smr.enabled=true;
    });
    
     
    
    
    microphoneList = Microphone.names;
   }
   protected function processSound(event:SampleDataEvent):void
   {
    var bytes:ByteArray = new ByteArray();
    sourceSnd.extract(bytes, 8192); 
    
    while(bytes.bytesAvailable) {
     var sample:Number = bytes.readFloat();      
     //soundRecording.writeFloat(sample);     
    }
    
    
    event.data.writeBytes(bytes);
   }
   
   
   protected function setupMicrophone():void
   {
    microphone = Microphone.getMicrophone(comboMicList.selectedIndex);
    microphone.rate = 44;
    microphone.setUseEchoSuppression(true);
    microphone.setLoopBack(false);
    microphone.setSilenceLevel(0,0);
    microphone.gain=50;
    
    
   }
   
   protected function startMicRecording():void
   {
    
    
    
    //
    isRecording = true;
    soundRecording = new ByteArray();
    microphone.addEventListener(SampleDataEvent.SAMPLE_DATA, gotMicData);
    
    
    ///
    if(sChannel)
     sChannel.stop();
    outputSnd=new Sound();
    outputSnd.addEventListener(SampleDataEvent.SAMPLE_DATA, processSound);
    sChannel=outputSnd.play();
   }
   
   protected function stopMicRecording():void
   {
    isRecording = false;
    microphone.removeEventListener(SampleDataEvent.SAMPLE_DATA, gotMicData);
    if(sChannel)
     sChannel.stop();
    outputSnd.removeEventListener(SampleDataEvent.SAMPLE_DATA, processSound);
   }
   
   private function gotMicData(micData:SampleDataEvent):void
   {
       
    while(micData.data.bytesAvailable) {
     var sample:Number = micData.data.readFloat();      
     soundRecording.writeFloat(sample);
     
     
    }
    
   }
   
   protected function playbackData():void
    
   {
    soundRecording.position = 0;
    
    soundOutput = new Sound();
    soundOutput.addEventListener(SampleDataEvent.SAMPLE_DATA, playSound);
    
    soundOutput.play();
   }
   
   private function playSound(soundOutput:SampleDataEvent):void
   {
    //soundOutput.data.writeBytes(soundRecording);
    
    
    if (!soundRecording.bytesAvailable > 0)
     return;
    for (var i:int = 0; i < 8192; i++)
    {
     var sample:Number = 0;
     if (soundRecording.bytesAvailable > 0)
      sample = soundRecording.readFloat();
     soundOutput.data.writeFloat(sample);
     soundOutput.data.writeFloat(sample); 
     
    }
    
   }
   
   
  ]]>
 </fx:Script>
 
 <mx:ComboBox id="comboMicList" x="100" y="10" dataProvider="{microphoneList}"/>
 <s:Button width="161" label="Select Mic" click="setupMicrophone()"/>
 <s:Button id="smr" x="10" y="40" width="160" label="Start Rec" click="startMicRecording()"  enabled="false"/>
 <s:Button x="97" y="40" width="162" label="Stop Rec" click="stopMicRecording()"/>
 <s:Button x="11" y="70" width="162" label="Playback" click="playbackData()"/>
 
</s:Application>

0
8
分享到:
评论

相关推荐

    flex microphone 客户端播录音放并转换MP3 wav

    "flex microphone 客户端播录音放并转换MP3 wav"这个主题聚焦于使用Flex麦克风客户端进行录音、播放以及音频格式的转换,主要涉及的是音频处理、编程接口(API)使用和文件格式转换的知识点。 1. **Flex麦克风...

    flex做的在线录音

    综上所述,使用Flex开发在线录音应用涉及到多个技术层面,包括客户端的音频处理、服务器通信以及用户界面设计。理解并掌握这些知识点,可以帮助你成功地构建一个功能完备、用户友好的在线录音系统。

    flex录音+上传+播放

    在上传完成后,服务器会返回处理后的音频文件URL,Flex客户端则可以通过MediaElement类加载并播放这个URL。MediaElement支持多种媒体类型,包括MP3,可以创建一个MediaElement实例,设置其source属性为音频URL,然后...

    baidu语音识别 flex 版实现

    在Flex项目中,我们可以使用如RecordMP3这样的库,它允许我们在客户端直接录制音频,而无需经过服务器。 1. **RecordMP3库的使用**:RecordMP3库是一个ActionScript 3.0的类库,它提供了录制和回放MP3音频的功能。...

    FLEX在线拍照.rar

    7. **Saving Images**: 在客户端,可以使用FileReference类保存本地照片。用户可以触发保存对话框,选择保存位置并命名文件。而在服务器端,可能需要处理上传的图片,如调整尺寸、格式转换等。 8. **Security ...

    基于Flex技术的MHK口语训练系统语音处理模块关键技术研究.docx

    此系统的关键在于其语音处理模块,该模块通过Flex技术实现录音、回放、转换、本地存储和传输等功能,以模拟真实的口语考试环境,并提供个性化的训练体验。 **一、系统开发环境** 开发该系统时,采用的工具是Flash ...

    flEX教程,与RED5连接

    在Flex中与RED5进行连接,首先需要在Flex项目中引入RED5的客户端库。这通常通过添加SWC库文件来完成,该文件可以在RED5的官方仓库中获取。一旦库被引入,开发者就可以利用Flex的NetConnection和NetStream对象来建立...

    Red5-1.0.0-src.zip

    此外,熟悉Flex或ActionScript有助于更好地利用Red5提供的客户端API,创建与服务器交互的用户界面。 总之,"Red5-1.0.0-src.zip"提供了一个深入了解和定制Red5服务器的入口,对于从事流媒体服务开发、在线游戏设计...

    在_linux系统上安装Openmeetings免费视频会议第一版

    OpenMeetings是一款基于Flex技术的开源视频会议软件,它提供了丰富的功能,如在线聊天、视频会议、文件共享以及桌面共享等,能够满足大多数用户的远程协作需求。为了更好地理解和安装OpenMeetings,我们首先需要了解...

    OralTest

    4. **响应式设计**:考虑到应用可能在不同设备上使用,HTML5的媒体查询(`@media`)和弹性网格布局(`display: flex`或`grid`)可以帮助实现响应式设计,确保“OralTest”在手机、平板电脑和桌面电脑上都能提供良好的...

Global site tag (gtag.js) - Google Analytics