forked from: Show Mic Input Waveform

by j2e forked from Show Mic Input Waveform (diff: 67)
Program copied from http://192.150.8.121/devnet/flash/articles/flcs5_features_microphone_event.html
Written primarily by Fumio Nonaka
♥0 | Line 60 | Modified 2011-01-08 12:27:53 | MIT License
play

ActionScript3 source code

/**
 * Copyright j2e ( http://wonderfl.net/user/j2e )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/bQY8
 */

// forked from j2e's Show Mic Input Waveform
package {
    import flash.geom.ColorTransform;
    
    /// Program copied from http://192.150.8.121/devnet/flash/articles/flcs5_features_microphone_event.html
    /// Written primarily by Fumio Nonaka
    
    import flash.display.Sprite;
    import flash.media.Microphone; 
    import flash.media.Sound;
    import flash.media.SoundChannel;
    import flash.media.SoundMixer;
    import flash.events.SampleDataEvent; 
    import flash.events.ActivityEvent;
    import flash.utils.ByteArray; 
    import flash.display.Graphics;
    
    
    public class FlashTest extends Sprite {
        private const DELAY_LENGTH:int = 4000; 

        private var nWidth:Number = stage.stageWidth; 
        private var nCenter:Number = stage.stageHeight / 2; 
        private var nScale:Number = 300; 
        private var myGraphics:Graphics = graphics; 
        private var mic:Microphone = Microphone.getMicrophone(); 
        private var snd:Sound = new Sound();
        //mic.rate = 44; 
        //mic.gain = 100; 
        
        

        public function FlashTest() {
            // write as3 code here..
            mic.addEventListener(SampleDataEvent.SAMPLE_DATA, drawSampleData);
            snd.addEventListener(SampleDataEvent.SAMPLE_DATA, onMicActivity);
            mic.setLoopBack(true);
            mic.setUseEchoSuppression(true);
            mic.setSilenceLevel(0);
            snd.play();
            }
        
        private function writeMicSound (event:SampleDataEvent):void {
            for (var i:int = 0; i < 8192; i++) 
                { 
                    var n:Number = Math.sin((i + event.position) / Math.PI / 4); 
                    event.data.writeFloat(n); 
                    event.data.writeFloat(n); 
                } 

        }

        private function onMicActivity (eventObject:ActivityEvent):void {
                
                myGraphics.lineStyle(0, 250); 
                var myFFT:ByteArray;
                SoundMixer.computeSpectrum(myFFT, true, 0);
                
                while (myFFT.bytesAvailable > 0) {

                var nFreq:Number = myFFT.position * stage.stageHeight / myFFT.length;
                var nAmp:Number = myFFT.readFloat() * nWidth;
                myGraphics.drawRect(0, nFreq, nAmp, 1);
                }
        }

        private function drawSampleData(eventObject:SampleDataEvent):void { 
        
            
            var myData:ByteArray = eventObject.data; 

            myGraphics.clear(); 
            myGraphics.lineStyle(0, 0x000000); 
            myGraphics.moveTo(0, nCenter); 
            var nPitch:Number = nWidth / myData.length; 
            var basePitch:Number = myData.readFloat();
            
            while (myData.bytesAvailable > 0) { 
                var nX:Number = myData.position * nPitch; 
                var nY:Number = myData.readFloat() * nScale + nCenter; 
                myGraphics.lineTo(nX, nY); 
                // Calculate the amplitude difference between the current sample and the sample at the beginning
                // of the sample array, and assign a color to draw with based on that amplitude
                // and a height based upon its distance from the beginning of the sample array

                //var nAmplitude:Number = Math.abs( nY - basePitch);
                
                //myGraphics.drawRect(0, nX, nAmplitude, 1);
                

                //myGraphics.moveTo(nX, nY);
                } 
                
//                myData.position = myData.length;
//                SoundMixer.computeSpectrum(myData, false, 0);
//                myGraphics.lineStyle(0, 250); 
//           while (myData.bytesAvailable > 0) {
//               var nFreq:Number = myData.position * stage.stageHeight / myData.length;
//               var nAmp:Number = myFFT.readFloat() * nWidth;
//               myGraphics.drawRect(0, nFreq, nAmp, 1);
//           }

           }
    }
}

Forked