EMC*_*EMC 3 python audio librosa
我正在尝试做一个项目,在项目的一部分中,我让用户说出一个被记录下来的单词。然后,这个词周围的静音就会被删除,并且有一个按钮可以播放他们的单词,而不会出现静音。我正在使用 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)
Run Code Online (Sandbox Code Playgroud)
但是,当我播放音频时,我可以看出它没有修剪录音。变量浏览器显示myrecording
和 的yt
长度相同。当我播放应该是修剪过的音频剪辑时,我也可以听到它。发生这种情况时我也没有收到任何错误消息。有什么方法可以让 librosa 真正剪辑音频吗?我尝试过调整top_db
,但没有解决问题。除此之外,我不太确定我可能做错了什么。
要获得真正的答案,您必须发布样本录音,以便我们可以检查到底发生了什么。
相反,我想参考这个 GitHub 问题,其中 librosa 的主要作者之一针对非常相似的问题提供了建议。
本质上:你想要降低top_db
门槛并减少frame_length
和hop_length
。例如:
yt, index = librosa.effects.trim(myrecording, top_db=50, frame_length=256, hop_length=64)
Run Code Online (Sandbox Code Playgroud)
减少hop_length
有效地提高了修剪的分辨率。减小top_db
使函数不那么敏感,即低水平的噪声也被视为静音。使用计算机麦克风时,您可能会听到相当多的低水平背景噪音。
如果这一切都没有帮助,您可能需要考虑使用 SOX 或其 Python 包装器pysox。它还具有修剪功能。
更新查看音频的波形。它在一开始的某个地方有一个尖峰吗?也许有一些破裂的声音。这将使 librosa 无法正确修剪。也许手动丢弃第一秒(=fs
样本)然后修剪可以解决问题:
librosa.effects.trim(myrecording[fs:], top_db=50, frame_length=256, hop_length=64)
Run Code Online (Sandbox Code Playgroud)