forked from: Show Mic Input Waveform
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
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);
// }
}
}
}
