小编Zle*_*lik的帖子

Javascript Web 音频 API 延迟

我想制作一个 Javascript 程序来处理来自麦克风的一些音频。但是当我只做一个基本的例子时,比如从麦克风获取音频并在没有任何处理的情况下播放它,就像这样

source = audioCtx.createMediaStreamSource(stream);
source.connect(audioCtx.destination);
Run Code Online (Sandbox Code Playgroud)

我在输入和输出音频之间有 200 毫秒的延迟。我在 2 台装有 Windows 7 和 Windows 10 的不同 PC 上尝试了 Google Chrome 和 Firefox,它在任何地方看起来都一样。我通过使用外部设备录制和分析音频(而不仅仅是通过我的耳朵)获得了这个数字(200 毫秒)。

此处的官方 W3C 规范中他们讲述了大约 3-50 毫秒的延迟。30-50 毫秒是我需要的。我真的不需要 3-5 毫秒。

我尝试使用这样的延迟参数

navigator.mediaDevices.getUserMedia({
  audio: {
    latency: 0.05,
    echoCancellation: false,
    mozNoiseSuppression: true,
    mozAutoGainControl: false
  }
});
Run Code Online (Sandbox Code Playgroud)

但看起来它被 Chrome 和 FireFox 忽略了。

我的完整示例可在此处获得。

https://jsfiddle.net/xfq3ykp7/71/

是浏览器/硬件限制还是我做错了什么?任何人都可以通过我的示例听到一些延迟吗?通常,通过敲击麦克风附近的桌子可以很容易地检查它。敲击声与其声音之间有 200 毫秒的明显延迟。

我不需要复杂的事情,例如游戏或在线乐器所需的预定音频事件等。我只需要在我的简单示例中将延迟从 200 毫秒减少到 50 毫秒,或者理想情况下减少到 20 毫秒。

更新1:

通过更改代码,我可以在 Firefox 中在 Windows 10 上运行 70 毫秒,在 Windows 7 上运行 …

html javascript audio html5-audio web-audio-api

6
推荐指数
0
解决办法
2641
查看次数

Java中的Getter和Setters

在getter和setter中进行一些数据处理/验证是否是一种好习惯?在维基百科中有两个示例:

  • setDate方法将java.util.Date日期存储在3个单独的私有字段中,例如年,月,日
  • getAmount方法连接2个字段数字和货币,并返回类似“ 100 USD”的信息。也许数量字段本身根本不存在,而getAmount只是一种计算方法。

这些是好的例子还是最好避免?如果最好避免这种情况,如何更好地实现以上两个示例?

更新:请不要以日期等为严重的例子。这只是一个例子,当然它可能是愚蠢的。

我有的真实例子。

我有一个外部第三方系统,我必须进行集成。这个外部系统从我那里希望得到一些带有getter和setter方法的数据。我必须在此处传递2个字段,id(类似于09df723987cd7(假设为GUID))和formattedID类似于“ objecttype / 09df723987cd7”。我无法更改此外部系统。

我想像实施

getId() {
  return id
}

getFormattedId() {
    return objectType + "/" + id;
}
Run Code Online (Sandbox Code Playgroud)

objectType是此类中的另一个字段。

我的问题:可以,还是有一些更优雅的实现方法?

java getter-setter

5
推荐指数
1
解决办法
2155
查看次数