Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.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 如何使用Firefox音频数据API播放和弦_Javascript_Api_Firefox_Audio - Fatal编程技术网

Javascript 如何使用Firefox音频数据API播放和弦

Javascript 如何使用Firefox音频数据API播放和弦,javascript,api,firefox,audio,Javascript,Api,Firefox,Audio,如何使用Firefox音频数据API同时播放多个音符以形成和弦?我希望能够用3个音符填充单个数组,并同时播放它们。以下是我到目前为止的代码,它可以工作,但和弦听起来很糟糕: <!DOCTYPE html> <html> <body> <script type="text/javascript"> // Create an Audio interface var output = new Audio(); // Set up a mono cha

如何使用Firefox音频数据API同时播放多个音符以形成和弦?我希望能够用3个音符填充单个数组,并同时播放它们。以下是我到目前为止的代码,它可以工作,但和弦听起来很糟糕:

<!DOCTYPE html>
<html>
<body>
<script type="text/javascript">

// Create an Audio interface
var output = new Audio();

// Set up a mono channel at 44.1Khz
output.mozSetup( 1, 44100 );

// Create a sample buffer array
var samples = new Float32Array(22050); //22050 = 1 second

var g = 2* Math.PI * 391.995 / 44100;
var e = 2* Math.PI * 329.628 / 44100;
var c = 2* Math.PI * 261.626 / 44100;

// Fill the sample buffer array with values
for(var i=0; i<samples.length; i++){

    samples[i] = Math.sin(g * i) + Math.sin(e * i) + Math.sin(c * i);
    //samples[i] = Math.sin(c * i);
    //samples[i] = Math.sin(g * i);

}
</script>

<!-- Play the audio out -->
<button onclick="output.mozWriteAudio( samples );">Play</button>
</body>
</html>

如果在samples[]数组中填充一个音符,听起来就可以了。但是如果你用多个音符来填充它,它听起来一点也不像和弦。要演奏和弦,我需要在代码中做些什么修改?

如果您只需将示例添加到一起,您将获得很强的剪辑效果。您需要将输出缩小到最大值。试试这个:

samples[i] = (Math.sin(g*i) + Math.sin(e*i) + Math.sin(c*i)) / 4;

谢谢这就解决了问题。3个音符除以4的逻辑是什么?我正在写一个可以同时播放x个音符的应用程序,我需要知道总和除以什么。例如,如果我同时弹奏六个音符,我会除以7吗?你有没有建议我使用这个公式?我使用4而不是3的唯一原因是为了稍微降低最大值。如果是3,当所有三个波都处于同一相位时,它就会达到顶峰,但通常情况下,留下一点头部空间听起来更好。明白了。谢谢你的帮助。