我需要能够在 Java(桌面)应用程序中播放 ALAW 文件。 我试图按照以下示例进行操作:
How to play audio in Java Application
我已经从 ALAW 文件(根据检查存在)创建了一个 File 对象,并将该 File 发送到一个方法,其中发生的第一件事是:
AudioInputStream ais = AudioSystem.getAudioInputStream(文件);
但这是执行停止的地方,因为我得到了这个异常:
javax.sound.sampled.UnsupportedAudioFileException: 无法从输入文件获取音频输入流
我发现如果检查 (ais.getFormat().getEncoding() == AudioFormat.Encoding.ALAW)
为 true
,则有一种方法可以转换 ALAW 文件>,但是如果连创建 AudioInputStream 都不可能,我怎么才能到达那里呢?
有人使用过 ALAW 文件并且知道我应该做什么吗?
有没有办法在调用 AudioSystem.getAudioInputStream(file)
之前以编程方式转换 ALAW 文件?
我真的需要完成这项工作!
最佳答案
从您的 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;
在那个 put 条件之后,它会检查你的文件编码是 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
关于java - 如何在 Java 应用程序中播放 ALAW 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6095426/