ChatGPT-Next-Web/app/lib/audio.ts

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
}