forked from: マイク入力テスト(FP10.1専用)
forked from マイク入力テスト(FP10.1専用) (diff: 27)
ActionScript3 source code
/**
* Copyright TheCoolMuseum ( http://wonderfl.net/user/TheCoolMuseum )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/a8lr
*/
// forked from TheCoolMuseum's マイク入力テスト(FP10.1専用)
package {
import flash.display.*;
import flash.media.*;
import flash.events.*;
import flash.text.*;
import flash.utils.*;
import flash.display.*;
public class FlashTest extends Sprite {
public function FlashTest() {
var canvas:BitmapData = new BitmapData(stage.stageWidth,stage.stageHeight,true);
addChild(new Bitmap(canvas));
var workArray:Array = [0,0,0,0,0,0];
var mic:Microphone = Microphone.getMicrophone();
mic.gain = 100;
mic.rate = 44;
mic.addEventListener(SampleDataEvent.SAMPLE_DATA, micSampleDataHandler);
var soundBytes:ByteArray = null;;
var soundQueue:Array = [];
var sound:Sound = new Sound();
sound.addEventListener(SampleDataEvent.SAMPLE_DATA, playbackSampleHandler);
sound.play();
var rot:Number = 0;
function micSampleDataHandler(event:SampleDataEvent):void
{
var bytes:ByteArray = new ByteArray();
canvas.lock();
rot+=0.03;
var c:Number = Math.cos(rot);
var s:Number = Math.sin(rot);
while(event.data.bytesAvailable)
{
var sample:Number = event.data.readFloat();
bytes.writeFloat(sample);
workArray.push(sample);
workArray.shift();
var px:Number = workArray[0]*c-workArray[1]*s;
var py:Number = workArray[0]*s+workArray[1]*c;
px = (px*0.5+0.5)*stage.stageWidth;
py = (py*0.5+0.5)*stage.stageHeight;
var color:Number = int((workArray[2]*0.5+0.5)*255)<<24 +
int((workArray[3]*0.5+0.5)*255)<<16 +
int((workArray[4]*0.5+0.5)*255)<<8 +
int((workArray[5]*0.5+0.5)*255);
canvas.setPixel32(px, py, color);
}
canvas.unlock();
soundQueue.push(bytes);
}
function playbackSampleHandler(event:SampleDataEvent):void
{
if (soundQueue.length == 0) {
for (var j:int = 0; j < 8192; j++)
{
event.data.writeFloat(0);
event.data.writeFloat(0);
}
}else {
if (soundBytes == null) {
soundBytes = soundQueue.shift();
soundBytes.position = 0;
}
for (var i:int = 0; i < 8192; i++)
{
if (soundBytes.bytesAvailable <= 0) {
if (soundQueue.length == 0) {
soundBytes = null;
for (; i < 8192; i++ ) {
event.data.writeFloat(0);
event.data.writeFloat(0);
}
}else{
soundBytes = soundQueue.shift();
soundBytes.position = 0;
}
}
var sample:Number = soundBytes.readFloat();
event.data.writeFloat(sample);
event.data.writeFloat(sample);
}
}
}
}
}
}