рдЗрд╕ рд╡рд┐рд╖рдп рдХреА рдкреНрд░реЗрд░рдгрд╛ рдХреЗ рддрд╣рдд рдмрдирд╛рдпрд╛ рдЧрдпрд╛ред
рд╕рд╛рдорд╛рдиреНрдп рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рднреА рдХреЛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╡рд╣ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдпрд╛ рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рд╕рдм рдХреБрдЫ рдиреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реЛрдЧрд╛ред js.
Wav рдлрд╝рд╛рдЗрд▓
рддрд░рдВрдЧ рдбрд┐рдЬреАрдЯрд▓ рдСрдбрд┐рдпреЛ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╛рд░реВрдк рд╣реИред рдпрд╣ рдПрдХ рдорд╛рдирдХ RIFF рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдбреЗрдЯрд╛ рдХреЛ 3 рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
- рд╣реИрдбрд░
- рдкреНрд░рд╛рд░реВрдк рдЕрдиреБрднрд╛рдЧ
- рдбреЗрдЯрд╛
рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЖрдорддреМрд░ рдкрд░ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдлрд╝рд╛рдЗрд▓ рдкрд╛рд░реНрд╕рд┐рдВрдЧ
var http = require('http'); var fs = require('fs'); var sys= require('sys') var Canvas = require('canvas');
рд╣рдо рдЙрди рдореЙрдбреНрдпреВрд▓ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЬрд╝рд░реВрд░рдд рд╣реЛрддреА рд╣реИ, рд╣рдореЗрдВ рддрд░рдВрдЧ рдлрд╝рд╛рдЗрд▓ рдХреА рддрд░рдВрдЧ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдиреЛрдб-рдХреИрдирд╡рд╛рд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
var path = '/my/files/TH.wav';
рдлрд╝рд╛рдЗрд▓ рдкрд╛рд░реНрд╕ рд╣реЛ рд░рд╣реА рд╣реИ ...
рд╣реИрдбрд░
рдкрд╣рд▓рд╛ рднрд╛рдЧ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╣реИред рдЗрд╕реЗ 4 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ 3 рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рднреА рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
- рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдХрд╛рд░ рд╣реЛрддрд╛ рд╣реИ - "RIFF"
- рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЖрдХрд╛рд░
- "рддрд░рдВрдЧ" рд▓реЗрдмрд▓ рд╢рд╛рдорд┐рд▓ рд╣реИ
var text = ''; var j = 0 for (var i = j; i < j + 4; i++) { text += String.fromCharCode(data[i]); } j = i; wave.type = text;
рдпрд╣рд╛рдВ рдПрдХ рд╕реВрдХреНрд╖реНрдорддрд╛ рд╣реИ - рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд░реАрдб рдмрд╛рдЗрдЯреНрд╕ рдХреЛ 10 рд╡реАрдВ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрд╕реБрд╡рд┐рдзрд╛ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдРрдбрдмрд╛рдЗрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдмрд╛рдЗрдЯ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд▓рд╛рдкрддрд╛ рдмрд┐рдЯреНрд╕ рдХреЛ рдЬреЛрдбрд╝ рджреЗрдЧрд╛ред
function addByte(byt) { while (8 != byt.length) { byt = '0' + byt; } return byt; }
var text = ''; for (var i = j; i < j + 4; i++) { text += String.fromCharCode(data[i]); } j = i; console.log(j + ' Label -' + text); wave.label = text;
рдбреЗрдЯрд╛ рдкреНрд░рд╛рд░реВрдк рдЕрдиреБрднрд╛рдЧ
рд╣реЗрдбрд░ рдХреЗ рдареАрдХ рдмрд╛рдж рдбреЗрдЯрд╛ рдлреЙрд░реНрдореЗрдЯ рд╕реЗрдХреНрд╢рди рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдХреАрд╡рд░реНрдб "fmt" рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ
var text = ''; for (var i = j; i < j + 4; i++) { text += String.fromCharCode(data[i]);
рдЗрд╕рдХреЗ рдмрд╛рдж рдлрд╛рдЗрд▓ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред
рдЖрдХрд╛рд░, рдмрд╛рдЗрдЯ | рдирд╛рдо | рд╡рд┐рд╡рд░рдг |
---|
4 | рдЪрдВрдХ рдбреЗрдЯрд╛ рдХрд╛ рдЖрдХрд╛рд░ | рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕рдорд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реИ |
2 | рд╕рдВрдкреАрдбрд╝рди рдХреЛрдб | рдЗрд╕рдореЗрдВ рдХреЛрдб рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдлрд╝рд╛рдЗрд▓ рд╕рдВрдкреАрдбрд╝рди рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ (рдПрдХ wav рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдордкреАрдИрдЬреА рджреНрд╡рд╛рд░рд╛ рднреА рдзреНрд╡рдирд┐ рдкрд┐рди рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ), рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ 1 рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдкреАрд╕реАрдПрдо / рдЕрд╕рдореНрдкреАрдбрд┐рдд, рдЕрд░реНрдерд╛рддреНред рдХреЛрдИ рд╕рдВрдкреАрдбрд╝рди рдирд╣реАрдВ |
2 | рдЪреИрдирд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ | рдЪреИрдирд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛, wav рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдорд▓реНрдЯреА-рдЪреИрдирд▓ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП 5.1 |
4 | рдирдореВрдирд╛ рджрд░ | рдирдореВрдирд╛ рджрд░, рдЖрдорддреМрд░ рдкрд░ 44100 - рд╕реАрдбреА рдирдореВрдирд╛ рджрд░ |
4 | рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдФрд╕рдд рдмрд╛рдЗрдЯреНрд╕ | рдлрд╝рд╛рдЗрд▓ рдмрд┐рдЯрд░реЗрдЯ рдХрд░реЗрдВ |
2 | рдмреНрд▓реЙрдХ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░реЗрдВ | рдзреНрд╡рдирд┐ рдХрд╛ 1 рдлреНрд░реЗрдо рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдЪреИрдирд▓ рд╕реНрдерд┐рдд рд╣реИрдВ, рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдпрд╛ рдЖрдк рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ - рдирдореВрдирд╛ рдЖрдХрд╛рд░ |
2 | рдирдореВрдирд╛ рдкреНрд░рддрд┐ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдЯреНрд╕ | рдПрдХ рдЪреИрдирд▓ рдХреЗ рдлреНрд░реЗрдо рдХреЛ рдХреВрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рдЯреНрд╕ (!) рдХреА рд╕рдВрдЦреНрдпрд╛ |
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡реЗрд╡ рдлрд╛рдЗрд▓ рдмрдирд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдпрд╣рд╛рдВ рдХреБрдЫ рднреА рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдЕрдХреНрд╕рд░ рдмрд╛рдж рдореЗрдВ рдЗрди рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдбреЗрдЯрд╛
рдЪреВрдВрдХрд┐ fmt рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝реАрд▓реНрдбреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрд╣реБрдд рдЕрдиреБрдорд╛рдирд┐рдд рдирд╣реАрдВ рд╣реИ (рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдерд┐рддрд┐ рдЕрдХреНрд╕рд░ extra_bytes_format рдлрд╝реАрд▓реНрдб рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ), рд╕реНрдкрд░реНрд╢ рджреНрд╡рд╛рд░рд╛ "рдбреЗрдЯрд╛" рдХреАрд╡рд░реНрдб рдХреЛ рдвреВрдВрдврдирд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╣реИред
while (!(text == 'data' || j == wave.size)) { text = String.fromCharCode(data[j]) + String.fromCharCode(data[j + 1]) + String.fromCharCode(data[j + 2]) + String.fromCharCode(data[j + 3]); j++; } wave.data_position = j;
рдХреАрд╡рд░реНрдб рдХреЗ рдмрд╛рдж 4 рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рдбреЗрдЯрд╛ рдХрд╛ рдЖрдХрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
var text = ''; for (var i = j; i < j + 4; i++) { var byt = data[i].toString(2); if (byt.length != 8) { byt = addByte(byt) } text = byt + text; } j = i; wave.chunk_size = parseInt(text, 2);
рдЕрдм рд╣рдо рд╕реНрд╡рдпрдВ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЪреАрдЬреЗрдВ рдорд┐рд▓ рдЧрдИрдВред рдЗрд╕ рд╡рд┐рд╖рдп рдореЗрдВ, рдореИрдВ 2 рдЪреИрдирд▓реЛрдВ рдХреЗ рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рдмрд╣реБрдд рджреБрд░реНрд▓рдн рд╣реИрдВред
рдиреЛрдб рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж - рдХреИрдирд╡рд╛рд╕-рдиреЛрдб, рд╣рдо рддрд░рдВрдЧреЛрдВ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд▓рд╣рд░реЗрдВ рдЦреАрдВрдЪреЛ
рдЖрдк рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдПрдХ рдирд┐рдпрдорд┐рдд рдХреИрдирд╡рд╛рд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
var canvas = new Canvas(900, 300); var ctx = canvas.getContext('2d'); var canvas2 = new Canvas(900, 300); var ctx2 = canvas2.getContext('2d'); ctx.strokeStyle = 'rgba(0,187,255,1)'; ctx.beginPath(); ctx.moveTo(0, 150); ctx2.strokeStyle = 'rgba(0,187,255,1)'; ctx2.beginPath(); ctx2.moveTo(0, 150); wave.k = 900 / wave.lc.length; wave.l = 300 / Math.pow(2, wave.significant_bits_per_sample);
рдкрд░рд┐рдгрд╛рдо
ps рдЧреБрдгрд╡рддреНрддрд╛ рдФрд░ рдЙрдк-рдХреЛрдб рдХреЛрдб рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВред рдореИрдВ рд╕рд┐рд░реНрдл рд╕реАрдЦ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореИрдВрдиреЗ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рд╕рд░рд▓ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред