46 lines
1.2 KiB
TypeScript
46 lines
1.2 KiB
TypeScript
class AudioAnalyzer {
|
|
private analyser: AnalyserNode;
|
|
private analyserData: Uint8Array;
|
|
|
|
constructor(context: AudioContext) {
|
|
this.analyser = new AnalyserNode(context, { fftSize: 256 });
|
|
this.analyserData = new Uint8Array(this.analyser.frequencyBinCount);
|
|
}
|
|
|
|
getByteFrequencyData() {
|
|
this.analyser.getByteFrequencyData(this.analyserData);
|
|
return this.analyserData;
|
|
}
|
|
|
|
getNode() {
|
|
return this.analyser;
|
|
}
|
|
}
|
|
|
|
class AudioPlayback {
|
|
private nextPlayTime: number = 0;
|
|
private isPlaying: boolean = false;
|
|
private playbackQueue: AudioBufferSourceNode[] = [];
|
|
private playBuffer: Int16Array[] = [];
|
|
|
|
// Add playback related methods
|
|
}
|
|
|
|
export class AudioHandler {
|
|
private context: AudioContext;
|
|
private mergeNode: ChannelMergerNode;
|
|
private analyzer: AudioAnalyzer;
|
|
private playback: AudioPlayback;
|
|
|
|
constructor() {
|
|
this.context = new AudioContext({ sampleRate: 24000 });
|
|
this.mergeNode = new ChannelMergerNode(this.context, { numberOfInputs: 2 });
|
|
this.analyzer = new AudioAnalyzer(this.context);
|
|
this.playback = new AudioPlayback();
|
|
|
|
this.mergeNode.connect(this.analyzer.getNode());
|
|
}
|
|
|
|
// ... rest of the implementation
|
|
}
|