зеркало из https://github.com/mozilla/gecko-dev.git
87 строки
2.0 KiB
HTML
87 строки
2.0 KiB
HTML
<!DOCTYPE HTML>
|
|
<html>
|
|
<head>
|
|
<title>Test PannerNode produces output even when the even when the distance is from the listener is zero</title>
|
|
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
|
<script type="text/javascript" src="webaudio.js"></script>
|
|
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
|
</head>
|
|
<body>
|
|
<pre id="test">
|
|
<script class="testbody" type="text/javascript">
|
|
|
|
var BUF_SIZE = 128;
|
|
|
|
var types = [
|
|
"equalpower",
|
|
"HRTF"
|
|
]
|
|
|
|
var finished = types.length;
|
|
|
|
function finish() {
|
|
if (!--finished) {
|
|
SimpleTest.finish();
|
|
}
|
|
}
|
|
|
|
function test(type) {
|
|
var ac = new OfflineAudioContext(1, 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 monoBuffer = ac.createBuffer(1, BUF_SIZE, ac.sampleRate);
|
|
for (var i = 0; i < BUF_SIZE; ++i) {
|
|
monoBuffer.getChannelData(0)[i] = sine(i);
|
|
}
|
|
|
|
var monoSource = ac.createBufferSource();
|
|
monoSource.buffer = monoBuffer;
|
|
monoSource.start(0);
|
|
|
|
var panner = ac.createPanner();
|
|
panner.distanceModel = "linear";
|
|
panner.refDistance = 1;
|
|
panner.positionX.value = 0;
|
|
panner.positionY.value = 0;
|
|
panner.positionZ.value = 0;
|
|
monoSource.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, monoBuffer);
|
|
finish();
|
|
});
|
|
}
|
|
|
|
addLoadEvent(function() {
|
|
types.forEach(test);
|
|
});
|
|
|
|
SimpleTest.waitForExplicitFinish();
|
|
|
|
</script>
|
|
</pre>
|
|
</body>
|
|
</html>
|