Record audio from your microphone (works on android too)

Categories Actionscript, android, Flash apps

Download fla, download apk file (for android mobiles)

Here is a little script that allows you to record audio from your microphone and play it back.

ActionScript

  1. package  {
  2.    
  3.     import flash.display.MovieClip;
  4.     import flash.events.Event;
  5.     import flash.media.SoundChannel;
  6.     import flash.media.Sound;
  7.     import flash.utils.ByteArray;
  8.     import flash.system.Security;
  9.     import flash.events.SampleDataEvent;
  10.     import flash.media.Microphone;
  11.     import flash.events.MouseEvent;
  12.     import flash.events.ActivityEvent;
  13.    
  14.     public class Rec extends MovieClip {
  15.        
  16.         private var mic:Microphone;
  17.         private var soundBytes:ByteArray;
  18.         private var soundMic:Sound;
  19.         private var micSoundChannel:SoundChannel;
  20.        
  21.         public function Rec()
  22.         {
  23.             micSoundChannel = new SoundChannel();
  24.             soundMic = new Sound();
  25.             soundBytes  = new ByteArray();
  26.             mic = Microphone.getMicrophone();
  27.             mic.setSilenceLevel(5, 1000);
  28.             mic.gain = 80; //0 to 100
  29.             mic.rate = 44;
  30.            
  31.             recOn.stop();
  32.             recOn.visible = false
  33.             activityMC.visible = false;
  34.            
  35.             speakRec.visible = false;
  36.             playButton.enabled = false;
  37.            
  38.             micButton.addEventListener(MouseEvent.CLICK, startRecording);
  39.             playButton.addEventListener(MouseEvent.CLICK, startPlayback);
  40.            
  41.             addEventListener(Event.ENTER_FRAME, onFrame);//
  42.         }
  43.         private function onFrame(e:Event)
  44.         {
  45.             if (mic.activityLevel > 0)
  46.             {
  47.                 activityMC.maskMC.scaleY = mic.activityLevel / 100;
  48.             }
  49.         }
  50.         private function startRecording(e:MouseEvent)
  51.         {
  52.             micButton.enabled = false;
  53.             playButton.enabled = true;
  54.            
  55.             recOn.visible = true;
  56.             activityMC.visible = true;
  57.            
  58.             recOn.play();
  59.            
  60.             soundBytes  = new ByteArray();
  61.            
  62.             mic.addEventListener(SampleDataEvent.SAMPLE_DATA, micRecord);
  63.            
  64.         }
  65.         private function startPlayback(e:MouseEvent)
  66.         {
  67.             micButton.enabled = true;
  68.             playButton.enabled = false;
  69.            
  70.             speakRec.visible = true;
  71.             activityMC.visible = false;
  72.             recOn.visible = false;
  73.             recOn.stop();
  74.            
  75.             mic.removeEventListener(SampleDataEvent.SAMPLE_DATA, micRecord);
  76.             mic.setLoopBack(false);
  77.  
  78.             soundBytes.position = 0;
  79.             soundMic.addEventListener(SampleDataEvent.SAMPLE_DATA, playbackSampleHandler);
  80.            
  81.             micSoundChannel = soundMic.play();
  82.             micSoundChannel.addEventListener( Event.SOUND_COMPLETE, micPlaybackComplete );
  83.            
  84.         }
  85.         private function micRecord(e:SampleDataEvent)
  86.         {
  87.                while (e.data.bytesAvailable)
  88.             {
  89.                 var sample:Number = e.data.readFloat();
  90.                 soundBytes.writeFloat(sample);
  91.             }
  92.         }
  93.         function playbackSampleHandler(e:SampleDataEvent):void
  94.         {
  95.             for (var i:int = 0; i < 8192 && soundBytes.bytesAvailable > 0; i++)
  96.             {  
  97.                 var sample:Number = soundBytes.readFloat();
  98.                 e.data.writeFloat(sample);
  99.                 e.data.writeFloat(sample);
  100.                 //we write the data twice because there are 2 channels (stereo)
  101.             }
  102.         }
  103.         private function micPlaybackComplete(e:Event)
  104.         {
  105.             soundMic.removeEventListener(SampleDataEvent.SAMPLE_DATA, playbackSampleHandler);
  106.             speakRec.visible = false;
  107.             playButton.enabled = true;
  108.         }
  109.     }
  110. }
Share this
Facebooktwitter

No Comments

Leave a Reply

Your email address will not be published. Required fields are marked *