【问题标题】:Is there a way to play WAV files in a cooperative way on Linux in Java?有没有办法在 Java 的 Linux 上以合作的方式播放 WAV 文件?
【发布时间】:2011-12-03 19:28:23
【问题描述】:

目前我只找到了两种方法:

  1. 抛出异常
  2. 什么都不玩

广告 2。最近的代码(2010)

但什么都不做,一点也不响。

广告 1。例如:

我得到的只是异常“音频设备不可用”。正如这篇文章 (2008) -- lsof |grep snd — how to free a linux sound device -- 解释 Java 必须获得对音频设备的独占访问权。

但是我负担不起这样的条件。我使用声音来通知自己长时间运行的过程(几个小时),我无法摆脱所有声音(包括那些通过 Flash 广告强制执行的声音)只是为了让 Java 舒适。

所以现在我使用完全极端 - 我只是启动外部程序:https://stackoverflow.com/a/8370223/210342。这太丑了,因为新程序只是为了发出通知而启动的。

问题

目前有没有办法播放WAV文件:

  • 在 Linux 上,
  • 以合作方式(在 Java 播放期间,可能还会播放其他音频),
  • 发出声音,
  • 在 Java 中(不启动外部程序)?

Java 1.6,openSUSE 11.4

【问题讨论】:

    标签: java audio wav playback


    【解决方案1】:

    你试过Java Media Framework (JMF)吗?

    Java Media Framework API (JMF) 支持音频、视频和其他 将基于时间的媒体添加到基于 Java 构建的应用程序和小程序中 技术。这个可选包,它可以捕捉,播放, 流,并转码多种媒体格式,扩展了 Java 2 面向多媒体开发人员的平台标准版 (J2SE) 提供强大的工具包来开发可扩展的、跨平台的 技术。

    【讨论】:

    • 谢谢。实际上它对我不起作用;-) 但它对很多人不起作用,即使对于普通的 wav 文件也是如此。感谢其他与 JMF 相关问题的帖子,我发现了其他建议——比如尝试 VLC-J。
    【解决方案2】:

    本网站提供了一个简单的 Swing 应用程序来捕获和播放 wav 文件 http://www.java-tips.org/java-se-tips/javax.sound/capturing-audio-with-java-sound-api.html 您可以修改和使用来自以下站点的代码 http://www.anyexample.com/programming/java/java_play_wav_sound_file.xml

    您不能在需要播放操作时简单地创建一个新线程。这样无论后台进程如何,都可以继续播放

    【讨论】:

    • 请注意——我已经给出了第二个链接,它正在重复我已经提到的相同方法,它不起作用。声音不是被 Java 阻止的,而是被系统阻止的,添加新线程不会改变音频被阻止的事实(至少 Java 是这样认为的)。
    【解决方案3】:

    所以,感谢 AT 的回答,我从 JMF 转向 JMF 问题,这导致我转向 VLC-J。这就是答案——为了在 Java 程序中使用多媒体,根本不使用 Java(可惜,顺便说一句,2012 年的 Java 没有可靠的多媒体层,哎呀。)。

    标记为已解决,因为 VLC-J 让我可以毫无问题地播放音频。

    主要项目地点: http://code.google.com/p/vlcj/

    最小播放程序: http://code.google.com/p/vlcj/source/browse/trunk/vlcj/src/test/java/uk/co/caprica/vlcj/test/minimalmp3/Mp3Test.java

    【讨论】:

    • 好奇...你用什么 jdk 测试? openjdk vs sun 可能是个问题
    • @hricosrealm,在撰写 OP 时,我使用的是 Sun JDK。
    【解决方案4】:

    Java 在 1.4+ 版本中内置了这种支持(在 javax.sound、javax.sound.sampled 包中可用)。当它使用平台混合器(ALSA 或 PULSE)时,它可以与系统上的其他应用程序协同工作

    【讨论】:

    • 您重复“答案”的次数越多,它就不会变得越正确。请下次阅读问题,提前谢谢。
    • @macias:在这种情况下,您是否检查过 /dev/(audio|mixer) 上的权限是否允许您打开设备?您可以写入 PULSE 套接字吗?您使用的是什么发行版?
    • 如果我不能,我不会听到任何声音,对吗?再次检查问题,我提供了有关 Java 和系统的信息。但是,稍后我将按照回答结束这个问题,因为昨天 AT 的回答给了我正确的想法。
    • @macias:确实 vlcj 是一个解决方案,但它增加了一个额外的间接层 java 将依赖于依赖于 OSS|ALSA|Pulse 的 libvlc。请检查此线程以获得不同(不一定更好)的解决方案:forums.fedoraforum.org/showthread.php?t=248326
    • 当然,我很乐意专注于纯 Java 解决方案,但遗憾的是,我没有找到任何解决方案,也没有时间测试和测试,这个和那个,以及其他一些东西。我在纯 Java 方法上花了太多时间,而 vlc-j 带走了我什么,下载 jar 并粘贴代码。工作完成。
    猜你喜欢
    • 1970-01-01
    • 2012-09-05
    • 2018-02-21
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多