#include <stdlib.h>
#include "WaveHeader.h"
// wav头部结构体
struct wave_header {
char riff[4];
unsignedlong fileLength;
char wavTag[4];
char fmt[4];
unsignedlong size;
unsignedshort formatTag;
unsignedshort channel;
unsignedlong sampleRate;
unsignedlong bytePerSec;
unsignedshort blockAlign;
unsignedshort bitPerSample;
char data[4];
unsignedlong dataSize;
};
void *createWaveHeader(int fileLength, short channel, int sampleRate, short bitPerSample)
{
structwave_header *header = malloc(sizeof(structwave_header));
if (header == NULL) {
return NULL;
}
// RIFF
header->riff[0] = 'R';
header->riff[1] = 'I';
header->riff[2] = 'F';
header->riff[3] = 'F';
// file length
header->fileLength = fileLength + (44 - 8);
// WAVE
header->wavTag[0] = 'W';
header->wavTag[1] = 'A';
header->wavTag[2] = 'V';
header->wavTag[3] = 'E';
// fmt
header->fmt[0] = 'f';
header->fmt[1] = 'm';
header->fmt[2] = 't';
header->fmt[3] = ' ';
header->size = 16;
header->formatTag = 1;
header->channel = channel;
header->sampleRate = sampleRate;
header->bitPerSample = bitPerSample;
header->blockAlign = (short)(header->channel * header->bitPerSample / 8);
header->bytePerSec = header->blockAlign * header->sampleRate;
// data
header->data[0] = 'd';
header->data[1] = 'a';
header->data[2] = 't';
header->data[3] = 'a';
// data size
header->dataSize = fileLength;
return header;
}
使用示例:
// fileLength 原始录音数据长度
// 1 表示 单声道
// 16000 采样率
// 16 表示每个采样点是16个bit
void *header = createWaveHeader(fileLength, 1, 16000, 16);
// 使用。。。。
free(header);
转载于:https://blog.51cto.com/ikinglai/1224616