Посмотрите на эту страницу: https://alligator.io/js/first-steps-web-audio-api/
Часть, которая относится к вашему вопросу находится внизу:
blockquote>/* The frequency (in Hz) of Bb4 is 466.16 */ oscillator .frequency .setValueAtTime(466.16, audioContext.currentTime);
Следует отметить, что объект «осциллятор» сначала строится, а затем в коде можно регулировать высоту узла в поток с вышеуказанным кодом. Вы уже создали свой узел (то, что вы называете своим объектом
audioCtx
). Этот объект имеет значение частоты, которое должно быть изменено на лету. Случай выше для статического изменения высоты тона. Вам нужно будет одновременно получить частоту, а затем изменить ее с помощью разницы высоты звука, которую вы хотите, и использоватьsetValueAtTime
для обновления этого значения.Кроме того, вы можете установить этот пакет и использовать его для облегчения работы смещения высоты тона:
https://github.com/mmckegg/soundbank-pitch-shift [1111 ]
Наконец, есть другое решение, использующее объект AudioContext, найденный здесь (с использованием метода
detune
): https://codepen.io/qur2/pen/emVQwW
Считайте работу Anton Ertl. Также David Gregg. Также Вы могли бы хотеть прочитать синюю книгу Smalltalk, которая имеет три главы по VM. Книга Smalltalk Green является также интересной и является бесплатной онлайн.
Менее технический, но все еще интересный, если у Вас есть доступ к Цифровой библиотеке ACM, дедушка всего портативного VMs, UCSD Паскаль.
Fninally, я второй рекомендация Реализации Lua 5.0. Это - превосходная работа.
также проверьте Реализацию Lua 5.0. это широко рассматривается как самый быстрый VM в своем классе и также одной из самых чистых и самых маленьких реализаций.