gecko-dev/content/media/webaudio/test/test_oscillatorNode.html
Ralph Giles a4447ac147 Bug 865256 - Part 4: Implement custom waveforms. r=ehsan,padenot
Copy the periodicWave data into a shareable buffer.

Add a SetBuffer call to send the buffer data to the
OscillatorNodeEngine. Call into blink's PeriodicWave
implementation to generate bandlimited tables bracketing
the desired frequency and interpolate the output data
from them.

Change the PeriodicWave constructor to only take one
length, since both arrays must be the same size.

Change OscillatorNode's SetType to throw INVALID_STATE
instead of NOT_IMPLEMENTED if js tries to assign
type = 'custom' directly.
2013-08-28 15:39:26 -07:00

59 lines
1.8 KiB
HTML

<!DOCTYPE HTML>
<html>
<head>
<title>Test the OscillatorNode interface</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">
SimpleTest.waitForExplicitFinish();
addLoadEvent(function() {
var context = new AudioContext();
var osc = context.createOscillator();
is(osc.channelCount, 2, "Oscillator node has 2 input channels by default");
is(osc.channelCountMode, "max", "Correct channelCountMode for the Oscillator node");
is(osc.channelInterpretation, "speakers", "Correct channelCountInterpretation for the Oscillator node");
is(osc.type, "sine", "Correct default type");
expectException(function() {
osc.type = "custom";
}, DOMException.INVALID_STATE_ERR);
expectException(function() {
osc.type = osc.CUSTOM;
}, DOMException.INVALID_STATE_ERR);
is(osc.type, "sine", "Cannot set the type to custom");
is(osc.frequency.value, 440, "Correct default frequency value");
is(osc.detune.value, 0, "Correct default detine value");
// Make sure that we can set all of the valid type values
var types = [
"sine",
"square",
"sawtooth",
"triangle",
];
for (var i = 0; i < types.length; ++i) {
osc.type = osc[types[i].toUpperCase()];
is(osc.type, types[i], "Correct alternname type enum value");
osc.type = types[i];
}
// Verify setPeriodicWave()
var real = new Float32Array([1.0, 0.5, 0.25, 0.125]);
var imag = new Float32Array([1.0, 0.7, -1.0, 0.5]);
osc.setPeriodicWave(context.createPeriodicWave(real, imag));
is(osc.type, "custom", "Failed to set custom waveform");
SimpleTest.finish();
});
</script>
</pre>
</body>
</html>