рд╣рдо рд╡рд┐рдЬреБрдЕрд▓ рд▓рд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдСрдбрд┐рдпреЛ рдПрдкреАрдЖрдИ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ


рдореЗрд░реЗ рд▓рд┐рдП рд╡реЗрдм рдСрдбрд┐рдпреЛ рдПрдкреАрдЖрдИ рдЙрди рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдЬреЛ рдЕрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд╕рд╛рде crammed рд╣реИрдВ, рдФрд░ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдореИрдВ рджреЛрд╕реНрддреЛрдВ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдФрд░ рдХрдо рд╕реЗ рдХрдо рдХрд┐рд╕реА рддрд░рд╣ рдЗрд╕ рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдШреБрд╕рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдСрдбрд┐рдпреЛ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝рд░ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред

рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рд╕реАрдзреЗ рдСрдбрд┐рдпреЛ рдПрдкреАрдЖрдИ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ, рд╣рдореЗрдВ рдЕрдкрдиреЗ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝рд░ рдХреЗ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЛ рд╕реНрдХреЗрдЪ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рд╣рдо рдХреИрдирд╡рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрд╕рд╛ рдХрд░реЗрдВрдЧреЗред


рдПрдХ рд╕реНрдЯреЙрдХ рдмрдирд╛рдПрдБ


рдЕрдЧрд░ рдЖрдкрдХреЛ рдЗрд╕ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХ рд╕реНрдЯреЙрдХ рдмрдирд╛рдПрдБ
рддреЛ рдХреИрдирд╡рд╛рд╕ рдмрдирд╛рдПрдБ:
var canva = document.createElement('canvas'); var ctx = canva.getContext('2d'); //      canva.width = window.innerWidth; canva.height = window.innerHeight; //    document.body.appendChild(canvas); 

рдареАрдХ рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдХреИрдирд╡рд╛рд╕ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╣рдореЗрдВ рдРрд╕реЗ рддрддреНрд╡реЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдзреНрд╡рдирд┐ рд╕рдВрдХреЗрдд рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдВрдЧреЗред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпреЗ рд╕рд╛рдорд╛рдиреНрдп рд╡реГрддреНрдд рд╣реЛрдВрдЧреЗ:

 var particles = [];//      var createParticles = function () { var particle = null; for (var i = 0; i < 50; i++) { particle = new Particle(); particles.push(particle); } //   -  setInterval(draw,33); } 

