python实现简单的声音文件读写
一、 声音的读与写
以下将用到python自带的wave模块进行操作。
- 声音文件的读取
以下以wav文件为例。
使用wave模块进行声音的读取操作是:wave.open(r"wav文件路径",“rb")
‘rb‘表示命令为只读模式。
wav.open命令后将返回一个wave_read对象,通过调用wave_read的方法可以获取wav文件的参数。 - wave_read对象的方法有以下几种:
(假定已经执行以下wave.open()代码)
f=wave.open(r"wav文件路径","rb")
(1)f.getparams()
:获取wav文件的参数
图片1
调用此方法后,将返回六个参数,分别为wav文件的声道、采样深度、采样率、取样点数、压缩类型、压缩类型的描述。wave模块只支持非压缩的类型,后面两项参数可以省略。
另外,通过
f.getchannels()
f.getsampwidth()
f.getframerate()
f.getnframes()
四个方法可分别获得声道数、采样深度、采样率、取样点数四个参数。
(2)f.readframs(nframes)
:读取声音数据
图片2
nframes为必需指定的参数,指定需要读取的长度。
如上图所示,调用此方法后,将返回以字符串代表的二进制数据。
(3)np.fromstring(str_data,dtype=np.short)
:将二进制文件转换为可计算的数组。
图片3
str_data=f.readframs(nframes)
np.short ####问题-1
令wave_data=np.fromstring(str_data,dtype=np.short),此时wave_data是一个一维数组。
通过改变它的形状使其重新变为双声道文件:
wave_data.shape=-1,2
将其转置得:
wave_data = wave_data.T
- 补充:
通过取样点数和取样频率能计算出每个取样的时间,
time = np.arrange(0, nframes) * (1.0 / framerate)
- 声音文件的写入:
- 导入需要的模块;
import wave
import numpy as np
import scipy.signal as signal
wave用来导出声音文件,numpy用来作数据处理,signal用于决定声音文件的波形。
- 设置参数:
framerate = 44100
time = 10
- 设置声音文件的波形及数据类型:
####在0~time范围内,生成framerate个长度为1.0/framerate的小区间,以此近似模拟声音波形。
t = np.arange(0, time, 1.0/framerate)
####以((t, 100,)为起始点,(time, 1000)为终止点,设置频率扫描为线性曲线。
wave_data = signal.chirp(t, 100, time, 1000, method='linear') * 10000
####设置数据存储方式为两个字节为一单位。
wave_data = wave_data.astype(np.short)
- 创建一个新文件:
f = wave.open(r"文件名.wav", "wb")
- 设置声音文件的参数:
f.setnchannels(1)
f.setsampwidth(2)
f.setframerate(framerate)
- 将设置好参数的wav_data转换为二进制数据后写入声音文件中:
f.writeframes(wave_data.tostring())
f.close()
在python中,二进制数据以字符串表示,所以wave_data.tostring()
即表示将wave_data转换为二进制数据。
此文为转载文章,原文链接
python实现简单的声音文件读写相关推荐
- python第二十九课——文件读写(复制文件)
自定义函数:实现文件复制操作有形参(2个) 没有返回值相似版(不用) def copyFile(src,dest):#1.打开两个文件:1个关联读操作,1个关联写操作fr=open(src,'rb') ...
- Python学习入门基础:文件读写操作、模块和包、异常
一.文件 文件的概念 文件的基本操作 文件/文件夹的常用操作 文本文件的编码方式 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多 ...
- python读取dat数据_dat文件读写_c语言读写dat文件_c语言读dat文件 - 云+社区 - 腾讯云...
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 13 }文件读写:写入目录的获取比较麻烦,各个平台不同,所以用c++自己的文件读 ...
- Python基础必掌握的文件读写操作详解
读取和写入文件等操作是 Python 可以完成的最常见任务之一.无论是写入简单的文本文件,读取复杂的服务器日志,甚至分析原始字节数据,进行相关的处理操作,最终所有这些情况都需要读取或写入文件. 整套学 ...
- python怎么读取api,不懂即搜,如何用 python 读取 api 并借用文件读写数据?
人类天生有一种本领,即便不懂那原理,居然也能拿来就用.李笑来在提出这个观点时,举了很多生动的例子.我呢,恰好最近搜索了好几个第三方库并拿来就用.如果你和我一样,正在自学python,想试试新玩意,不妨 ...
- python自动化第三周---文件读写
1.python文件对象提供了三个"读"方法: read().readline() 和 readlines().每种方法可以接受一个变量以限制每次读取的数据量. read() 每次 ...
- python的写操作_Python—文件读写操作
初识文件操作 使用open()函数打开一个文件,获取到文件句柄,然后通过文件句柄就可以进行各种各样的操作了,根据打开文件的方式不同能够执行的操作也会有相应的差异. 打开文件的方式: r, w, a, ...
- python读取rtf文件_【Python】【IO】文件读写
一.打开的文件在使用完后要关闭 >>>f=file('fibs.py') #用''表示文件名 #无''表示变量名 >>>f.read() #打印fibs.py中的内 ...
- python 学习汇总1:文件读写 tcy
文件读写 2018/11/12 =============================================================================== 1.1文 ...
最新文章
- .NET控件名称缩写一览表 zz
- photoshop ps 钢笔工具抠出图 复制出来 方法
- 之全能忙内_临沧大名山茶:喝过诸多忙肺茶,但你不知道什么是“隔年香”
- 答网友提问,ABAP post调用外部接口遇到405 not allow
- python对word提取数据,如何使用Python从doc / docx文件中提取数据
- 使有用计算机不注意卫生,保护眼睛注意细节有哪些
- elasticsearch7常见查询(term、match、bool、filter)
- c#二叉树 取叶子节点个数_两种类似但是原理不同的算法求二叉树的所有叶子节点和...
- mysql5批处理_转关于mysql5.5 的批处理讨论(转载)
- linux mysql 定时任务_Linux下Mysql定时任务备份数据的实现方法
- Linux资源控制-CPU和内存【转】
- 深度学习caffe:激活函数
- 在大多数人转向.NET和JAVA阵营的时候,我正在悄悄地向古老的COBOL招手
- 数学模型 商人过河问题 C++实现
- 花了一年时间开发的铣床数控系统NCStudioPro(支持钻孔,铣削,切割等铣床加工工艺)...
- vue-app之H5打开第三方app
- 《可复制的领导力》思维导图读书笔记,提升职场竞争力
- 七问西方主流经济学,考考你的经济学常识
- Intellij idear使用心得
- AWT绘图工具Graphics
热门文章
- 【Docker】fuse: device not found, try ‘modprobe fuse‘ first
- 用三种方式安装Nginx
- 如何判断一棵树是否是满二叉树
- 一些http和tomcat知识补充
- 如何实现Word、PDF、TXT文件的全文内容检索?
- FFMPEG 抓取virtual-audio-capturer 数据
- 怎么查看OutputDebugString输出的信息?debugview
- 区块链与大数据结合分析
- 注意力机制+软阈值化 = 深度残差收缩网络(Deep Residual Shrinkage Network)
- 对话量子链创始人帅初:区块链发展目标是构建协同进化的生命体