手机录一段声音,用python分析——分帧显示

仅作为操作保存,大佬请跳过。

感谢大佬博主文章

关于手机录一段声音,用python分析——加载和显示
可参考博主另一篇博文传送门

直接上代码

import wave
import numpy as np
from matplotlib.pyplot import *

f=wave.open(r'E:\document\clear.wav','rb')
params=f.getparams()

nchannels, sampwidth, framerate, nframes = params[:4]

str_data=f.readframes(nframes)


wave_data=np.fromstring(str_data,dtype=np.short) # 归一化
wave_data=wave_data/max(abs(wave_data))

wave_data.shape=-1,2
wave_data=wave_data.T
wave_data=wave_data[0]

wlen=512
inc=128
signal_length=len(wave_data) #信号总长度
if signal_length<=wlen: #若信号长度小于一个帧的长度,则帧数定义为1
        nf=1
else:                 #否则,计算帧的总长度
        nf=int(np.ceil((1.0*signal_length-wlen+inc)/inc))

pad_length=int((nf-1)*inc+wlen) #所有帧加起来总的铺平后的长度
zeros=np.zeros((pad_length-signal_length,)) #不够的长度使用0填补,类似于FFT中的扩充数组操作
pad_signal=np.concatenate((wave_data,zeros)) #填补后的信号记为pad_signal

indices=np.tile(np.arange(0,wlen),(nf,1))+np.tile(np.arange(0,nf*inc,inc),(wlen,1)).T
# indices1=np.tile(np.arange(0,wlen),(nf,1))
# indices2=np.tile(np.arange(0,nf*inc,inc),(wlen,1))
# print(indices[:3])
indices=np.array(indices,dtype=np.int32) #将indices转化为矩阵
frames=pad_signal[indices] #得到帧信号
a=frames[168]

# b=a.size
time=np.arange(0,a.size)*(1/framerate)

plot(time,a.T);show()
print('ok')

即可

——————————————————————————————————————————————————

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值