如何使用Firefox Audio Data API发挥和弦

时间:2011-01-14 02:43:09

标签: javascript api firefox audio

如何使用Firefox Audio Data 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[]数组,听起来就好了。但是你用多个音符填充它听起来不像是一个和弦。我需要在代码中更改哪些内容才能发挥作用?

1 个答案:

答案 0 :(得分:0)

如果您只是将样品添加到一起,您将获得强力剪裁。您需要将输出缩小到最大值。试试这个:

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