|
1 <!DOCTYPE HTML> |
|
2 <html> |
|
3 <meta charset=utf-8> |
|
4 <head> |
|
5 <title>Test that we decode uint8 and sint16 wave files with correct conversion to float64</title> |
|
6 <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> |
|
7 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> |
|
8 </head> |
|
9 <body> |
|
10 <pre id="test"> |
|
11 <script class="testbody" type="text/javascript"> |
|
12 var testsDone = 0; |
|
13 var tests = ["UklGRjUrAABXQVZFZm10IBAAAAABAAEAESsAABErAAABAAgAZGF0YQMAAAD/AIA=", |
|
14 "UklGRkZWAABXQVZFZm10IBAAAAABAAEAESsAACJWAAACABAAZGF0YQYAAAD/fwCAAAA="]; |
|
15 |
|
16 SimpleTest.waitForExplicitFinish(); |
|
17 |
|
18 function base64ToUint8Buffer(b64) { |
|
19 var str = atob(b64) |
|
20 var u8 = new Uint8Array(str.length); |
|
21 for (var i = 0; i < str.length; ++i) { |
|
22 u8[i] = str.charCodeAt(i); |
|
23 } |
|
24 return u8; |
|
25 } |
|
26 |
|
27 function fixupBufferSampleRate(u8, rate) { |
|
28 u8[24] = (rate & 0x000000ff) >> 0; |
|
29 u8[25] = (rate & 0x0000ff00) >> 8; |
|
30 u8[26] = (rate & 0x00ff0000) >> 16; |
|
31 u8[27] = (rate & 0xff000000) >> 24; |
|
32 } |
|
33 |
|
34 function finishTest() { |
|
35 testsDone += 1; |
|
36 if (testsDone == tests.length) { |
|
37 SimpleTest.finish(); |
|
38 } |
|
39 } |
|
40 |
|
41 function decodeComplete(b) { |
|
42 ok(true, "Decoding succeeded."); |
|
43 is(b.numberOfChannels, 1, "Should have 1 channel."); |
|
44 is(b.length, 3, "Should have three samples."); |
|
45 var samples = b.getChannelData(0); |
|
46 ok(samples[0] > 0.99 && samples[0] < 1.01, "Check near 1.0. Got " + samples[0]); |
|
47 ok(samples[1] > -1.01 && samples[1] < -0.99, "Check near -1.0. Got " + samples[1]); |
|
48 ok(samples[2] > -0.01 && samples[2] < 0.01, "Check near 0.0. Got " + samples[2]); |
|
49 finishTest(); |
|
50 } |
|
51 |
|
52 function decodeFailed() { |
|
53 ok(false, "Decoding failed."); |
|
54 finishTest(); |
|
55 } |
|
56 |
|
57 addLoadEvent(function() { |
|
58 var context = new AudioContext(); |
|
59 |
|
60 for (var i = 0; i < tests.length; ++i) { |
|
61 var u8 = base64ToUint8Buffer(tests[i]); |
|
62 fixupBufferSampleRate(u8, context.sampleRate); |
|
63 context.decodeAudioData(u8.buffer, decodeComplete, decodeFailed); |
|
64 } |
|
65 }); |
|
66 </script> |
|
67 </pre> |
|
68 </body> |
|
69 </html> |