2011-12-25 27 views
0

我是使用javax.sound.sampled軟件包的新手,我選擇使用該軟件包的原因是對使用的音頻具有更多控制權,更簡單的音頻解決方案,如音頻剪輯。如何在不使用控件的情況下調整線的音量

我已經通讀:Oracle's Sound Tutorial (或者至少像我一樣能把握),但我沒有看到使用Clip接口,他們似乎給調製在Line水平/播放音量的方法這些類型的選項允許您創建聲音,但是我找不到通過我的Line或我的AudioInputStream進行這些調整的任何方法。

我發現[此]與文本頁面,

浮球控制,另一方面,非常適合於表示無級變速控制,如鍋,平衡,或體積。

,但我的電腦上沒有線返回任何控件(使用Line.getControls()

(我試圖強迫行接受類似thisFloatControl.Type.VOLUME,但我得到一個「不支持的控制類型的異常」)

是通過使用Line的控件來修改Line上的音量/音量(使用Clip界面)的唯一方法嗎?或者是否可以修改AudioInputStream的音量?

另外還有一種方法,將控件添加到現有的線?

回答

1

而不是使用FloatControl.Type.VOLUME使用FloatControl.Type.MASTER_GAIN。

0

至少有一種方法,除了使用線條。 (我也遇到了麻煩,得到了一條控制線,並發現一條Master線的工作,正如Travis Meyers所推薦的那樣,我給了他一張+票)。不知道你是否想去那裏,但是可以乘以每個幀的音頻值由音量因子決定。 Java教程對這種技術進行了通過引用,但是與該文檔中的其他許多內容一樣,它們沒有提供明確的示例。

因此,當你獲得一個字節緩衝區時,你必須遍歷緩衝區,組裝字節來獲得音頻值。然後,乘以音量因子(通常是從0到1.0的浮點數),然後將音頻值拆分回字節。

它的工作原理。我用粗糙的Java Theremin來做,你可以試試。我也在該程序中以每幀爲基礎操縱我的音調。但該計劃仍然存在問題!我現在正在改進管理GUI事件數據到音頻循環的方式。此外,我正在逐幀響應更改,而不是通過每個緩衝區。但對於大多數用途來說,每緩衝區都很好。

也就是說,要聽取的內容是關注發送導致不連續性的音量變化,這可能會導致大聲點擊。導致點擊的數量可能在不同的音量範圍內有所不同。另外,音量不會以線性方式完全下降,因爲您的體積係數從0到1.0。

相關問題