2016-10-11 2 views
0

Я хотел бы попробовать сделать синтезатор с помощью JavaScript, но я не могу найти основополагающих примеров того, как это сделать.Как я могу использовать синусоидальную звуковую волну с JS?

То, что я понял из исследования является то, что он appears to be possible и что вы должны use a Canvas Pixel Array, а не нормальные ECMA массивы

Я также нашел информацию в MDN Audio, и я видел звуковые элементы, используемые для непрерывного воспроизведения по сети радио-игроков раньше, хотя я не мог понять, как это сделать.

Моя цель - сделать что-то, что позволяет мне синтезировать непрерывные волны sin и воспроизводить их с помощью моей клавиатуры без использования предварительно сделанных образцов.

EDIT: Один из приведенных ниже комментариев указал мне в правильном направлении. Я сейчас работаю над решением, но если вы хотите опубликовать его, не стесняйтесь.

+0

Would [это] (https://developer.mozilla.org/en- US/docs/Web/API/Web_Audio_API/Visualizations_with_Web_Audio_API) указывает вам в правильном направлении? – bvx89

+0

Возможно. Я также просто нашел это: http://stackoverflow.com/questions/30019666/web-audio-synthesis-how-to-handle-changing-the-filter-cutoff-during-the-attack?rq=1 I наконец выяснил, что панель поиска на SO - это теги, а не вопросы. –

+0

Да. Это указывало на меня в правильном направлении. Ответьте на сообщение немного, если только кто-то еще не сделает это первым. –

ответ

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> 
Смежные вопросы