以前的整理的一篇文章。
周末没事,在家用pyaudio捣鼓了一下wav的读入,播放,与频谱分析。
正常人听觉的频率范围大约在20Hz~20kHz之间。为了保证声音不失真,采样频率应该在40kHz左右。常用的音频采样频率有8kHz、11.025kHz、22.05kHz、16kHz、37.8kHz、44.1kHz、48kHz等,如果采用更高的采样频率,还可以达到DVD的音质。
先上两个链接:
比特率:https://baike.baidu.com/item/%E6%AF%94%E7%89%B9%E7%8E%87/1022775?fr=aladdin
PCM编码:https://baike.baidu.com/item/pcm%E7%BC%96%E7%A0%81/10865033?fr=aladdin
摘一些出来学习:
音频 800 bps – 能够分辨的语音所需最低码率(需使用专用的FS-1015语音编解码器) 8 kbps —电话质量(使用语音编码) 8-500 kbps –Ogg Vorbis和MPEG1 Player1/2/3中使用的有损音频模式 500 kbps–1.4 Mbps —44.1KHz的无损音频,解码器为FLAC Audio,WavPack或Monkey’s Audio 1411.2 - 2822.4 Kbps —脉冲编码调制(PCM)声音格式CD光碟的数字音频 5644.8 kbps —SACD使用的Direct Stream Digital格式
码率计算公式:
基本的算法是:【码率】(kbps)=【文件大小】(字节)X8/【时间】(秒)*1000
音频文件专用算法:【比特率】(kbps)=【量化采样点】(kHz)×【位深】(bit/采样点)×【声道数量】(一般为2)
结论:
1.一个采样率为44.1KHz,采样大小为16bit,双声道的PCM编码的WAV文件,
比特率= 44.1K×16×2 =1411.2 Kbps。
我们常见的Audio CD就采用了PCM编码,一张光盘的容量只能容纳72分钟的音乐信息,而常见的wav歌曲大部分是PCM格式的。
2.数据了计算:我找了首刘惜君-我很快乐
数据量=(采样频率×采样位数bit×声道数×时间)/8=[44.1×1000×16×2×(3×60+33)] /(8×1024×1024) =37573200B约35.83MB
算出来的大小与歌曲也一样,大小:35.8 MB (37,643,974 字节);占用空间:35.9 MB (37,650,432 字节)
3.一帧PCM是:2048次采样组成的(网上搜到的),但是我自己用数据算了下,感觉不对,先写下面,有懂的帮指导一下:
采样率framerate:44100Hz
帧数nframes:9410940
时长time:213s
数据量:37573200Byte
帧数nframes/时长time=9410940/213=44182帧/秒,约等与采样率,怎么回事,我算错了么。。。汗
如果按2048次计算,一帧时间播放时间 = 2048 * 1000000/44100= 46.4ms,一帧的解码时间须控制在46.4ms内。
4.PCM格式
PCM(Pulse Code Modulation)也被称为 脉码编码调制。PCM中的声音数据没有被压缩,如果是单声道的文件,采样数据按时间的先后顺序依次存入。(它的基本组织单位是BYTE(8bit)或WORD(16bit))
样本大小 数据格式 最小值 最大值
8位PCM unsigned int 0 225
16位PCM int -32767 32767
4.文件格式
5.代码
1 | import wave |
我最后验证了时间ok,start相当于从100s开始播放了10s,上面输出的与直接用播放器放出来是同一段 。
6.频谱分析图
7.歌曲地址
https://pan.baidu.com/s/1hmeXmfUxQVYfBd0EGKGCYQ
参考:
https://www.cnblogs.com/lzxwalex/p/6922099.html
https://www.cnblogs.com/lidabo/p/3729615.html
https://www.cnblogs.com/lzxwalex/p/6922099.html