javascript 振荡器音量未完全正常工作

标签 javascript audio javascript-oscillator

我有以下代码片段,它创建一个振荡器并以一定的音量播放它。我将振荡器变量保留在函数范围之外,以便在需要时可以使用其他函数来停止它。

var oscillator = null;
var isPlaying = false;

function play(freq, gain) {

    //stop the oscillator if it's already playing
    if (isPlaying) {
        o.stop();
        isPlaying = false;
    }

    //re-initialize the oscillator
    var context = new AudioContext();

    //create the volume node;
    var volume = context.createGain();
    volume.connect(context.destination);
    volume.gain.value = gain;

    //connect the oscillator to the nodes
    oscillator = context.createOscillator();
    oscillator.type = 'sine';
    oscillator.frequency.value = freq;

    oscillator.connect(volume);
    oscillator.connect(context.destination);

    //start playing
    oscillator.start();
    isPlaying = true;

    //log
    console.log('Playing at frequency ' + freq + ' with volume ' + gain);
}

问题是,增益节点音量似乎无法按您的预期工作。据我了解,0 的增益是静音,1 的增益是 100% 音量。但是,在这种情况下,传递 0 作为 gain 值只会播放低沉的声音,而不是完全静音(我希望我能正确解释这一点)。

我做错了什么?有人可以帮忙吗?

最佳答案

问题在于振荡器节点同时连接到增益节点和目标节点。

                +---------------+
                |               |
 oscillator ----+----> gain ----+---> destination

所以即使增益节点衰减到0,仍然有另一条路径到达目的地。问题可能出在删除第二个 oscillator.connect 行。

oscillator.connect(volume);
//oscillator.connect(context.destination);

关于javascript 振荡器音量未完全正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35615104/

相关文章:

android - 如何停止其他应用程序的声音?

audio - Mediainfo批量显示音频采样频率

javascript - 如何在每次点击按钮时发出蜂鸣声

javascript - 使用Python解析PDF文件

javascript - yarn 工作区和 lerna 导致无效的 Hook 调用

c# - Xamarin C#Android-将.3gpp音频转换为字节并发送到parseObject

javascript - 是否有一个node.js模块可以产生1/f(粉红噪声)波动?

javascript - 带有 sleep 功能的振荡器的JS音频音符序列

c# - 当我使用 [[percents]] 时,amcharts 上的错误在每列中显示 100.00%

javascript - 为 NightmareJS 指定 SOCKS 代理?