我有一堆我为ML实验录制的汽车驾驶的音频片段。
这300个左右的剪辑长度不同(4-10秒长),我想把它们都剪成3秒的固定长度,但是用手做这件事是很痛苦的。我想要的时刻,当汽车经过麦克风(最响亮的一点),然后剪辑1.5秒之前和之后的那一刻。
我想怎么做的一种方法是:
G 215执行此操作
这是一个非常普遍的想法,我知道这并不准确。我想,取一个窗口的平均值要比仅仅找到最大值所在的位置和1.5前后的位置要好,因为最大的振幅可能是一个片段中某个时刻的风吹进麦克风,而不是汽车驶过的声音。
这有道理吗?有办法做得更好吗?哪些工具/库可以帮助我获得振幅列表?
谢谢!
发布于 2020-02-13 23:10:41
您可以使用wavefile从scipy.io读取WAV文件作为数组。然后,您可以将其放入一个pandas数据框架中,以计算滚动平均值。使用idxmax函数查找滚动平均值最大值的索引。然后,可以将数据裁剪到该索引周围,并将其写入新的WAV文件。
from scipy.io import wavfile
import pandas as pd
import numpy as np
clip_time=3
#fs is the sample rate, so time=samples/fs
[fs,data]=wavfile.read('myRecording.wav','r')
cut_length=fs*3
df=pd.DataFrame(data)
df['rolling']=df[0].apply(abs).rolling(cut_length).sum()/cut_length
maxIdx=df['rolling'].idxmax()
cut_data=np.array(df[0][maxIdx-cut_length:maxIdx])
wavfile.write('clippedRecording.wav',fs,cut_data)https://stackoverflow.com/questions/60215051
复制相似问题