gpt4 book ai didi

java - 使用 Java 从 U-LAW 音频文件中提取持续时间

转载 作者:行者123 更新时间:2023-11-30 12:00:37 26 4
gpt4 key购买 nike

我正在尝试从音频文件中提取持续时间。

此音频文件是 U-LAW (G.711/MONO 8.000Hz)

static AudioFormat ULAW_FORMAT = new AudioFormat(AudioFormat.Encoding.ULAW, 8000, 8, 1, 1, 8000, false);

而且我一直收到异常:
javax.sound.sampled.UnsupportedAudioFileException: 无法从输入文件获取音频输入流

我的源代码的一小部分,我收到了异常:

AudioInputStream inputFileStream = AudioSystem.getAudioInputStream(file);

AudioInputStream inputFileStream = AudioSystem.getAudioInputStream(ULAW_FORMAT, inputFileStream);

问题
我做错了什么?
Java 无法读取此类音频文件?
来源失败?

感谢任何提示!


UPDATING 带有抖动评论

我试过这个虚拟源:

public static void main(String[] args) {
String selectFile = "\\audio\\543288";
AudioInputStream source;
try {
source = AudioSystem.getAudioInputStream(new File(selectFile));
AudioSystem.getAudioInputStream(AudioFormat.Encoding.ULAW, source);
} catch (UnsupportedAudioFileException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

并且总是在尝试的第一行失败!

最佳答案

μ-law 是样本值编码而非文件格式,因此使用 AudioSystem 为“μ-law 文件”(无论是什么)找到合适的 AudioReader 将会失败。如果我没记错的话,Sun 的 VM 内置了对 AIFF、AU 和 WAV 文件的支持。

我现在只是猜测,但如果您的文件包含没有任何文件格式 header 的原始 µ-law 数据,您可以直接创建一个 AudioInputStream,而无需通过 AudioSystem 中的实用方法:

int length = ... // file length in number of samples
FileInputStream fis = new FileInputStream("...");

AudioInputStream ais = new AudioInputStream(
fis, new AudioFormat(AudioFormat.Encoding.ULAW, 8000, 8, 1, 1, 8000, false), length);

最后:如果您的第一个问题确实正确(您只是想获取文件的持续时间),则无需与 AudioInputStream 打交道。如果该文件确实包含 8000 个样本/秒的原始 µ-law 数据并且每个样本是一个字节,那么它是呃,你明白了吗?

关于java - 使用 Java 从 U-LAW 音频文件中提取持续时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1789826/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com