微立顶科技

新闻资讯

创新 服务 价值

  python通过wave模块处理wav格式的音频

发布日期:2022/10/13 11:48:26      浏览量:

wave用于处理wav格式的音频数据,支持单声道/立体声。

先看一个简单的示例

import wave
wavRead = wave.open(’test.wav’,’rb’)    #读取音频
params = wavRead.getparams()          #获取音频信息
print(params)
# 其值如下,分别表示通道数为2, 采样位宽为2, 帧率48k,帧数16291840,无压缩
# _wave_params(nchannels=2, sampwidth=2, framerate=48000, 
# nframes=16291840, comptype=’NONE’, compname=’not compressed’)
wavWrite = wave.open(’new.wav’,’wb’)    #新建一个wav文件
wavWrite.setparams(params)              #设置音频参数
segment = wavRead.readframes(1629184)     #从test.wav中读取1629184帧
wavWrite.writeframes(segment)           #将音频片段写入new.wav
wavRead.close()     #关闭文件
wavWrite.close()

在运行完上面的代码后,可以看到工作路径下多出一个new.wav,大小差不多是test.wav的十分之一左右,即成功对test.wav进行了分割。

其中wave.open用于打开音频文件,当模式为rb时,表示只读;wb为只写。只读模式下,返回一个Wave_read对象;只写模式下,返回Wave_write的实例。

读:Wave_read
除了用于关闭音频文件的close()之外,只读模式返回的Wave_read对象中封装了许多无参函数,用以获取音频数据的信息。

getnchannels() 返回声道数量,1为单声道,2为立体声
getsampwidth() 返回字节长度
getframerate() 返回采样频率
getnframes() 返回音频总帧数
getcomptype()
getcompname() 返回压缩类型,然鹅只能是None
getparams() 返回一个元组,内容包括上面五项
接下来,是Wave_read的核心功能——readframes(n)。通过该方法,可以读取并返回以bytes对象表示的最多n帧音频。

在读取n帧之后,数据流的指针也会跳到n处,通过tell()函数可以返回当前指针位置。若想让指针重新回到文件开始,可实用rewind();通过setpos(n),可以让指针跳到n处。

写:Wave_write
与Wave_read中的get相对应,Wave_write中除了也提供get方法之外,也提供一些set方法,用于设置相关的信息

get set set功能
getnchannels() setnchannels(n) 设置声道数量
getsampwidth() setsampwidth(n) 设置字节长度为n
getframerate() setframerate(n) 设置采样频率为n
getnframes() setnframes(n) 设置音频总帧数为n
getcompname()
getcomptype() setcomptype(type,name) 设置压缩格式,然鹅只能是None
getparams() setparams(tuple) 设置上面的那些内容
接下来,与Wave_read.readframes()针锋相对的函数为writeframes(data),用于写入音频数据,其中data为bytes格式的二进制数据。


  业务实施流程

需求调研 →

团队组建和动员 →

数据初始化 →

调试完善 →

解决方案和选型 →

硬件网络部署 →

系统部署试运行 →

系统正式上线 →

合作协议

系统开发/整合

制作文档和员工培训

售后服务

马上咨询: 如果您有业务方面的问题或者需求,欢迎您咨询!我们带来的不仅仅是技术,还有行业经验积累。
QQ: 39764417/308460098     Phone: 13 9800 1 9844 / 135 6887 9550     联系人:石先生/雷先生