如何实现音频切割

用声振法进行结构或材料的无损检测,

收到的音频是连续敲击的声音信号,

需要识别每次敲

击,并切割成时常相等的音频片段。

Python

代码如下:

import os

import numpy as np

import wave

import librosa

import matplotlib.pyplot as plt

path

=

'E:/Winter

vocation

task/Guided

wade/MC

of

Timber/3

Detection/1

Data/Data

segement/WAV Form_Yw/'

files = os.listdir(path)

files = [path + f for f in files if f.endswith('.wav')]

#

定义一个函数,实现对音频在特定位置处的切割

def CutFile():

#

遍历该文件夹下所有音频文件

for i in range(len(files)):

FileName = files[i]

print("CutFile File Name is ",FileName)

f = wave.open(r"" + FileName, "rb")

params = f.getparams()

print(params)

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

str_data = f.readframes(nframes) #

将波形转化为数组

f.close()

wave_data = np.fromstring(str_data, dtype=np.short)

wave_data.shape = -1, 2

wave_data = wave_data.T

temp_data = wave_data.T

#

加载音频,

获得每次敲击的起始时间

(

onset

)

将帧数位置转化为采样点的位置

(

*512

)

y, sr = librosa.load(files[i],sr=None)#

通过

load

加载音频,

得到的是单声道

mono

数据类型为浮点

onset_frames = librosa.onset.onset_detect(y=y, sr=sr)

onset_location_sample = onset_frames*512

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