Python 读取wav格式文件

1、import wave 用于读写wav文件
它提供了一个方便的WAV格式接口。
但是不支持压缩/解压缩,支持单声道/立体声。
读取格式:
open(file[, mode])
如果file是一个字符串,那么就打开文件,不然就把它当做一个类文件对象。
mode是可以缺省的,如果输入的参数是一个类文件对象,那么file.mode将会作为mode的值。
mode可选参数如下:
'r', 'rb'

Read only mode.

'w', 'wb'

Write only mode.

注意不能同时完成读/写操作

2、wav文件读操作

3、numpy:shape改变数组形状

当某数轴的参数为-1时,根据元素个数,自动计算此轴的最大长度,入将c数组改成2行

4、实例代码

#!usr/bin/env python
#coding=utf-8
 
from Tkinter import *
import wave
import matplotlib.pyplot as plt
import numpy as np
 
def read_wave_data(file_path):
	#open a wave file, and return a Wave_read object
	f = wave.open(file_path,"rb")
	#read the wave's format infomation,and return a tuple
	params = f.getparams()
	#get the info
	nchannels, sampwidth, framerate, nframes = params[:4]
	#Reads and returns nframes of audio, as a string of bytes. 
	str_data = f.readframes(nframes)
	#close the stream
	f.close()
	#turn the wave's data to array
	wave_data = np.fromstring(str_data, dtype = np.short)
	#for the data is stereo,and format is LRLRLR...
	#shape the array to n*2(-1 means fit the y coordinate)
	wave_data.shape = -1, 2
	#transpose the data
	wave_data = wave_data.T
	#calculate the time bar
	time = np.arange(0, nframes) * (1.0/framerate)
	return wave_data, time
 
def main():
	wave_data, time = read_wave_data("C:\Users\CJP\Desktop\miss_you.wav")	
	#draw the wave
	plt.subplot(211)
	plt.plot(time, wave_data[0])
	plt.subplot(212)
	plt.plot(time, wave_data[1], c = "g")
	plt.show()
 
if __name__ == "__main__":
	main()

5、效果

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要使用Python读取wav文件,可以使用wave模块来实现。首先,你需要导入wave模块,并使用wave.open()函数打开wav文件。然后,你可以使用一些wave对象的方法来获取音频的相关信息,例如帧数、声道数、帧速率和比特宽度。接下来,你可以使用wave.readframes()方法读取所有的帧,并将其转换为数组矩阵形式。最后,你可以根据需要对数据进行处理或显示。 示例代码如下所示: ```python import wave import numpy as np import matplotlib.pyplot as plt def read_wav_data(filename): '''读取一个wav文件,返回声音信号的时域谱矩阵和播放时间''' wav = wave.open(filename,"rb") # 打开一个wav格式的声音文件流 num_frame = wav.getnframes() # 获取帧数 num_channel=wav.getnchannels() # 获取声道数 framerate=wav.getframerate() # 获取帧速率 num_sample_width=wav.getsampwidth() # 获取实例的比特宽度,即每一帧的字节数 str_data = wav.readframes(num_frame) # 读取全部的帧 wav.close() # 关闭流 wave_data = np.fromstring(str_data, dtype = np.short) # 将声音文件数据转换为数组矩阵形式 wave_data.shape = -1, num_channel # 按照声道数将数组整形,单声道时候是一列数组,双声道时候是两列的矩阵 wave_data = wave_data.T # 将矩阵转置 return wave_data, framerate def wav_show(wave_data, fs): # 显示出来声音波形 time = np.arange(0, len(wave_data)) * (1.0/fs) # 计算声音的播放时间,单位为秒 # 画声音波形 plt.plot(time, wave_data) plt.show() if(__name__=='__main__'): wave_data, fs = read_wav_data("1.wav") wav_show(wave_data[0],fs) wav_show(wave_data[1],fs) # 如果是双声道则保留这一行,否则删掉这一行 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值