forked from: forked from: random sin wave
♥0 |
Line 53 |
Modified 2013-02-02 21:00:44 |
MIT License
archived:2017-03-30 10:26:14
ActionScript3 source code
/**
* Copyright ohisama ( http://wonderfl.net/user/ohisama )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/jNY8
*/
// forked from watanabe's forked from: random sin wave
// forked from watanabe's random sin wave
package
{
import flash.display.Sprite;
import flash.events.*;
import flash.media.Sound;
import flash.utils.ByteArray;
import flash.display.Sprite;
public class FlashTest extends Sprite
{
private static const SAMPLING : int = 8192 / 2;
private static const FREQUENCY : int = 440;
private static const SAMPLING_RATE : int = 44100;
private static const PI : Number = Math.PI * 2;
private static const VOLUME : Number = 0.1;
private var _sounds : Array = [];
private var _count : int = 0;
public function FlashTest()
{
for (var i : int = 0; i < 3; i++)
{
var sound : Sound = new Sound;
_sounds.push(sound)
sound.addEventListener(SampleDataEvent.SAMPLE_DATA, onSampleData);
sound.play(0, 1);
}
addEventListener(Event.ENTER_FRAME, onFrame);
}
private function onFrame(e : Event) : void
{
if (_count++ > 100)
{
for each(var ss in _sounds)
{
ss.stop();
}
}
}
private function onSampleData(e : SampleDataEvent) : void
{
var data : ByteArray = e.data;
var pos : Number = e.position;
var w : Number = (PI / (SAMPLING_RATE / FREQUENCY * (Math.random() * 0.15)));
var phase : Number = (pos * w) % PI;
for (var i : int = 0 ; i < SAMPLING ; i++)
{
var d : Number = VOLUME * Math.sin(phase);
phase = (phase + w) % PI;
data.writeFloat(d);
data.writeFloat(d);
}
}
}
}