亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Web Audio API 中,有沒有辦法設置最大音量?

在 Web Audio API 中,有沒有辦法設置最大音量?

慕田峪4524236 2022-07-01 16:08:30
我知道您可以通過增益來提高或降低音量。我想知道是否有辦法(可能通過節點)來限制輸出的最大音量 - 不會減少低于該最大值的任何音頻。如果像這樣被封頂的音頻有失真是可以接受的。
查看完整描述

2 回答

?
白衣非少年

TA貢獻1155條經驗 獲得超0個贊

另一種可能更簡單的方法是使用WaveShaperNode。我認為curve等于 [-1, 0, 1] 會做你想做的事,將值鉗制為 +/-1。如果您不過度采樣,則不會有任何額外的延遲。

請注意,我很確定所有瀏覽器都會在向揚聲器發送音頻之前實現這種鉗位。


查看完整回答
反對 回復 2022-07-01
?
慕容708150

TA貢獻1831條經驗 獲得超4個贊

這對于任何內置的 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);


查看完整回答
反對 回復 2022-07-01
  • 2 回答
  • 0 關注
  • 221 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號