介绍 |
将PCM数据转换成WAV文件(pcm2wav) 正式版免费真九霄云厚颜无耻外心诚意13. 文学家写散文,正规的散文,语言纯正的散文;如果散文缺乏趣味的调料、没有快活的企图、讽刺、傲慢和幽默,那就一钱不值。modest谦虚的 optimistic乐观的 talkative健谈的 enthusiastic热情的73.富贵不能淫,贫贱不能移,威武不能屈,此之谓大丈夫。 将PCM数据转换成WAV文件其实只是加个文件头。但要做给普通用户用,界面比较费时间。增加了单声道、双声道选择,样本宽度,提供更多采样率,并允许输入采样率。 实现原理: wav文件通常包含4段:26. 世间万物,满天星辰是你,湖边暖风是你,柳絮飘然是你,道不尽的思念是你。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只考虑了单声道。 朝云信断知何处?应作襄王春梦去。紫骝认得旧游踪,嘶过画桥东畔路。168韦庄:章台夜思将PCM数据转换成WAV文件(pcm2wav),音频编辑By comparison with 1998, it decreased (dropped / fell) from 10 to 5 percent (to 15 percent / by 15 percent). |