2012-05-18 31 views
3

我已經有一種工作方法可以在我的遊戲中播放聲音效果,但聲音都是以默認音量播放的。如果聲音起源與玩家之間的距離增加,我希望聲音更安靜。如何在Java中以指定音量播放聲音?

目前我使用:

public static void play(String sound) { 
    Clip clip = soundList.get(sound); 
    clip.setFramePosition(0); 
    //I want to set the clip's volume here 
    clip.start(); 
} 

有類似clip.getLevel(),但目前還沒有制定者。 如何在開始前設置剪輯的音量?

在此先感謝!

+1

我想你可以看看http://stackoverflow.com/questions/953598/audio-volume-control-increase-or-decrease-in-java他們減少音量。當然,你只需添加到音量。 – Ewald

+0

如果多個剪輯重疊,可能會與其他聲音(如系統聲音)無法使用。 –

回答

0

剪輯API不支持這種AFAIK。我想你必須讀取原始數據,乘以一個常數,然後使用原始數據創建一個新的剪輯。常數代表音量的變化量,所以如果你希望聲音變大一半,乘以0.5。

如果你想做出更大的聲音,你必須小心「過度」。沒有簡單的方法來解決這個問題。

1

在Java 7(也許是Java 6)中,有一組類給出control to the clip。它們是:

  • 布爾控制
    • 靜音
    • 應用/刪除混響
  • 複合控制
  • 枚舉控制
    • 混響控制
  • 浮動控制
    • 返回輔助
    • 輔助發送
    • 平衡
    • 主增益
    • 平移
    • 混響返回
    • 混響發送
    • 採樣率
    • VOLUME

你正在尋找的控制對象是FloatControl。如上面的列表所示,這可以控制剪輯的音量。通過使用下面的代碼來實現這一點:

FloatControl volume = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN); 
volume.setValue(gainAmount); 

- 或 -

((FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN)).setValue(gainAmount) 

哪裏gainAmount是要作爲提高(或降低)你的剪輯中的分貝量。