首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Python从wav文件中创建振幅列表

使用Python从wav文件中创建振幅列表
EN

Stack Overflow用户
提问于 2020-02-13 19:20:13
回答 1查看 789关注 0票数 1

我有一堆我为ML实验录制的汽车驾驶的音频片段。

这300个左右的剪辑长度不同(4-10秒长),我想把它们都剪成3秒的固定长度,但是用手做这件事是很痛苦的。我想要的时刻,当汽车经过麦克风(最响亮的一点),然后剪辑1.5秒之前和之后的那一刻。

我想怎么做的一种方法是:

  1. 获取文件
  2. 的振幅列表--一个3秒长的窗口可以遍历振幅列表并在列表开始时开始,还初始化变量maxAmp和maxIndex,以跟踪记录的最大平均振幅,以及该段开始的指数
  3. 平均值都在窗口中,检查是否大于迄今记录的最大平均值,如果是,将最大平均记录的
  4. 移动窗口向前移动1秒
  5. 重复3和4,直到我们完成了从maxIndex到maxIndex+3seconds的文件
  6. 保存音频段之后,作为一个新文件
  7. 对所有文件

G 215执行此操作

这是一个非常普遍的想法,我知道这并不准确。我想,取一个窗口的平均值要比仅仅找到最大值所在的位置和1.5前后的位置要好,因为最大的振幅可能是一个片段中某个时刻的风吹进麦克风,而不是汽车驶过的声音。

这有道理吗?有办法做得更好吗?哪些工具/库可以帮助我获得振幅列表?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2020-02-13 23:10:41

您可以使用wavefilescipy.io读取WAV文件作为数组。然后,您可以将其放入一个pandas数据框架中,以计算滚动平均值。使用idxmax函数查找滚动平均值最大值的索引。然后,可以将数据裁剪到该索引周围,并将其写入新的WAV文件。

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60215051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档