【问题标题】:Java - Use music playback control buttonsJava - 使用音乐播放控制按钮
【发布时间】:2021-11-18 21:00:36
【问题描述】:

通常在键盘上有停止当前曲目、转到下一曲目或上一首曲目的按钮。例如,当我在 YouTube 上播放声音并按 F10 键时,视频会停止。

我正在创建一个 Java/Kotlin 音乐播放器。当我播放音乐,然后单击 F10 时,当前发生的情况是,我在打开的选项卡中的最后一个 YouTube 视频开始播放,而音乐播放器根本不起作用。

我想要的是:当我点击 F10(或其他控制键)时,我希望我的音乐播放器受到它们的影响,而不是 YouTube。

我怎样才能做到这一点?

【问题讨论】:

  • 通常你必须调用操作系统来设置按钮的使用。这不是 Java 声音处理的东西,您需要使用其他库或 jna 之类的东西来进行适当的操作系统调用。
  • 我认为这取决于平台/操作系统。这是适用于 macOS、Windows、Linux、Android、iOS 还是网络浏览器……?
  • 我希望它主要在 Ubuntu 上运行...

标签: java kotlin audio system javasound


【解决方案1】:

如果我理解正确,您有一个播放声音的应用程序,但是当按下控制键(例如,特别是 F10)时,您的浏览器正在接收该键,而不是您的应用程序。

如果是这样,问题似乎是关于how to use the Swing KeyListenerKeyEvent API 显示密钥的密钥代码为 VK_F10。您在执行此操作时遇到问题吗?不过,Kotlin 可能有自己的方式进行按键监听。我确实找到了this SO question on Kotlin KeyListeners

就启动或停止声音而言,这通常是通过将音频播放类(ClipSourceDataLine)包装在一个可以接收和处理启动、停止或继续命令的类中来完成的。您在实施时遇到问题吗?

链接这两个功能区域的代码应该是松散耦合的。这样一来,将这两个问题作为两个单独的问题来处理将是有益的。

如果您的问题是特定的操作系统实施问题,最好在问题中用其他信息加以说明。

【讨论】:

  • 我没有使用 Swing,甚至没有使用 GUI。这是一个后台进程。我可以用别的吗?
  • Java GUI 工具包(如 AWT、Swing 和 Java-FX)完成了检测它们放在屏幕上的组件上的事件所需的繁重工作。没有他们和他们制作的焦点窗口,访问桌面事件的唯一方法是通过 JNA,如对该问题的评论中所述。请注意,他们可能必须尝试从常用键中获取此事件,而对其进行操作的其他应用程序具有焦点。祝一切顺利!你已经完成了你的工作。
  • 好的,据我了解,获取后台进程的关键事件并不容易。但这对 JNA 是可行的。谢谢@AndrewThompson
  • 我没有任何制作“后台进程”的经验。我的第一个猜测是,在这种情况下,解决方案将涉及编写某种 KeyListener,它只使用您感兴趣的键,并将所有其他键事件传递回系统。我认为这应该很容易用 Kotlin 等效的 Swing 来实现,但这只是一个假设,因为我自己没有做过。无论如何,我认为获得帮助的最佳机会是写一个关于 Kotlin 密钥处理(无音频标签)的具体问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多