WPT
wpt / webaudio / the-audio-api / the-audiobuffer-interface / audiobuffer-copy-channel.html
Spec: Web Audio API ↗
Runs: Chrome 155.0.8041.0 (wpt@4a01b83e3, 2026-09-04) | Firefox 157.0a1 (wpt@e7122b73f, 2026-09-04) | Safari 251 preview (wpt@2c385f65e, 2026-09-04) | Ladybird 1.0-70fb3 (wpt@4a01b83e3, 2026-09-04) | Servo Servo 0.6 (wpt@2c385f65e, 2026-09-04) | Blitz a50cb8971 (wpt@a95401e4e, 2026-09-03)
View on the Blitz WPT dashboard | Open test on wpt.live | wpt.fyi
| Chrome | Firefox | Safari | Ladybird | Servo | Blitz | |
|---|---|---|---|---|---|---|
| Total | 62/62 | 62/62 | 62/62 | 62/62 | 49/62 | NOT RUN |
| Subtest | Chrome | Firefox | Safari | Ladybird | Servo | Blitz |
|---|---|---|---|---|---|---|
| # AUDIT TASK RUNNER STARTED. | PASS | PASS | PASS | PASS | PASS | — |
| Executing "initialize" | PASS | PASS | PASS | PASS | PASS | — |
| Executing "copyFrom-exceptions" | PASS | PASS | PASS | PASS | FAIL | — |
| Executing "copyTo-exceptions" | PASS | PASS | PASS | PASS | FAIL | — |
| Executing "copyFrom-validate" | PASS | PASS | PASS | PASS | PASS | — |
| Executing "copyTo-validate" | PASS | PASS | PASS | PASS | PASS | — |
| Audit report | PASS | PASS | PASS | PASS | PASS | — |
| > [initialize] | PASS | PASS | PASS | PASS | PASS | — |
| Initialized values contains only the constant -1. | PASS | PASS | PASS | PASS | PASS | — |
| < [initialize] All assertions passed. (total 1 assertions) | PASS | PASS | PASS | PASS | PASS | — |
| > [copyFrom-exceptions] | PASS | PASS | PASS | PASS | PASS | — |
| AudioBuffer.prototype.copyFromChannel does exist. | PASS | PASS | PASS | PASS | PASS | — |
| 0: buffer = context.createBuffer(3, 16, context.sampleRate) did not throw an exception. | PASS | PASS | PASS | PASS | PASS | — |
| 1: buffer.copyFromChannel(null, 0) threw TypeError: "Failed to execute 'copyFromChannel' on 'AudioBuffer': parameter 1 is not of type 'Float32Array'.". | PASS | — | — | — | — | — |
| 2: buffer.copyFromChannel(context, 0) threw TypeError: "Failed to execute 'copyFromChannel' on 'AudioBuffer': parameter 1 is not of type 'Float32Array'.". | PASS | — | — | — | — | — |
| 3: buffer.copyFromChannel(x, -1) threw IndexSizeError: "Failed to execute 'copyFromChannel' on 'AudioBuffer': The channelNumber provided (-1) is outside the range [0, 2].". | PASS | — | — | — | — | — |
| 4: buffer.copyFromChannel(x, 3) threw IndexSizeError: "Failed to execute 'copyFromChannel' on 'AudioBuffer': The channelNumber provided (3) is outside the range [0, 2].". | PASS | — | — | — | — | — |
| 5: buffer.copyFromChannel(x, 0, -1) did not throw an exception. | PASS | PASS | PASS | PASS | — | — |
| 6: buffer.copyFromChannel(x, 0, 16) did not throw an exception. | PASS | PASS | PASS | PASS | — | — |
| 7: buffer.copyFromChannel(x, 3) threw IndexSizeError: "Failed to execute 'copyFromChannel' on 'AudioBuffer': The channelNumber provided (3) is outside the range [0, 2].". | PASS | — | — | — | — | — |
| 8: buffer.copyFromChannel(SharedArrayBuffer view, 0) threw TypeError: "Failed to execute 'copyFromChannel' on 'AudioBuffer': The provided Float32Array value must not be shared.". | PASS | — | — | — | — | — |
| 9: buffer.copyFromChannel(SharedArrayBuffer view, 0, 0) threw TypeError: "Failed to execute 'copyFromChannel' on 'AudioBuffer': The provided Float32Array value must not be shared.". | PASS | — | — | — | — | — |
| < [copyFrom-exceptions] All assertions passed. (total 11 assertions) | PASS | PASS | PASS | PASS | — | — |
| > [copyTo-exceptions] | PASS | PASS | PASS | PASS | PASS | — |
| AudioBuffer.prototype.copyToChannel does exist. | PASS | PASS | PASS | PASS | PASS | — |
| 0: buffer.copyToChannel(null, 0) threw TypeError: "Failed to execute 'copyToChannel' on 'AudioBuffer': parameter 1 is not of type 'Float32Array'.". | PASS | — | — | — | — | — |
| 1: buffer.copyToChannel(context, 0) threw TypeError: "Failed to execute 'copyToChannel' on 'AudioBuffer': parameter 1 is not of type 'Float32Array'.". | PASS | — | — | — | — | — |
| 2: buffer.copyToChannel(x, -1) threw IndexSizeError: "Failed to execute 'copyToChannel' on 'AudioBuffer': The channelNumber provided (-1) is outside the range [0, 2].". | PASS | — | — | — | — | — |
| 3: buffer.copyToChannel(x, 3) threw IndexSizeError: "Failed to execute 'copyToChannel' on 'AudioBuffer': The channelNumber provided (3) is outside the range [0, 2].". | PASS | — | — | — | — | — |
| 4: buffer.copyToChannel(x, 0, -1) did not throw an exception. | PASS | PASS | PASS | PASS | — | — |
| 5: buffer.copyToChannel(x, 0, 16) did not throw an exception. | PASS | PASS | PASS | PASS | — | — |
| 6: buffer.copyToChannel(x, 3) threw IndexSizeError: "Failed to execute 'copyToChannel' on 'AudioBuffer': The channelNumber provided (3) is outside the range [0, 2].". | PASS | — | — | — | — | — |
| 7: buffer.copyToChannel(SharedArrayBuffer view, 0) threw TypeError: "Failed to execute 'copyToChannel' on 'AudioBuffer': The provided Float32Array value must not be shared.". | PASS | — | — | — | — | — |
| 8: buffer.copyToChannel(SharedArrayBuffer view, 0, 0) threw TypeError: "Failed to execute 'copyToChannel' on 'AudioBuffer': The provided Float32Array value must not be shared.". | PASS | — | — | — | — | — |
| < [copyTo-exceptions] All assertions passed. (total 10 assertions) | PASS | PASS | PASS | PASS | — | — |
| > [copyFrom-validate] | PASS | PASS | PASS | PASS | PASS | — |
| buffer.copyFromChannel(dst8, 0) is identical to the array [1,2,3,4,5,6,7,8]. | PASS | PASS | PASS | PASS | PASS | — |
| buffer.copyFromChannel(dst8, 1) is identical to the array [2,3,4,5,6,7,8,9]. | PASS | PASS | PASS | PASS | PASS | — |
| buffer.copyFromChannel(dst8, 2) is identical to the array [3,4,5,6,7,8,9,10]. | PASS | PASS | PASS | PASS | PASS | — |
| buffer.copyFromChannel(dst8, 0, 1) is identical to the array [2,3,4,5,6,7,8,9]. | PASS | PASS | PASS | PASS | PASS | — |
| buffer.copyFromChannel(dst8, 1, 1) is identical to the array [3,4,5,6,7,8,9,10]. | PASS | PASS | PASS | PASS | PASS | — |
| buffer.copyFromChannel(dst8, 2, 1) is identical to the array [4,5,6,7,8,9,10,11]. | PASS | PASS | PASS | PASS | PASS | — |
| buffer.copyFromChannel(dst8, 0, 11) is identical to the array [12,13,14,15,16,-1,-1,-1]. | PASS | PASS | PASS | PASS | PASS | — |
| buffer.copyFromChannel(dst8, 1, 11) is identical to the array [13,14,15,16,17,-1,-1,-1]. | PASS | PASS | PASS | PASS | PASS | — |
| buffer.copyFromChannel(dst8, 2, 11) is identical to the array [14,15,16,17,18,-1,-1,-1]. | PASS | PASS | PASS | PASS | PASS | — |
| buffer.copyFromChannel(dst26, 0) is identical to the array [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16...]. | PASS | PASS | PASS | PASS | PASS | — |
| buffer.copyFromChannel(dst26, 1) is identical to the array [2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17...]. | PASS | PASS | PASS | PASS | PASS | — |
| buffer.copyFromChannel(dst26, 2) is identical to the array [3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18...]. | PASS | PASS | PASS | PASS | PASS | — |
| < [copyFrom-validate] All assertions passed. (total 12 assertions) | PASS | PASS | PASS | PASS | PASS | — |
| > [copyTo-validate] | PASS | PASS | PASS | PASS | PASS | — |
| buffer = createConstantBuffer(context, 16, [-1,-1,-1]) did not throw an exception. | PASS | PASS | PASS | PASS | PASS | — |
| buffer.copyToChannel(src, 0) is identical to the array [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16...]. | PASS | PASS | PASS | PASS | PASS | — |
| buffer.copyToChannel(src, 1) is identical to the array [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16...]. | PASS | PASS | PASS | PASS | PASS | — |
| buffer.copyToChannel(src, 2) is identical to the array [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16...]. | PASS | PASS | PASS | PASS | PASS | — |
| buffer.copyToChannel(src10, 0) is identical to the array [1,2,3,4,5,6,7,8,9,10,-1,-1,-1,-1,-1,-1...]. | PASS | PASS | PASS | PASS | PASS | — |
| buffer.copyToChannel(src10, 1) is identical to the array [1,2,3,4,5,6,7,8,9,10,-1,-1,-1,-1,-1,-1...]. | PASS | PASS | PASS | PASS | PASS | — |
| buffer.copyToChannel(src10, 2) is identical to the array [1,2,3,4,5,6,7,8,9,10,-1,-1,-1,-1,-1,-1...]. | PASS | PASS | PASS | PASS | PASS | — |
| buffer.copyToChannel(src10, 0, 5) is identical to the array [-1,-1,-1,-1,-1,1,2,3,4,5,6,7,8,9,10,-1...]. | PASS | PASS | PASS | PASS | PASS | — |
| buffer.copyToChannel(src10, 1, 5) is identical to the array [-1,-1,-1,-1,-1,1,2,3,4,5,6,7,8,9,10,-1...]. | PASS | PASS | PASS | PASS | PASS | — |
| buffer.copyToChannel(src10, 2, 5) is identical to the array [-1,-1,-1,-1,-1,1,2,3,4,5,6,7,8,9,10,-1...]. | PASS | PASS | PASS | PASS | PASS | — |
| < [copyTo-validate] All assertions passed. (total 10 assertions) | PASS | PASS | PASS | PASS | PASS | — |
| # AUDIT TASK RUNNER FINISHED: 5 tasks ran successfully. | PASS | PASS | PASS | PASS | — | — |
| 1: buffer.copyFromChannel(null, 0) threw TypeError: "AudioBuffer.copyFromChannel: Argument 1 is not an object.". | — | PASS | — | — | — | — |
| 2: buffer.copyFromChannel(context, 0) threw TypeError: "AudioBuffer.copyFromChannel: Argument 1 does not implement interface Float32Array.". | — | PASS | — | — | — | — |
| 3: buffer.copyFromChannel(x, -1) threw IndexSizeError: "AudioBuffer.copyFromChannel: Channel number (4294967295) is out of range". | — | PASS | — | — | — | — |
| 4: buffer.copyFromChannel(x, 3) threw IndexSizeError: "AudioBuffer.copyFromChannel: Channel number (3) is out of range". | — | PASS | — | — | — | — |
| 7: buffer.copyFromChannel(x, 3) threw IndexSizeError: "AudioBuffer.copyFromChannel: Channel number (3) is out of range". | — | PASS | — | — | — | — |
| 8: buffer.copyFromChannel(SharedArrayBuffer view, 0) threw TypeError: "AudioBuffer.copyFromChannel: Argument 1 can't be a SharedArrayBuffer or an ArrayBufferView backed by a SharedArrayBuffer". | — | PASS | — | — | — | — |
| 9: buffer.copyFromChannel(SharedArrayBuffer view, 0, 0) threw TypeError: "AudioBuffer.copyFromChannel: Argument 1 can't be a SharedArrayBuffer or an ArrayBufferView backed by a SharedArrayBuffer". | — | PASS | — | — | — | — |
| 0: buffer.copyToChannel(null, 0) threw TypeError: "AudioBuffer.copyToChannel: Argument 1 is not an object.". | — | PASS | — | — | — | — |
| 1: buffer.copyToChannel(context, 0) threw TypeError: "AudioBuffer.copyToChannel: Argument 1 does not implement interface Float32Array.". | — | PASS | — | — | — | — |
| 2: buffer.copyToChannel(x, -1) threw IndexSizeError: "AudioBuffer.copyToChannel: Channel number (4294967295) is out of range". | — | PASS | — | — | — | — |
| 3: buffer.copyToChannel(x, 3) threw IndexSizeError: "AudioBuffer.copyToChannel: Channel number (3) is out of range". | — | PASS | — | — | — | — |
| 6: buffer.copyToChannel(x, 3) threw IndexSizeError: "AudioBuffer.copyToChannel: Channel number (3) is out of range". | — | PASS | — | — | — | — |
| 7: buffer.copyToChannel(SharedArrayBuffer view, 0) threw TypeError: "AudioBuffer.copyToChannel: Argument 1 can't be a SharedArrayBuffer or an ArrayBufferView backed by a SharedArrayBuffer". | — | PASS | — | — | — | — |
| 8: buffer.copyToChannel(SharedArrayBuffer view, 0, 0) threw TypeError: "AudioBuffer.copyToChannel: Argument 1 can't be a SharedArrayBuffer or an ArrayBufferView backed by a SharedArrayBuffer". | — | PASS | — | — | — | — |
| 1: buffer.copyFromChannel(null, 0) threw TypeError: "Argument 1 ('destination') to AudioBuffer.copyFromChannel must be an instance of Float32Array". | — | — | PASS | — | — | — |
| 2: buffer.copyFromChannel(context, 0) threw TypeError: "Argument 1 ('destination') to AudioBuffer.copyFromChannel must be an instance of Float32Array". | — | — | PASS | — | — | — |
| 3: buffer.copyFromChannel(x, -1) threw IndexSizeError: "Not a valid channelNumber.". | — | — | PASS | — | — | — |
| 4: buffer.copyFromChannel(x, 3) threw IndexSizeError: "Not a valid channelNumber.". | — | — | PASS | — | — | — |
| 7: buffer.copyFromChannel(x, 3) threw IndexSizeError: "Not a valid channelNumber.". | — | — | PASS | — | — | — |
| 8: buffer.copyFromChannel(SharedArrayBuffer view, 0) threw TypeError: "Argument 1 ('destination') to AudioBuffer.copyFromChannel must be an instance of Float32Array". | — | — | PASS | — | — | — |
| 9: buffer.copyFromChannel(SharedArrayBuffer view, 0, 0) threw TypeError: "Argument 1 ('destination') to AudioBuffer.copyFromChannel must be an instance of Float32Array". | — | — | PASS | — | — | — |
| 0: buffer.copyToChannel(null, 0) threw TypeError: "Argument 1 ('source') to AudioBuffer.copyToChannel must be an instance of Float32Array". | — | — | PASS | — | — | — |
| 1: buffer.copyToChannel(context, 0) threw TypeError: "Argument 1 ('source') to AudioBuffer.copyToChannel must be an instance of Float32Array". | — | — | PASS | — | — | — |
| 2: buffer.copyToChannel(x, -1) threw IndexSizeError: "Not a valid channelNumber.". | — | — | PASS | — | — | — |
| 3: buffer.copyToChannel(x, 3) threw IndexSizeError: "Not a valid channelNumber.". | — | — | PASS | — | — | — |
| 6: buffer.copyToChannel(x, 3) threw IndexSizeError: "Not a valid channelNumber.". | — | — | PASS | — | — | — |
| 7: buffer.copyToChannel(SharedArrayBuffer view, 0) threw TypeError: "Argument 1 ('source') to AudioBuffer.copyToChannel must be an instance of Float32Array". | — | — | PASS | — | — | — |
| 8: buffer.copyToChannel(SharedArrayBuffer view, 0, 0) threw TypeError: "Argument 1 ('source') to AudioBuffer.copyToChannel must be an instance of Float32Array". | — | — | PASS | — | — | — |
| 1: buffer.copyFromChannel(null, 0) threw TypeError: "Value is not an object.". | — | — | — | — | PASS | — |
| 2: buffer.copyFromChannel(context, 0) threw TypeError: "value is not a typed array.". | — | — | — | — | PASS | — |
| 3: buffer.copyFromChannel(x, -1) threw IndexSizeError: "The index is not in the allowed range.". | — | — | — | — | PASS | — |
| 4: buffer.copyFromChannel(x, 3) threw IndexSizeError: "The index is not in the allowed range.". | — | — | — | — | PASS | — |
| X 5: buffer.copyFromChannel(x, 0, -1) incorrectly threw IndexSizeError: "The index is not in the allowed range.". | — | — | — | — | FAIL | — |
| X 6: buffer.copyFromChannel(x, 0, 16) incorrectly threw IndexSizeError: "The index is not in the allowed range.". | — | — | — | — | FAIL | — |
| 7: buffer.copyFromChannel(x, 3) threw IndexSizeError: "The index is not in the allowed range.". | — | — | — | — | PASS | — |
| 0: buffer.copyToChannel(null, 0) threw TypeError: "Value is not an object.". | — | — | — | — | PASS | — |
| 1: buffer.copyToChannel(context, 0) threw TypeError: "value is not a typed array.". | — | — | — | — | PASS | — |
| 2: buffer.copyToChannel(x, -1) threw IndexSizeError: "The index is not in the allowed range.". | — | — | — | — | PASS | — |
| 3: buffer.copyToChannel(x, 3) threw IndexSizeError: "The index is not in the allowed range.". | — | — | — | — | PASS | — |
| X 4: buffer.copyToChannel(x, 0, -1) incorrectly threw IndexSizeError: "The index is not in the allowed range.". | — | — | — | — | FAIL | — |
| X 5: buffer.copyToChannel(x, 0, 16) incorrectly threw IndexSizeError: "The index is not in the allowed range.". | — | — | — | — | FAIL | — |
| 6: buffer.copyToChannel(x, 3) threw IndexSizeError: "The index is not in the allowed range.". | — | — | — | — | PASS | — |
| # AUDIT TASK RUNNER FINISHED: 2 out of 5 tasks were failed. | — | — | — | — | FAIL | — |
| 1: buffer.copyFromChannel(null, 0) threw TypeError: "Not an object of type Float32Array". | — | — | — | PASS | — | — |
| 2: buffer.copyFromChannel(context, 0) threw TypeError: "Not an object of type Float32Array". | — | — | — | PASS | — | — |
| 3: buffer.copyFromChannel(x, -1) threw IndexSizeError: "Channel index is out of range". | — | — | — | PASS | — | — |
| 4: buffer.copyFromChannel(x, 3) threw IndexSizeError: "Channel index is out of range". | — | — | — | PASS | — | — |
| 7: buffer.copyFromChannel(x, 3) threw IndexSizeError: "Channel index is out of range". | — | — | — | PASS | — | — |
| 8: buffer.copyFromChannel(SharedArrayBuffer view, 0) threw TypeError: "The array buffer object cannot be a SharedArrayBuffer". | — | — | — | PASS | — | — |
| 9: buffer.copyFromChannel(SharedArrayBuffer view, 0, 0) threw TypeError: "The array buffer object cannot be a SharedArrayBuffer". | — | — | — | PASS | — | — |
| 0: buffer.copyToChannel(null, 0) threw TypeError: "Not an object of type Float32Array". | — | — | — | PASS | — | — |
| 1: buffer.copyToChannel(context, 0) threw TypeError: "Not an object of type Float32Array". | — | — | — | PASS | — | — |
| 2: buffer.copyToChannel(x, -1) threw IndexSizeError: "Channel index is out of range". | — | — | — | PASS | — | — |
| 3: buffer.copyToChannel(x, 3) threw IndexSizeError: "Channel index is out of range". | — | — | — | PASS | — | — |
| 6: buffer.copyToChannel(x, 3) threw IndexSizeError: "Channel index is out of range". | — | — | — | PASS | — | — |
| 7: buffer.copyToChannel(SharedArrayBuffer view, 0) threw TypeError: "The array buffer object cannot be a SharedArrayBuffer". | — | — | — | PASS | — | — |
| 8: buffer.copyToChannel(SharedArrayBuffer view, 0, 0) threw TypeError: "The array buffer object cannot be a SharedArrayBuffer". | — | — | — | PASS | — | — |