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

标签 java file audio

我需要能够在 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/

相关文章:

Java Web应用程序,如何让客户端保存生成的.txt文件?

c - 编写一个程序来读取排序并写入数组

Android Media Player 没有停止,当我点击它播放多次的歌曲链接时

android - 在Android上聆听计算机的声音

java - 在服务中解压.zip 文件导致应用程序卡住,直到解压完成,为什么?

java - AppEngine 中的思考

java - 如何在java中删除日志标题

java - 在循环内创建对象

c# - C#比较两个文件

java - 播放的音频超过了java中设置的持续时间