当前位置: 移动技术网 > IT编程>脚本编程>Python > python对批量WAV音频进行等长分割的方法实现

python对批量WAV音频进行等长分割的方法实现

2020年09月26日  | 移动技术网IT编程  | 我要评论
对批量wav音频进行等长分割对wav格式的音频以相同长度进行分割。import osimport waveimport numpy as npimport pylab as pltimport lib

对批量wav音频进行等长分割

对wav格式的音频以相同长度进行分割。

import os
import wave
import numpy as np
import pylab as plt
import librosa

path = r"d:\cutaudio\test"
files = os.listdir(path)
files = [path + "\\" + f for f in files if f.endswith('.wav')]
cuttime = 4 #单位长度4s

def cutaudios():
  for i in range(len(files)):
    filename = files[i]
    f = wave.open(r"" + filename, 'rb')
    params = f.getparams() #读取音频文件信息
    nchannels, sampwidth, framerate, nframes = params[:4] #声道数, 量化位数, 采样频率, 采样点数  
    str_data = f.readframes(nframes)
    f.close()
   
    wave_data = np.frombuffer(str_data, dtype=np.short)
    #根据声道数对音频进行转换
    if nchannels > 1:
        wave_data.shape = -1, 2
        wave_data = wave_data.t
        temp_data = wave_data.t
    else:
        wave_data = wave_data.t
        temp_data = wave_data.t

    cutframenum = framerate * cuttime 
    cutnum =nframes/cutframenum #音频片段数
    stepnum = int(cutframenum)
    steptotalnum = 0
  
    for j in range(int(cutnum)):
      filename = r"d:\cutaudio\11\\" + files[i][-17:-4] +"-"+ str(j) + ".wav"
      temp_datatemp = temp_data[stepnum * (j):stepnum * (j + 1)]
      steptotalnum = (j + 1) * stepnum
      temp_datatemp.shape = 1, -1
      temp_datatemp = temp_datatemp.astype(np.short)# 打开wav文档
      f = wave.open(filename, 'wb')
      # 配置声道数、量化位数和取样频率
      f.setnchannels(nchannels)
      f.setsampwidth(sampwidth)
      f.setframerate(framerate)
      f.writeframes(temp_datatemp.tostring()) # 将wav_data转换为二进制数据写入文件
      f.close()
      
if __name__ == '__main__' :
  cutaudios()

到此这篇关于python对批量wav音频进行等长分割的方法实现的文章就介绍到这了,更多相关python wav等长分割内容请搜索移动技术网以前的文章或继续浏览下面的相关文章希望大家以后多多支持移动技术网!

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网