可変Mosquito Noise forked from: Mosquito Noise 17k Hz
周波数を変えられるようにしてみました
初期値は17000Hzです
画面の上半分をクリックすると100Hz上がり
下半分をクリックすると100Hz下がります
周波数によっては物凄くうるさくなったりするので音量注意です
また、モスキート音をスピーカーなどで直接聞くと
頭痛や耳鳴りがする場合があるので十分注意し、
あまり高い周波数は聴かないようにしてください
/**
* Copyright ton ( http://wonderfl.net/user/ton )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/2EAv
*/
// forked from seagirl's Mosquito Noise 17k Hz
/*
周波数を変えられるようにしてみました
初期値は17000Hzです
画面の上半分をクリックすると100Hz上がり
下半分をクリックすると100Hz下がります
周波数によっては物凄くうるさくなったりするので音量注意です
また、モスキート音をスピーカーなどで直接聞くと
頭痛や耳鳴りがする場合があるので十分注意し、
あまり高い周波数は聴かないようにしてください
*/
package {
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.events.SampleDataEvent;
import flash.media.Sound;
import flash.text.TextField;
public class MosquitoNoise extends Sprite
{
private static const SAMPLING_RATE:int = 44100;
private static const SAMPLE_SIZE:int = 8192; // 2048 〜 8192
public function MosquitoNoise()
{
addEventListener(Event.ADDED_TO_STAGE, addToStageHandler);
}
private var frequency:Number = 17000;
private var phase:Number = 0.0;
private var waveform:SineWave;
private var sound:Sound;
private var txt:TextField;
private function init():void
{
trace('------------------------------------------------------------', new Date());
trace('Mosquito Noise by Takuho Yoshizu');
txt = new TextField();
txt.autoSize = "left";
addChild(txt);
txt.text = frequency.toString();
stage.addEventListener(MouseEvent.CLICK, onClickHandler);
waveform = new SineWave();
sound = new Sound();
sound.addEventListener(SampleDataEvent.SAMPLE_DATA, sampleDataHandler);
sound.play();
}
private function addToStageHandler(event:Event):void
{
removeEventListener(Event.ADDED_TO_STAGE, addToStageHandler);
stage.frameRate = 60;
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
init();
}
private function sampleDataHandler(event:SampleDataEvent):void
{
var sample:Number;
for (var i:int = 0; i < SAMPLE_SIZE; i++)
{
phase += frequency / SAMPLING_RATE;
sample = waveform.exec(phase);
sample *= 0.8;
event.data.writeFloat(sample); // L
event.data.writeFloat(sample); // R
}
}
private function onClickHandler(e:MouseEvent):void {
if (e.stageY <= stage.stageHeight / 2) {
frequency += 100;
}else {
frequency -= 100;
}
txt.text = frequency.toString();
}
}
}
class SineWave
{
public function exec(phase:Number):Number
{
var phaseAngle:Number = phase * Math.PI * 2;
var sample:Number = Math.sin(phaseAngle);
return sample;
}
}