In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

可変Mosquito Noise forked from: Mosquito Noise 17k Hz

周波数を変えられるようにしてみました
初期値は17000Hzです
画面の上半分をクリックすると100Hz上がり
下半分をクリックすると100Hz下がります

周波数によっては物凄くうるさくなったりするので音量注意です
また、モスキート音をスピーカーなどで直接聞くと
頭痛や耳鳴りがする場合があるので十分注意し、
あまり高い周波数は聴かないようにしてください
Get Adobe Flash player
by ton 19 May 2009
/**
 * 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;
	}
}