关于.wav文件无法用playsound播放的问题

本文分析了一个无法通过特定函数播放的wav音频文件问题。通过对比标准wav文件和使用HexWorkshop工具,发现音频文件头部格式错误导致的问题,并详细解析了wav文件头部各个字段的意义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前遇到一个问题,我录音并加头的一个latestAudio.wav音频文件可以用迅雷看看播放器打开并正常播放,但是用函数playsound就无论如何放不了。


后来我做了实验,将latestAudio.wav改为latestAudio.mp3,然后迅雷看看播放器依然可以播放,至此可以断定,文件的音频流数据应该是没有问题,但是头出错了。

这个时候,就要分析哪里出错了。我是这样做的:

1.找到一个正确的.wav文件做对比,去你的电脑的C:\Windows\Media目录下可以get到很多系统自带的.wav文件,这些文件无疑都是正确的

2.下载Hex Workshop,用来比对两个.wav文件的头。要注意Hex Workshop的高低位是颠倒的,这点接下来再详细介绍。

3.将两个.wav文件拖到Hex Workshop里

4.去网上搜索下“wav头格式“,我这里有两个推荐的网址:

http://blog.csdn.net/xsjm206/article/details/6727023

http://blog.csdn.net/yzhouen/article/details/777459

只要你搜索了数个相关网页,相信你会和我一样迷惑:咋说的都不一样呢?到底哪个是对的啊?

我表示我目前并没有搜到一个答案能解释为什么网上会有那么多.wav格式,如果谁知道跪求告知~

但是呢~ 你手头可是有Windows自带的,wav文件,不管如何,这个.wav头肯定是正解之一,那么对照着它去理解.wav头每个字段的意义,再回过头看我们的音频哪里出问题了


下图是Hex Workshop的截图,可以看到,wav文件的头已经展现在你面前了,第一行是固定字段”RIFF“、”WAVEfmt “以及”音频长度-8“,这个没问题,暂时不管。


接下来分析10H到23H之间的这些字段(即第一行之后,到"data"之前的那部分),最简单的办法就是都抄下来一个个看:

10 00 00 00 01 00 02 00 44 AC 00 00 10 B1 02 00 04 00 10 00

对照这个图:


10 00 00 00 01 00 02 00 44 AC 00 00 10 B1 02 00 04 00 10 00

首先应该是”格式类别10H“,2个字节,然而你看到的是10 00明显不是10H(00 10)这是因为刚刚提到的在Hex Workshop中高低位是颠倒的,所以这里就是00 10

然而再看下一字段,”通道数1或者2“  然而10 00 之后是00 00,显然没有0通道这回事儿,再看这个:


这里面的”格式类别10H“是4个字节,所以在接下来的分析里就不能死死按着表来分析,字节数是可以变的,但是字段就那么几个,一个个对应起来就可以了。

这里直接给结论,字节划分

10 00 00 00 01 00 02 00 44 AC 00 00 10 B1 02 00 04 00 10 00

把颠倒的字节还原:

00 00 00 10   00 01         00 02                   00 00 AC 44       00 02 B1 10     00 04            00 10 

PCM                fmttag       channel               samplespersec  bytepersec       blockalign    bitpersamples

以上就是针对一个Windows系统自带.wav的头分析,参照这个对比自己的wav文件的头很容易看出问题来

当然,这只是个.wav头的一种格式,其他格式可以自己去琢磨琢磨~~




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值