pcm转wav

static void write_wav_header(UINT32 totalDataLen,UINT8 channels,UINT32 samplerate,UINT32 byterate,UINT32 totalAudioLen)
{
	
unsigned char header[44];
//RIFF WAVE Chunk 
// RIFF标记占据四个字节 
header[0] = 'R';
header[1] = 'I'; 
header[2] = 'F'; 
header[3] = 'F'; 
//数据大小表示,由于原始数据为long型,通过四次计算得到长度 
header[4] = (unsigned char) (totalDataLen & 0xff); 
header[5] = (unsigned char) ((totalDataLen >> 8) & 0xff); 
header[6] = (unsigned char) ((totalDataLen >> 16) & 0xff); 
header[7] = (unsigned char) ((totalDataLen >> 24) & 0xff); 
//WAVE标记占据四个字节 
header[8] = 'W'; 
header[9] = 'A'; 
header[10] = 'V'; 
header[11] = 'E'; 
//FMT Chunk 
header[12] = 'f'; 
// 'fmt '标记符占据四个字节 
header[13] = 'm'; 
header[14] = 't'; 
header[15] = ' ';//过渡字节 
//数据大小 
header[16] = 16; // 4 bytes: size of 'fmt ' chunk 
header[17] = 0; 
header[18] = 0; 
header[19] = 0; 
//编码方式 10H为PCM编码格式 
header[20] = 1; // format = 1 
header[21] = 0; 
//通道数 
header[22] = (unsigned char) channels; 
header[23] = 0; 
//采样率,每个通道的播放速度
header[24] = (unsigned char) (samplerate & 0xff); 
header[25] = (unsigned char) ((samplerate >> 8) & 0xff); 
header[26] = (unsigned char) ((samplerate >> 16) & 0xff); 
header[27] = (unsigned char) ((samplerate >> 24) & 0xff);
//音频数据传送速率,采样率*通道数*采样深度/8 
header[28] = (unsigned char) (byterate & 0xff); 
header[29] = (unsigned char) ((byterate >> 8) & 0xff); 
header[30] = (unsigned char) ((byterate >> 16) & 0xff); 
header[31] = (unsigned char) ((byterate >> 24) & 0xff);
// 确定系统一次要处理多少个这样字节的数据,确定缓冲区,通道数*采样位数 
header[32] = (unsigned char) (1 * 16 / 8); 
header[33] = 0; 
//每个样本的数据位数 
header[34] = 16; 
header[35] = 0; 
//Data chunk 
header[36] = 'd';//data标记符 
header[37] = 'a'; 
header[38] = 't'; 
header[39] = 'a'; 
//数据长度 
header[40] = (unsigned char) (totalAudioLen & 0xff); 
header[41] = (unsigned char) ((totalAudioLen >> 8) & 0xff); 
header[42] = (unsigned char) ((totalAudioLen >> 16) & 0xff); 
header[43] = (unsigned char) ((totalAudioLen >> 24) & 0xff);
write(fd,header,44);
}

在pcm的文件中插入以上的头就可以播放pcm数据,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值