用C语言写一个如下的程度,该程序可以读取一个wav文件,并将其存入到另一个文件中
时间: 2024-03-20 20:43:43 浏览: 100
以下是一个简单的用C语言读取并写入wav文件的程序,你可以根据需要进行修改和调整:
```
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
// 定义WAV文件头结构体
typedef struct {
char chunkID[4]; // RIFF标志
uint32_t chunkSize; // 文件大小
char format[4]; // 文件格式
char subchunk1ID[4]; // fmt标志
uint32_t subchunk1Size; // fmt大小
uint16_t audioFormat; // 音频格式
uint16_t numChannels; // 声道数
uint32_t sampleRate; // 采样率
uint32_t byteRate; // 每秒字节数
uint16_t blockAlign; // 数据块对齐
uint16_t bitsPerSample; // 采样精度
char subchunk2ID[4]; // data标志
uint32_t subchunk2Size; // 数据大小
} WAVHeader;
int main()
{
// 打开源文件(需要读取的文件)
FILE *src = fopen("test.wav", "rb");
if (src == NULL) {
printf("打开源文件失败!\n");
return -1;
}
// 打开目标文件(需要写入的文件)
FILE *dst = fopen("test_copy.wav", "wb");
if (dst == NULL) {
printf("打开目标文件失败!\n");
fclose(src);
return -1;
}
// 读取WAV文件头
WAVHeader header;
fread(&header, sizeof(WAVHeader), 1, src);
// 写入WAV文件头
fwrite(&header, sizeof(WAVHeader), 1, dst);
// 读取并写入音频数据
uint32_t dataSize = header.subchunk2Size;
uint8_t *data = (uint8_t*) malloc(dataSize);
fread(data, dataSize, 1, src);
fwrite(data, dataSize, 1, dst);
free(data);
// 关闭文件
fclose(src);
fclose(dst);
return 0;
}
```
这段代码中,我们首先定义了一个WAVHeader结构体,用于保存WAV文件头信息。然后我们打开源文件和目标文件,并分别读取和写入WAV文件头信息。接着,我们读取源文件中的音频数据,然后将其写入目标文件。最后,我们关闭文件。
阅读全文