无法将PCM数据写入wav文件

时间:2012-03-21 19:03:34

标签: c

我正在尝试将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);

2 个答案:

答案 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,因此您可以使用perrorstrerror

编辑: wildplasser 的答案是正确的解决方案。没有注意到这个错误。