选择 web api 进行录音

Choose web api for audio recording

任务是实现一个基于标准网络音频的录音机api。仔细研究了两种方式ScriptProcessorNode.onaudioprocess & AudioWorkletProcessor.process 没有得出最后的决定。官方表示,自 2014 年以来,onaudioprocess 已被弃用,完全替代者是 audio workers。我是 javascript 的新手,也许这个问题听起来很愚蠢,但为什么直到今天仍然在积极使用 onaudioprocess?

让我们深入了解细节。 AudioWorkletProcessor api is available for 73% of users, while onaudioprocess api for 93%. In the next 2 years, we can hope for a 10 percent increase. (safari users). There are many projects, articles, solutions using onaudioprocess. Even specific tasks can be solved simply by using onaudioprocess. Such solutions are not possible for AudioWorklet. AudioWorklet documentation is poor and few mentions on the internet. For example, I still don't understand why a WebWorker knows what a blob is, but AudioWorklet doesn't (devTools exception: Uncaught ReferenceError: Blob is not defined). In the typescript, there are long-open cases for declaration types of basic functionality。这一切给人的印象是 onaudioprocess 比 AudioWorklet 更活泼。也许 AudioWorklet 更高效但难以实施,或者 javascript 社区不需要网络音频 api?解释一下官方推荐为什么要选择AudioWorklet?

你在这里问了很多问题。首先,您会很高兴知道 Safari 已经实现了 AudioWorklets。参见 https://wpt.fyi/webaudio

其次 WebWorkers 和 Worklets 是具有不同功能的不同事物。 AudioWorklets 是 Worklets,所以 AudioWorklets 只能得到 Worklet 的东西,不能得到 WebWorker 的东西。

第三,是的,ScriptProcessorNode 已被弃用,但仍有重要用途。你可以在 https://www.chromestatus.com/metrics/feature/timeline/popularity/646 看到这个。 将其与 AudioWorkletNode 的 https://www.chromestatus.com/metrics/feature/timeline/popularity/2263 进行比较。

当然,AudioWorklets 是可行的方法,但是当我想要一些快速而肮脏的东西并且不介意在主线程上处理时,我使用 ScriptProcessorNode。但是,如果我正在做一些符合生产质量的事情,我会尝试改用 AudioWorkletNode。