audiobuffer.html (2085B)
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title>AudioBuffer API Test</title> 5 <script src="/resources/testharness.js"></script> 6 <script src="/resources/testharnessreport.js"></script> 7 </head> 8 <body> 9 <script> 10 const sampleRate = 44100.0; 11 const lengthInSeconds = 2; 12 const numberOfChannels = 4; 13 14 test(() => { 15 const buffer = new AudioBuffer({ 16 numberOfChannels, 17 length: sampleRate * lengthInSeconds, 18 sampleRate 19 }); 20 21 assert_true( 22 true, 23 `buffer = new AudioBuffer({numberOfChannels: ${numberOfChannels}, ` + 24 `length: ${sampleRate * lengthInSeconds}, ` + 25 `sampleRate: ${sampleRate}})`); 26 27 assert_equals(buffer.sampleRate, sampleRate, 'buffer.sampleRate'); 28 assert_equals( 29 buffer.length, sampleRate * lengthInSeconds, 'buffer.length'); 30 assert_equals(buffer.duration, lengthInSeconds, 'buffer.duration'); 31 assert_equals( 32 buffer.numberOfChannels, numberOfChannels, 'buffer.numberOfChannels'); 33 34 for (let i = 0; i < buffer.numberOfChannels; ++i) { 35 assert_true( 36 buffer.getChannelData(i) instanceof Float32Array, 37 `buffer.getChannelData(${i}) instanceof Float32Array`); 38 } 39 40 assert_throws_dom( 41 'IndexSizeError', 42 () => buffer.getChannelData(buffer.numberOfChannels), 43 `buffer.getChannelData(${buffer.numberOfChannels}) throws`); 44 45 // Non-standard values (1000 & 24576) to test edge-case duration behavior. 46 const testSampleRate = 24576; 47 const testLength = 1000; 48 49 const buffer2 = new AudioBuffer({ 50 numberOfChannels: 1, 51 length: testLength, 52 sampleRate: testSampleRate 53 }); 54 55 const expectedDuration = testLength / testSampleRate; 56 57 assert_equals( 58 buffer2.duration, 59 expectedDuration, 60 'new AudioBuffer({numberOfChannels: 1,\n' + 61 `length: ${testLength},sampleRate: ${testSampleRate}}).duration`); 62 }, 'AudioBuffer: creation and property validation'); 63 </script> 64 </body> 65 </html>