我正在尝试将PCM数据(在单独的文件中)写入我正在创建的wav文件中。我已经编写了标题并确认它有效,但出于某种原因,当我尝试将原始数据写入其中时,它没有。我已经成功地将pcm文件读取到缓冲区并获得了文件的大小。 fwrite()进程在编译期间没有给我一个错误,但是生成的文件仍然是空的。任何帮助深表感谢!谢谢!
register FILE *handle;
register FILE *lever;
char filename[] = "test.wav";
handle = fopen(filename, "w");
lever = fopen("test.pcm","rb");
fseek(lever, 0, SEEK_END);
long int lSize = ftell(lever);
printf("%i \n",lSize);
rewind(lever);
char *buffer = (char*) malloc(sizeof(char)*lSize);
if (NULL == buffer) {printf("Error creating buffer \n");}
if (lSize != fread(buffer, 1, lSize, lever)) {
printf("Reading error \n");
}
fwrite(buffer, sizeof(buffer), 1, handle);
free(buffer);
fclose(lever);
fclose(handle);
答案 0 :(得分:2)
更改
fwrite(buffer, sizeof(buffer), 1, handle);
成:
fwrite(buffer, lSize, 1, handle);
答案 1 :(得分:1)
如果您在Windows下运行它,它可能会因文本模式输出文件而失败。
使用handle = fopen(filename, "wb");
。打开文件时确定没有错误吗?您获取文件大小的方式也不是最佳的,最好使用stat
- 族函数。如果malloc
失败,您将收到“分段错误”。
fwrite
返回写入的项目数,或者出错时返回-1。它会设置errno
,因此您可以使用perror
或strerror
。
编辑: wildplasser 的答案是正确的解决方案。没有注意到这个错误。