Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1648)

Unified Diff: third_party/WebKit/LayoutTests/webaudio/audionode-channel-rules.html

Issue 1773973002: Complete the implementation of up/down-mixing rules for AudioNode (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Cleaning up and removing casting (after l-g-t-m) Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | third_party/WebKit/LayoutTests/webaudio/audionode-channel-rules-expected.txt » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/LayoutTests/webaudio/audionode-channel-rules.html
diff --git a/third_party/WebKit/LayoutTests/webaudio/audionode-channel-rules.html b/third_party/WebKit/LayoutTests/webaudio/audionode-channel-rules.html
index 7dcce636591b8f81e9fcc5907ebcb4af333ce582..1644c06bc923dc9da2b2dca931d1f844462e1a76 100644
--- a/third_party/WebKit/LayoutTests/webaudio/audionode-channel-rules.html
+++ b/third_party/WebKit/LayoutTests/webaudio/audionode-channel-rules.html
@@ -4,12 +4,11 @@
<head>
<script src="../resources/js-test.js"></script>
<script src="resources/compatibility.js"></script>
-<script type="text/javascript" src="resources/audio-testing.js"></script>
+<script src="resources/audio-testing.js"></script>
+<script src="resources/mixing-rules.js"></script>
</head>
<body>
-<div id="description"></div>
-<div id="console"></div>
<script>
description("Channel mixing rules for AudioNodes.");
@@ -45,96 +44,13 @@ var mixingRulesList = [
var numberOfTests = mixingRulesList.length * connectionsList.length;
-// Create an n-channel buffer, with all sample data zero except for a shifted impulse.
-// The impulse position depends on the channel index.
-// For example, for a 4-channel buffer:
-// channel0: 1 0 0 0 0 0 0 0
-// channel1: 0 1 0 0 0 0 0 0
-// channel2: 0 0 1 0 0 0 0 0
-// channel3: 0 0 0 1 0 0 0 0
-function createTestBuffer(numberOfChannels) {
- var buffer = context.createBuffer(numberOfChannels, singleTestFrameLength, context.sampleRate);
- for (var i = 0; i < numberOfChannels; ++i) {
- var data = buffer.getChannelData(i);
- data[i] = 1;
- }
- return buffer;
-}
-
-// Discrete channel interpretation mixing:
-// https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#UpMix
-// up-mix by filling channels until they run out then ignore remaining dest channels.
-// down-mix by filling as many channels as possible, then dropping remaining source channels.
-function discreteSum(sourceBuffer, destBuffer) {
- if (sourceBuffer.length != destBuffer.length) {
- alert("discreteSum(): invalid AudioBuffer!");
- return;
- }
-
- var numberOfChannels = sourceBuffer.numberOfChannels < destBuffer.numberOfChannels ? sourceBuffer.numberOfChannels : destBuffer.numberOfChannels;
- var length = numberOfChannels;
-
- for (var c = 0; c < numberOfChannels; ++c) {
- var source = sourceBuffer.getChannelData(c);
- var dest = destBuffer.getChannelData(c);
- for (var i = 0; i < length; ++i) {
- dest[i] += source[i];
- }
- }
-}
-
-// Speaker channel interpretation mixing:
-// https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#UpMix
-function speakersSum(sourceBuffer, destBuffer)
-{
- var numberOfSourceChannels = sourceBuffer.numberOfChannels;
- var numberOfDestinationChannels = destBuffer.numberOfChannels;
- var length = destBuffer.length;
-
- if (numberOfDestinationChannels == 2 && numberOfSourceChannels == 1) {
- // Handle mono -> stereo case (summing mono channel into both left and right).
- var source = sourceBuffer.getChannelData(0);
- var destL = destBuffer.getChannelData(0);
- var destR = destBuffer.getChannelData(1);
-
- for (var i = 0; i < length; ++i) {
- destL[i] += source[i];
- destR[i] += source[i];
- }
- } else if (numberOfDestinationChannels == 1 && numberOfSourceChannels == 2) {
- // Handle stereo -> mono case. output += 0.5 * (input.L + input.R).
- var sourceL = sourceBuffer.getChannelData(0);
- var sourceR = sourceBuffer.getChannelData(1);
- var dest = destBuffer.getChannelData(0);
-
- for (var i = 0; i < length; ++i) {
- dest[i] += 0.5 * (sourceL[i] + sourceR[i]);
- }
- } else if (numberOfDestinationChannels == 6 && numberOfSourceChannels == 1) {
- // Handle mono -> 5.1 case, sum mono channel into center.
- var source = sourceBuffer.getChannelData(0);
- var dest = destBuffer.getChannelData(2);
-
- for (var i = 0; i < length; ++i) {
- dest[i] += source[i];
- }
- } else if (numberOfDestinationChannels == 1 && numberOfSourceChannels == 6) {
- // Handle 5.1 -> mono.
- var sourceL = sourceBuffer.getChannelData(0);
- var sourceR = sourceBuffer.getChannelData(1);
- var sourceC = sourceBuffer.getChannelData(2);
- // skip LFE for now, according to current spec.
- var sourceSL = sourceBuffer.getChannelData(4);
- var sourceSR = sourceBuffer.getChannelData(5);
- var dest = destBuffer.getChannelData(0);
-
- for (var i = 0; i < length; ++i) {
- dest[i] += 0.7071 * (sourceL[i] + sourceR[i]) + sourceC[i] + 0.5 * (sourceSL[i] + sourceSR[i]);
- }
- } else {
- // Fallback for unknown combinations.
- discreteSum(sourceBuffer, destBuffer);
- }
+// Print out the information for an individual test case.
+function printTestInformation(testNumber, actualBuffer, expectedBuffer, frameLength, frameOffset) {
+ var actual = stringifyBuffer(actualBuffer, frameLength);
+ var expected = stringifyBuffer(expectedBuffer, frameLength, frameOffset);
+ debug('TEST CASE #' + testNumber + '\n');
+ debug('actual channels:\n' + actual);
+ debug('expected channels:\n' + expected);
}
function scheduleTest(testNumber, connections, channelCount, channelCountMode, channelInterpretation) {
@@ -160,24 +76,6 @@ function scheduleTest(testNumber, connections, channelCount, channelCountMode, c
}
}
-function computeNumberOfChannels(connections, channelCount, channelCountMode) {
- if (channelCountMode == "explicit")
- return channelCount;
-
- var computedNumberOfChannels = 1; // Must have at least one channel.
-
- // Compute "computedNumberOfChannels" based on all the connections.
- for (var i = 0; i < connections.length; ++i) {
- var connectionNumberOfChannels = connections.charCodeAt(i) - "0".charCodeAt(0);
- computedNumberOfChannels = Math.max(computedNumberOfChannels, connectionNumberOfChannels);
- }
-
- if (channelCountMode == "clamped-max")
- computedNumberOfChannels = Math.min(computedNumberOfChannels, channelCount);
-
- return computedNumberOfChannels;
-}
-
function checkTestResult(renderedBuffer, testNumber, connections, channelCount, channelCountMode, channelInterpretation) {
var s = "connections: " + connections + ", " + channelCountMode;
@@ -190,21 +88,6 @@ function checkTestResult(renderedBuffer, testNumber, connections, channelCount,
var computedNumberOfChannels = computeNumberOfChannels(connections, channelCount, channelCountMode);
- // Show rendered output for this test:
- //
- // console.log(s);
- // var sampleFrameOffset = testNumber * singleTestFrameLength;
- // for (var c = 0; c < renderNumberOfChannels; ++c) {
- // var data = renderedBuffer.getChannelData(c);
- // var s = "";
- // for (var sampleFrame = 0; sampleFrame < singleTestFrameLength; ++sampleFrame) {
- // s += data[sampleFrame + sampleFrameOffset] + " ";
- // }
- // s += "\n";
- // console.log(s);
- // }
- // return;
-
// Create a zero-initialized silent AudioBuffer with computedNumberOfChannels.
var destBuffer = context.createBuffer(computedNumberOfChannels, singleTestFrameLength, context.sampleRate);
@@ -222,6 +105,9 @@ function checkTestResult(renderedBuffer, testNumber, connections, channelCount,
}
}
+ // Use this when debugging mixing rules.
+ // printTestInformation(testNumber, renderedBuffer, destBuffer, singleTestFrameLength, sampleFrameOffset);
+
// Validate that destBuffer matches the rendered output.
// We need to check the rendered output at a specific sample-frame-offset corresponding
// to the specific test case we're checking for based on testNumber.
@@ -293,7 +179,7 @@ function runTest() {
// Create test buffers from 1 to 8 channels.
testBuffers = new Array();
for (var i = 0; i < renderNumberOfChannels; ++i) {
- testBuffers[i] = createTestBuffer(i + 1);
+ testBuffers[i] = createShiftedImpulseBuffer(context, i + 1, singleTestFrameLength);
}
// Schedule all the tests.
« no previous file with comments | « no previous file | third_party/WebKit/LayoutTests/webaudio/audionode-channel-rules-expected.txt » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698