将PCM数据转换成WAV文件其实只是加个文件头。但要做给普通用户用,界面比较费时间。增加了单声道、双声道选择,样本宽度,提供更多采样率,并允许输入采样率。

实现原理:
wav文件通常包含4段:RIFF、格式段、FACT段和数据段。 PCM数据就放在数据段。只要格式段设置的格式与数据段的数据一致,播放程序就可以正确解析。 下面这个数组的数据其实就是一个最小的wav文件。
static const unsigned char wav_template[] =
{
// RIFF WAVE Chunk
0x52, 0x49, 0x46, 0x46, // "RIFF"
0x30, 0x00, 0x00, 0x00, // 总长度 整个wav文件大小减去ID和Size所占用的字节数
0x57, 0x41, 0x56, 0x45, // "WAVE"
// Format Chunk
0x66, 0x6D, 0x74, 0x20, // "fmt "
0x10, 0x00, 0x00, 0x00, // 块长度
0x01, 0x00, // 编码方式
0x01, 0x00, // 声道数目
0x80, 0x3E, 0x00, 0x00, // 采样频率
0x00, 0x7D, 0x00, 0x00, // 每秒所需字节数=采样频率*块对齐字节
0x02, 0x00, // 数据对齐字节=每个样本字节数*声道数目
0x10, 0x00, // 样本宽度
// Fact Chunk
0x66, 0x61, 0x63, 0x74, // "fact"
0x04, 0x00, 0x00, 0x00, // 块长度
0x00, 0xBE, 0x00, 0x00,
// Data Chunk
0x64, 0x61, 0x74, 0x61, // "data"
0x00, 0x00, 0x00, 0x00, // 块长度
};
这个wav文件的数据长度为0。我们要增加PCM数据只要完成以下工作:
在数据段尾增加PCM数据;
修改数据段的块长度,修改RIFF段的总长度;
正确设置格式段的PCM参数。
样本长度可能不是8的整数倍,这时wav文件还是要求样本按照字节对齐。在一个样本中数据是左对齐的,右侧空位用0填充。 pcm2wav只考虑了样本长度是16位的情况。
如果有多个声道,wav文件要求先放样本1的各声道数据,再放样本2的各声道数据,依此类推。 因为我没有碰到过处理多声道数据的需求,所以pcm2wav只考虑了单声道。






















大小: 8.07G
大小: 6.7M
练耳大师中文版(EarMaster)v6.1.620PW 绿色破解版
MP3录音机汉化绿色版
视频音乐提取工具(Moo0 VideoToAudio)V1.11 官方免费版
创新5.1唱歌效果
音乐节拍器v3.4.2 特别版
MP3MP4MP5万能刷机维修工具合集v4.5绿色免费版
Moo0音频格式转换器(Moo0 AudioConverter)1.32 绿色中文版
Lrc歌词编辑器v2012.02.08
Voxengo VariSaturator VST 音频激励器v1.5 特别版
QQ音乐绿钻破解补丁
Eac3to(转换电子和TrueHD技术的AC3音轨到AC3或FLAC)V3.26 绿色英文免费版
Moo0 Mp3InfoEditor(MP3信息编辑)1.21 中文安装版
ImTOO iPhone Ringtone Maker(手机铃声制作)v1.0.17.0710 多国语言特别版
Create Ringtone(定制铃声)V4.97英文绿色特别版