wav文件系列_2_Python实现读写
本文介绍了 Python 实现音频读写的方法。Python wave 模块提供便捷的 wav 文件操作。该模块并不支持压缩与解压,但支持单声道/立体声的转换。
参考:
[1] wave
— Read and write WAV files [2] python音频处理用到的操作 (2017.05.03 cnblog )
[3] Python——Pylab简单读取wav文件示例 (2013.11.26 iteye )
[4] 使用python写Wave文件 ( 2018.04.06 CSDN )
1、打开
wave.open(file[, mode])
file 是字符串时,open 打开对应文件,否则将其作为可找的文件类对象处理。
mode 可为
'r', 'rb' 只读
'w', 'wb' 只写
不支持读+写
Z.b. f = wave.open( file , 'x' )
wave.openfp(file, mode) open 同义,后向兼容
2、生成
Wave_write:
Wave_write.close()
确认 nframes 值没有错,关闭 wave 打开的文件。完成文件写入之后运行的语句
Wave_write.setnchannels(n)
设定通道数
Wave_write.setsampwidth(n)
设定采样深度
Wave_write.setframerate(n)
设定采样频率
Wave_write.setnframes(n)
设定信号长度(存入更长数据后可能会调整)
Wave_write.setcomptype(type, name)
设定压缩格式(wav没有压缩)
Wave_write.setparams(tuple)
设定一条龙服务,其中:
tuple = [ nchannels, sampwidth, framerate, nframes, comptype, compname ]
Wave_write.tell()
返回文档中现在编辑的位置
Wave_write.writeframesraw(data)
写入数据,并不校对 nframes 值(这个函数还是有用的)
Wave_write.writeframes(data)
写入数据,顺手校对 nframes 值
注意:writeframes 和 writeframesraw 两个函数调用之后,所有参数都已固定了。
# -*- coding: utf-8 -*- import wave
import numpy as np
import struct x = np.linspace(0,880*np.pi,16384)
data = np.sin(x)
channel, deepth, freq = [ 1, 2, 16384 ]
name = 'out2.wav' f = wave.open(name, 'wb')
f.setparams((channel, deepth, int(freq), len(data), "NONE", "not compressed"))
for num in data:
f.writeframes(struct.pack('h', int(num*32000)))
f.close()
其中的 struct 库相关说明可以见引用[2]。未来有空会展开讲。
3、读取
Wave_read:
Wave_read.close()
关闭 wave 打开的媒体,使之不可用。在收集对象之后自动调用。
Wave_read.getnchannels()
返回通道数( 1、2分别对应单、双通道 )
Wave_read.getsampwidth()
返回采样深度
Wave_read.getframerate()
返回采样频率
Wave_read.getnframes()
返回数据帧数
Wave_read.getcomptype()
返回压缩类型( 只支持'NONE' )
Wave_read.getcompname()
返回压缩名称( 人类可懂的压缩类型,'not compressed'等价于'NONE' )
Wave_read.getparams()
参数返回一条龙
tuple = [ nchannels, sampwidth, framerate, nframes, comptype, compname ]
Wave_read.readframes(n)
读 n 帧数据,输出一个比特串
Wave_read.rewind()
倒带,将文件指针置于音频流的开头
以下两个方法定义了一个变量 “position” 。该变量在两个方法中通用。两个方法在实现上互相依赖。
Wave_read.setpos(pos)
设定文件指针到特定位置
Wave_read.tell()
读取文件指针的位置
# -*- coding: utf-8 -*- import wave
import matplotlib.pyplot as plt
import numpy as np filepath = "out2.wav"
f = wave.open( filepath, 'rb' )
params = f.getparams()
nchannels, sampwidth, framerate, nframes = params[:4] Data_str = f.readframes(nframes)
Data_num = np.fromstring(Data_str,dtype=np.int16)
Data_num = Data_num*1.0/(max(abs(Data_num))) time = np.arange(0,nframes)*(1.0/framerate) plt.plot(time,Data_num)
plt.xlabel("Time(s)")
plt.ylabel("Amplitude")
plt.title("Single channel wavedata")
plt.grid('on')
plt.savefig("08273noise.png")
这段代码在 Spyder 上运行不了,只能直接调 Python 编译。可能只是我自己的设置遇到问题了吧。生成的音频是 440Hz A调标准音。信号不做截断的话,看到的是一片蓝色。
END
wav文件系列_2_Python实现读写的更多相关文章
- wav文件系列_1_wav格式解读
本文介绍 wav 文件格式,主要关注该类格式的结构. 参考: [1] 以一个wav文件为实例分析wav文件格式 ( 2017.04.11 CSDN ) [2] WAV ( Wikipedia ) [3 ...
- C++标准库实现WAV文件读写
在上一篇文章RIFF和WAVE音频文件格式中对WAV的文件格式做了介绍,本文将使用标准C++库实现对数据为PCM格式的WAV文件的读写操作,只使用标准C++库函数,不依赖于其他的库. WAV文件结构 ...
- 音视频学习系列第(三)篇---wav文件的存储和解析
音视频系列 什么是wav wav是一种无损的音频文件格式,wav文件有两部分,第一部分是文件头,记录一些重要的参数信息,如音频的采样率,通道数,数据位宽,第二部分是数据部分,数据部分可以是PCM,也可 ...
- Python解析Wav文件并绘制波形的方法
资源下载 #本文PDF版下载 Python解析Wav文件并绘制波形的方法 #本文代码下载 Wav波形绘图代码 #本文实例音频文件night.wav下载 音频文件下载 (石进-夜的钢琴曲) 前言 在现在 ...
- C#播放wav文件
C#使用HWQPlayer类播放wav文件 类的代码: using System.IO; using System.Runtime.InteropServices; namespace HoverTr ...
- python 播放 wav 文件
未使用其他库, 只是使用 pywin32 调用系统底层 API 播放 wav 文件. # Our raison d'etre - playing sounds import pywintypes im ...
- PC-1500的代码存入WAV文件
目录 第1章保存 1 1.1 操作 1 1.2 波形说明 4 1.3 波形整形 5 1.4 压缩 8 第2章载入 9 2.1 操作 9 2.2 音量 9 ...
- Windwos平台上ffmpeg解码音频并且保存到wav文件中
先附上代码,测试通过 #include <stdio.h> #include <math.h> #include "libavutil/avstring.h" ...
- 【测试技术】ant在测试中的使用@文件以及目录的读写删和复制
ant其实就是一个java的打包工具,存在的时间已经很久了,很多同行在使用中可能就是用,对为什么要用它,能够怎么用没有更多的了解: ---------------------------------- ...
随机推荐
- css伪类选择符
1):link/:visited/:hover/:active (爱恨原则 love/hate)2):first-child/:last-child/:only-child/:nth-child(n) ...
- (JavaScript)实现上传图片实时预览和(文件)大小判断
唉,为什么我一个做大数据和后端的要为前端耗尽心力啊??!! 昨天在做一个网页时遇到了一个问题,有一处需要插入图片,我原本的想法是获取到上传文件的URL,然后动态插入img标签,设置src为图片的URL ...
- C++标准模板库(STL)之Set
1.Set的用法 Set:集合,一个内部自动有序而且不重复元素的容器.使用set,要加头文件#include<set>和using namespace std; 1.1.Set的定义 se ...
- Tor真的匿名和安全吗?——如果是http数据,则在出口节点容易被嗅探明文流量,这就是根本问题
Tor真的匿名和安全吗? from:http://baham.github.io/04_03_torzhen-de-ni-ming-he-an-quan-ma-%3F.html 很多人相信Tor是完全 ...
- ceph使用对象网关
1. 介绍 三种验证客户端的方式选一种就行了 2. 安装 2.1 创建对象存储网关系统 步骤1:安装文档安装ceph 步骤2:初始化缓存网关 [root@node1 my-cluster]# ...
- node.js安装express模块应用服务框架
1.创建工程文件夹case-04 2.在终端窗口进入文件夹目录,并输入:npm init,并一路回车,最后看到在case-04文件夹里自动生成了package.json 文件 3.打开vscode,进 ...
- vmware install win8 and server2012 problem
Environment: vmware workstation 9 and win7 64bit. Problem: when i want to install server2012r2 and w ...
- 服务器端网络编程之 IO 模型
引言 从 T 跳槽到 A 之后,我的编程语言也从 C++ 转为 了 Java.在 T 做的偏服务器端开发,而在 A 更偏向于业务开发.上周在 A 公司组内做了一个<服务器端高性能网络编程> ...
- MSDN订户下载权限被屏蔽的办法
使用Chrome浏览器,在加载完成页面之后,按F12,在控制台选项卡当中输入下面代码,即可解除屏蔽. $("#SubMigratedMessageArea").remove(); ...
- 小谈对Python的认知与期望
18级新生,在大学之前并未接触过程序语言编程,在众多语言编程中只对C语言有个名字上认知.在上个学期初次了解到Python语言,计算机老师表示Python是现在编程语言中如雨后春笋般的发展飞速的计算机语 ...