从Java中的流中读取时,声音数据的低级实际格式是什么?例如,使用以下数据线,44.1khz采样率,16位采样深度,2个通道,带符号数据,bigEndian格式。
TargetDataLine tdLine = new TargetDataLine(new AudioFormat(44100,16,2,true,true));
据我所知,它每秒采样44100次,每个样本为16位。我不明白的是16位或16位中的每一位代表什么。此外,每个频道都有自己的16位样本吗?
答案 0 :(得分:0)
你应该了解Digital Audio Basics(Wiki为你提供了一个开始,并提供了许多与进一步阅读相关的链接)。之后 44.1khz采样率,16位采样深度,2个通道,签名数据,bigEndian格式应立即告诉您低级格式。
在这种情况下,它表示44100个样本/秒,16位签名整数表示每个样本,最后 endianess 确定16位int的字节放入哪个顺序流(大端=最重要的字节优先)。
答案 1 :(得分:0)
我先从你的上一个问题开始,是的,每个频道每秒都有44100个样本的16位样本。
关于您的第一个问题,您必须了解扬声器内部的硬件。有一个隔膜和一个electormagnet。如果你取下盖子,隔膜是你可以看到的大圆形部分。当电磁铁充电时,它会拉动或推动连接在隔膜上的铁板,使其移动。那运动变成了声音。
每个样本的价值是发送给扬声器的电量。因此,当样品为零时,隔膜处于静止状态。当它是正数时,它被推向一个方向,而当它是负数时,则是另一个方向。样品越大,隔膜移动的越多。
如果您绘制数据中的所有样本图表,您将获得扬声器随时间移动的图表。