用C语言写一个写入wav文件的程序
时间: 2023-10-02 19:09:54 浏览: 130
以下是一个简单的用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 *fp = fopen("test.wav", "wb");
if (fp == NULL) {
printf("打开文件失败!\n");
return -1;
}
// 初始化WAV文件头
WAVHeader header = {
{'R', 'I', 'F', 'F'},
0,
{'W', 'A', 'V', 'E'},
{'f', 'm', 't', ' '},
16,
1,
1,
44100,
44100 * 2 * 16 / 8,
2 * 16 / 8,
16,
{'d', 'a', 't', 'a'},
0
};
// 写入WAV文件头
fwrite(&header, sizeof(WAVHeader), 1, fp);
// 写入音频数据
// 这里假设音频数据已经存储在一个名为data的缓冲区中
uint32_t dataSize = sizeof(data);
fwrite(data, dataSize, 1, fp);
// 更新WAV文件头中的数据大小
fseek(fp, 4, SEEK_SET);
header.chunkSize = 36 + dataSize;
header.subchunk2Size = dataSize;
fwrite(&header.chunkSize, 4, 1, fp);
fseek(fp, 40, SEEK_SET);
fwrite(&header.subchunk2Size, 4, 1, fp);
// 关闭文件
fclose(fp);
return 0;
}
```
这段代码中,我们首先定义了一个WAVHeader结构体,用于保存WAV文件头信息。然后我们初始化了这个结构体,并写入文件。最后,我们更新了WAV文件头中的数据大小信息,关闭文件。
阅读全文