如何在Java应用程序中播放ALAW文件?

时间:2011-05-23 09:40:08

标签: java file audio

我需要能够在Java(桌面)应用程序中播放ALAW文件。 我试图按照以下示例进行操作:

How to play audio in Java Application

我已经从ALAW文件创建了一个File对象(根据检查存在)并将该文件发送到一个方法,其中首先发生的是:

AudioInputStream ais = AudioSystem.getAudioInputStream(file);

但这是执行停止的地方,因为我得到了这个例外:

javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from input file

我看到如果检查 (ais.getFormat().getEncoding() == AudioFormat.Encoding.ALAW)true,有一种方法可以转换ALAW文件,但是如果甚至无法创建AudioInputStream,我怎么能到达那里?

任何使用ALAW文件并了解我应该做什么的人?

有没有办法在调用AudioSystem.getAudioInputStream(file)之前以编程方式转换ALAW文件?

我真的需要做这个工作!

2 个答案:

答案 0 :(得分:1)

AudioInputStream获取现有文件格式:
filepath是String,带有您文件的路径,例如:

String filename="x.y";
File file = new File(filename);
String filepath=file.getCanonicalPath();

然后主要转换完成:

AudioInputStream inputStream = AudioSystem.getAudioInputStream(new File(filepath));
AudioFormat format = inputStream.getFormat();
AudioInputStream convertedInputStream;

之后放置条件,检查你的文件编码是alaw还是ulaw,并将其转换为可以由SoundCard播放的PCM:

if ((format.getEncoding() == AudioFormat.Encoding.ULAW) || (format.getEncoding() == AudioFormat.Encoding.ALAW))
AudioFormat tmp = new AudioFormat(
AudioFormat.Encoding.PCM_SIGNED,
format.getSampleRate(),
format.getSampleSizeInBits() * 2, 
format.getChannels(),
format.getFrameSize() * 2,
format.getFrameRate(), true);
convertedInputStream = AudioSystem.getAudioInputStream(tmp,inputStream);
format = tmp;}

此代码会将AudioInputStream的ALAW / ULAW格式转换为PCM_SIGNED

答案 1 :(得分:0)