【问题标题】:set the audio volume in a JavaFX application在 JavaFX 应用程序中设置音量
【发布时间】:2020-08-24 16:44:57
【问题描述】:

搜索了几个小时后,我想知道我是否在问一个不可能的问题。

我们有一个 JavaFX 应用程序在 Ubuntu 上运行,带有 Pulseaudio。我想在 JavaFX 应用程序中以编程方式设置 HDMI 接收器的音量,类似于命令行的效果:

pactl set-sink-volume (hdmi sink) volume

但不知道如何执行此操作。我可以找到设置特定媒体文件音量的MediaPlayer.setVolume() 方法,但我想为在该接收器中播放的任何后续媒体设置音量,直到它的音量设置在其他地方.这是因为我们启动了一个浏览器并想要设置浏览器播放的任何媒体的音量。这一定是可能的吗?

【问题讨论】:

  • MediaPlayervolume 属性只是该播放器的音量,它是相对于系统音量的,它本身可能是相对于扬声器音量的(取决于您的扬声器的音量是独立控制的)。也就是说,您可能可以通过ProcessBuilder 执行该命令。这至少应该让您的应用程序正常工作。否则,您可能不得不进入本机代码并使用 JNI 从 Java 调用它。
  • 谢谢,我很可能会使用ProcessBuilder,但我很惊讶没有库可以这样做。
  • 可能有一个图书馆,但我不知道有一个。不幸的是,如果您正在寻找使您的问题偏离主题的图书馆推荐(请参阅help center)。
  • 我正在寻找一种方式,而不是图书馆。我目前正在使用ProcessBuilder 实施。

标签: ubuntu javafx pulseaudio


【解决方案1】:

对 java 的了解为零,我会冒险假设您可以在命令行中输入命令。

pactl list short sinks | cut -f2 将提供已定义的sinks 列表

pacmd list-sinks | grep "name:" | cut --delimiter=: -f2 将提供包括您的设备名称在内的完整列表

pactl set-sink-volume the_sink_name required_volume% 将音量设置为百分比

pactl set-sink-volume the_sink_name required_volume_left% required_volume_right% 将设置左右音量。设置更复杂的其他扬声器只是添加到音量列表中。

您可以按值而不是 % 来设置音量,其中 65536(来自内存)是 100%,只需删除 % 字符。

我希望你能从中有所收获。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-24
    相关资源
    最近更新 更多