2016-02-19 25 views
6

İki ses arasında crossfade efekti yapmak istiyorum. Three.js sesin nasıl silineceğini?

var sound_b_1 = new THREE.PositionalAudio(listener); 
sound_b_1.load('mysound.ogg'); 
sound_b_1.setRefDistance(20); 
sound_b_1.setVolume(1); 
sound_b_1.autoplay = true; 
scene.add(sound_b_1); 

var volume = {x : 1}; // tweens not work without object 
// using Tween.js 
new TWEEN.Tween(volume).to({ 
    x: 0 
}, 1000).onUpdate(function() { 
    sound_b_1.setVolume(this.x); 
}).onComplete(function() { 
    sound_b_1.stop(); 
}).start(); 

Sıcak

Tween veya başka yollarla kullanarak bunu yapmak ... Bunun için Tween.JS deneyin, ama ben istiyorum nasıl sorunsuz bunu değil mi?

+3

1. nedenle sahip kod çalışmıyor için interpolasyon yapmak istiyorsunuz? Bir keman oluşturabilir misin? – gaitat

cevap

2

Sağladığınız kodda yanlış bir şey görmüyorum, benim için iyi çalışıyor, yalnızca tamamlanmadı. Eğer işlemek/güncelleme fonksiyonunda TWEEN.update(time) aramak gerekir:

tam kodu: Bu mysound.ogg tam ses seviyesinde oynamaya başlayın ve sonra da hiç hacme lineer interpolasyon ve sonra durmasına neden olur

var scene = new THREE.Scene(); 
var camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 0.1, 1000); 

var renderer = new THREE.WebGLRenderer(); 
renderer.setSize(window.innerWidth, window.innerHeight); 
document.body.appendChild(renderer.domElement); 

camera.position.z = 5; 

var listener = new THREE.AudioListener(); 
var sound_b_1 = new THREE.PositionalAudio(listener) 
sound_b_1.load('mysound.ogg'); 
sound_b_1.setRefDistance(20); 
sound_b_1.setVolume(1); 
sound_b_1.autoplay = true; 
scene.add(sound_b_1); 

var volume = {x : 1}; // tweens not work without object 
// using Tween.js 
new TWEEN.Tween(volume).to({ 
    x: 0 
}, 1000).onUpdate(function() { 
    sound_b_1.setVolume(this.x); 
}).onComplete(function() { 
    sound_b_1.stop(); 
}).start(); 

var time = 0; // incrementing time variable 
var render = function() { 
    requestAnimationFrame(render); 
    // normally the render render function is called 60 times a second. 
    // convert to milliseconds 
    time += ((1/60) * 1000); 
    TWEEN.update(time); 

    renderer.render(scene, camera); 
}; 
//setTimeout(()=>{sound_b_1.stop();}, 5000); 
render(); 

oynarken.

başka ses klibi sadece aynı şeyi oynamaya başlayın ama 0'dan hacmi başlangıç ​​izin vermedi ve

İlgili konular