Как играть аккорд с помощью Firefox Audio Data API - PullRequest
1 голос
/ 14 января 2011

Как я могу сыграть несколько нот одновременно, чтобы сформировать аккорд с помощью 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 голосов
/ 14 января 2011

Если вы просто сложите свои образцы вместе, вы получите сильное отсечение.Вам нужно уменьшить выход до максимального значения.Попробуйте это:

samples[i] = (Math.sin(g*i) + Math.sin(e*i) + Math.sin(c*i)) / 4;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...