111,092
社区成员




byte[] play(byte[] mWaveFile)
{
MemoryStream ms = new MemoryStream();
BinaryWriter mWriter = new BinaryWriter(ms);
// 开始准备WAV的文件头
char[] ChunkRiff = { 'R', 'I', 'F', 'F' };
char[] ChunkType = { 'W', 'A', 'V', 'E' };
char[] ChunkFmt = { 'f', 'm', 't', ' ' };
char[] ChunkData = { 'd', 'a', 't', 'a' };
int nLength = mWaveFile.Length - 8 + 44;
//将文件头写入wav文件
mWriter.Write(ChunkRiff);
mWriter.Write(nLength);
mWriter.Write(ChunkType);
mWriter.Write(ChunkFmt);
mWriter.Write(16); // 表示 FMT 的长度
mWriter.Write((short)6); //这个表示a law PCM
mWriter.Write((short)1); // nChannleNumber
mWriter.Write(8000); // nSampleRate
mWriter.Write(8000); // nBytesPerSecond
mWriter.Write((short)1); // nBytesPerSample
mWriter.Write((short)8); // nBitsPerSample
mWriter.Write(ChunkData);
// 数据块
mWriter.Write(mWaveFile.Length);
mWriter.Write(mWaveFile);
ms.Position = 0;
return ms.ToArray();
}
8KHz采样、8比特A律量化的PCM语音信号的WAVE文件头格式表(共58字节)
偏移地址 字节数 数据类型 内容 文件头定义为
00H 4 char "RIFF" char riff_id[4]="RIFF"
04H 4 long int 文件总长-8 long int size0=文总长-8
08H 8 char "WAVEfmt " char wave_fmt[8]
10H 4 long int 12000000H(ALAW) long int size1=0x12
14H 2 int 06 00H int fmttag=0x06
16H 2 int 声道数 int channel=1 或2
18H 4 long int 采样率 long int samplespersec
1CH 4 long int 每秒播放字节数 long int bytepersec
20H 2 int 采样一次占字节数 int blockalign=0x01
22H 4 long int 量化数 long int bitpersamples=8
26H 4 char "fact" char wave_fact="fact"
2AH 8 char 0400000000530700H定 char temp
32H 4 char "data" char wave_data="data"
36H 4 long int 采样数据字节数 lont int size2=文长-58