рд╣рдорд╛рд░реА рдордВрдбрд▓рд┐рдпреЛрдВ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдбреНрд░рд╛ рд╕рдорд╛рд░реЛрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

 var draw = function () { //     ctx.clearRect(0, 0, canva.width, canva.height); for (var i = 0; i < 50; i++) { var loc = particles[i]; loc.draw(); } } 


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдорд╛рд░реА рд╡рд░реНрдХрдкреАрд╕ рд▓рдЧрднрдЧ рддреИрдпрд╛рд░ рд╣реИ, рдХреЗрд╡рд▓ рдХрдг рдХрдг рдирд┐рд░реНрдорд╛рддрд╛ рдмрдиреА рд╣реБрдИ рд╣реИред

 var Particle = function () { this.init(); }; Particle.prototype = { init: function () { this.x = random(canva.width); this.y = random(canva.height); this.level = 1 * random(4); this.speed = random(0.2, 1); this.radius = random(10, 70); //  this.color = random(['#69D2E7', '#A7DBD8', '#E0E4CC', '#F38630', '#FA6900', '#FF4E50', '#F9D423']); //  this.opacity = random(0.2, 1); this.band = Math.floor(random(128)); }, draw: function () { var pulsar, scale; pulsar = Math.exp(this.pulse); scale = pulsar * this.radius || this.radius; ctx.save(); ctx.beginPath(); //   ctx.arc(this.x, this.y, scale, 0, Math.PI * 2); ctx.fillStyle = this.color; // ctx.globalAlpha = this.opacity / this.level; // ctx.closePath(); ctx.fill(); ctx.strokeStyle = this.color; //  ctx.stroke(); ctx.restore(); this.move(); }, move: function () { this.y -= this.speed * this.level; //         if (this.y < -100) { this.y = canva.height; } } } //   - var random: function( min, max ) { if (this.isArray( min )) { return min[ ~~( Math.random() * min.length ) ]; } if (!this.isNumber(max)) { max = min || 1, min = 0; } return min + Math.random() * ( max - min ); }, //   var isArray: function(object) { return Object.prototype.toString.call( object ) == '[object Array]'; }, //   var isNumber: function(object) { return typeof object == 'number'; } 


рдПрдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдмрдирд╛рдПрдБ


рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝рд░ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рд╣реИред AudioContext рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рджреНрд╡рд╛рд░рд╛ рдореБрдЦреНрдп рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рдИ рдЬрд╛рдПрдЧреАред рдПрдХ рдкреГрд╖реНрда рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╕рдВрджрд░реНрдн рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдХреБрдЫ рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдЬреЛ рдЖрдкрдХреА рдЖрддреНрдорд╛ рдЪрд╛рд╣рддреА рд╣реИред рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рдЧрднрдЧ рд╕рднреА рддрд░реАрдХреЗ рдСрдбрд┐рдпреЛрдХреЛрдЯреЗрдХреНрд╕реНрдЯ рддрд░реАрдХреЗ рд╣реИрдВред рдЗрдирдХреА рдкреВрд░реА рд╕реВрдЪреА рдпрд╣рд╛рдВ рджреЗрдЦреА рдЬрд╛ рд╕рдХрддреА рд╣реИ ред рдЪреВрдВрдХрд┐ AudioContext рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдЕрднреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдореЛрджрд┐рдд рдирд╣реАрдВ рд╣реИ, рд╣рдо рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдмрдирд╛рдПрдВрдЧреЗ:

 var AudioContext = w.AudioContext || w.webkitAudioContext; var context = new AudioContext (); 


рдпрд╣ рдУрдкреЗрд░рд╛, рдХреНрд░реЛрдо рдФрд░ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдореЗрдВ рдПрдХ рдСрдбрд┐рдпреЛрдХреЛрдЯреЗрдХреНрд╕реНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рд╕рдВрджрд░реНрдн рд╕реЗ, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:

  1. createScriptProcessor (рдкреВрд░реНрд╡ рдореЗрдВ createJavaScriptNode) - рдпрд╣ рд╡рд┐рдзрд┐ рдЖрдкрдХреЛ js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдСрдбрд┐рдпреЛ рдбреЗрдЯрд╛ рдПрдХрддреНрд░ рдХрд░рдиреЗ, рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдпрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЕрдкрдирд╛ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рд╣реИ рдФрд░ рд╣рдо onaudioprocess рдИрд╡реЗрдВрдЯ рдореЗрдВ рд░реБрдЪрд┐ рд▓реЗрдВрдЧреЗ, рдЬреЛ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЗрдирдкреБрдЯ рдореЗрдВ рдирдпрд╛ рдбреЗрдЯрд╛ рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИред
    рдЬрдм рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡рд┐рдзрд┐ рддреАрди рддрд░реНрдХ рд▓реЗрддреА рд╣реИ рдмрдлрд░рдЬрд╛рдЗрдЬрд░ - рдмрдлрд░ рдЖрдХрд╛рд░, рд╕рдВрдЦреНрдпрд╛рдЗрдиреНрдлреИрд╢рдирдЪреИрдирд▓реНрд╕ - рдзрд╛рд░рд╛ рдореЗрдВ рдЗрдирдкреБрдЯ рдЪреИрдирд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛, рдЕрдВрдХрд╕реВрддреНрд░рдЪреИрдирд▓реНрд╕ - рдЖрдЙрдЯрдкреБрдЯ рдЪреИрдирд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ред
  2. createMediaElementSource - рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдСрдбрд┐рдпреЛ рдпрд╛ рд╡реАрдбрд┐рдпреЛ рддрддреНрд╡ рд╕реЗ рдзреНрд╡рдирд┐ рд╕реНрд░реЛрдд рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдСрдбрд┐рдпреЛ рддрддреНрд╡ рд╕реЗ рдСрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдСрдбрд┐рдпреЛ рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рдореЗрдВ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
  3. createAnalyser - рдпрд╣ рд╡рд┐рдзрд┐ рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд┐рдЧреНрдирд▓ рдХреА рдЖрд╡реГрддреНрддрд┐ рдФрд░ рд╕рдордп рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рд╣рдореЗрдВ рдЕрдкрдиреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рдСрдбрд┐рдпреЛ рд╕рд┐рдЧреНрдирд▓ рдХреЗ рд╕реНрд░реЛрдд рдФрд░ рдзреНрд╡рдирд┐ рдХреЗ рд░рд┐рд╕реАрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред


рдЗрд╕рд▓рд┐рдП, рдСрдбрд┐рдпреЛрдХреЛрдЯреЗрдХреНрд╕реНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдореЗрдВ рдЬреЛ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ, рдЙрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдо рдЕрдкрдиреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

 var Analyze = function () { var AudioContext = w.AudioContext || w.webkitAudioContext; this.context = new AudioContext(); this.node = this.context.createScriptProcessor(2048, 1, 1); this.analyser = this.context.createAnalyser(); this.analyser.smoothingTimeConstant = 0.3; this.analyser.fftSize = 512; this.bands = new Uint8Array(this.analyser.frequencyBinCount); } 


рдпрд╣ рдХреЙрд▓ рдПрдХ рдСрдбрд┐рдпреЛ рд╕рдВрджрд░реНрдн рдФрд░ рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдПрдЧрд╛ред рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рдмрдирд╛рддреЗ рд╕рдордп, рд╣рдо рдЪреМрд░рд╕рд╛рдИ рдЯрд╛рдЗрдордХрд╛рдВрд╕реНрдЯреИрдВрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ - рдорддрджрд╛рди рдЖрд╡реГрддреНрддрд┐ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рдбреЗрдЯрд╛ рдФрд░ fftSize рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА - рдлреВрд░рд┐рдпрд░ рд░реВрдкрд╛рдВрддрд░рдг рдЖрдпрд╛рдо (рдореЛрдЯреЗ рддреМрд░ рдкрд░ рдмреЛрд▓рддреЗ рд╣реБрдП, рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ рд╕рд┐рдЧреНрдирд▓ рдХреЗ рдЖрд╡реГрддреНрддрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╣рдореЗрдВ рдХрд┐рддрдирд╛ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдпрд╣ рд╕рдВрдХреЗрдд рд╣реИ) рдореЗрдВ fftSize / 2 рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛)ред рд╣рдо рд╕реАрдорд╛рдУрдВ рдХреЗ рд╕реНрдкрд╖реНрдЯ рд╕рдВрдХреЗрдд рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП Uint8Array рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЗрд╕рдХреА рд▓рдВрдмрд╛рдИ 256 рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧреАред

 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, тАж] 


рдЕрдм рддрдХ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рд░рдгреА рдореЗрдВ рдПрдХ рд░реЛрд▓рд┐рдВрдЧ рдмреЙрд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рд╕рдВрдХреЗрдд рд╕реНрд░реЛрдд рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рдЕрдкрдиреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдПрдХ рдСрдбрд┐рдпреЛ рддрддреНрд╡ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдФрд░ рдЙрд╕реА рд╕рдордп рд╣рдо рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреИрдирдкреНрд▓реЗ рдЗрд╡реЗрдВрдЯ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддреЗ рд╣реИрдВ , рдЬреЛ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдкреНрд▓реЗрдмреИрдХ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ рд╣реИред рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рд╣рдорд╛рд░реЗ рдирд┐рд░реНрдорд╛рддрд╛ рдлрд╛рд░реНрдо рд▓реЗрдВрдЧреЗ:

 var Analyze = function () { var AudioContext = w.AudioContext || w.webkitAudioContext; //  this.audio = new Audio(); this.audio.src = "test1.ogg"; this.controls = true; // - this.context = new AudioContext(); this.node = this.context.createScriptProcessor(2048, 1, 1); //  this.analyser = this.context.createAnalyser(); this.analyser.smoothingTimeConstant = 0.3; this.analyser.fftSize = 512; this.bands = new Uint8Array(this.analyser.frequencyBinCount); //   this.audio.addEventListener("canplay", function () {}); } 


рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмрдирд╛рдИ рдЧрдИ рдСрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо AudioContext рдкрд░ рднреЗрдЬрдиреЗ рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рд╕реНрд░реЛрдд рдФрд░ рд░рд┐рд╕реАрд╡рд░ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред рдпрд╣ рдХрд░рдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗрдм рдСрдбрд┐рдпреЛ рдПрдкреАрдЖрдИ рдмрдирд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕реНрдорд╛рд░реНрдЯ рд▓реЛрдЧреЛрдВ рдиреЗ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрд╛ рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдкреНрд░рддреНрдпреЗрдХ рдСрдбрд┐рдпреЛ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдПрдХ рдХрдиреЗрдХреНрдЯ рд╡рд┐рдзрд┐ рд╣реИ, рдЬреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдореВрд▓реНрдп рд▓реЗрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдХреБрд▓, рдЕрдВрддрд┐рдо рджреГрд╢реНрдп рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛:

 var Analyse = function () { var an= this, AudioContext = w.AudioContext || w.webkitAudioContext; //  this.audio = new Audio(); this.audio.src = "test1.ogg"; this.controls = true; // - this.context = new AudioContext(); this.node = this.context.createScriptProcessor(2048, 1, 1); //  this.analyser = this.context.createAnalyser(); this.analyser.smoothingTimeConstant = 0.3; this.analyser.fftSize = 512; this.bands = new Uint8Array(this.analyser.frequencyBinCount); //   this.audio.addEventListener('canplay', function () { //    AudioContext an.source = an.context.createMediaElementSource(an.audio); //    an.source.connect(an.analyser); //   ,       an.analyser.connect(an.node); //    an.node.connect(an.context.destination); an.source.connect(an.context.destination); //      an.node.onaudioprocess = function () { an.analyser.getByteFrequencyData(an.bands); if (!an.audio.paused) { if (typeof an.update === "function") { return an.update(an.bands); } else { return 0; } } }; }); return this; }; 


рдпрд╣рд╛рдВ рдпрд╣ AudioContext.destination рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ - рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рд┐рд╕реНрдЯрдо рд╕рд╛рдЙрдВрдб рдЖрдЙрдЯрдкреБрдЯ (рдЖрдорддреМрд░ рдкрд░ рд╕реНрдкреАрдХрд░) рд╣реИред GetByteFrequencyData рд╡рд┐рдзрд┐ - рдпрд╣ рд╡рд┐рдзрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИ рдФрд░ рдЗрд╕реЗ рдкреНрд░реЗрд╖рд┐рдд рд╕рд░рдгреА рдореЗрдВ рдХреЙрдкреА рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рдЕрдВрддрддрдГ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рдорд╣рд╛рди рдЬрд╛рджреВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рджреЗрддреЗ рд╣реИрдВред

рдЖрдЗрдП рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рд╣рдорд╛рд░реЗ createParticles рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:

 var createParticles = function () { var particle = null, audio = null; for (var i = 0; i < 50; i++) { particle = new Particle(); particles.push(particle); } //  elem = new Analyse(); //  audio   document.body.appendChild(elem.audio); //       audio.update = function (bands) { var ln = 50; while (ln--) { var loc = particles[ln]; loc.pulse = bands[loc.band] / 256; } }; //     setInterval(draw,33); } 


рдмрд╕ рдЗрддрдирд╛ рд╣реА, рд╣рдордиреЗ рдЕрдкрдирд╛ рд╕рд╛рдзрд╛рд░рдг рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝рд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдФрд░ рд╡реЗрдм рдСрдбрд┐рдпреЛ рдПрдкреАрдЖрдИ рдкрд░ рдкрд░реНрджрд╛ рдЦреЛрд▓ рджрд┐рдпрд╛ред рдпрд╣ рд╕рднреА рдЖрдХрд░реНрд╖рдг рдХреНрд░реЛрдо, рдУрдкреЗрд░рд╛, рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред IE, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдУрд╡рд░рдмреЛрд░реНрдб рд░рд╣рддрд╛ рд╣реИред
рдереЛрдбрд╝рд╛ рдФрд░ рдЕрдзрд┐рдХ рдкрд░рд┐рд╖реНрдХреГрдд рдбреЗрдореЛ рдЬрд┐рд╕рдореЗрдВ рдЗрд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: рдбреЗрдореЛ
Github рдбреЗрдореЛ рдХреЛрдб: рд╡рд┐рд╢реНрд▓реЗрд╖рдХ
рдХреЛрдб рдХреЛрдбрдкреЗрди: рд╡рд┐рд╢реНрд▓реЗрд╖рдХ

рдмреЗрд╢рдХ, рдпрд╣ рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдЬреЛ рдСрдбрд┐рдпреЛ рдПрдкреАрдЖрдИ рд╕рдХреНрд╖рдо рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдХрд╣реАрдВ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдм рдЖрдк рдЗрд╕рдХреЗ рд▓рд┐рдП рдСрдбрд┐рдпреЛ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рдХреЗ рд▓рд┐рдПред

рдЙрдкрдпреЛрдЧреА рдкрдврд╝рдирд╛:

Source: https://habr.com/ru/post/In210422/


All Articles