У меня есть цикл со скоростью 50-200 кадров в секунду, и я хочу визуализировать данные со звуком. Мне нужно быстро и плавно реагировать на изменение данных, как Therminvox. Какая библиотека и подход лучше всего подходят для этого?
Проблемы с simpleTones.js:
- звук ухудшается в течение ~ 2 минут и, наконец, перестал работать
- я не нахожу, как изменить частоту, а не только играть отдельные ноты
Проблемы с Tone.js:
- не могу найти как изменить частоту
document.onmousemove=init
bInit=false;
Timeout=100;
NoteLength=100;
function init() //this is not solving alert "The AudioContext was not allowed to start"
{
if(bInit) return;
//const osc = new Tone.Oscillator(440, "sine").toDestination().start();
setTimeout(loop, 200);
bInit=true;
}
function freqRand(){return 50+Math.random()*1000;}
function loop( )
{
playTone(freqRand(),'sine',NoteLength/1000)
setTimeout(loop, Timeout);
}
//--------UI
function sliderTimeout_change(v){
Timeout=v; document.getElementById('Timeout').innerText=v;
}
function sliderNoteLength_change(v){
NoteLength=v; document.getElementById('NoteLength').innerText=v;
}
<script src="https://cdn.jsdelivr.net/gh/escottalexander/simpleTones.js/simpleTones.js"></script>
<!-- <script src="Tone.js"></script> -->
<body>
Timeout = <i id='Timeout'></i><br>
<input id='sliderTimeout' type="range" min="10" max="200" value="100" oninput="sliderTimeout_change(this.value)"><br><br>
NoteLength = <i id='NoteLength'></i><br>
<input id='sliderNoteLength' type="range" min="10" max="4000" value="100" oninput="sliderNoteLength_change(this.value)">
</body>