我正在编写创建和保存WAV文件的功能,但我不知道如何将数字发送到流:
ofstream file;
file.open("sound.wav");
file << "RIFF";
file << (int) 32;
file << "WAVE";
我正在尝试实现此WAVE文件结构:https://ccrma.stanford.edu/courses/422/projects/WaveFormat/
问题在这里输出是这样的:
RIFF32WAVE
答案 0 :(得分: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());
答案 1 :(得分:0)
您应该以二进制输出模式打开文件,然后打印到文件中。
请参阅this question了解如何操作。
答案 2 :(得分:0)
流运算符用于格式化I / O(文本),而不是二进制。请改为查看write方法。至于小vs大端问题,你可以简单地使用你的操作系统提供的htonl()函数。