Python 使用librosa.effects.trim命令执行静音移除时遇到困难

Python 使用librosa.effects.trim命令执行静音移除时遇到困难,python,audio,librosa,Python,Audio,Librosa,我正在尝试做一个项目,在项目的一部分,我让用户说出一个被记录下来的单词。然后,这个单词周围的沉默被切断,有一个按钮可以在没有沉默的情况下播放他们的单词。我正在使用librosa的librosa.effects.trim命令来实现这一点 例如: def record_audio(): global myrecording global yt playsound(beep1) myrecording = sd.rec(int(seconds * fs), sample

我正在尝试做一个项目,在项目的一部分,我让用户说出一个被记录下来的单词。然后,这个单词周围的沉默被切断,有一个按钮可以在没有沉默的情况下播放他们的单词。我正在使用librosa的
librosa.effects.trim
命令来实现这一点

例如:

def record_audio():
    global myrecording
    global yt
    playsound(beep1)
    myrecording = sd.rec(int(seconds * fs), samplerate=fs, channels=1)
    sd.wait() 
    playsound(beep2)

    #trimming the audio
    yt, index = librosa.effects.trim(myrecording, top_db=60)

但是,当我回放音频时,我可以看出它没有对录音进行微调。变量浏览器显示
myrecording
yt
的长度相同。我可以听到它,当我播放什么是应该是修剪音频剪辑回来。发生这种情况时,我也没有收到任何错误消息。有没有办法让librosa实际剪辑音频?我尝试过调整
top\u db
,但没有解决问题。除此之外,我不太确定我可能做错了什么。

要得到真正的答案,你必须发布一份样本记录,以便我们能够检查到底发生了什么

取而代之的是,我想提到《librosa》的一位主要作者为一个非常类似的问题提供了建议

本质上:您希望降低
top\u db
阈值,并减少
frame\u length
hop\u length
。例如:

yt, index = librosa.effects.trim(myrecording, top_db=50, frame_length=256, hop_length=64)
减少
hop_长度
可以有效提高修剪的分辨率。降低
top_db
会降低功能的灵敏度,即低电平噪声也被视为静音。使用电脑麦克风,你可能会有相当多的低水平背景噪音

如果这一切都无济于事,你可能想考虑使用SOX或它的Python包装器。它还具有修剪功能

更新查看音频波形。它在开始的某个地方有尖峰吗?也许有一些爆裂声。这将阻止librosa正确修剪。也许手动丢弃第一秒(
=fs
示例),然后修剪可以解决问题:

librosa.effects.trim(myrecording[fs:], top_db=50, frame_length=256, hop_length=64)

这个解决方案更接近我所寻找的,但仍然不能完全解决它。第一个没有修剪。第二种方法的效果更好,但这主要是因为我知道了第二种方法是什么,然后知道什么时候说话,而用户不知道。我会试试pysox,看看它是如何工作的。现在我想起来了,可能是我电脑上的风扇声音太大了,这可能会干扰修剪