赞
踩
- '''
- #显示声音文件的波形 双声道
- import wave
- # 导入 wave 模块
- import matplotlib.pyplot as plt
- # 用于绘制波形图
- import numpy as np
- # 用于计算波形数据
- import os
- # 用于系统处理,如读取本地音频文件
-
- f = wave.open(r"tkzc.wav",'rb' )
- params = f.getparams ()
- nchannels,sampwidth, framerate, nframes = params [:4]#从0~ 4之前的数
- print(nchannels,sampwidth,framerate,nframes)
-
- # 读取波形数据
- strData = f.readframes(nframes)
- # 将波形数据转换为数组
- waveData = np.fromstring(strData,dtype=np.int16)
- waveData = waveData*1.0/(max(abs(waveData)))
- time = np.arange(0,nframes)*(1.0 / framerate)#计算音频的时间
-
- waveData = np.reshape(waveData,[nframes,nchannels])
- f.close()
-
- # 绘制波形
- plt.figure()
- plt.subplot(5,1,1)
- plt.plot(time,waveData[:,0])
- plt.xlabel("Time(s)")
- plt.ylabel("Amplitude")
- plt.title("Ch-1 wavedata")
- plt.subplot(5,1,3)
- plt.plot(time,waveData[:,1])
- plt.xlabel("Time(s)")
- plt.ylabel("Amplitude")
- plt.title("Ch-2 wavedata")
- plt.show()
- '''
-
-
-
-
- import wave
- # 导入 wave 模块
- import matplotlib.pyplot as plt
- # 用于绘制波形图
- import numpy as np
- # 用于计算波形数据
- import os
- # 用于系统处理,如读取本地音频文件
- import pyaudio
-
- f = wave.open(r"tkzc.wav",'rb' )
- params = f.getparams ()
- nchannels,sampwidth, framerate, nframes = params [:4]#从0~ 4之前的数
- print(nchannels,sampwidth,framerate,nframes) # 2 2 44100 6767924 声道数, 量化位数(byte单位), 采样频率, 采样点数
-
- p = pyaudio.PyAudio()
-
- stream = p.open(format=p.get_format_from_width(f.getsampwidth()),
- channels=f.getnchannels(),
- rate=f.getframerate(),
- output=True)
- j = 0 #播放的秒数
- #f.rewind() #指针回到开头
- # 读取波形数据
- strData = f.readframes(framerate)
- #print(strData)
- while strData != b'':
- sum = 0
- # 将波形数据转换为数组
- waveData = np.fromstring(strData,dtype=np.int16)
- #print(len(waveData)) # 长度 88200
- for i in waveData:
- sum = sum + abs(waveData[i])
- print(sum/len(waveData))
- print(j)
- # waveData 数据 这是一秒钟的数据 采样频率 44100 两个声道 长度 88200 44100 * 2 两个声道的数据
- # [ -14 -11 -15 ... -1956 6 -1780] # 长度 88200 44100 * 2 两个声道的数据
- # 可以将这个列表的所有数据相加 负的先转化为正的 然后除以 88200 获得的数据越大 说明此处的音量越大
- stream.write(strData) # 播放
- strData = f.readframes(framerate) #读取下一帧
- j=j+1 # 时间加1秒
-
- stream.stop_stream()
- stream.close()
- p.terminate()
- f.close()

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。