0

有人可以为我提供一个简单的 WAV 16 位到 8 位(如果可能的话返回)转换器的源代码(最好是 C/C++)的链接?我有 C++ 的基本知识,我需要有一个资源来理解我的新项目的 wav 写作和转换值。此刻我有一个关于 RIFF 块结构的讲座。

此外,任何用于在不同位深度(也是这些非标准)之间转换值的公式都值得赞赏......

我更喜欢它是简单的命令行,所以我可以用记事本编辑它并轻松编译。

提前致谢!

4

1 回答 1

2

对于读取和写入 WAV 文件,请查看规范:
https ://ccrma.stanford.edu/courses/422/projects/WaveFormat/

对于 8 位和 16 位之间的转换,您只需除以或乘以 256。
例如(在 C 中从 16 位转换为 8 位):

  • 您使用 . 打开 16 位文件和(尚不存在的)8 位文件fopen()
  • 您根据规范读取 16 位文件的开头并写入 8 位文件的开头。
  • 然后对每个样本执行以下操作:
    int sample = 0;
    // read 2 bytes (= 16 bits) from the 16 bit file into sample:
    fread (&sample, 2, 1, wav_file_16bit);
    sample /= 256; // divide sample by 256
    // write 1 byte (= 8 bits) to the 8 bit file:
    fwrite (&sample, 1, 1, wav_file_8bit);
  • 不要忘记关闭您的文件。

如果您需要更具体的信息,请询问。

于 2011-07-31T17:51:40.837 回答