Record sound in Adobe and save

In the following code, I am trying to save the contents of the microphone to a file. The saved file does not play. Each time the file is saved, I see that the size is only 10 bytes. What am I doing wrong in the code. Can someone please show me the correct code to save it. And the saved file should play back the recorded content accordingly.

<?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; import flash.display.Sprite; import flash.media.Sound; import flash.utils.ByteArray; import flash.external.ExternalInterface; public var _file:FileReference = new FileReference(); [Bindable] private var micList:Array; public var mic:Microphone = Microphone.getMicrophone(); protected var isRecording:Boolean = false; protected function startMicRecording():void { //var mic:Microphone = Microphone.getMicrophone(); mic.gain = 60; mic.rate = 11; mic.setUseEchoSuppression(true); mic.setLoopBack(true); mic.setSilenceLevel(5, 1000); Alert.show("In recording"); isRecording = true; mic.addEventListener(SampleDataEvent.SAMPLE_DATA, gotMicData); } protected function stopMicRecording():void { //isRecording = false; try{ //_file.save( SampleDataEvent.SAMPLE_DATA, "recorded.wav" ); _file.save(SampleDataEvent.SAMPLE_DATA , "recorded.flv" ); } catch(e:Error) { Alert.show("In Stopmicrecording"+e); } } private function gotMicData(micData:SampleDataEvent):void { //mic.removeEventListener(SampleDataEvent.SAMPLE_DATA, gotMicData); } protected var soundRecording:ByteArray; protected var soundOutput:Sound; protected function playbackData():void { } private function playSound(soundOutput:SampleDataEvent):void { } ]]> </fx:Script> <fx:Declarations> <!-- Place non-visual elements (eg, services, value objects) here --> </fx:Declarations> <mx:ComboBox x="150" id="comboMicList" dataProvider="{micList}" /> <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()"/> </s:Application> 
+1
source share
1 answer

You need to save the data passed to you in gotMicData , in ByteArray , and then save ByteArray . You save the name of the event, which is a string (10 characters long).

Once you do this, you need to download the file and transfer the sample data to sound. You play sound 8 times ... because you tried it at 11 kHz, but the sound is played at 44 kHz (recording 4 times), and the sound is Stereo, but the microphone is mono (2x again).

You cannot save data as a WAV file directly ... you recorded raw data. If you want to solve the problem of recording the correct WAV header, you do not need to play games with the transfer of sample data and transfer the file to the Sound object. This is an exercise that goes beyond the scope of this question.

Good luck

  import mx.controls.Alert; public var mic:Microphone = Microphone.getMicrophone(); public var recordedData:ByteArray; protected function startMicRecording():void { mic.gain = 60; mic.rate = 11; mic.setUseEchoSuppression(true); mic.setLoopBack(false); mic.setSilenceLevel(5, 1000); recordedData = new ByteArray(); mic.addEventListener(SampleDataEvent.SAMPLE_DATA, gotMicData); } protected function stopMicRecording():void { mic.removeEventListener(SampleDataEvent.SAMPLE_DATA, gotMicData); try{ var file:FileReference = new FileReference(); file.save(recordedData, "recorded.dat" ); } catch(e:Error) { Alert.show("In Stopmicrecording"+e); } } private function gotMicData(sample:SampleDataEvent):void { recordedData.writeBytes(sample.data, 0, sample.data.bytesAvailable); } protected var playbackFile:FileReference; protected var soundRecording:ByteArray; protected var soundOutput:Sound; protected function playbackData():void { playbackFile = new FileReference(); playbackFile.addEventListener(Event.SELECT, playbackFileSelected); playbackFile.browse(); } private function playbackFileSelected(event:Event):void { playbackFile.addEventListener(Event.COMPLETE, playbackFileLoaded); playbackFile.load(); } private function playbackFileLoaded(event:Event):void { soundRecording = playbackFile.data; soundOutput = new Sound(); soundOutput.addEventListener(SampleDataEvent.SAMPLE_DATA, moreInput); soundOutput.play(); } private function moreInput(event:SampleDataEvent):void { var sample:Number; for (var i:int = 0; i < 1024; i++) { if (soundRecording.bytesAvailable > 0) { sample = soundRecording.readFloat(); // write the same byte 8 times: // Upsample from 11 KHz to 44 KHz (x4) // Mono to Stereo (x2) for(var x:int = 0; x < 8; x++) event.data.writeFloat(sample); } } } 
+1
source

All Articles