2011-01-14 24 views
1

如何在同一時間播放多個音符以與Firefox音頻數據API形成和絃?我希望能夠用3個音符填充單個陣列,並同時播放它們。這裏是我的代碼至今其作品,但和絃聽起來很恐怖:如何使用Firefox音頻數據API播放和絃

<!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[]陣列與一個音符聽起來就好了。但是它用多個音符填充它並不像一個和絃。我的代碼中需要更改什麼來演奏和絃?

回答

0

如果你只是將你的樣品加在一起,你會得到強大的剪裁。您需要將輸出縮小到最大值。試試這個:

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

謝謝!這解決了它。 3個音符除以4後的邏輯是什麼?我正在編寫一個可以同時播放x個音符的應用程序,並且我需要知道通過什麼來劃分總和。例如,如果我同時彈奏六個音符,我會除以7嗎?有推薦我使用的配方嗎? – Greg 2011-01-14 03:34:49