2016-06-08 2 views
0

при выполнении этого кода я получаю эту ошибку: «Uncaught TypeError: Не удалось выполнить« linearRampToValueAtTime »в« AudioParam »: предоставленное двойное значение не является конечным».остановка звукового осциллятора без кликов

var ac = new window.AudioContext() || new window.webkit.AudioContext(); 
var osc; 
var gain = ac.createGain(); 

function playosc() { 
    osc = ac.createOscillator(); 
    osc.frequency.value = 440; 
    osc.connect(gain); 
    gain.connect(ac.destination); 
    gain.gain.setValueAtTime(0, ac.currentTime); 
    gain.gain.linearRampToValueAtTime(0.3, ac.currentTime + 0.01); 
    osc.start(); 
} 

function stoposc() { 
    gain.gain.linearRampToValueAtTime(0, ac.endTime - 0.01); 
    osc.stop(ac.endTime); 
} 

& когда вместо ac.endTime просто EndTime - "Конечное время не определен" встретилась ошибка. может быть, кто-то может объяснить, почему это так? спасибо

ответ

0

Нет AudioContextendTime Недвижимость. Выполнение AudioContext.endTime возвращает undefined, поэтому у вас есть undefined-.01, который возвращает NaN, что не является конечным. Вы хотите использовать currentTime, как вы делали при создании осциллятора

function stoposc() { 
    gain.gain.linearRampToValueAtTime(0, ac.currentTime + .01); 
    osc.stop(ac.currentTime + .02); 
} 
+0

спасибо за ответ, но этот путь он щелкает затем останавливается. любые другие предложения? –