我来自max/msp,并试图找出编程网络音频的最佳实践,优化我的代码/获得更好的性能。
我读到的事实是,出于优化的原因,不能在振荡器上调用.start(),然后调用.stop(),然后调用.start()。我想知道什么是最好的设计模式,如果我想做一个简单的1振荡器合成类。
在需要播放合成器之前,我想实例化它。这样我就可以得到最好的时间,如果我想以后再播放合成器,那么系统就不必创建振荡器/合成器模式,每次我点击“播放音符”。
但是最好不要在振荡器上使用处理能力,我听不到,因为振幅包络是不开的。
这里是一个简单的合成器,没有振幅包络。我怎么能做一个类似的模式,其中我只使用处理能力时,合成器实际上正在播放?
最好的,拉塞
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>How to optimize CPU usage</title>
</head>
<body>
<a href="#" id="playButton">Play Note</a> <br><br>
<a href="#" id="stopButton">Stop Note</a>
<script>
class Synth {
constructor () {
this.context = new AudioContext();
this.osc = this.context.createOscillator();
this.osc.connect(this.context.destination);
}
play(freq) {
this.osc.frequency.value = freq;
this.osc.start(0);
}
stop() {
this.osc.stop(0);
}
}
let synth = new Synth();
const playButton = document.getElementById('playButton')
.addEventListener('click', () => {synth.play(440)});
const stopButton = document.getElementById('stopButton')
.addEventListener('click', () => {synth.stop()});
</script>
</body>
</html>发布于 2021-04-14 22:50:55
我觉得这更接近你想要的:
let context = new AudioContext();
class Synth {
constructor () {}
play(freq) {
this.osc = context.createOscillator();
this.osc.connect(context.destination);
this.osc.frequency.value = freq;
this.osc.start(0);
}
stop() {
this.osc.stop(0);
}
}首先,您只需要一个audioContext。你不应该创造一个新的每次振荡器播放。至于你对演出的担心,我不会太担心。振荡器被设计成廉价和一次性的。这是好的,创造他们在飞行,并忘记他们后,他们玩了一次。
https://stackoverflow.com/questions/67033056
复制相似问题