我正在编写用于创建和保存 WAV 文件的函数,但我不知道如何将数字发送到流:
ofstream file;
file.open("sound.wav");
file << "RIFF";
file << (int) 32;
file << "WAVE";
我正在尝试实现这个 WAVE 文件结构:https ://ccrma.stanford.edu/courses/422/projects/WaveFormat/
问题在这里输出是这样的:
RIFF32WAVE
我正在编写用于创建和保存 WAV 文件的函数,但我不知道如何将数字发送到流:
ofstream file;
file.open("sound.wav");
file << "RIFF";
file << (int) 32;
file << "WAVE";
我正在尝试实现这个 WAVE 文件结构:https ://ccrma.stanford.edu/courses/422/projects/WaveFormat/
问题在这里输出是这样的:
RIFF32WAVE
流操作符<<
进行格式化输出 - 它将值转换为文本。这不是您想要写入二进制文件格式的内容。
相反,您想使用未格式化的输出函数: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());
您应该以二进制输出模式打开文件,然后打印到其中。
请参阅此问题以了解如何执行此操作。
流运算符用于格式化 I/O(文本),而不是二进制。请看一下 write 方法。至于小端与大端的问题,您可以简单地使用操作系统提供的 htonl() 函数。