我和一位朋友正在將MP3播放器編程爲一個學校項目。我們即將完成,現在停留在試圖編程改變播放器音量的功能。 我們使用:使用JLayer調整音量
- AudioDevice
- AdvancedPlayer
我知道別人問同樣的問題,但媒體鏈接我並沒有完全得到解決,我不希望這樣的迴應所以我想我只是要再問一次。
乾杯 蒂莫西
我和一位朋友正在將MP3播放器編程爲一個學校項目。我們即將完成,現在停留在試圖編程改變播放器音量的功能。 我們使用:使用JLayer調整音量
我知道別人問同樣的問題,但媒體鏈接我並沒有完全得到解決,我不希望這樣的迴應所以我想我只是要再問一次。
乾杯 蒂莫西
要做到這一點,最簡單的方法是通過mp3spi使用jlayer這基本上意味着你通過JavaSound使用jlayer。然後,您可以像在JavaSound中一樣設置增益。
首先,你需要將以下內容添加到您的類路徑:
..所有這些都在mp3spi的發行版中(鏈接在上面)。其次,您需要在播放前解碼AudioInputStream。
AudioInputStream audioStream = AudioSystem.getAudioInputStream(file);
AudioFormat baseFormat = audioStream.getFormat();
AudioFormat decodedFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, baseFormat.getSampleRate(), 16, baseFormat.getChannels(),
baseFormat.getChannels() * 2, baseFormat.getSampleRate(), false);
AudioInputStream audioStream2 = AudioSystem.getAudioInputStream(decodedFormat, audioStream);
然後你玩解碼流:
Clip clip = AudioSystem.getClip();
clip.open(audioStream2);
和JavaSound API控件可用:
FloatControl gainControl = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN);
gainControl.setValue(-30.0f);
注意:不要忘記關閉你的資源,我剛顯示了這個問題的關鍵點 - 熟悉JavaSound預計,read here。
JLGUI是基於UI的JLayer應用調節音量的一個很好的例子。您可以在tar.gz文件中獲取源代碼。 http://www.javazoom.net/jlgui/sources.html
if (src == ui.getAcVolume())
{
Object[] args = { String.valueOf(ui.getAcVolume().getValue()) };
String volumeText = MessageFormat.format(ui.getResource("slider.volume.text"), args);
ui.getAcTitleLabel().setAcText(volumeText);
try
{
int gainValue = ui.getAcVolume().getValue();
int maxGain = ui.getAcVolume().getMaximum();
if (gainValue == 0) theSoundPlayer.setGain(0);
else theSoundPlayer.setGain(((double) gainValue/(double) maxGain));
config.setVolume(gainValue);
}
catch (BasicPlayerException ex)
{
log.debug("Cannot set gain", ex);
}
}
如果/其他格式化讓我頭疼。 – akf 2010-06-28 16:35:57
嘿謝謝你的快速回答!我會檢查出來,並再次問我是否沒有得到它:-) – Timothy 2010-06-28 16:37:47
哦,你可以快速告訴我在哪個文件中發現您發佈的代碼?歡呼聲 – Timothy 2010-06-28 16:39:29