2011-01-14 7 views
1

Wie kann ich mehrere Noten gleichzeitig spielen, um einen Akkord mit der Firefox Audio Data API zu bilden? Ich möchte in der Lage sein, ein einzelnes Array mit 3 Noten zu füllen und sie alle gleichzeitig abzuspielen. Hier ist der Code, den ich bisher haben, die funktioniert, aber die Sehne schrecklich klingt:Wie man Akkord mit Firefox Audio Data API spielt

<!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> 

Wenn Sie die samples[] Array mit einer Note füllen Sie es ganz gut klingt. Aber wenn Sie es mit mehreren Noten füllen, klingt es nicht wie ein Akkord. Was muss ich in meinem Code ändern, um einen Akkord zu spielen?

Antwort

0

Wenn Sie nur Ihre Samples zusammenfügen, erhalten Sie starke Clipping. Sie müssen den Ausgang auf den Maximalwert herunterskalieren. Versuchen Sie dies:

+0

Danke! Das hat es behoben. Was ist die Logik hinter 4 für 3 Noten? Ich schreibe eine App, die x Anzahl von Noten gleichzeitig spielen kann und ich muss wissen, wo ich die Summe teilen soll. Wenn ich zum Beispiel sechs Noten gleichzeitig spiele, würde ich dann durch 7 dividieren? Gibt es eine Formel, die Sie mir empfehlen? – Greg

+0

Der einzige Grund, warum ich 4 anstelle von 3 benutzt habe, war, das Maximum ein wenig zu mindern. Mit 3 hätte es * nur * den Höhepunkt erreicht, wenn alle drei Wellen in Phase waren, aber es klingt normalerweise besser, einen kleinen Kopfraum zu verlassen. – Phrogz

+0

Verstanden. Danke für Ihre Hilfe. – Greg

Verwandte Themen