0

从 Java 中的流中读取声音数据的低级实际格式是什么?例如,使用以下具有 44.1khz 采样率、16 位采样深度、2 个通道、有符号数据、bigEndian 格式的数据线。

TargetDataLine tdLine = new TargetDataLine(new AudioFormat(44100,16,2,true,true));

我知道它每秒采样 44100 次,每个采样是 16 位。我不明白 16 位或 16 位中的每一个代表什么。另外,每个通道都有自己的 16 位采样吗?

4

2 回答 2

0

您应该了解数字音频基础知识(Wiki 为您提供了入门和大量链接以及进一步阅读的内容)。在那之后44.1khz 采样率、16 位采样深度、2 个通道、签名数据、bigEndian 格式应该立即告诉您低级格式。

在这种情况下,这意味着 44100 个样本/秒,代表每个样本的 16 位有符号整数,最后字节序决定了 16 位 int 的字节以何种顺序放入流中(大端 = 最高有效字节在前)。

于 2012-07-31T12:48:01.637 回答
0

我先从你的最后一个问题开始,是的,每个通道每秒都有自己的 16 位样本,用于 44100 个样本中的每一个。

至于您的第一个问题,您必须了解扬声器内部的硬件。有隔膜和电磁铁。隔膜是一个大的圆形部分,如果你取下盖子,你可以看到。当电磁铁充电时,它会拉动或推动连接在隔膜上的铁板,使其移动。那个动作变成了声音。

每个样本的值是发送到扬声器的电量。因此,当样本为零时,隔膜处于静止状态。当它为正时,它被推向一个方向,当它为负时,它被推向另一个方向。样品越大,隔膜移动得越多。

如果您将数据中的所有样本绘制成图表,您将获得扬声器随时间移动的图表。

于 2012-07-31T12:51:59.150 回答