分享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 ...
随机推荐
- qt Multimedia 模块类如何使用?
qt 多媒体模块介绍 类名 英文描述 中文描述 QAudioBuffer Represents a collection of audio samples with a specific format ...
- hihoCoder 1033 : 交错和 数位dp
思路:数位dp,dp(i, j, k)表示考虑i位数,每位数可以任意取[0~9],并且这i位数的交错和为j,k=1表示前缀全是0(如000456),k=0表示前缀不为0.注意,前缀是否为0是这道题的一 ...
- AGC010 - A: Addition
原题链接 题意简述 给出一个个数的数列,每次选出两个奇偶性相同的数合成一个数,问最终能否只剩下一个数. 分析 非常简单的一道题. 两个偶数可以合成一个偶数,两个奇数也能合成一个偶数.所以合并偶数时偶数 ...
- ReportView动态加载带参数的RDCL文件及子报表
本文来自Torres.Wu发表在博客园的博客,转载请标明出处. 同上一篇差不多,这次咱们加载带有子报表的RDCl文件.首先还是创建一个form程序,在form2窗体中添加一个ReporView控件,l ...
- 【php】DIRECTORY_SEPARATOR的作用
DIRECTORY_SEPARATOR是php的内部常量,用于显示系统分隔符的命令,不需要任何定义与包含即可直接使用. 在windows下路径分隔符是/(当然/在部分系统上也是可以正常运行的),在li ...
- HI3531由DMA 发起PCIe 事务
Hi3531 PCIe 控制器内含DMA 控制器,DMA 控制器包含有两个DMA 通道(一个 DMA 读通道和一个DMA 写通道).PCIe 控制器内包含的DMA 控制器用于大数据量 的存储器读写事务 ...
- Linux显示历史记录
Linux显示历史记录 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ history 1 uname -a 2 lsusb 3 df -h 4 ps -A 5 ...
- JSP常见的三个编译指令
JSP常见的三个编译指令 1.page指令 是针对当前页面的指令 2.include指令 用于指定包含另一个页面 3.taglib指令 用于定义和访问自定义标签
- JSP路径出现问题
1.错误描述 2.错误原因 <%@ page language="java" import="java.util.*" pageEncoding=&quo ...
- 获取Filter的三种途径
一.通过CLSID [cpp] view plaincopyprint? IBaseFilter *pF = 0; HRESULT hr = CoCreateInstance(clsid, 0, CL ...