猿问

在 Web Audio API 中,有没有办法设置最大音量?

我知道您可以通过增益来提高或降低音量。我想知道是否有办法(可能通过节点)来限制输出的最大音量 - 不会减少低于该最大值的任何音频。如果像这样被封顶的音频有失真是可以接受的。



慕田峪4524236
浏览 238回答 2
2回答

白衣非少年

另一种可能更简单的方法是使用WaveShaperNode。我认为curve等于 [-1, 0, 1] 会做你想做的事,将值钳制为 +/-1。如果您不过度采样,则不会有任何额外的延迟。请注意,我很确定所有浏览器都会在向扬声器发送音频之前实现这种钳位。

慕容708150

这对于任何内置的 AudioNode 都是不可能的。但这可以通过自定义 AudioWorklet 来实现。我最近发布了一个可以做到这一点的包。它被称为limiter-audio-worklet。它导出两个函数:import { addLimiterAudioWorkletModule, createLimiterAudioWorkletNode } from 'limiter-audio-worklet';第一个函数可用于添加AudioWorklet特定的AudioContext.await addLimiterAudioWorkletModule((url) => {    audioContext.audioWorklet.addModule(url);});AudioWorkletNode完成后,可以像这样创建实际的:const limiterAudioWorkletNode = createLimiterAudioWorkletNode(    AudioWorkletNode,    audioContext,    { attack: 0 });如果您设置attack两个零,您将获得所需的效果。+1/-1 以上的所有内容都会被限制。如果你增加它,attack它会使用前瞻来平滑过渡。这将引入一个小的延迟(相同大小),但听起来要好得多。当然,还需要将先前创建的limiterAudioWorkletNode靠近音频图的末尾连接起来。yourLastAudioNode    .connect(limiterAudioWorkletNode)    .connect(audioContext.destination);
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答