Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Визуализатор (https://javascript.ru/forum/misc/70286-vizualizator.html)

MininDM 24.08.2017 16:05

Визуализатор
 
Как вытащить из видео аудио, что бы можно было использовать в визуализаторе, просто я хочу сделать сайт похожий на этот http://skreamex.xyz/, только вместо аудио использовать видео(использую для видео jquery.backgroundvideo)
<script>
		
		
		var SKR = document.getElementById('skreamex');
		
		function getRandomInt(min, max)
		{
			return Math.floor(Math.random() * (max - min + 1)) + min;
		}

		//
		
		var perfecto = function(s) {
			var e={},i,b=0,c,x,l=0,a,r='',w=String.fromCharCode,L=s.length;
			var A="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
			for(i=0;i<64;i++){e[A.charAt(i)]=i;}
			for(x=0;x<L;x++){
				c=e[s.charAt(x)];b=(b<<6)+c;l+=6;
				while(l>=8){((a=(b>>>(l-=8))&0xff)||(x<(L-2)))&&(r+=w(a));}
			}
			return r;
		};
			
		
		
		
		//rdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
		
		
		var context = new AudioContext();
		var audio = new Audio();
		audio.src="cloud.mp4";
		audio.loop=true;
		//audio.loop=true;
		
		audio.addEventListener("ended", onEnded);
		function onEnded()
		{
			//audio.src="chillme" + getRandomInt(1,12) +".mp3";
			//audio.play();
		}
		
		var source;
		var analyser;
		var frequencyData;
		function onCanPlay() {
			console.log("can play called");
			source = context.createMediaElementSource(audio);
			analyser = context.createAnalyser();
			source.connect(analyser);
			source.connect(context.destination);
			frequencyData = new Uint8Array(analyser.frequencyBinCount);
			audio.removeEventListener("canplay", onCanPlay);
			audio.play();
		}

		if(audio.readyState < 3) {
			audio.addEventListener("canplay", onCanPlay);
		} else {
			onCanPlay();
		}
			
		
				
			var cur_clr = [0,0,0,0];
			var new_clr = [0,0,0,0];
			var animtype = 1;
			var camera, scene, renderer, mouseX = 0, mouseY = 0, particles = [], materials = [];
			init();
			function init() {
				camera = new THREE.PerspectiveCamera(80, window.innerWidth / window.innerHeight, 1, 4000 );
				camera.position.z = 1000;
				scene = new THREE.Scene();
				scene.fog = new THREE.Fog( 0x000000, 250, 1400 );
				scene.add(camera);
				renderer = new THREE.CanvasRenderer();
				renderer.setSize( window.innerWidth, window.innerHeight );
				document.body.appendChild( renderer.domElement );
				makeParticles(); 
				document.addEventListener( 'mousemove', onMouseMove, false );
				setInterval(update,1000/30); 
				setInterval(calctime, 10);				
				
				new_clr[0] = getRandomInt(0,255);
				new_clr[1] = getRandomInt(0,255);
				new_clr[2] = getRandomInt(0,255);
				
			}
			
			var elapsed_ms = 0.0;
			var add_speed = 0.0;
			
			
			function getRandomHtmlColor() {
				var letters = '0123456789ABCDEF';
				var color = '#';
				for (var i = 0; i < 6; i++ ) {
					color += letters[Math.floor(Math.random() * 16)];
				}
				return color;
			}
			//var CLR = getRandomHtmlColor();
			
			

			
			
			function maxOf3(v1, v2, v3)
			{
				var result = Math.max(Math.max(v1, v2), Math.max(v2, v3));
				
				return result;
			}
			
			function compareAndUpdate(colorindex, power)
			{
				var delta = new_clr[colorindex] - cur_clr[colorindex];
				if (delta > 0)
				{
					cur_clr[colorindex] += power;
				}
				
				if (delta < 0)
				{
					cur_clr[colorindex] -= power;
				}
				
				cur_clr[colorindex] = Math.max(0, cur_clr[colorindex]);
				cur_clr[colorindex] = Math.min(255, cur_clr[colorindex]);
			}
			
			function animateColor()
			{
				var dR = Math.abs(Math.floor(new_clr[0] - cur_clr[0]));
				var dG = Math.abs(Math.floor(new_clr[1] - cur_clr[1]));
				var dB = Math.abs(Math.floor(new_clr[2] - cur_clr[2]));
				var speed = 3;
				var r_Inc = speed + Math.floor((speed * Math.abs(dR) / maxOf3(dR, dG, dB)));
				var g_Inc = speed + Math.floor((speed * Math.abs(dG) / maxOf3(dR, dG, dB)));
				var b_Inc = speed + Math.floor((speed * Math.abs(dB) / maxOf3(dR, dG, dB)));
								
				compareAndUpdate(0, r_Inc);
				compareAndUpdate(1, g_Inc);
				compareAndUpdate(2, b_Inc);
			}

			var delay = 200;
			var g_vol = 0;
			function calctime()
			{
				animateColor();

				var last_speed = add_speed;
				add_speed = 1.5;
				analyser.getByteFrequencyData(frequencyData);

				if (delay >= 0) delay -= 10;
				if (frequencyData[4] > 240)
				{					
					add_speed += frequencyData[4] / 10;
					var r = getRandomInt(0,255);
					var g = getRandomInt(0,255) ^ r;
					var b = getRandomInt(0,255) ^ g;
					new_clr[0] = r;
					new_clr[1] = g;
					new_clr[2] = b;
					
					
					
					if (delay < 0)
					for(var i=0; i < particles.length; i++) 
					{
				
						particle = particles[i]; 
						particle.velocity = new THREE.Vector3(
					   0/*(speed + getadditionalspeed()) * getRandomInt(-1,1) / 4*/,              // x
					  -(speed + getadditionalspeed()) / 6, // y: random vel
					  0);             // z
						delay = 8000;
					}
					style = 0;
				}
				else 
					style = 1;
								
				if (frequencyData[0] > 240)
					add_speed += frequencyData[0] / 50;
				
				for (var i=0; i < 3; i++)
				{
					if (frequencyData[i] > 180)
						add_speed += ( frequencyData[i] / 200);
				}
				for (var i=4; i < 255; i++)
				{
					if (frequencyData[i])
						add_speed += ( frequencyData[i] / 3000);
				}
				
				add_speed = (add_speed + last_speed) / 2;
								
				
				var VOL = 0;
				for (var i=0; i < 255; i++)
				{
					if (frequencyData[i])
						VOL += ( frequencyData[i] / 255);
				}
				
				
				var C = Math.floor(VOL);
				
				var C2 = Math.min(40 + Math.floor(VOL / 10), 255);
				C2 = 3;
				var CLR = 'rgba(' + cur_clr[0] +',' + cur_clr[1] +',' + cur_clr[2] + ', 20)';
				var CLR2 = 'rgba(' + C2 +',' + C2 +',' + C2 + ', 20)';
				var PERC = Math.min(Math.floor((VOL / 255) * 100 ), 1000);
				g_vol = PERC;
				SKR.style = "background: -webkit-linear-gradient(left, " + CLR + " 0%, " + CLR2 + " "+ PERC +"%); -webkit-background-clip: text; -webkit-text-fill-color: transparent;-webkit-text-stroke-width: 1px;-webkit-text-stroke-color: " + CLR + ";";
				SKR.innerHTML = perfecto(perfecto("VTB0U1JVRk5SVmc9"));
			}
			
			function getadditionalspeed()
			{
				return add_speed;
			}
			
			var speed = 0;
			var angle = 0;
			var style = 0;
			
			var camera_angle = 0;
			function update() {

				updateParticles();
				
				var zoom = 100;
				/*camera.position.x = -Math.sin(.5 * Math.PI * (mouseX - .5)) * zoom;
				camera.position.y = Math.sin(.25 * Math.PI * (mouseY - .5)) * zoom;
				camera.position.z = 500 + Math.cos(.5 * Math.PI * (mouseX - .5)) * zoom;
				camera.lookAt(0,0,-1000);*/
				
				//camera.rotation.z =angle / 3;
				camera.rotation.z = camera_angle;
				
				
				//camera_angle += 0.002 + Math.sin(g_vol / 100);
				//
				
				renderer.render( scene, camera );
			}

			function getRandomColor() {
				var letters = '0123456789ABCDEF';
				var color = '0x';
				for (var i = 0; i < 6; i++ ) {
					color += letters[Math.floor(Math.random() * 16)];
				}
				return color;
			}

			function makeParticles() { 
				
				var particle, material; 

				for ( var zpos= -8000; zpos < 8000; zpos+=20 ) {
		
					var clr = getRandomColor();
					material = new THREE.ParticleCanvasMaterial( { color: clr, program: particleRender, blending: THREE.AdditiveBlending } );
					
					particle = new THREE.Particle(material);
					particle.position.x = (Math.random() * 3500 - 1750);
					particle.position.y = (Math.random() * 3500 - 1750);
					particle.position.z = zpos;
					particle.scale.x = particle.scale.y = Math.random() * 1.1;
					particle.velocity = new THREE.Vector3(0,0,0);
					scene.add( particle );
					particles.push(particle); 
					materials.push(material);
				}
				
			}
		
			function particleRender( context ) {
				context.beginPath();
				context.arc( 0, 0, 1, 0, Math.PI * 2, true );
				context.fill();
			};
	

			
			function updateParticles() { 
											
				for(var i=0; i < particles.length; i++) 
				{
					var asd = (speed + getadditionalspeed());
						particle = particles[i]; 
						
						particle.position.z += (speed + getadditionalspeed());
						particle.scale.x = particle.scale.y = 1 + (speed + getadditionalspeed()) / 20;
						
						if(particle.position.z > 1000) 
						{
							particle.position.z-=2000; 
							
							if (style == 1)
							{
								particle.position.x = Math.sin(i + angle) * g_vol * 3 ;// (Math.random() * 3500 - 1750);
								particle.position.y = Math.cos(i + angle) * g_vol * 3 ;//(Math.random() * 3500 - 1750);
							}
							else
							{
								particle.position.x = (Math.random() * 3500 - 1750);
								particle.position.y = (Math.random() * 3500 - 1750);
							}
							

						}
						
						
						
					//materials[i].color = 'rgb(' + cur_clr[0] +',' + cur_clr[1] +',' + cur_clr[2] + ')';
					materials[i].color.setRGB(cur_clr[0] / 255,cur_clr[1] / 255,cur_clr[2] / 255);
					// particle.position.addSelf(particle.velocity);	
					 
				}
				
				angle += 0.01;
				
			}
		
			function onMouseMove( ev ) {
				//mouseX = event.clientX;
				//mouseY = event.clientY;
				
				
				mouseX = ev.clientX / window.innerWidth;
				mouseY = ev.clientY / window.innerHeight;
				
			}
    $(document).ready(function() {
      var videobackground = new $.backgroundVideo($('body'), {
        "align": "centerXY",
        "width": 1280,
        "height": 720,
        "path": "/",
        "filename": "cloud",
        "types": ["mp4","ogg","webm"]
      });
    });
		</script>


Часовой пояс GMT +3, время: 04:03.