我正在尝试用 Java 编写一些基本的声音编辑程序,但是我的 16 位 WAVE 文件格式遇到了很多麻烦。
当我问 Java 它认为我的声音文件有多少样本时,它给出的数字是我预期的两倍。当我告诉 Java 生成一个 80000 字节样本的正弦波时,它播放了 1 秒而不是 2 秒(即使采样率约为每秒 40000 次)。
经过一番搜索,我意识到我的文件的“帧大小”是 2,“样本”实际上是 2 个字节而不是 1 个字节,这被称为 16 位音频文件。作为一个实验,我将声音文件写入一个字节数组,每隔一个字节设置为 0,然后播放结果。当我只保留奇数样本时,声音文件播放时会带有一点点静态噪音。当我只保留偶数时,静态噪音会在没有声音文件的情况下自行播放。这让我认为偶数字节包含奇数字节中静态的精确逆,其中包含要播放的实际声音。当一起播放时,偶数字节使奇数字节中的静态静音,从而提高声音保真度。
这个网站很好地解释了 16 位声音编码的基础知识。但是,对我来说,继续逐字节编辑文件还不够好。如何对 16 位(或更大)的声音文件进行逐字节编辑,同时仍保持其更高的保真度?用每个样本 16 位而不是 8 位编码声音的公式是什么?