mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-16 14:55:47 +00:00
Bug 1436096 - In PannerNode mochitest correct mono input and add test for stereo input. r=padenot
MozReview-Commit-ID: KEdtm85lzlx --HG-- extra : rebase_source : 271fd8af10e81dbf1ac3711788b4c28fcc03b414
This commit is contained in:
parent
a0b3530e01
commit
6a19b2f4cf
@ -17,7 +17,7 @@ var types = [
|
||||
"HRTF"
|
||||
]
|
||||
|
||||
var finished = types.length;
|
||||
var finished = 2 * types.length;
|
||||
|
||||
function finish() {
|
||||
if (!--finished) {
|
||||
@ -25,7 +25,7 @@ function finish() {
|
||||
}
|
||||
}
|
||||
|
||||
function test(type) {
|
||||
function testMono(type) {
|
||||
var ac = new OfflineAudioContext(1, BUF_SIZE, 44100);
|
||||
|
||||
// A sine to be used to fill the buffers
|
||||
@ -68,12 +68,75 @@ function test(type) {
|
||||
|
||||
panner3.connect(ac.destination);
|
||||
|
||||
// Use the input buffer to compare the output. According to the spec,
|
||||
// mono input at zero distance will apply gain = cos(0.5 * Math.PI / 2)
|
||||
// https://webaudio.github.io/web-audio-api/#Spatialzation-equal-power-panning
|
||||
const gain = Math.cos(0.5 * Math.PI / 2);
|
||||
for (var i = 0; i < BUF_SIZE; ++i) {
|
||||
monoBuffer.getChannelData(0)[i] = gain * monoBuffer.getChannelData(0)[i];
|
||||
}
|
||||
|
||||
ac.startRendering().then(function(buffer) {
|
||||
compareBuffers(buffer, monoBuffer);
|
||||
finish();
|
||||
});
|
||||
}
|
||||
|
||||
function testStereo(type) {
|
||||
var ac = new OfflineAudioContext(2, BUF_SIZE, 44100);
|
||||
|
||||
// A sine to be used to fill the buffers
|
||||
function sine(t) {
|
||||
return Math.sin(440 * 2 * Math.PI * t / ac.sampleRate);
|
||||
}
|
||||
|
||||
var stereoBuffer = ac.createBuffer(2, BUF_SIZE, ac.sampleRate);
|
||||
for (var i = 0; i < BUF_SIZE; ++i) {
|
||||
stereoBuffer.getChannelData(0)[i] = sine(i);
|
||||
stereoBuffer.getChannelData(1)[i] = sine(i);
|
||||
}
|
||||
|
||||
var stereoSource = ac.createBufferSource();
|
||||
stereoSource.buffer = stereoBuffer;
|
||||
stereoSource.start(0);
|
||||
|
||||
var panner = ac.createPanner();
|
||||
panner.distanceModel = "linear";
|
||||
panner.refDistance = 1;
|
||||
panner.positionX.value = 0;
|
||||
panner.positionY.value = 0;
|
||||
panner.positionZ.value = 0;
|
||||
stereoSource.connect(panner);
|
||||
|
||||
var panner2 = ac.createPanner();
|
||||
panner2.distanceModel = "inverse";
|
||||
panner2.refDistance = 1;
|
||||
panner2.positionX.value = 0;
|
||||
panner2.positionY.value = 0;
|
||||
panner2.positionZ.value = 0;
|
||||
panner.connect(panner2);
|
||||
|
||||
var panner3 = ac.createPanner();
|
||||
panner3.distanceModel = "exponential";
|
||||
panner3.refDistance = 1;
|
||||
panner3.positionX.value = 0;
|
||||
panner3.positionY.value = 0;
|
||||
panner3.positionZ.value = 0;
|
||||
panner2.connect(panner3);
|
||||
|
||||
panner3.connect(ac.destination);
|
||||
|
||||
ac.startRendering().then(function(buffer) {
|
||||
compareBuffers(buffer, stereoBuffer);
|
||||
finish();
|
||||
});
|
||||
}
|
||||
|
||||
function test(type) {
|
||||
testMono(type);
|
||||
testStereo(type);
|
||||
}
|
||||
|
||||
addLoadEvent(function() {
|
||||
types.forEach(test);
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user