最近整理了下wav与pcm相互转换的代码,虽然wav和pcm只是44个字节头的差别,但是实际上写了调试还是花了点时间,代码写完还是会有些没注意到的bug,这也许就是纸上谈兵和实践的差别吧,代码还是要多码一下,简单的过程也可能会出错;
当然调试也是有收获的,我发现wav文件头除了基本的44个字节,还可能有别的信息,具体还不知道代码啥意思,感觉和音频播放没关系,该部分是在data 和data长度的信息之前,感觉类似对文件做出的标记,去掉了之后再将pcm转成wav也是能正常播放的;
下面是wav转pcm的代码
pragma warning (disable :4996)
define uint32_t unsigned int
define uint16_t unsigned short
typedef struct _riff_t {
char riff[4]; /* “RIFF” (ASCII characters) */
uint32_t len; /* Length of package (binary, little endian) */
char wave[4]; /* “WAVE” (ASCII characters) */
} riff_t;
/* The FORMAT chunk */
typedef struct _format_t {
char fmt[4]; /* “fmt_” (ASCII characters) */
uint32_t len; /* length of FORMAT chunk (always 0x10) */
uint16_t type; /* codec type*/
uint16_t channel; /* Channel numbers (0x01 = mono, 0x02 = stereo) */