forked from LadybirdBrowser/ladybird
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
LibWeb: Add
BaseAudioContext.create_periodic_wave()
factory method
- Loading branch information
1 parent
f90b79f
commit a6f0450
Showing
5 changed files
with
179 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
35 changes: 35 additions & 0 deletions
35
...xt/expected/wpt-import/webaudio/the-audio-api/the-periodicwave-interface/periodicWave.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
Harness status: OK | ||
|
||
Found 29 tests | ||
|
||
28 Pass | ||
1 Fail | ||
Pass # AUDIT TASK RUNNER STARTED. | ||
Pass Executing "create with factory method" | ||
Pass Executing "different length with factory method" | ||
Pass Executing "too small with factory method" | ||
Pass Executing "create with constructor" | ||
Pass Executing "different length with constructor" | ||
Pass Executing "too small with constructor" | ||
Fail Executing "output test" | ||
Pass Audit report | ||
Pass > [create with factory method] | ||
Pass context.createPeriodicWave(new Float32Array(8192), new Float32Array(8192)) did not throw an exception. | ||
Pass < [create with factory method] All assertions passed. (total 1 assertions) | ||
Pass > [different length with factory method] | ||
Pass context.createPeriodicWave(new Float32Array(512), new Float32Array(4)) threw IndexSizeError: "Real and imaginary arrays must have the same length and contain at least 2 elements". | ||
Pass < [different length with factory method] All assertions passed. (total 1 assertions) | ||
Pass > [too small with factory method] | ||
Pass context.createPeriodicWave(new Float32Array(1), new Float32Array(1)) threw IndexSizeError: "Real and imaginary arrays must have the same length and contain at least 2 elements". | ||
Pass < [too small with factory method] All assertions passed. (total 1 assertions) | ||
Pass > [create with constructor] | ||
Pass new PeriodicWave(context, { real : new Float32Array(8192), imag : new Float32Array(8192) }) did not throw an exception. | ||
Pass < [create with constructor] All assertions passed. (total 1 assertions) | ||
Pass > [different length with constructor] | ||
Pass new PeriodicWave(context, { real : new Float32Array(8192), imag : new Float32Array(4) }) threw IndexSizeError: "Real and imaginary arrays must have the same length and contain at least 2 elements". | ||
Pass < [different length with constructor] All assertions passed. (total 1 assertions) | ||
Pass > [too small with constructor] | ||
Pass new PeriodicWave(context, { real : new Float32Array(1), imag : new Float32Array(1) }) threw IndexSizeError: "Real and imaginary arrays must have the same length and contain at least 2 elements". | ||
Pass < [too small with constructor] All assertions passed. (total 1 assertions) | ||
Pass > [output test] | ||
Pass # AUDIT TASK RUNNER FINISHED: 7 tasks ran successfully. |
130 changes: 130 additions & 0 deletions
130
...Text/input/wpt-import/webaudio/the-audio-api/the-periodicwave-interface/periodicWave.html
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,130 @@ | ||
<!DOCTYPE html> | ||
<html> | ||
<head> | ||
<title> | ||
Test Constructor: PeriodicWave | ||
</title> | ||
<script src="../../../resources/testharness.js"></script> | ||
<script src="../../../resources/testharnessreport.js"></script> | ||
<script src="../../../webaudio/resources/audit-util.js"></script> | ||
<script src="../../../webaudio/resources/audit.js"></script> | ||
</head> | ||
<body> | ||
<script id="layout-test-code"> | ||
// real and imag are used in separate PeriodicWaves to make their peak values | ||
// easy to determine. | ||
const realMax = 99; | ||
var real = new Float32Array(realMax + 1); | ||
real[1] = 2.0; // fundamental | ||
real[realMax] = 3.0; | ||
const realPeak = real[1] + real[realMax]; | ||
const realFundamental = 19.0; | ||
var imag = new Float32Array(4); | ||
imag[0] = 6.0; // should be ignored. | ||
imag[3] = 0.5; | ||
const imagPeak = imag[3]; | ||
const imagFundamental = 551.0; | ||
|
||
const testLength = 8192; | ||
let context = new AudioContext(); | ||
|
||
let audit = Audit.createTaskRunner(); | ||
|
||
// Create with the factory method | ||
|
||
audit.define('create with factory method', (task, should) => { | ||
should(() => { | ||
context.createPeriodicWave(new Float32Array(testLength), new Float32Array(testLength)); | ||
}, 'context.createPeriodicWave(new Float32Array(' + testLength + '), ' + | ||
'new Float32Array(' + testLength + '))').notThrow(); | ||
task.done(); | ||
}); | ||
|
||
audit.define('different length with factory method', (task, should) => { | ||
should(() => { | ||
context.createPeriodicWave(new Float32Array(512), new Float32Array(4)); | ||
}, 'context.createPeriodicWave(new Float32Array(512), ' + | ||
'new Float32Array(4))').throw(DOMException, "IndexSizeError"); | ||
task.done(); | ||
}); | ||
|
||
audit.define('too small with factory method', (task, should) => { | ||
should(() => { | ||
context.createPeriodicWave(new Float32Array(1), new Float32Array(1)); | ||
}, 'context.createPeriodicWave(new Float32Array(1), ' + | ||
'new Float32Array(1))').throw(DOMException, "IndexSizeError"); | ||
task.done(); | ||
}); | ||
|
||
// Create with the constructor | ||
|
||
audit.define('create with constructor', (task, should) => { | ||
should(() => { | ||
new PeriodicWave(context, { real: new Float32Array(testLength), imag: new Float32Array(testLength) }); | ||
}, 'new PeriodicWave(context, { real : new Float32Array(' + testLength + '), ' + | ||
'imag : new Float32Array(' + testLength + ') })').notThrow(); | ||
task.done(); | ||
}); | ||
|
||
audit.define('different length with constructor', (task, should) => { | ||
should(() => { | ||
new PeriodicWave(context, { real: new Float32Array(testLength), imag: new Float32Array(4) }); | ||
}, 'new PeriodicWave(context, { real : new Float32Array(' + testLength + '), ' + | ||
'imag : new Float32Array(4) })').throw(DOMException, "IndexSizeError"); | ||
task.done(); | ||
}); | ||
|
||
audit.define('too small with constructor', (task, should) => { | ||
should(() => { | ||
new PeriodicWave(context, { real: new Float32Array(1), imag: new Float32Array(1) }); | ||
}, 'new PeriodicWave(context, { real : new Float32Array(1), ' + | ||
'imag : new Float32Array(1) })').throw(DOMException, "IndexSizeError"); | ||
task.done(); | ||
}); | ||
|
||
audit.define('output test', (task, should) => { | ||
let context = new OfflineAudioContext(2, testLength, 44100); | ||
// Create the expected output buffer | ||
let expectations = context.createBuffer(2, testLength, context.sampleRate); | ||
for (var i = 0; i < expectations.length; ++i) { | ||
|
||
expectations.getChannelData(0)[i] = 1.0 / realPeak * | ||
(real[1] * Math.cos(2 * Math.PI * realFundamental * i / | ||
context.sampleRate) + | ||
real[realMax] * Math.cos(2 * Math.PI * realMax * realFundamental * i / | ||
context.sampleRate)); | ||
|
||
expectations.getChannelData(1)[i] = 1.0 / imagPeak * | ||
imag[3] * Math.sin(2 * Math.PI * 3 * imagFundamental * i / | ||
context.sampleRate); | ||
} | ||
|
||
// Create the real output buffer | ||
let merger = context.createChannelMerger(); | ||
|
||
let osc1 = context.createOscillator(); | ||
let osc2 = context.createOscillator(); | ||
|
||
osc1.setPeriodicWave(context.createPeriodicWave( | ||
real, new Float32Array(real.length))); | ||
osc2.setPeriodicWave(context.createPeriodicWave( | ||
new Float32Array(imag.length), imag)); | ||
osc1.frequency.value = realFundamental; | ||
osc2.frequency.value = imagFundamental; | ||
|
||
osc1.start(); | ||
osc2.start(); | ||
|
||
osc1.connect(merger, 0, 0); | ||
osc2.connect(merger, 0, 1); | ||
|
||
context.startRendering().then(reality => { | ||
should(reality, 'rendering PeriodicWave').beEqualToArray(expectations); | ||
task.done(); | ||
}); | ||
}); | ||
|
||
audit.run(); | ||
</script> | ||
</body> | ||
</html> |