当我通过AudioInputStream读取数据时,我需要关注大端序和小端序吗?

10

我正在通过 AudioInputStream 将 wav 文件读入到字节数组中,

    AudioInputStream audiofile = AudioSystem.getAudioInputStream(f);
    byte[] audio=new byte[numberofframes*framesize];
    int bytes=audiofile.read(audio);

如果数据是按照小端序排列的,那么我是否需要重新排列样本的字节,还是AudioInputStream会自动完成呢?


你正在从文件中读取吗? - Nikolay Kuznetsov
是的,我已经通过JFilechooser完成了。 File f = chooser.getSelectedFile(); - Romantic Electron
framesize的值是多少?如果为1,则字节序无关紧要。如果为4,则字节序就很重要了。 - Andrew Thompson
@AndrewThompson 我认为它可以是任何数字,因为帧大小=(位深*通道数)/ 8,以字节为单位。你对于8位多通道wav文件有什么看法? - Romantic Electron
我觉得帧大小可能是任何数字。但我确信它只能是 124 - Andrew Thompson
1个回答

1

如果数据编码超过一个字节,例如16位或更多的位深度,无论通道数如何,大端和小端都很重要。Java不会自动按默认顺序排列PCM字节,它只是接受它们。

以下是Java音频教程中最清晰、最好编写的单个部分,涵盖了格式及其转换相关的问题:

http://docs.oracle.com/javase/tutorial/sound/converters.html


你的意思是字节数组将包含格式化的音频数据,即采用小端序,我需要自己转换才能读取样本? - Romantic Electron
输出行可以是大端或小端,对吗?如果您输入相反类型,则我90%确定您必须在输出之前交换字节。但是可能会有一个转换器,因此您不一定需要在字节级别上动手。您看了我发送的链接吗?我不确定“格式化音频数据”这个术语是否适用于PCM数据。如果编码为16位或更高,则无论如何字节都必须按一定顺序排列。我认为AudioInputStream“不关心”,它只带入PCM的原始字节。 - Phil Freihofner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接