gpt4 book ai didi

java - 使用JLGui更改系统音量

转载 作者:行者123 更新时间:2023-12-03 02:19:58 24 4
gpt4 key购买 nike

我目前正在学习如何使用jlgui(使用swt对其进行控制)构建一个简单的MP3播放器。当我相处得很好的时候,有一件事确实让我发狂,那就是控制计算机发出的声音的音量和声相。

我有一个创建BasicPlayer对象和BasicController的类。我尝试使用BasicController.setGain方法,但是如果我在其中输入任何值,它所做的全部事情就是将音量设置为静音,并且在播放歌曲时似乎无法更改此值。如果有人能给我一些帮助,我真的很感激,因为它使我发疯:-(

还考虑过尝试以下建议

AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new File("C:\\Kasabian.mp3"));
Clip clip = AudioSystem.getClip();
clip.open(audioInputStream);
FloatControl gainControl = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN);

但不是很确定如何将其与jlgui结合使用。

最佳答案

“滚动自己的”解决方案:

Java声音教程的页面末尾“处理带有控件的音频”的部分非常少,称为“直接处理音频数据”。
http://docs.oracle.com/javase/tutorial/sound/controls.html

我放弃了“控件”,而是自己做。如果有人有一个使用Java控件进行音量和平移的有效解决方案,我将很高兴听到它。

要自己控制音量,您需要进入从AudioInputLine读取的数据的“缓冲区”,将数据转换为PCM帧,将PCM值乘以1的分数(其中1.0是完整音量,而0是静音),将其转换回字节,然后最后写入SourceDataLine。

此外,(如果您不灰心),如果volume变量是松散耦合且易失的,它会有所帮助;如果您指定的volume是“目标”,并且缓冲区循环内的变量逐渐接近目标,它会有所帮助。每帧的基础上。这是为了避免可能产生点击的音量跳跃。

并且(如果这还不够的话)有助于将0到1.0的范围映射到更好地匹配可听度水平的方程式(例如指数或对数)。

关于java - 使用JLGui更改系统音量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14666459/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com