有没有办法在 Java 的 Linux 上以合作的方式播放 WAV 文件?
Posted
技术标签:
【中文标题】有没有办法在 Java 的 Linux 上以合作的方式播放 WAV 文件?【英文标题】:Is there a way to play WAV files in a cooperative way on Linux in Java? 【发布时间】:2011-12-03 19:28:23 【问题描述】:目前我只找到了两种方法:
-
抛出异常
什么都不玩
广告 2。最近的代码(2010)
http://www.developerfusion.com/article/84314/wired-for-sound/但什么都不做,一点也不响。
广告 1。例如:
Trouble playing wav in Java http://www.anyexample.com/programming/java/java_play_wav_sound_file.xml https://***.com/a/2433454/210342我得到的只是异常“音频设备不可用”。正如这篇文章 (2008) -- lsof |grep snd — how to free a linux sound device -- 解释 Java 必须获得对音频设备的独占访问权。
但是我负担不起这样的条件。我使用声音来通知自己长时间运行的过程(几个小时),我无法摆脱所有声音(包括那些通过 Flash 广告强制执行的声音)只是为了让 Java 舒适。
所以现在我使用完全极端 - 我只是启动外部程序:https://***.com/a/8370223/210342。这太丑了,因为新程序只是为了发出通知而启动的。
问题
目前有没有办法播放WAV文件:
在 Linux 上, 以合作方式(在 Java 播放期间,可能还会播放其他音频), 发出声音, 在 Java 中(不启动外部程序)?Java 1.6,openSUSE 11.4
【问题讨论】:
【参考方案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 并粘贴代码。工作完成。以上是关于有没有办法在 Java 的 Linux 上以合作的方式播放 WAV 文件?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Linux 机器上以 root 用户身份运行 Elasticsearch 2.1.1
在 iOS 13 上以编程方式滚动 SwiftUI ScrollView