簡體   English   中英

縮放聲音Java

[英]Scaling sound Java

我正在嘗試對音頻輸入執行線性縮放,每個通道的縮放比例相同。

總體效果是輸入流的幅度逐漸減小,直到靜音為止。 因此,我的第一個樣本將保持不變,而我的最后一個樣本的振幅將為0。 我想知道您是如何實現的。

到目前為止,這就是我所使用的縮放代碼,並且想知道是否仍然需要縮放樣本,以使其位於16位二進制數的補碼范圍之間。

 for (int i=0; i<data.length; ++i){ // data[i] is sample in intger form
        data[i] = (int) (data[i]*(something/something)); 
 }

如果可以解釋按比例縮放到特定因子會有所幫助嗎?

謝謝!

我假設您正在使用音頻數據的短值(例如[-32768..32767]),並且字節之間的轉換是在其他地方進行的。

在分數“某物/某物”中,分子的范圍從等於分母的值減小到零,而分母保持固定值。

例如,如果將音量范圍分為128步,則最大音量為128/128,最安靜音量為0/128。

為避免除法,您可以預先計算等於1/128的因子,然后將其乘以[0..128]范圍內的值。

然后,您將獲得“ something * precalculatedFactor”,其運行速度可能會快一點。

但是,線性體積縮放存在一些問題。 實際感知的音量不是線性的。 因此,X的音量間隔可能幾乎不會在高端產生體積差,但會很大,以致導致不連續並在低端發出咔嗒聲。

我認為人們經常使用指數函數來更好地將音量映射到線性輸入。 關於哪個最好,存在分歧。 但是,假設您的音量轉盤來自[0..1]。 如果在應用該值之前先對它求立方,例如,嘗試創建1/2響度的輸入0.5變為(0.5 * 0.5 * 0.5)=> 0.125,則它將比0.5更接近1/2響度。

因此,“某物*某物*某物* precalculatedFactorCubed”可能會更好。

暫無
暫無

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

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