TeaWeb/js/voice/AudioResampler.ts
WolverinDEV 42ed493db0 updates
2018-04-19 18:42:34 +02:00

24 lines
No EOL
968 B
TypeScript

class AudioResampler {
targetSampleRate: number;
constructor(targetSampleRate: number = 44100){
this.targetSampleRate = targetSampleRate;
if(this.targetSampleRate < 3000 || this.targetSampleRate > 384000) throw "The target sample rate is outside the range [3000, 384000].";
}
resample(buffer: AudioBuffer) : Promise<AudioBuffer> {
//console.log("Encode from %i to %i", buffer.sampleRate, this.targetSampleRate);
if(buffer.sampleRate == this.targetSampleRate)
return new Promise<AudioBuffer>(resolve => resolve(buffer));
let context;
context = new OfflineAudioContext(buffer.numberOfChannels, Math.ceil(buffer.length * this.targetSampleRate / buffer.sampleRate), this.targetSampleRate);
let source = context.createBufferSource();
source.buffer = buffer;
source.connect(context.destination);
source.start(0);
return context.startRendering();
}
}