34 lines
1.4 KiB
HTML
34 lines
1.4 KiB
HTML
<!DOCTYPE html>
|
|
<html class="reftest-wait">
|
|
<script>
|
|
const blockSize = 128;
|
|
// The sample rate is a prime number so that the resampler is not expected to
|
|
// simplify in/out fractions.
|
|
const rate = 44101;
|
|
var context = new window.OfflineAudioContext(1, 3 * blockSize, rate);
|
|
// Non-zero buffer, so it can't be optimized away.
|
|
var buffer = context.createBuffer(1, 128, rate);
|
|
buffer.getChannelData(0)[0] = 1.0;
|
|
var source = context.createBufferSource();
|
|
source.buffer = buffer;
|
|
source.loop = true;
|
|
// Initialize the resampler with a slow input rate.
|
|
// With the current (Mar 2017) implementation, very slow rates give the
|
|
// resampler a very large denominator.
|
|
source.playbackRate.setValueAtTime(rate / 0x7fffffff, 0.0);
|
|
// Change to a moderate input rate.
|
|
// With the current implementation, skip_frac_num increases by den_rate for
|
|
// each output sample and so one block before the change in playback rate is
|
|
// enough for high skip_frac_num at the time of the change.
|
|
const changeBlock = 1;
|
|
const changeBlockSeconds = changeBlock * blockSize / rate;
|
|
// With the current speex_resampler_set_rate_frac() implementation, the
|
|
// moderate resampler denominator is still large enough to trigger overflow of
|
|
// 32-bit unsigned integer arithmetic.
|
|
source.playbackRate.setValueAtTime(rate / (rate + 1), changeBlockSeconds);
|
|
source.start(0);
|
|
context.startRendering().
|
|
then(function() {
|
|
document.documentElement.removeAttribute("class");
|
|
});
|
|
</script>
|