用C语言写一个如下的程序,该程序可以读取一个wav文件,并将其存入到另一个文件中,并且读取功能和写入功能不能在同一个函数中实现
时间: 2024-03-20 07:45:08 浏览: 122
好的,这是一个用C语言实现读取wav文件并存储到另一个文件的简单示例程序。其中,读取功能和写入功能分别在两个函数中实现,分别为read_wav和write_wav。你可以根据自己的需要进行修改和完善。
```c
#include <stdio.h>
#include <stdlib.h>
struct wav_header {
char riff[4];
int file_size;
char wave[4];
char fmt[4];
int fmt_size;
short audio_format;
short num_channels;
int sample_rate;
int byte_rate;
short block_align;
short bits_per_sample;
char data[4];
int data_size;
};
void read_wav(char *filename, struct wav_header *header, char **data) {
FILE *fp = fopen(filename, "rb");
if (fp == NULL) {
fprintf(stderr, "Failed to open file %s\n", filename);
exit(1);
}
fread(header, sizeof(struct wav_header), 1, fp);
*data = (char *)malloc(header->data_size);
fread(*data, header->data_size, 1, fp);
fclose(fp);
}
void write_wav(char *filename, struct wav_header *header, char *data) {
FILE *fp = fopen(filename, "wb");
if (fp == NULL) {
fprintf(stderr, "Failed to open file %s\n", filename);
exit(1);
}
fwrite(header, sizeof(struct wav_header), 1, fp);
fwrite(data, header->data_size, 1, fp);
fclose(fp);
}
int main(int argc, char *argv[]) {
if (argc < 3) {
fprintf(stderr, "Usage: %s input_file output_file\n", argv[0]);
exit(1);
}
struct wav_header header;
char *data;
read_wav(argv[1], &header, &data);
write_wav(argv[2], &header, data);
free(data);
return 0;
}
```
在上面的程序中,我们使用了一个wav_header结构体来存储wav文件的头信息,包括文件格式、采样率、声道数、数据大小等。read_wav函数用来读取wav文件,并将读取到的头信息和数据保存到参数中传入的结构体和指针中。write_wav函数用来将读取到的头信息和数据写入到一个新的文件中。最后,在main函数中,我们调用read_wav函数读取输入文件的信息,然后调用write_wav函数将信息写入到输出文件中。
阅读全文