0

我想尝试使用 JavaScript 制作合成器,但我找不到任何关于如何做到这一点的基本示例。

我从研究中发现,这似乎是可能的,您应该使用 Canvas Pixel Array而不是普通的 ECMA 阵列

我还在MDN Audio中找到了信息,我之前也看到过网络广播播放器用于连续播放的音频元素,尽管我不知道如何。

我的目标是制作一些东西,让我可以合成连续的正弦波并使用我的键盘演奏它们,而无需使用预先制作的样本

编辑:下面的评论之一为我指明了正确的方向。我目前正在研究解决方案,但如果您也想发布一个解决方案,请随意。

4

1 回答 1

0

这是一个基本示例,任何人都应该能够从中找出如何用键盘演奏正弦波:

<script type="text/javascript">
    //WARNING: VERY LOUD.  TURN DOWN YOUR SPEAKERS BEFORE TESTING

    // create web audio api context
    var audioCtx = new (window.AudioContext || window.webkitAudioContext)();

    // create Oscillator node
    var oscillator = audioCtx.createOscillator();

    oscillator.type = 'sine';
    oscillator.frequency.value = 750; // value in hertz
    oscillator.connect(audioCtx.destination);
    oscillator.start();

    //uncomment for fun
    // setInterval(changeFreq, 100);

    //choose a random interval from a list of consonant ratios
    var intervals = [1.0, 0.5, 0.3333, 1.5, 1.3333, 2.0, 2.25]
    function changeFreq() {
        var intervalIndex = ~~(Math.random() * intervals.length);
        var noteFreq = oscillator.frequency.value * intervals[intervalIndex];

        //because this is random, make an effort to keep it in comfortable frequency range.
        if(noteFreq > 1600) 
            noteFreq *= 0.5;
        else if(noteFreq < 250) 
            noteFreq *= 2;


        oscillator.frequency.value = noteFreq;
    }
</script>

<body>
<button onclick="changeFreq()">Change Places!</button>
</body>
于 2016-10-11T21:34:37.963 回答