/
Buzzer.js
32 lines (27 loc) · 832 Bytes
/
Buzzer.js
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
class Buzzer {
constructor(freq) {
this.freq = freq;
this.audioCtx = new window.AudioContext();
this.audioCtx.resume();
window.addEventListener('click', () => {
this.audioCtx.resume();
});
}
play() {
if(this.audioCtx && !this.oscillator) {
this.oscillator = this.audioCtx.createOscillator();
this.oscillator.frequency.setValueAtTime(this.freq, this.audioCtx.currentTime);
this.oscillator.type = "square";
this.oscillator.connect(this.audioCtx.destination);
this.oscillator.start();
}
}
stop() {
if(this.oscillator) {
this.oscillator.stop();
this.oscillator.disconnect();
this.oscillator = null;
}
}
}
export default Buzzer;