分享python分析wave, pcm音频文件
最近研究的,我用的是python3.3, 用matplotlib画图,
下面代码演示分析pcm文件,如果是wave文件,把wave的文件头(前44字节)去掉就是pcm文件了。
代码如下
# -*- coding:utf-8 -*- import array
import os
from matplotlib import pyplot fileName = 'e:/music/qianqian.pcm' # 2 channel, 16 bit per sample
file = open(fileName, 'rb')
base = 1 / (1<<15) shortArray = array.array('h') # int16
size = int(os.path.getsize(fileName) / shortArray.itemsize)
count = int(size / 2)
shortArray.fromfile(file, size) # faster than struct.unpack
file.close()
leftChannel = shortArray[::2]
rightChannel = shortArray[1::2] def showPCM(leftChannel, rightChannel, start = 0, end = 5000):
fig = pyplot.figure(1) pyplot.subplot(211)
pyplot.title('pcm left channel [{0}-{1}] max[{2}]'.format(start, end, count))
pyplot.plot(range(start, end), leftChannel[start:end]) pyplot.subplot(212)
pyplot.title('pcm right channel [{0}-{1}] max[{2}]'.format(start, end, count))
pyplot.plot(range(start, end), rightChannel[start:end]) pyplot.show()
# fig.savefig('pcm.pdf') # save figure to pdf file showPCM(leftChannel, rightChannel, 0, count)


另一种分析方法,用struct.unpack,但读取要比上一种慢很多
# -*- coding:utf-8 -*- import struct
from matplotlib import pyplot file = open('e:/music/qianqian.pcm', 'rb') # if file is too large, pyplot may overflow
count = 0
total = 0
base = 1 / (1<<15)
maxl = 0
minl = 0
maxr = 0
minr = 0
larray = []
rarray = []
# file has two channels, 16 bit per sample
while True:
lr = file.read(4)
if len(lr) < 4:
break
count += 1
lvalue = struct.unpack('h', lr[:2])[0] * base
larray.append(lvalue)
if lvalue > maxl:
maxl = lvalue
if lvalue < minl:
minl = lvalue
total += lvalue
rvalue = struct.unpack('h', lr[2:])[0] * base
rarray.append(rvalue)
if rvalue > maxr:
maxr = rvalue
if rvalue < minr:
minr = rvalue file.close()
avarage = total / count
print(count, total, avarage)
print('max = {0} min = {1}'.format(maxl, minl)) fig = pyplot.figure(1)
pyplot.subplot(211)
pyplot.title('pcm left channel')
pyplot.plot(range(count), larray)
pyplot.subplot(212)
pyplot.title('pcm right channel')
pyplot.plot(range(count), rarray)
pyplot.show()
# fig.savefig('pcm.pdf')
代码及pcm下载:
链接:https://pan.baidu.com/s/1lTn7o2kpwKzd1tFiIDfIdQ
提取码:oqgz
下面这个地址也有一个例子:http://stackoverflow.com/questions/18625085/how-to-plot-a-wav-file可以看看。
分享python分析wave, pcm音频文件的更多相关文章
- MediaInfo用来分析视频和音频文件的编码和内容信息的超好用工具
转载:http://blog.csdn.net/ameyume/article/details/6718705 MediaInfo简介 MediaInfo 用来分析视频和音频文件的编码和内容信息. M ...
- IOS音频1:之采用四种方式播放音频文件(一)AudioToolbox AVFoundation OpenAL AUDIO QUEUE
本文转载至 http://blog.csdn.net/u014011807/article/details/40187737 在本卷你可以学到什么? 采用四种方法设计应用于各种场合的音频播放器: 基于 ...
- Qt 播放音频文件
Qt播放音频文件的方法有好多中,简单介绍几种 不过一下几种方式都需要在Qt工程文件中添加 QT += multimedia 第一 QMediaPlayer类 可以播放MP3文件,同时使用也 ...
- 单独编译和使用webrtc音频降噪模块(附完整源码+测试音频文件)
单独编译和使用webrtc音频增益模块(附完整源码+测试音频文件) 单独编译和使用webrtc音频回声消除模块(附完整源码+测试音频文件) webrtc的音频处理模块分为降噪ns,回音消除aec,回声 ...
- 如何将Pcm格式的音频文件转换成Wave格式的文件
最近在做一款变声App,其中就用到了将pcm格式转wave格式,下面贴出源代码,希望带有需求的童鞋有帮助!!!这里是c++语言写的,也可以用java实现.当然java调用native函数要用到jni技 ...
- 【转】Python处理wave文件
#本文PDF版下载 Python解析Wav文件并绘制波形的方法 #本文代码下载 Wav波形绘图代码 #本文实例音频文件night.wav下载 音频文件下载 (石进-夜的钢琴曲) 前言 在现在繁忙的生活 ...
- 痞子衡嵌入式:PCM编码与Waveform音频文件(.wav)格式详解
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是PCM编码及Waveform音频文件格式. 嵌入式里有时候也会和音频打交道,比如最近特别火的智能音箱产品,离不开前端的音频信号采集.降噪 ...
- Python实例---爬取下载喜马拉雅音频文件
PyCharm下python爬虫准备 打开pycharm 点击设置 点击项目解释器,再点击右边+号 搜索相关库并添加,例如:requests 喜马拉雅全网递归下载 打开谷歌/火狐浏览器,按F12打开开 ...
- Python开发【Tornado】:搭建文件下载服务、音频文件播放
Tornado 如何做文件下载 要求:浏览器输入url地址,直接弹窗提示下载 Tornado服务端,搭建文件下载服务 #!/usr/bin/env python # -*- coding:utf-8 ...
随机推荐
- numpy模块中的sum(axis)方法
1.sum函数声明 sum(a, axis=None, dtype=None, out=None, keepdims=<class 'numpy._globals._NoValue'>) ...
- JavaScript将小写金额转换成大写
//num为小写金额,单位元 changeMoney(num) { if(isNaN(num))return ""; var strPrefix=""; if( ...
- GIT 查看 删除 添加远程库
查看远程库 $ git remote -vorigin https://github.com/autoliuweijie/MachineLearning.git (fetch)origin https ...
- PCI9054 突发模式数据传输 (burst mode data transfer )
C mode target slave , 之前看PCI9054 datasheet知道这个burst mode ,也看了时序图,但是一直缺乏一个感性的认识. 今天网上买的 USB逻辑分析仪到货了,接 ...
- vxworks下硬盘测速程序
void speed(int buflen,int mod){/*int mod = 0;*/ int len=50; FILE *fp; unsigned int i=0,j=0,tmp,tmp2; ...
- zTree实现地市县三级级联数据库映射
zTree实现地市县三级级联数据库映射 Province.hbm.xml: <?xml version="1.0" encoding="UTF-8"?&g ...
- freemarker报错之十
1.错误描述 <html> <head> <meta http-equiv="content-type" content="text/htm ...
- directX视频播放------手动连接
IGraphBuilder *pigb = NULL; IMediaControl *pimc = NULL; IMediaEventEx *pimex = NULL; IVideoWindow *p ...
- Halcon的应用程序 打开后 弹出没有帮助文件错误提示
问题: Halcon的应用程序 打开后 弹出没有帮助文件错误提示 解决方法: 建立(C:\ProgramFiles\MVTec\halcon)目录,将halcon安装目录下的help文件夹复制过来即可 ...
- ls -l 显示年份
默认情况下ls -l命令只显示月和日,不显示年份: $ ls -llrwxrwxrwx 1 root root 7 Feb 27 16:12 bin -> usr/bin 如要要显示年份,就要使 ...