Java 通过AudioSystem.read()读取的字节格式

Java 通过AudioSystem.read()读取的字节格式,java,audio,Java,Audio,我想知道从TargetDataLine.read()返回的字节的格式。我有数字,但我不知道它们代表什么。有什么想法吗?我在谷歌上搜索了一下,试图找到并阅读API文档,但无法找到它…这取决于您试图读取的音频流的位深度和编码。假设每个数据流代表一个单一的音频通道,则不需要担心交叉通道(即,流是单声道,而不是立体声或环绕声)。其类实现的对象的音频格式将决定读取数据时应如何解释数据 如果流表示最常见音频格式的音频,即红皮书音频(采样率为44.1 kHz的16位采样),则每两个字节将表示一个采样;该样本将

我想知道从
TargetDataLine.read()
返回的字节的格式。我有数字,但我不知道它们代表什么。有什么想法吗?我在谷歌上搜索了一下,试图找到并阅读API文档,但无法找到它…

这取决于您试图读取的音频流的位深度和编码。假设每个数据流代表一个单一的音频通道,则不需要担心交叉通道(即,流是单声道,而不是立体声或环绕声)。其类实现的对象的音频格式将决定读取数据时应如何解释数据

如果流表示最常见音频格式的音频,即红皮书音频(采样率为44.1 kHz的16位采样),则每两个字节将表示一个采样;该样本将是线性分布振幅值的有符号16位整数,范围从正位移0 dBFS(最大正整数值)、负无穷分贝(整数值0)到负位移0 dBFS(最大负整数值)。类似地,如果位深度为24位,则每3个字节将代表一个LPCM样本


如果位深度为32位或更高,则格式将为有符号浮点PCM样本。

这取决于您试图读取的音频流的位深度和编码。假设每个数据流代表一个单一的音频通道,则不需要担心交叉通道(即,流是单声道,而不是立体声或环绕声)。其类实现的对象的音频格式将决定读取数据时应如何解释数据

如果流表示最常见音频格式的音频,即红皮书音频(采样率为44.1 kHz的16位采样),则每两个字节将表示一个采样;该样本将是线性分布振幅值的有符号16位整数,范围从正位移0 dBFS(最大正整数值)、负无穷分贝(整数值0)到负位移0 dBFS(最大负整数值)。类似地,如果位深度为24位,则每3个字节将代表一个LPCM样本


如果位深度为32位或更高,则格式将为带符号浮点PCM样本。

请更具体地说明您引用的方法调用,例如指向JavaDoc的链接。欢迎使用StackOverflow,请指定您迄今为止所做的工作以回答您的问题。您使用什么样的库?我使用标准Java库请更具体地说明您引用的方法调用,例如指向JavaDoc的链接。欢迎使用StackOverflow,请指定到目前为止您为回答您的问题所做的工作。你使用什么样的库?我使用标准Java库谢谢,这就是我想知道的。对不起,这个问题不好。即使是用我自己的语言,我也不知道如何描述我的问题。好吧,别担心,@Victor,这是一个有效的问题——我理解你的问题,我只是编辑了一下,这样其他人如果将来有同样的问题,就可以从额外的清晰中获益。如果您能将我的回答标记为已接受,我将不胜感激。如果您有更好地理解dbfs单位的链接,请发消息给我好吗?@Victor,当然,虽然分贝(dB)是单位,但dbfs只是“相对于(本例中为数字)满量程的分贝”的缩写,换句话说,可以表示的最大振幅值。分贝本身是对数单位,即它们不是线性分布的;从样本中获得的数字将是线性振幅值。下面是一些我建议您阅读的wiki:,因此如果我的值为0,我会将其写入一个图表,它的值为-32767dbfs?(但我会将其设置为Y=0)(16位音频数据)谢谢,这就是我想知道的。对不起,这个问题不好。即使是用我自己的语言,我也不知道如何描述我的问题。好吧,别担心,@Victor,这是一个有效的问题——我理解你的问题,我只是编辑了一下,这样其他人如果将来有同样的问题,就可以从额外的清晰中获益。如果您能将我的回答标记为已接受,我将不胜感激。如果您有更好地理解dbfs单位的链接,请发消息给我好吗?@Victor,当然,虽然分贝(dB)是单位,但dbfs只是“相对于(本例中为数字)满量程的分贝”的缩写,换句话说,可以表示的最大振幅值。分贝本身是对数单位,即它们不是线性分布的;从样本中获得的数字将是线性振幅值。下面是一些我建议您阅读的wiki:,因此如果我的值为0,我会将其写入一个图表,它的值为-32767dbfs?(但我会将其设置为Y=0)(16位音频数据)