<!DOCTYPE html> <html lang="en"> <head> <title>listener_1.html</title> <meta charset="utf-8"> <link rel="icon" type="image/png" href="img/github-mark.png"> <meta name="description" content="http://127.0.0.1/listener_1.html"> <meta name="twitter:image" content="img/ag_baboy_right.png" /> <meta name="twitter:image:type" content="png" /> <meta name="twitter:image:width" content="19" /> <meta name="twitter:image:height" content="47" /> <style> body{border:none;background-color:#024;font-family:Lucida Console;overflow:hidden;} a,button,span,input{font-family:Lucida Console;} td{padding:4px;} </style> </head> <body> <table style="position:absolute;left:20px;top:8px;color:#fc0;z-index:2;"> <tr> <td> <button id="bostart" style="display:;font-size:10pt;height:24px;background-color:#f00;color:#fff;font-weight:bold;cursor:pointer;"> start </button> <button id="bo" style="display:none;font-size:10pt;height:24px;background-color:#fc0;color:#00c;font-weight:bold;cursor:pointer;"> Play/Pause </button> </td> <td> <span id="spansel" style="display:none;color:#cc0;font-size:12pt;"> audio <select id="sel" autocomplete="off" style="background-color:#630;color:#ff0;font-size:12pt;border:1px inset #999;cursor:pointer;" onchange="troca();"> <option value="mp3/Supergrass.mp3">Supergrass</option> <option value="mp3/satisfaction_trim.mp3">Stones</option> </select> </span> </td> <td><input id="volin" type="range" style="display:none;width:100px;cursor:pointer;" value="0.2" min="0" max="1" step="0.02" onchange="mudavol();" autocomplete="off"></input></td> <td><span id="spanB" style="display:none;position:relative;top:-2px;color:#fc0;font-size:12pt;"></span></td> <td style="width:200px;"></td> <td><a id="h" href="listener_1.txt" target="_blank" style="width:200px;font-size:12pt;background-color:#060;color:#fff;text-decoration:none;border:1px outset #ff0;padding:2px;display:none;"> View code </a></td> </tr> </table> <script type="importmap"> { "imports":{ "three":"https://unpkg.com/three@0.176.0/build/three.module.js", "three/addons/":"https://unpkg.com/three@0.176.0/examples/jsm/" } } </script> <script type="module"> import * as THREE from 'three'; var scene, camera, renderer, mesh,lig; var file; var mediaElement, fftSize, listener, audio, format; var context,gainMP3,source; var bId=function(id){return document.getElementById(id);} var volval=bId("volin"); var start=bId("bostart"); var inpA=bId("volin"); var sela=bId("sel"); var dbo=bId("bo"); var dspansel=bId("spansel"); var dspanB=bId("spanB"); var dh=bId("h"); start.onclick=function StartAnimation(){init();} inpA.onchange=function StartAnimation(){mudavol();} sela.onchange=function StartAnimation(){troca();} function init() { start.style.display="none"; dbo.style.display=""; dspansel.style.display=""; inpA.style.display=""; dspanB.style.display=""; dh.style.display=""; renderer=new THREE.WebGLRenderer({antialias:true}); renderer.setSize( window.innerWidth,window.innerHeight); renderer.setClearColor(0x002244); renderer.setPixelRatio(window.devicePixelRatio); document.body.appendChild(renderer.domElement); scene=new THREE.Scene(); camera=new THREE.PerspectiveCamera(50,window.innerWidth/window.innerHeight,1,1000); camera.position.set(0,0,50); mesh=new THREE.Mesh(new THREE.BoxGeometry(8,8,8),new THREE.MeshNormalMaterial()); scene.add(mesh); lig=new THREE.AmbientLight('#fff',2); scene.add(lig); fftSize=512; listener=new THREE.AudioListener(); audio=new THREE.Audio(listener); file='mp3/supergrass.mp3'; mediaElement=new Audio(file); mediaElement.play(); mediaElement.volume=0.2; audio.setMediaElementSource(mediaElement); context=listener.context; gainMP3=context.createGain(); gainMP3.connect(context.destination); source=context.createMediaElementSource(mediaElement); source.connect(gainMP3); gainMP3.gain.value=2.0; source.connect(context.destination); document.getElementById("bo").addEventListener("click",function(){ mediaElement.volume=volval.value; if(mediaElement.paused){ mediaElement.play(); }else{ mediaElement.pause(); } }) window.addEventListener('resize',onWindowResize); animate(); } function onWindowResize(){ renderer.setSize(window.innerWidth,window.innerHeight); } function mudavol(){ mediaElement.volume=volval.value; document.getElementById("spanB").innerText="gain= "+volval.value; } function troca(){ var select=document.getElementById('sel'); var value=select.options[select.selectedIndex].value; mediaElement.src=value; mediaElement.play(); } function animate(){ requestAnimationFrame(animate); mesh.rotation.x +=0.01; mesh.rotation.z +=0.01; renderer.render(scene,camera); } document.getElementById("spanB").innerText="vol= "+volval.value; </script> </body> </html>