-
Notifications
You must be signed in to change notification settings - Fork 14
/
Copy pathexample.pulse-generator.ts
53 lines (43 loc) · 2.34 KB
/
example.pulse-generator.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import { EventDispatcher, IEvent } from "strongly-typed-events";
declare var window: any;
declare var Audio: any;
window.onload = function() {
let generator = new PulseGenerator(1);
//subscribe on the onPulse event
generator.onPulsate.subscribe((p, hz) => {
//play beep:
var snd = new Audio(
"data:audio/wav;base64,UklGRkYDAABXQVZFZm10IBAAAAABAAEAQB8AAIA+AAACABAAZGF0YSIDAAAAADM1FVYVVjM1AADNyuup66nNygAAMzUVVhVWMzUAAM3K66nrqc3KAAAzNRVWFVYzNQAAzcrrqeupzcoAADM1FVYVVjM1AADNyuup66nNygAAMzUVVhVWMzUAAM3K66nrqc3KAAAzNRVWFVYzNQAAzcrrqeupzcoAADM1FVYVVjM1AADNyuup66nNygAAMzUVVhVWMzUAAM3K66nrqc3KAAAzNRVWFVYzNQAAzcrrqeupzcoAADM1FVYVVjM1AADNyuup66nNygAAMzUVVhVWMzUAAM3K66nrqc3KAAAzNRVWFVYzNQAAzcrrqeupzcoAADM1FVYVVjM1AADNyuup66nNygAAMzUVVhVWMzUAAM3K66nrqc3KAAAzNRVWFVYzNQAAzcrrqeupzcoAADM1FVYVVjM1AADNyuup66nNygAAMzUVVhVWMzUAAM3K66nrqc3KAAAzNRVWFVYzNQAAzcrrqeupzcoAADM1FVYVVjM1AADNyuup66nNygAAMzUVVhVWMzUAAM3K66nrqc3KAAAzNRVWFVYzNQAAzcrrqeupzcoAADM1FVYVVjM1AADNyuup66nNygAAMzUVVhVWMzUAAM3K66nrqc3KAAAzNRVWFVYzNQAAzcrrqeupzcoAADM1FVYVVjM1AADNyuup66nNygAAMzUVVhVWMzUAAM3K66nrqc3KAAAzNRVWFVYzNQAAzcrrqeupzcoAADM1FVYVVjM1AADNyuup66nNygAAMzUVVhVWMzUAAM3K66nrqc3KAAAzNRVWFVYzNQAAzcrrqeupzcoAADM1FVYVVjM1AADNyuup66nNygAAMzUVVhVWMzUAAM3K66nrqc3KAACJNO5T2lKKMgAAys50sYeyydAAAOMtK0kYSOQrAABx1Ta8Sr1v1wAAPCdoPlU9PiUAABfc+cYMyBbeAACWIKYzkjKXHgAAveK70c/SvOQAAO8Z4yjQJ/EXAABk6X7ckd1j6wAASRMhHg0dShEAAArwQedU6AnyAACjDF4TSxKkCgAAsfYD8hfzr/gAAPwFnAiIB/0DAABX/cb82f1W/wAA"
);
snd.play();
});
//change frequency
window.setTimeout(function() {
generator.frequencyInHz = 2;
}, 3000);
//change frequency
window.setTimeout(function() {
generator.frequencyInHz = 0.5;
}, 6000);
};
class PulseGenerator {
//create private event dispatcher
private _onPulsate = new EventDispatcher<PulseGenerator, number>();
frequencyInHz: number;
//expose the event dispatcher through the IEvent interface
//this will hide the dispatch method outside the class
get onPulsate(): IEvent<PulseGenerator, number> {
return this._onPulsate.asEvent();
}
constructor(frequencyInHz: number) {
this.frequencyInHz = frequencyInHz;
this.start();
}
private start() {
window.setTimeout(() => {
this.start();
//dispatch event by calling the dispatcher
this._onPulsate.dispatch(this, this.frequencyInHz);
}, 1000 / this.frequencyInHz);
}
}