Javaで音声ファイルを音量を制御しながら再生する方法
Java Soundで音声ファイルを再生する方法を調べたのだけど、音量を制御する方法がちょっと面倒だったので、覚え書き。
音声ファイルを再生するだけならClip#start()で良いのだけど、音量を制御するには、Clip#getContol()でFloatControl.Type.MASTER_GAINのコントロールを取得する必要がある。
取得したFloatControlに設定する値もデシベル単位なので、オリジナルの50%の音量で再生とかするのに、ちょっと面倒。対数計算が必要になる。(参考:Oracle Technology Network for Java Developers | Oracle Technology Network | Oracle)
コードとしては、以下のようになる。
public void testPlayClip() { try { Clip clip = AudioSystem.getClip(); AudioInputStream in = AudioSystem.getAudioInputStream(new File("test.wav")); clip.open(in); FloatControl control = (FloatControl)clip.getControl(FloatControl.Type.MASTER_GAIN); controlByLinearScalar(control, 0.5); // 50%の音量で再生する clip.start(); } catch (Exception e) { e.printStackTrace(); } } private void controlByLinearScalar(FloatControl control, double linearScalar) { control.setValue((float)Math.log10(linearScalar) * 20); }