使用java播放wav文件

使用java播放wav文件,java,audio,wav,Java,Audio,Wav,我试图在我的raspbery pi上使用javafx播放wav文件,使用java声音库和下面的代码,我得到如下错误 javax.sound.sampled.LineUnavailableException: line with format PCM_SIGNED 44100.0 Hz, 16 bit, stereo, 4 bytes/frame, big-endian not supported. 在谷歌搜索之后,我发现 raspberry pi声卡驱动程序不支持big-endian音频格式,

我试图在我的raspbery pi上使用javafx播放wav文件,使用java声音库和下面的代码,我得到如下错误

javax.sound.sampled.LineUnavailableException: line with format PCM_SIGNED 44100.0 Hz, 16 bit, stereo, 4 bytes/frame, big-endian not supported.
在谷歌搜索之后,我发现

raspberry pi声卡驱动程序不支持big-endian音频格式,我需要更改getAudioFormat()函数以请求少量endian格式:

boolean bigEndian = false;
好的,到目前为止,我认为我需要以下内容

private AudioFormat getAudioFormat() {
float sampleRate = 8000.0F;
int sampleInbits = 16;
int channels = 1;
boolean signed = true;
boolean bigEndian = false;
return new AudioFormat(sampleRate, sampleInbits, channels, signed, bigEndian);
}
但是从下面的代码中我在哪里调用
getAudioFormat()

URL url = this.getClass().getClassLoader().getResource("Audio/athan1.wav");
Clip clip = AudioSystem.getClip();
AudioInputStream ais = AudioSystem.getAudioInputStream( url ); 

查看
Audio System
()中的方法签名。有一种方法
getAudioInputStream(AudioFormat targetFormat,AudioInputStream sourceStream)

一旦通过调用覆盖的
getAudioFormat()
(或,参见下文)获得
AudioFormat
,您应该能够(引用API):

通过转换获取[…]指定格式的音频输入流 提供的音频输入流

除了覆盖
getAudioFormat()
(因为如果将来要播放其他文件类型会发生什么情况?)之外,请看一看问题中的第一个片段,它似乎完全可以实现您想要的功能,而无需覆盖该方法,这也是使用上述方法转换音频流的一个示例

编辑 试试这个

URL url = this.getClass().getClassLoader().getResource("Audio/athan1.wav");
AudioInputStream ais = AudioSystem.getAudioInputStream(url); 
AudioFormat littleEndianFormat = getAudioFormat();
AudioInputStream converted = AudioSystem.getAudioInputStream(littleEndianFormat, ais); 

谢谢我只想很好地播放wav文件,然后您可以选择覆盖或动态创建
音频格式
。这两种方法都应该有效。我是一个完全的noob,如果你能给我一些领先的机会,我将不胜感激。我已经被困了一段时间。你可能想尝试使用or来完成这项任务,而不是使用Java声音API。高级javafxapi可能会为您处理诸如endian格式之类的低级细节,这样您就不必担心了<如果wav声音较短,则代码>音频剪辑是一个不错的选择。