首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Web最佳实践、简单合成器、系统优化/垃圾收集

Web最佳实践、简单合成器、系统优化/垃圾收集
EN

Stack Overflow用户
提问于 2021-04-10 10:02:08
回答 1查看 197关注 0票数 2

我来自max/msp,并试图找出编程网络音频的最佳实践,优化我的代码/获得更好的性能。

我读到的事实是,出于优化的原因,不能在振荡器上调用.start(),然后调用.stop(),然后调用.start()。我想知道什么是最好的设计模式,如果我想做一个简单的1振荡器合成类。

在需要播放合成器之前,我想实例化它。这样我就可以得到最好的时间,如果我想以后再播放合成器,那么系统就不必创建振荡器/合成器模式,每次我点击“播放音符”。

但是最好不要在振荡器上使用处理能力,我听不到,因为振幅包络是不开的。

这里是一个简单的合成器,没有振幅包络。我怎么能做一个类似的模式,其中我只使用处理能力时,合成器实际上正在播放?

最好的,拉塞

代码语言:javascript
复制
<!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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-14 22:50:55

我觉得这更接近你想要的:

代码语言:javascript
复制
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。你不应该创造一个新的每次振荡器播放。至于你对演出的担心,我不会太担心。振荡器被设计成廉价和一次性的。这是好的,创造他们在飞行,并忘记他们后,他们玩了一次。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67033056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档