zoukankan      html  css  js  c++  java
  • three.js: Control gui and play sound set Volume

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />
        <meta name="apple-moible-web-app-capable" content="yes">
        <meta name="apple-moible-web-app-status-bar-style" content="black">
        <title>Control gui and set Volume</title>
        <meta content=" Three.js r95 声音调节 set Volume" name="keywords">
        <meta content=" Three.js r95 播放声音并调节 set Volume" name="description">
        <meta name="author" content="Geovin Du 涂聚文 塗聚文">
        <link rel="shortcut icon" href="~/favicon.ico" type="image/x-icon" />
        <link rel="icon" href="/favicon.ico" />
        <link rel="bookmark" href="/favicon.ico" type="image/gif" />
        <script type="text/javascript" charset="UTF-8" src="../libs/three/three.js"></script>
        <script type="text/javascript" charset="UTF-8" src="../libs/three/controls/TrackballControls.js"></script>
        <script type="text/javascript" src="../libs/util/Stats.js"></script>
        <script type="text/javascript" src="../libs/util/dat.gui.js"></script>
        <script type="text/javascript" src="js/util.js"></script>
        <script type="text/javascript">
            function init() {
    
    
                // listen to the resize events  监听窗体大小事件
                window.addEventListener('resize', onResize, false);
                var uniforms; //音量调节
                var fftSize = 0.2;
                var stats = initStats();
    
                //声音
                var audioListener = new THREE.AudioListener();
    
                // create a scene, that will hold all our elements such as objects, cameras and lights.
                var scene = new THREE.Scene();
    
                // create a camera, which defines where we're looking at.
                var camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000);
    
                // create a render and set the size
                var renderer = new THREE.WebGLRenderer();
    
                renderer.setClearColor(new THREE.Color(0x000000));
                renderer.setSize(window.innerWidth, window.innerHeight);
                renderer.shadowMap.enabled = true;
    
                // create the ground plane
                var planeGeometry = new THREE.PlaneGeometry(60, 20, 1, 1);
                var planeMaterial = new THREE.MeshLambertMaterial({ color: 0xffffff });
                var plane = new THREE.Mesh(planeGeometry, planeMaterial);
                plane.receiveShadow = true;
    
                // rotate and position the plane
                plane.rotation.x = -0.5 * Math.PI;
                plane.position.x = 15;
                plane.position.y = 0;
                plane.position.z = 0;
    
                // add the plane to the scene
                scene.add(plane);
    
                // create a cube
                var cubeGeometry = new THREE.BoxGeometry(4, 4, 4);
                var cubeMaterial = new THREE.MeshLambertMaterial({ color: 0xff0000 });
                var cube = new THREE.Mesh(cubeGeometry, cubeMaterial);
                cube.castShadow = true;
                // position the cube
                cube.position.x = -4;
                cube.position.y = 3;
                cube.position.z = 0;
    
                // add the cube to the scene
                scene.add(cube);
    
                var sphereGeometry = new THREE.SphereGeometry(4, 20, 20);
                var sphereMaterial = new THREE.MeshLambertMaterial({ color: 0x7777ff });
                var sphere = new THREE.Mesh(sphereGeometry, sphereMaterial);
    
                // position the sphere
                sphere.position.x = 20;
                sphere.position.y = 0;
                sphere.position.z = 2;
                sphere.castShadow = true;
    
                // add the sphere to the scene
                scene.add(sphere);
    
                // position and point the camera to the center of the scene
                camera.position.x = -30;
                camera.position.y = 40;
                camera.position.z = 30;
                camera.lookAt(scene.position);
    
    
    
    
                // 设置声音add the listener to the camera
                camera.add(audioListener);
                // instantiate audio object
                var oceanAmbientSound = new THREE.Audio(audioListener);
                // add the audio object to the scene
                scene.add(oceanAmbientSound);   
    
                // instantiate a loader
                var loader = new THREE.AudioLoader();
                // load a resource
                loader.load(
                    // resource URL
                    '../assets/audio/ping_pong.mp3',
                    // Function when resource is loaded
                    function (audioBuffer) {
                        // set the audio object buffer to the loaded object
                        oceanAmbientSound.setBuffer(audioBuffer);
                        oceanAmbientSound.setLoop(true); // 一次
                        
                        oceanAmbientSound.setVolume(0.1);
                        // play the audio
                        oceanAmbientSound.play();
                        //oceanAmbientSound.stop();  //停止
                    },
                    // Function called when download progresses
                    function (xhr) {
                        console.log((xhr.loaded / xhr.total * 100) + '% loaded');
                    },
                    // Function called when download errors
                    function (xhr) {
                        console.log('An error happened');
                    }
                );
    
    
                // create an AudioAnalyser, passing in the sound and desired fftSize
                var analyser = new THREE.AudioAnalyser(oceanAmbientSound, 32);           
                //
                const format = (renderer.capabilities.isWebGL2) ? THREE.RedFormat : THREE.LuminanceFormat;
                uniforms = {
                    tAudioData: { value: new THREE.DataTexture(analyser.data, fftSize / 2, 1, format) }
                };
    
                // get the average frequency of the sound
                var data = analyser.getAverageFrequency();
                var listener = new THREE.AudioListener();
                camera.add(listener);
                //
    
    
                // add subtle ambient lighting
                var ambienLight = new THREE.AmbientLight(0x353535);
                scene.add(ambienLight);
    
                // add spotlight for the shadows
                var spotLight = new THREE.SpotLight(0xffffff);
                spotLight.position.set(-10, 20, -5);
                spotLight.castShadow = true;
                scene.add(spotLight);
    
                // add the output of the renderer to the html element
                document.getElementById("webgl-output").appendChild(renderer.domElement);
    
                // call the render function
                var step = 0;
                var num = 0;
                //添加控件
                var controls = new function () {
                    this.rotationSpeed = 0.02;
                    this.bouncingSpeed = 0.03;
                    this.SoundSpeed = 0.1;
                };
    
                var gui = new dat.GUI();
                gui.add(controls, 'rotationSpeed', 0, 0.5);
                gui.add(controls, 'bouncingSpeed', 0, 0.5);
                gui.add(controls, 'SoundSpeed', 0, 0.5);  //音量调节
    
                // attach them here, since appendChild needs to be called first
                var trackballControls = initTrackballControls(camera, renderer);
                var clock = new THREE.Clock();
    
                render();
    
                function render() {
                    // update the stats and the controls
                    trackballControls.update(clock.getDelta());
                    stats.update();
    
                    //声音音量调节
                    num += controls.SoundSpeed;
                    oceanAmbientSound.setVolume(num);
                    if (num = 0)
                        oceanAmbientSound.stop();  //停止
                   // analyser.getFrequencyData();
                    uniforms.tAudioData.value.needsUpdate = true;
    
    
                    // rotate the cube around its axes
                    cube.rotation.x += controls.rotationSpeed;
                    cube.rotation.y += controls.rotationSpeed;
                    cube.rotation.z += controls.rotationSpeed;
    
                    // bounce the sphere up and down
                    step += controls.bouncingSpeed;
    
                    sphere.position.x = 20 + (10 * (Math.cos(step)));
                    sphere.position.y = 2 + (10 * Math.abs(Math.sin(step)));
    
                    // render using requestAnimationFrame
                    requestAnimationFrame(render);
                    renderer.render(scene, camera);
                }
    
                //根据窗体的大小改变,有一定的算法
                function onResize() {
                    camera.aspect = window.innerWidth / window.innerHeight;
                    camera.updateProjectionMatrix();
                    renderer.setSize(window.innerWidth, window.innerHeight);
                }
            }
        </script>
        <link rel="stylesheet" href="../css/default.css">
    </head>
    <body>
        <div id="webgl-output"></div>
    
        <!-- Javascript code that runs our Three.js examples -->
        <script type="text/javascript">
            (function () {
                // your page initialization code here
                // the DOM will be available here
                init()
            })();
        </script>
    </body>
    </html>
    

      

    //
    
    				const listener = new THREE.AudioListener();
    
    				const audio = new THREE.Audio( listener );
    				const file = './sounds/376737_Skullbeatz___Bad_Cat_Maste.mp3';
    
    				if ( /(iPad|iPhone|iPod)/g.test( navigator.userAgent ) ) {
    
    					const loader = new THREE.AudioLoader();
    					loader.load( file, function ( buffer ) {
    
    						audio.setBuffer( buffer );
    						audio.play();
    
    					} );
    
    				} else {
    
    					const mediaElement = new Audio( file );
    					mediaElement.play();
    
    					audio.setMediaElementSource( mediaElement );
    
    				}
    
    				analyser = new THREE.AudioAnalyser( audio, fftSize );
    
    				//
    
    				const format = ( renderer.capabilities.isWebGL2 ) ? THREE.RedFormat : THREE.LuminanceFormat;
    
    				uniforms = {
    
    					tAudioData: { value: new THREE.DataTexture( analyser.data, fftSize / 2, 1, format ) }
    
    				};
    

      

     增加一个bottom按扭操作关开声音

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />
        <meta name="apple-moible-web-app-capable" content="yes">
        <meta name="apple-moible-web-app-status-bar-style" content="black">
        <title>Example 12.07 - Audio</title>
        <meta content=" Three.js r95" name="keywords">
        <meta content=" Three.js r95" name="description">
        <meta name="author" content="Geovin Du 涂聚文 塗聚文">
        <link rel="shortcut icon" href="~/favicon.ico" type="image/x-icon" />
        <link rel="icon" href="/favicon.ico" />
        <link rel="bookmark" href="/favicon.ico" type="image/gif" />
        <script type="text/javascript" charset="UTF-8" src="../libs/three/three.js"></script>
        <script type="text/javascript" charset="UTF-8" src="../libs/three/controls/FirstPersonControls.js"></script>
        <script type="text/javascript" src="../libs/util/Stats.js"></script>
        <script type="text/javascript" src="../libs/util/dat.gui.js"></script>
        <script type="text/javascript" src="js/util.js"></script>
        <script type="text/javascript">
    
    
            function init() {
    
                // listen to the resize events  监听窗体大小事件
                window.addEventListener('resize', onResize, false);
    
                var uniforms; //音量调节
                var fftSize = 0.2;
    
                var stats = initStats();
    
    
                // create a scene, that will hold all our elements such as objects, cameras and lights.
                var scene = new THREE.Scene();
    
    
                //声音
                var audioListener = new THREE.AudioListener();
    
    
                // create a camera, which defines where we're looking at.
                var camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000);
    
                // create a render and set the size
                var renderer = new THREE.WebGLRenderer();
    
                renderer.setClearColor(new THREE.Color(0x000000));
                renderer.setSize(window.innerWidth, window.innerHeight);
                renderer.shadowMap.enabled = true;
    
                // create the ground plane
                var planeGeometry = new THREE.PlaneGeometry(60, 20, 1, 1);
                var planeMaterial = new THREE.MeshLambertMaterial({ color: 0xffffff });
                var plane = new THREE.Mesh(planeGeometry, planeMaterial);
                plane.receiveShadow = true;
    
                // rotate and position the plane
                plane.rotation.x = -0.5 * Math.PI;
                plane.position.x = 15;
                plane.position.y = 0;
                plane.position.z = 0;
    
                // add the plane to the scene
                scene.add(plane);
    
                // create a cube
                var cubeGeometry = new THREE.BoxGeometry(4, 4, 4);
                var cubeMaterial = new THREE.MeshLambertMaterial({ color: 0xff0000 });
                var cube = new THREE.Mesh(cubeGeometry, cubeMaterial);
                cube.castShadow = true;
    
                // position the cube
                cube.position.x = -4;
                cube.position.y = 3;
                cube.position.z = 0;
    
                // add the cube to the scene
                scene.add(cube);
    
                var sphereGeometry = new THREE.SphereGeometry(4, 20, 20);
                var sphereMaterial = new THREE.MeshLambertMaterial({ color: 0x7777ff });
                var sphere = new THREE.Mesh(sphereGeometry, sphereMaterial);
    
                // position the sphere
                sphere.position.x = 20;
                sphere.position.y = 0;
                sphere.position.z = 2;
                sphere.castShadow = true;
    
                // add the sphere to the scene
                scene.add(sphere);
    
                // position and point the camera to the center of the scene
                camera.position.x = -30;
                camera.position.y = 40;
                camera.position.z = 30;
                camera.lookAt(scene.position);
    
                // add subtle ambient lighting
                var ambienLight = new THREE.AmbientLight(0x353535);
                scene.add(ambienLight);
    
                // add spotlight for the shadows
                var spotLight = new THREE.SpotLight(0xffffff);
                spotLight.position.set(-10, 20, -5);
                spotLight.castShadow = true;
                scene.add(spotLight);
    
                // add the output of the renderer to the html element
                document.getElementById("webgl-output").appendChild(renderer.domElement);
    
    
    
                // Buttons startButton and resetButton
                //var startButton = document.getElementById('buttonaudioButton');
                //startButton.addEventListener('click', init);
    
    
    
    
    
                // call the render function
                var step = 0;
                var ro = 0;
                var controls = new function () {
                    this.rotationSpeed = 0.02;
                    this.bouncingSpeed = 0.03;
                };
    
                var gui = new dat.GUI();
                gui.add(controls, 'rotationSpeed', 0, 0.5);
                gui.add(controls, 'bouncingSpeed', 0, 0.5);
    
    
                // attach them here, since appendChild needs to be called first
                //  var trackballControls = initTrackballControls(camera, renderer);
                var clock = new THREE.Clock();
    
                // Boolean for start and restart
                var initAnim = true;
                var runAnim = false;
    
                var startButton = document.getElementById('buttonaudioButton');
                // startButton.addEventListener('click', init, false); //加载
                //bdat.gui.js.map
                startButton.innerHTML = '<img src="../../gui/volumeOff.png">';
                // Start Button
                startButton.onclick = function StartAnimation() {
                    if (initAnim) {
                        initAnim = false;
                        runAnim = true;
                        theta = 0;
                        startButton.innerHTML = '<img src="../../gui/volumeOff.png">';
                    }
                    // Start and Pause
                    if (runAnim) {
                        startButton.innerHTML = '<img src="../../gui/volumeOff.png">';
                        runAnim = false;
    
                    } else {
                        startButton.innerHTML = '<img src="../../gui/volumeOn.png">';
                        runAnim = true;
    
                    }
                }
                /**/
    
    
                //
    
                var audio = new THREE.Audio(audioListener);
    
                analyser = new THREE.AudioAnalyser(audio, 32);
                //
                var file = '../assets/audio/ping_pong.mp3';
    
                if (/(iPad|iPhone|iPod)/g.test(navigator.userAgent)) {
    
                    const loader = new THREE.AudioLoader();
                    loader.load(file, function (buffer) {
    
                        audio.setBuffer(buffer);
                        audio.setLoop(true); // 一次
                        audio.setVolume(0.5);
                        audio.play();
    
                    });
    
                } else {
    
                    const loader = new THREE.AudioLoader();
                    loader.load(file, function (buffer) {
    
                        audio.setBuffer(buffer);
                        audio.setLoop(true); // 重复 false一次
                        audio.setVolume(0.5);
                        audio.play();
    
                    });
    
    
                    /*
                    //2 不可以连续播放
                    const mediaElement = new Audio(file);
                   // mediaElement.setBuffer(buffer);
                    mediaElement.play();
                    audio.setMediaElementSource(mediaElement);
                    */
    
                }
    
                /**/
                var format = (renderer.capabilities.isWebGL2) ? THREE.RedFormat : THREE.LuminanceFormat;
    
                uniforms = {
    
                    tAudioData: { value: new THREE.DataTexture(analyser.data, fftSize / 2, 1, format) }
    
                };
    
                animate();
                //render();
    
    
                function animate() {
    
                    requestAnimationFrame(animate);
                    render();
    
                }
    
    
                function render() {
    
                    //  // update the stats and the controls
                    //trackballControls.update(clock.getDelta());
                    // stats.update();
                    //
                    if (runAnim) {
                        audio.play();
                    }
                    else {
                        audio.stop();  //停止}
                    }
    
    
                    analyser.getFrequencyData();
                    uniforms.tAudioData.value.needsUpdate = true;
    
    
    
                    ro += controls.rotationSpeed;
                    // rotate the cube around its axes
                    cube.rotation.x += controls.rotationSpeed;
                    cube.rotation.y += controls.rotationSpeed;
                    cube.rotation.z += controls.rotationSpeed;
                    console.log("ro:" + ro);
                    // bounce the sphere up and down
                    step += controls.bouncingSpeed;
                    sphere.position.x = 20 + (10 * (Math.cos(step)));
                    sphere.position.y = 2 + (10 * Math.abs(Math.sin(step)));
                    console.log("setp:" + step);
                    // render using requestAnimationFrame
    
    
                    requestAnimationFrame(render);
                    renderer.render(scene, camera);
    
    
    
    
                }
    
                //根据窗体的大小改变,有一定的算法
                function onResize() {
                    camera.aspect = window.innerWidth / window.innerHeight;
                    camera.updateProjectionMatrix();
                    renderer.setSize(window.innerWidth, window.innerHeight);
                }
    
            }
    
    
        </script>
    
    
        <link rel="stylesheet" href="../css/default.css">
        <style>
            div {
                display: block;
            }
    
            #fwa {
                 100px;
                height: 100px;
                left: 0;
                bottom: 0;
                position: absolute;
                opacity: 0;
                z-index: 10
            }
    
            .buttonBG {
                z-index: 2;
                background-color: #000;
                position: absolute;
                border: 1px solid #fff;
            }
    
            .button {
                text-align: center;
                font-size: 1em;
                color: #eee;
                line-height: 40px;
                z-index: 40;
                position: absolute;
            }
    
            #topLeft {
                left: 15px;
            }
    
            #topLeft, #topRight {
                 130px;
                height: 40px;
                position: absolute;
                z-index: 2;
                top: 150px;
            }
    
    
            #topRight {
                right: 15px;
            }
    
            #topLeft, #topRight {
                 130px;
                height: 40px;
                position: absolute;
                z-index: 2;
                top: 150px;
            }
    
            #toolBar {
                 590px;
                height: 40px;
                left: 50%;
                margin-left: -145px;
                bottom: 40px;
                z-index: 2;
                position: absolute;
                color: #ff0000;
            }
        </style>
    </head>
    <body>
        <div id="webgl-output"></div>
        <div id="toolBar"><div id="audioButton" style="visibility: visible; left: 255px;"><div id="backgroundaudioButton" class="buttonBG" style=" 40px; height: 40px; opacity: 0.5; left: 255px;"></div><div id="buttonaudioButton" class="button" style=" 40px; height: 40px; left: 255px;"><img src="../../gui/volumeOn.png"></div></div></div>
    
        <!-- Javascript code that runs our Three.js examples -->
        <script type="text/javascript">
            (function () {
                // your page initialization code here
                // the DOM will be available here
                init()
            })();
        </script>
    
    </body>
    </html>
    

      

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />
        <meta name="apple-moible-web-app-capable" content="yes">
        <meta name="apple-moible-web-app-status-bar-style" content="black">
        <title>Control gui and set Volume</title>
        <meta content=" Three.js r95 声音调节 set Volume" name="keywords">
        <meta content=" Three.js r95 播放声音并调节 set Volume" name="description">
        <meta name="author" content="Geovin Du 涂聚文 塗聚文">
        <link rel="shortcut icon" href="~/favicon.ico" type="image/x-icon" />
        <link rel="icon" href="/favicon.ico" />
        <link rel="bookmark" href="/favicon.ico" type="image/gif" />
        <script type="text/javascript" charset="UTF-8" src="../libs/three/three.js"></script>
        <script type="text/javascript" charset="UTF-8" src="../libs/three/controls/TrackballControls.js"></script>
        <script type="text/javascript" src="../libs/util/Stats.js"></script>
        <script type="text/javascript" src="../libs/util/dat.gui.js"></script>
        <script type="text/javascript" src="js/util.js"></script>
        <script type="text/javascript">
            function init() {
    
    
                // listen to the resize events  监听窗体大小事件
                window.addEventListener('resize', onResize, false);
                var uniforms; //音量调节
                var fftSize = 0.2;
                var stats = initStats();
    
                //声音
                var audioListener = new THREE.AudioListener();
    
                // create a scene, that will hold all our elements such as objects, cameras and lights.
                var scene = new THREE.Scene();
    
                // create a camera, which defines where we're looking at.
                var camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000);
    
                // create a render and set the size
                var renderer = new THREE.WebGLRenderer();
    
                renderer.setClearColor(new THREE.Color(0x000000));
                renderer.setSize(window.innerWidth, window.innerHeight);
                renderer.shadowMap.enabled = true;
    
                // create the ground plane
                var planeGeometry = new THREE.PlaneGeometry(60, 20, 1, 1);
                var planeMaterial = new THREE.MeshLambertMaterial({ color: 0xffffff });
                var plane = new THREE.Mesh(planeGeometry, planeMaterial);
                plane.receiveShadow = true;
    
                // rotate and position the plane
                plane.rotation.x = -0.5 * Math.PI;
                plane.position.x = 15;
                plane.position.y = 0;
                plane.position.z = 0;
    
                // add the plane to the scene
                scene.add(plane);
    
                // create a cube
                var cubeGeometry = new THREE.BoxGeometry(4, 4, 4);
                var cubeMaterial = new THREE.MeshLambertMaterial({ color: 0xff0000 });
                var cube = new THREE.Mesh(cubeGeometry, cubeMaterial);
                cube.castShadow = true;
                // position the cube
                cube.position.x = -4;
                cube.position.y = 3;
                cube.position.z = 0;
    
                // add the cube to the scene
                scene.add(cube);
    
                var sphereGeometry = new THREE.SphereGeometry(4, 20, 20);
                var sphereMaterial = new THREE.MeshLambertMaterial({ color: 0x7777ff });
                var sphere = new THREE.Mesh(sphereGeometry, sphereMaterial);
    
                // position the sphere
                sphere.position.x = 20;
                sphere.position.y = 0;
                sphere.position.z = 2;
                sphere.castShadow = true;
    
                // add the sphere to the scene
                scene.add(sphere);
    
                // position and point the camera to the center of the scene
                camera.position.x = -30;
                camera.position.y = 40;
                camera.position.z = 30;
                camera.lookAt(scene.position);
    
    
    
    
                // 设置声音add the listener to the camera
                camera.add(audioListener);
                // instantiate audio object
                var oceanAmbientSound = new THREE.Audio(audioListener);
                // add the audio object to the scene
                scene.add(oceanAmbientSound);
    
    
    
                // Boolean for start and restart
                var initAnim = true;
                var runAnim = false;
    
                // Buttons startButton and resetButton
                var startButton = document.getElementById('buttonaudioButton');
                //startButton.addEventListener('click', init);
    
                //开始加载时
                startButton.innerHTML = '<img src="../../gui/volumeOff.png" alt="关" title="关">';
                // Start Button
                startButton.onclick = function StartAnimation() {
    
                    if (initAnim) {
                        initAnim = false;
                        runAnim = true;
                        theta = 0;
                        startButton.innerHTML = '<img src="../../gui/volumeOff.png" alt="关"   title="关">';
                        //render();
                    }
                    // Start and Pause
                    if (runAnim) {
                        startButton.innerHTML = '<img src="../../gui/volumeOff.png" alt="关" title="关">';
                        runAnim = false;
                        // render();
                    } else {
                        startButton.innerHTML = '<img src="../../gui/volumeOn.png" alt="开" title="开">';
                        runAnim = true;
                        // render();
                    }
                }
    
    
                // instantiate a loader
                var loader = new THREE.AudioLoader();
                // load a resource
                loader.load(
                    // resource URL
                    '../assets/audio/ping_pong.mp3',
                    // Function when resource is loaded
                    function (audioBuffer) {
                        // set the audio object buffer to the loaded object
                        oceanAmbientSound.setBuffer(audioBuffer);
                        oceanAmbientSound.setLoop(true); // 一次
                        oceanAmbientSound.setVolume(0.1);
                        // play the audio
                        oceanAmbientSound.play();
                        //oceanAmbientSound.stop();  //停止
                    },
                    // Function called when download progresses
                    function (xhr) {
                        console.log((xhr.loaded / xhr.total * 100) + '% loaded');
                    },
                    // Function called when download errors
                    function (xhr) {
                        console.log('An error happened');
                    }
                );
    
    
                // create an AudioAnalyser, passing in the sound and desired fftSize
                var analyser = new THREE.AudioAnalyser(oceanAmbientSound, 32);
                //
                const format = (renderer.capabilities.isWebGL2) ? THREE.RedFormat : THREE.LuminanceFormat;
                uniforms = {
                    tAudioData: { value: new THREE.DataTexture(analyser.data, fftSize / 2, 1, format) }
                };
    
                // get the average frequency of the sound
                var data = analyser.getAverageFrequency();
                var listener = new THREE.AudioListener();
                camera.add(listener);
                //
    
    
                // add subtle ambient lighting
                var ambienLight = new THREE.AmbientLight(0x353535);
                scene.add(ambienLight);
    
                // add spotlight for the shadows
                var spotLight = new THREE.SpotLight(0xffffff);
                spotLight.position.set(-10, 20, -5);
                spotLight.castShadow = true;
                scene.add(spotLight);
    
                // add the output of the renderer to the html element
                document.getElementById("webgl-output").appendChild(renderer.domElement);
    
                // call the render function
                var step = 0;
                var num = 0;
                //添加控件
                var controls = new function () {
                    this.rotationSpeed = 0.02;
                    this.bouncingSpeed = 0.03;
                    this.SoundSpeed = 0.1;//初始值
                };
    
                var gui = new dat.GUI();
                gui.add(controls, 'rotationSpeed', 0, 0.5); //最高值
                gui.add(controls, 'bouncingSpeed', 0, 0.5);//最高值
                gui.add(controls, 'SoundSpeed', 0, 5.0);  //音量调节最高值
    
                // attach them here, since appendChild needs to be called first
                var trackballControls = initTrackballControls(camera, renderer);
                var clock = new THREE.Clock();
    
    
    
    
                animate();
                //render();
    
    
                function animate() {
    
                    requestAnimationFrame(animate);
                    render();
    
                }
    
    
    
                //render();
    
                function render() {
                    // update the stats and the controls
                   // trackballControls.update(clock.getDelta());
                    //stats.update();
    
    
                    if (runAnim)
                        oceanAmbientSound.play()
                    else
                        oceanAmbientSound.stop();  //停止
    
                    //声音音量调节
                    num += controls.SoundSpeed;
                    oceanAmbientSound.setVolume(num);
                    if (num = 0)
                        oceanAmbientSound.stop();  //停止
                    // analyser.getFrequencyData();
                    uniforms.tAudioData.value.needsUpdate = true;
    
    
                    // rotate the cube around its axes
                    cube.rotation.x += controls.rotationSpeed;
                    cube.rotation.y += controls.rotationSpeed;
                    cube.rotation.z += controls.rotationSpeed;
    
                    // bounce the sphere up and down
                    step += controls.bouncingSpeed;
    
                    sphere.position.x = 20 + (10 * (Math.cos(step)));
                    sphere.position.y = 2 + (10 * Math.abs(Math.sin(step)));
    
                    // render using requestAnimationFrame
                    requestAnimationFrame(render);
                    renderer.render(scene, camera);
                }
    
                //根据窗体的大小改变,有一定的算法
                function onResize() {
                    camera.aspect = window.innerWidth / window.innerHeight;
                    camera.updateProjectionMatrix();
                    renderer.setSize(window.innerWidth, window.innerHeight);
                }
            }
        </script>
        <link rel="stylesheet" href="../css/default.css">
        <style>
            div {
                display: block;
            }
    
            #fwa {
                 100px;
                height: 100px;
                left: 0;
                bottom: 0;
                position: absolute;
                opacity: 0;
                z-index: 10
            }
    
            .buttonBG {
                z-index: 2;
                background-color: #000;
                position: absolute;
                border: 1px solid #fff;
            }
    
            .button {
                text-align: center;
                font-size: 1em;
                color: #eee;
                line-height: 40px;
                z-index: 40;
                position: absolute;
            }
    
            #topLeft {
                left: 15px;
            }
    
            #topLeft, #topRight {
                 130px;
                height: 40px;
                position: absolute;
                z-index: 2;
                top: 150px;
            }
    
    
            #topRight {
                right: 15px;
            }
    
            #topLeft, #topRight {
                 130px;
                height: 40px;
                position: absolute;
                z-index: 2;
                top: 150px;
            }
    
            #toolBar {
                 590px;
                height: 40px;
                left: 50%;
                margin-left: -145px;
                bottom: 40px;
                z-index: 2;
                position: absolute;
                color: #ff0000;
            }
        </style>
    </head>
    <body>
        <div id="webgl-output"></div>
        <div id="toolBar"><div id="audioButton" style="visibility: visible; left: 255px;"><div id="backgroundaudioButton" class="buttonBG" style=" 40px; height: 40px; opacity: 0.5; left: 255px;"></div><div id="buttonaudioButton" class="button" style=" 40px; height: 40px; left: 255px;"><img src="../../gui/volumeOn.png" alt="开" title="开"></div></div></div>
    
        <!-- Javascript code that runs our Three.js examples -->
        <script type="text/javascript">
            (function () {
                // your page initialization code here
                // the DOM will be available here
                init()
            })();
        </script>
    </body>
    </html>
    

      

    哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)成功.---Geovin Du(涂聚文)
  • 相关阅读:
    HTTP协议相关知识点
    收集—— css实现垂直居中
    Nginx、lls、Apache三种服务器的日志格式及其字段含义
    XXE
    不安全的url跳转问题
    SSRF
    暴力破解
    跨站脚本xss
    CSRF跨站请求伪造
    RCE
  • 原文地址:https://www.cnblogs.com/geovindu/p/14479229.html
Copyright © 2011-2022 走看看