簡體   English   中英

使用 HTML5 / javascript 校正音頻音量輸出分貝,關閉預處理

[英]Correct audio volume output decibels using HTML5 / javascript, turn off pre-processing

我們已經觀察到,在瀏覽器中使用基於 javascript 的音頻時,在許多系統上,輸出電平與輸入信號電平的線性比例不正確。 例如,如果您“播放”兩個幅度變化為 20dB 的正弦波,則不同設備/設置所產生的差異可能與 20dB 有顯着差異,例如相差 10dB 或更小。 我們需要以相對於彼此的校准分貝級別輸出簡單的音頻信號(例如正弦波),例如以一個音量輸出一個正弦波,然后輸出比第一個安靜 20dB 的另一個正弦波,並且有他們實際上是那樣出來的。 我們想從使用 HTML5/javascript 的瀏覽器中執行此操作。
我們已經嘗試通過多種方式實現這一點,例如使用預先創建的、校准過的 .mp3 文件,直接使用 Web Audio API 來生成具有校准 dB 級別的振盪器。 我們得到了(對我們來說)非常令人驚訝且基本上不正確的結果。 當我們使用校准過的麥克風測量從設備發出的聲音時,觀察到了各種奇怪的現象,這表明音頻不僅以線性方式“播放”,而且正在對其進行復雜的預處理在它真正得到輸出之前。 這似乎取決於目前我們無法控制的各種變量。 它不像“正常”音頻放大器的工作方式那樣工作,即無論絕對電平設置為什么,20dB 的大輸入會產生 20dB 大的輸出。 我們發現使用相同的 javascript 代碼會產生非常不同的結果,這取決於各種變量,包括硬件(例如,在 Mac 上瀏覽與 iPhone 上的瀏覽​​)、選擇的音量設置(即使對於 20dB 的輸入差異,相對值也不會相差 20dB當音量為 1/2 時),如果使用耳機等。

在進一步的測試中,似乎主要問題與使用外部揚聲器有關。 使用耳機時,效果看起來好得多。

基本問題是,如果您創建兩個具有已知音量差異(例如 20dB)的不同信號,並將它們以多種方式中的任何一種輸出,則測得的差異通常不會是 20dB,在某些情況下甚至會達到 10dB。

有沒有辦法以編程方式做到這一點?

有沒有辦法覆蓋任何預處理或音頻音量壓縮似乎正在調整音量(導致輸出與輸入不正確成比例)?

我們需要一種跨平台(桌面、iOS、Android、不同瀏覽器、不同耳機/揚聲器)的方法來做到這一點,因此使用 HTML5。

如果使用 HTML5 無法做到這一點,我們如何使用本機 iOS/Android 代碼做到這一點? 這似乎更像是硬件問題而不是軟件問題,但也許有辦法覆蓋它。

謝謝

我們已經通過重要的進一步研究回答了這個問題。 經過詳細測試,以下內容變得清晰: 1) 在所有測試的系統上,無論其他設置如何,在使用耳機時,聲音幅度輸出幾乎完美地與輸入呈 1:1 線性關系。 這適用於多個瀏覽器、多個設備、iOS、Android、OSX、多個有源和無源耳塞和耳罩式耳機。 2) 在許多系統/設置/音量級別中,當使用外部揚聲器時,聲音幅度輸出與輸入不是 1:1 線性相關的。 相反,聲音通常是線性的,斜率小於 1,通常顯着更小(例如 1/2)。 除了這個斜率之外,許多系統也會在更高的音量水平下飽和。 這似乎是因為外部揚聲器正在使用補償機制。

因此,正確答案是:只要使用耳機,HTML5/javascript 音頻生成的音頻輸出幅度與輸入的線性關系就接近 1:1。 當在許多常用設備上使用外部揚聲器時,它不是接近 1:1 的線性與輸入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM