在 Ubuntu 上通过 PulseAudio 从 Java 播放音频文件时出错
Posted
技术标签:
【中文标题】在 Ubuntu 上通过 PulseAudio 从 Java 播放音频文件时出错【英文标题】:Error playing audio file from Java via PulseAudio on Ubuntu 【发布时间】:2013-09-27 08:32:50 【问题描述】:shell 上的信息是:
Exception in thread "main" java.lang.IllegalArgumentException: Invalid format
at org.classpath.icedtea.pulseaudio.PulseAudioDataLine.createStream(PulseAudioDataLine.java:142)
at org.classpath.icedtea.pulseaudio.PulseAudioDataLine.open(PulseAudioDataLine.java:99)
at org.classpath.icedtea.pulseaudio.PulseAudioDataLine.open(PulseAudioDataLine.java:283)
at org.classpath.icedtea.pulseaudio.PulseAudioClip.open(PulseAudioClip.java:402)
at org.classpath.icedtea.pulseaudio.PulseAudioClip.open(PulseAudioClip.java:453)
at reprod.ReproducirFichero(reprod.java:16)
at reprod.main(reprod.java:44)
我尝试下载新的音频驱动程序,我尝试重新安装 openJDK 7 和 openJRE 7,还尝试安装 java 7。
我已经在另一台计算机上证明了我的代码并且它可以工作,我使用的台式机主板是 intel d525mw,我尝试播放的音频格式是 .wav。我使用的 linux 版本是 Ubuntu 12.04 .3.我需要帮助。谢谢
这是我的代码的一部分,我尝试播放 .wav 音频格式
import javax.sound.sampled.*;
public class reprod
public static void play()
try
Clip cl = Audiosystem.getClip();
File f = new File("/home/usr/Desktop/d.wav");
AudioInputStream ais = AudioSystem.getAudioInputStream(f);
cl.open(ais);
cl.start();
System.out.println("playing...");
while (cl.isRunning())
Thread.sleep(4000);
cl.close();
我使用的linux版本是Ubuntu 12.04.3
【问题讨论】:
【参考方案1】:错误信息说输入文件格式有问题。
如果您向我们提供更多信息(文件格式、可能是从哪里获得的、用于打开文件的代码以及您如何配置音频驱动程序),我们或许可以提供帮助。
有关可以尝试的一些代码,请参阅此问题:How to play .wav files with java
【讨论】:
音频格式为.wav。我已经在其他计算机上证明了它的工作原理。我不知道如何配置音频驱动程序。【参考方案2】:我遇到了同样的问题,发现这段代码可以工作:
File soundFile = new File("/home/usr/Desktop/d.wav");
AudioInputStream soundIn = AudioSystem.getAudioInputStream(soundFile);
AudioFormat format = soundIn.getFormat();
DataLine.Info info = new DataLine.Info(Clip.class, format);
Clip clip = (Clip)AudioSystem.getLine(info);
clip.open(soundIn);
clip.start();
while(clip.isRunning())
Thread.yield();
密钥在soundIn.getFormat()
。引用docs:
获取此音频输入流中声音数据的音频格式。
来源:http://ubuntuforums.org/showthread.php?t=1469572
【讨论】:
【参考方案3】:我通过简单地将参数null
传递给AudioSystem.getClip()
解决了这个问题。
我不知道为什么会发生这个异常,我之前在 Windows 上运行过这个项目,它可以工作......在 Linux 和这里之后,它没有工作。
【讨论】:
以上是关于在 Ubuntu 上通过 PulseAudio 从 Java 播放音频文件时出错的主要内容,如果未能解决你的问题,请参考以下文章
Ubuntu12.04下pulseaudio的安装以及API使用