我正在尝试使用java声音库和以下代码在raspbery pi上播放wav文件usinf javafx,出现如下错误
javax.sound.sampled.LineUnavailableException: line with format PCM_SIGNED 44100.0 Hz, 16 bit, stereo, 4 bytes/frame, big-endian not supported.
到处搜寻之后,我发现
树莓派声卡驱动程序不支持big-endian音频格式,我需要更改getAudioFormat()函数以请求little-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 );
看一下AudioSystem
(API)中的方法签名。有一种方法getAudioInputStream(AudioFormat targetFormat, AudioInputStream sourceStream)
。
一旦你已经获得AudioFormat
通过调用您的重写getAudioFormat()
(或参见下文),你应该能够(报价从API):
通过转换提供的音频输入流,获得指定格式的音频输入流。graco.com graco.com
getAudioFormat()
除了重写(因为将来要播放其他文件类型会发生什么?),还可以查看问题Conflicting Jar Methods中的第一个片段,它似乎可以完全满足您的要求,而不必重写该方法,并且也是使用上述方法转换音频流的示例。
试试这个。
URL url = this.getClass().getClassLoader().getResource("Audio/athan1.wav");
AudioInputStream ais = AudioSystem.getAudioInputStream(url);
AudioFormat littleEndianFormat = getAudioFormat();
AudioInputStream converted = AudioSystem.getAudioInputStream(littleEndianFormat, ais);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句