Можно ли генерировать синусоидальные сигналы в Processing.JS? - PullRequest
0 голосов
/ 15 октября 2018

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

Я написал небольшое приложение в Processing.JS , которое показывает12 музыкальных нот западного масштаба (A, A #, B, C, C #, D, D #, E, F, F #, G, G #) в круге, и выделяются отношения между ними, из которых музыкальные шкалы / интервалыпостроено.

Я хочу иметь возможность прикоснуться к определенному имени ноты и генерировать синусоидальный тон, связанный с этой нотой (наиболее очевидным является A = ..., 220 Гц, 440 Гц, 880 Гц, ...)

Итак, чтобы разбить его, в Processing.JS, возможно ли генерировать синусоидальный сигнал желаемой частоты при обнаружении события мыши?Если кто-то может помочь мне разобраться с этим, я могу выяснить все остальное.

Чтобы было ясно: я не слишком хорош в Javascript, и я в лучшем случае умеренный в обработке.Я знаю, что Javascript может делать подобные вещи, но я не знаю, как объединить два языка в этом веб-приложении.

1 Ответ

0 голосов
/ 15 октября 2018

Как вы и намекнули, вам придется делать это в JavaScript.Комментарий Джорджа точен: вы должны начать с прочтения этой страницы .

Но, в принципе, нужно помнить, что Processing.js преобразуется в JavaScript, поэтому вы можетевызывайте код JavaScript напрямую из Processing.js.

Я бы начал с поиска в Google что-то вроде «синусоидального тона JavaScript» для получения множества результатов. Tone.js , кажется, библиотека, которая делает то, что вы хотите, но я уверен, что есть много других.

Чтобы использовать библиотеку Tone.js, вам нужно сначала импортировать еев вашем HTML, как именно вы уже импортируете библиотеку Processing.js:

<script src="https://cdnjs.cloudflare.com/ajax/libs/tone/13.3.10/Tone.js"></script>

Затем вы можете использовать Tone.js в вашем коде Processing.js:

var synth ;

void setup(){
  //create a synth and connect it to the master output (your speakers)
  synth = new Tone.Synth().toMaster();
}

void mousePressed(){
  //play a middle 'C' for the duration of an 8th note
  synth.triggerAttackRelease('C4', '8n')
}

void draw(){}

Примечаниечто Processing.js оставляет код JavaScript один, когда он выполняет преобразование, поэтому ваш конечный вывод - это просто набор кода JavaScript.Вот почему вы можете смешивать код JavaScript и код Processing.js следующим образом.

Но, как сказал Джордж, вам, вероятно, следует подумать о переходе на P5.js, поскольку Processing.js больше не поддерживается.

Бесстыдная самореклама: здесь - учебник по Processing.js, а здесь - учебники на P5.js.

...