File size: 950 Bytes
27630e2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
export class AudioPlayer {
  constructor(audioContext, url) {
    this.audioContext = audioContext;
    this.audio = new Audio();
    this.audio.crossOrigin = 'anonymous';
    this.audio.src = url;
    
    this.gainNode = this.audioContext.createGain();
    this.analyser = this.audioContext.createAnalyser();
    
    this.source = this.audioContext.createMediaElementSource(this.audio);
    this.source.connect(this.analyser);
    this.analyser.connect(this.gainNode);
    this.gainNode.connect(this.audioContext.destination);
    
    this.isPlaying = false;
    
    // Set fixed volume
    this.gainNode.gain.value = 0.5;
  }

  play() {
    this.audioContext.resume();
    this.audio.play();
    this.isPlaying = true;
  }

  pause() {
    this.audio.pause();
    this.isPlaying = false;
  }

  connectAnalyser(analyser) {
    this.source.disconnect(this.analyser);
    this.source.connect(analyser);
    analyser.connect(this.gainNode);
  }
}