1

我正在编写用于创建和保存 WAV 文件的函数,但我不知道如何将数字发送到流:

ofstream file;
file.open("sound.wav");
file << "RIFF";
file << (int) 32;
file << "WAVE";

我正在尝试实现这个 WAVE 文件结构:https ://ccrma.stanford.edu/courses/422/projects/WaveFormat/

问题在这里输出是这样的:

RIFF32WAVE
4

3 回答 3

3

流操作符<<进行格式化输出 - 它将值转换为文本。这不是您想要写入二进制文件格式的内容。

相反,您想使用未格式化的输出函数:put对于单字节和write多字节:

file.write("RIFF", 4);

// The length field is little-endian, so write the lowest byte first
file.put(length);
file.put(length >> 8);
file.put(length >> 16);
file.put(length >> 24);

file.write("WAVE", 4);

更新:如评论中所述,您还应该以二进制模式打开文件并使用经典的“C”语言环境对其进行灌输,以防止任何东西弄乱您编写的字节:

file.open("sound.wav", std::ios_base::out | std::ios_base::binary);
file.imbue(std::locale::classic());
于 2013-02-07T11:59:09.353 回答
1

您应该以二进制输出模式打开文件,然后打印到其中。

请参阅此问题以了解如何执行此操作。

于 2013-02-07T11:55:18.050 回答
0

流运算符用于格式化 I/O(文本),而不是二进制。请看一下 write 方法。至于小端与大端的问题,您可以简单地使用操作系统提供的 htonl() 函数。

于 2013-02-07T11:59:28.833 回答