mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-25 09:57:32 +09:00
import FIREFOX_52_6_0esr_RELEASE from mozilla-esr52 hg repo
This commit is contained in:
commit
dcd9973243
150858 changed files with 23884658 additions and 0 deletions
|
|
@ -0,0 +1,72 @@
|
|||
<!DOCTYPE html>
|
||||
<title>Test seamless playback of a series of resampled buffers</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script>
|
||||
// Permitting some accumulation of rounding to int16_t.
|
||||
// 64/2^15 would be only just small enough to detect off-by-one-subsample
|
||||
// scheduling errors with the frequencies here.
|
||||
const EPSILON = 4.0 / Math.pow(2, 15);
|
||||
// Offsets test for rounding to nearest rather than up or down.
|
||||
const OFFSETS = [EPSILON, 1.0 - EPSILON];
|
||||
// The ratio of resampling is 147:160, so 256 start points is enough to cover
|
||||
// every fractional offset.
|
||||
const LENGTH = 256;
|
||||
|
||||
function do_test(context_rate, buffer_rate, start_offset) {
|
||||
|
||||
var context =
|
||||
new OfflineAudioContext(2, LENGTH, context_rate);
|
||||
|
||||
var merger = context.createChannelMerger(context.destination.channelCount);
|
||||
merger.connect(context.destination);
|
||||
|
||||
// Create an audio signal that will be repeated
|
||||
var repeating_signal = context.createBuffer(1, 1, buffer_rate);
|
||||
repeating_signal.getChannelData(0)[0] = 0.5;
|
||||
|
||||
// Schedule a series of nodes to repeat the signal.
|
||||
for (var i = 0; i < LENGTH; ++i) {
|
||||
var source = context.createBufferSource();
|
||||
source.buffer = repeating_signal;
|
||||
source.connect(merger, 0, 0);
|
||||
source.start((i + start_offset) / buffer_rate);
|
||||
}
|
||||
|
||||
// A single long signal should produce the same result.
|
||||
var long_signal = context.createBuffer(1, LENGTH, buffer_rate);
|
||||
var c = long_signal.getChannelData(0);
|
||||
for (var i = 0; i < c.length; ++i) {
|
||||
c[i] = 0.5;
|
||||
}
|
||||
|
||||
var source = context.createBufferSource();
|
||||
source.buffer = long_signal;
|
||||
source.connect(merger, 0, 1);
|
||||
source.start(start_offset / buffer_rate);
|
||||
|
||||
return context.startRendering().
|
||||
then((buffer) => {
|
||||
series_output = buffer.getChannelData(0);
|
||||
expected = buffer.getChannelData(1);
|
||||
|
||||
for (var i = 0; i < buffer.length; ++i) {
|
||||
assert_approx_equals(series_output[i], expected[i], EPSILON,
|
||||
"series output at " + i);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function start_tests(context_rate, buffer_rate) {
|
||||
OFFSETS.forEach((start_offset) => {
|
||||
promise_test(() => do_test(context_rate, buffer_rate, start_offset),
|
||||
"" + context_rate + " context, "
|
||||
+ buffer_rate + " buffer, "
|
||||
+ start_offset + " start");
|
||||
});
|
||||
}
|
||||
|
||||
start_tests(48000, 44100);
|
||||
start_tests(44100, 48000);
|
||||
|
||||
</script>
|
||||
Loading…
Add table
Add a link
Reference in a new issue