我正在尝试使用numpy,struct等各种模块在python中处理音频文件。但我真的很难在文件中检测静音,因为在哪里存在沉默。我遇到的方法之一是在我的音频信号上滑动固定时间间隔的窗口并记录平方元素的总和。我是python的新手,几乎没有意识到它因此无法实现这个方法。
答案 0 :(得分:0)
如果您对外部图书馆持开放态度,其中一种快速方法是使用pydub
pydub
有一个名为silence的模块,其中包含可能对您的情况有用的方法detect_silence
和detect_nonsilent
。
然而,唯一的鱼子酱是沉默需要至少半秒钟。
下面是我尝试使用音频文件的示例实现。但是,由于我的情况下的沉默时间不到半秒,因此只有少数静音范围是正确的。
您可以尝试这样做,通过调整min_silence_len
和silence_thresh
<强>程序强>
from pydub import AudioSegment,silence
myaudio = intro = AudioSegment.from_wav("a-z-vowels.wav")
silence = silence.detect_silence(myaudio, min_silence_len=1000, silence_thresh=-16)
silence = [((start/1000),(stop/1000)) for start,stop in silence] #convert to sec
print silence
结果
win32上的Python 2.7.9(默认,2014年12月10日,12:24:55)[MSC v.1500 32位(英特尔)] 输入“copyright”,“credits”或“license()”以获取更多信息。
================================ RESTART ============== ==================
[(0,1),(1,14),(14,20),(19,26),(26,27),(28,30),(29,32),(32,34) ),(33,37),(37,41),(42,46),(46,47),(48,52)]
答案 1 :(得分:0)
为获得更好的结果,请使用dBFS
from pydub import AudioSegment,silence
myaudio = intro = AudioSegment.from_mp3("RelativityOverview.mp3")
dBFS=myaudio.dBFS
silence = silence.detect_silence(myaudio, min_silence_len=1000, silence_thresh=dBFS-16)
silence = [((start/1000),(stop/1000)) for start,stop in silence] #in sec
print(silence)