一、 声音的读与写

以下将用到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实现简单的声音文件读写相关推荐

  1. python第二十九课——文件读写(复制文件)

    自定义函数:实现文件复制操作有形参(2个) 没有返回值相似版(不用) def copyFile(src,dest):#1.打开两个文件:1个关联读操作,1个关联写操作fr=open(src,'rb') ...

  2. Python学习入门基础:文件读写操作、模块和包、异常

    一.文件 文件的概念 文件的基本操作 文件/文件夹的常用操作 文本文件的编码方式 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多 ...

  3. python读取dat数据_dat文件读写_c语言读写dat文件_c语言读dat文件 - 云+社区 - 腾讯云...

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 13 }文件读写:写入目录的获取比较麻烦,各个平台不同,所以用c++自己的文件读 ...

  4. Python基础必掌握的文件读写操作详解

    读取和写入文件等操作是 Python 可以完成的最常见任务之一.无论是写入简单的文本文件,读取复杂的服务器日志,甚至分析原始字节数据,进行相关的处理操作,最终所有这些情况都需要读取或写入文件. 整套学 ...

  5. python怎么读取api,不懂即搜,如何用 python 读取 api 并借用文件读写数据?

    人类天生有一种本领,即便不懂那原理,居然也能拿来就用.李笑来在提出这个观点时,举了很多生动的例子.我呢,恰好最近搜索了好几个第三方库并拿来就用.如果你和我一样,正在自学python,想试试新玩意,不妨 ...

  6. python自动化第三周---文件读写

    1.python文件对象提供了三个"读"方法: read().readline() 和 readlines().每种方法可以接受一个变量以限制每次读取的数据量. read() 每次 ...

  7. python的写操作_Python—文件读写操作

    初识文件操作 使用open()函数打开一个文件,获取到文件句柄,然后通过文件句柄就可以进行各种各样的操作了,根据打开文件的方式不同能够执行的操作也会有相应的差异. 打开文件的方式: r, w, a, ...

  8. python读取rtf文件_【Python】【IO】文件读写

    一.打开的文件在使用完后要关闭 >>>f=file('fibs.py') #用''表示文件名 #无''表示变量名 >>>f.read() #打印fibs.py中的内 ...

  9. python 学习汇总1:文件读写 tcy

    文件读写 2018/11/12 =============================================================================== 1.1文 ...

最新文章

  1. .NET控件名称缩写一览表 zz
  2. photoshop ps 钢笔工具抠出图 复制出来 方法
  3. 之全能忙内_临沧大名山茶:喝过诸多忙肺茶,但你不知道什么是“隔年香”
  4. 答网友提问,ABAP post调用外部接口遇到405 not allow
  5. python对word提取数据,如何使用Python从doc / docx文件中提取数据
  6. 使有用计算机不注意卫生,保护眼睛注意细节有哪些
  7. elasticsearch7常见查询(term、match、bool、filter)
  8. c#二叉树 取叶子节点个数_两种类似但是原理不同的算法求二叉树的所有叶子节点和...
  9. mysql5批处理_转关于mysql5.5 的批处理讨论(转载)
  10. linux mysql 定时任务_Linux下Mysql定时任务备份数据的实现方法
  11. Linux资源控制-CPU和内存【转】
  12. 深度学习caffe:激活函数
  13. 在大多数人转向.NET和JAVA阵营的时候,我正在悄悄地向古老的COBOL招手
  14. 数学模型 商人过河问题 C++实现
  15. 花了一年时间开发的铣床数控系统NCStudioPro(支持钻孔,铣削,切割等铣床加工工艺)...
  16. vue-app之H5打开第三方app
  17. 《可复制的领导力》思维导图读书笔记,提升职场竞争力
  18. 七问西方主流经济学,考考你的经济学常识
  19. Intellij idear使用心得
  20. AWT绘图工具Graphics

热门文章

  1. 【Docker】fuse: device not found, try ‘modprobe fuse‘ first
  2. 用三种方式安装Nginx
  3. 如何判断一棵树是否是满二叉树
  4. 一些http和tomcat知识补充
  5. 如何实现Word、PDF、TXT文件的全文内容检索?
  6. FFMPEG 抓取virtual-audio-capturer 数据
  7. 怎么查看OutputDebugString输出的信息?debugview
  8. 区块链与大数据结合分析
  9. 注意力机制+软阈值化 = 深度残差收缩网络(Deep Residual Shrinkage Network)
  10. 对话量子链创始人帅初:区块链发展目标是构建协同进化的生命体