【发布时间】:2019-11-13 16:03:22
【问题描述】:
首先,此功能是消除音频的静音。 这是官方的描述:
https://librosa.github.io/librosa/generated/librosa.effects.split.html
librosa.effects.split(y, top_db=10, *kargs)
将音频信号分成非静音间隔。
top_db:number > 0 低于参考的阈值(以分贝为单位)视为静音
return: 间隔:np.ndarray, shape=(m, 2) 间隔[i] == (start_i, end_i) 是非静音的开始和结束时间(以样本为单位)区间 i。
所以这很简单,对于任何低于 10dB 的声音,将其视为静音并从音频中删除。它会返回给我一个间隔列表,这些间隔是音频中的非静音片段。
所以我做了一个非常简单的例子,结果让我很困惑: 我在这里加载的音频是 3 秒的人类说话,非常正常的说话。
y, sr = librosa.load(file_list[0]) #load the data
print(y.shape) -> (87495,)
intervals = librosa.effects.split(y, top_db=100)
intervals -> array([[0, 87495]])
#if i change 100 to 10
intervals = librosa.effects.split(y, top_db=10)
intervals -> array([[19456, 23040],
[27136, 31232],
[55296, 58880],
[64512, 67072]])
这怎么可能……
我告诉 librosa,好的,对于任何低于 100dB 的声音,将其视为静音。 在此设置下,整个音频应被视为静音,并且根据文档,它应该给我 array[[0,0]] 一些东西...因为删除静音后,什么都没有了...
但似乎 librosa 将静音部分返回给我,而不是非静音部分。
【问题讨论】: