Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 静音/取消静音,不带按钮HTML5_Javascript_Html_Html5 Audio_Mute - Fatal编程技术网

Javascript 静音/取消静音,不带按钮HTML5

Javascript 静音/取消静音,不带按钮HTML5,javascript,html,html5-audio,mute,Javascript,Html,Html5 Audio,Mute,问题:在HTML5中自动找到有效的静音和取消静音功能(不带视频播放器),直到定义的时间过去 我将振荡器的增益设置为从0逐渐增加到1(每增加一个增益单位时会中断一系列1秒的静音),直到达到30秒。为此,调用了setValueAtTime函数(我将增量添加到增益值和时间值中) 然而,这似乎并不有效,因为迭代没有遵循准确的实际对应时间,即使参数被单独设置为在特定时间更改值->这需要虚拟的测试工作。更有趣的是setvaluecurveatime和setlinearrampatime,但它们似乎不允许在增

问题:在HTML5中自动找到有效的静音和取消静音功能(不带视频播放器),直到定义的时间过去

我将振荡器的增益设置为从0逐渐增加到1(每增加一个增益单位时会中断一系列1秒的静音),直到达到30秒。为此,调用了setValueAtTime函数(我将增量添加到增益值和时间值中)

然而,这似乎并不有效,因为迭代没有遵循准确的实际对应时间,即使参数被单独设置为在特定时间更改值->这需要虚拟的测试工作。更有趣的是setvaluecurveatimesetlinearrampatime,但它们似乎不允许在增加音调期间分布“沉默”

找到的唯一引用是与自定义按钮的用户交互,这不是自动的;和JQuery函数。我发现没有足够精确的文件。例如,函数“document.getElementById(id).setVolume(0);”既不提供定义静默持续时间的选项,也不提供沿递增音调的30秒均匀插入这1秒静默的选项

定义函数后,我将调用setTimeout,以便立即播放,然后调用setInterval(“function()”,30000)

代码片段

context=new AudioContext();
var oscillator = context.createOscillator();
var gainR = context.createGain(); 
oscillator.connect(gainR);
gainR.connect(context.destination);
gainR.gain.setValueAtTime(0,currenttime);
loudnessup = function (){
var c = currenttime;
var Loud=0.2; 
gainR.gain.setValueAtTime(Loud, c+2);
gainR.gain.setValueAtTime(0, c+3);
gainR.gain.setValueAtTime(Loud+0.05, c+3.5);
gainR.gain.setValueAtTime(0, c+4.5);
//...continues iterations
gainR.gain.setValueAtTime(Loud+0.8, c+28);
gainR.gain.setValueAtTime(0, c+30);};
setTimeout("loudnessup()",currenttime); 
setInterval(function(){
n=n+1; //after 30s the freq value should arise accordingly to an array 
oscillator.frequency.value = frequencies[n];},30000);}

在30秒之后,循环w/a更高频率似乎不再继续

这里是一个使用内置高分辨率计时器设置相对于开始时间的短段音量的示例

它将为每个路段创建两个事件,以快速增加交通量。每个分段都会进行切换,以便第一次增大音量,第二次减小音量。使用轻微的斜坡也可以防止声音中的咔哒声

使用切换状态,可以创建两个事件,为每个线段定义一个短渐变。如果切换为true,则If将从当前卷变为0,否则从0变为当前卷:

var toggle = true;
var now = actx.currentTime;
...

for(var i = 0; i < duration; i += step) {
    var volume = i / duration;

    g.gain.linearRampToValueAtTime(toggle ? volume : 0, now + i);
    g.gain.linearRampToValueAtTime(toggle ? 0 : volume, now + i + 0.012);
    toggle = !toggle;
}

开始
请将您的问题分解,以便更具可读性。段落很有效。谢谢你的提示,j08691。希望也很清楚欢迎来到Stack Overflow Katja。不幸的是,如果我们要帮助您,我们需要查看您正在使用的代码。创建一个列表将有助于回答此问题。否则,它可能会因为“太宽”而被关闭。谢谢,泰勒!我将确保我在下一次投稿时使用它:)谢谢肯!setInterval似乎不是每30秒调用一次这个函数……是因为时间不准确吗(当第一个循环还在滚动时)?对于(var i=0;i@KatjaShaniare我更新了答案,每30秒重播一次声音。你的for循环创建了2000个setInterval实例,这些实例将尝试一次播放声音,显然不好。我没有添加,但如果你想取消它(即clearInterval(timerID)),请存储setInterval中的timerID。