#include <stdlib.h>ide
#include "WaveHeader.h"spa
// wav頭部結構體orm
struct wave_header {it
char riff[4];form
unsignedlong fileLength;class
char wavTag[4];file
char fmt[4];channel
unsignedlong size;數據
unsignedshort formatTag;di
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);