当前位置: 首页 > 知识库问答 >
问题:

基于时间戳计算不同时间间隔的mfcc

施茂
2023-03-14

我偶然发现了这个不错的教程https://github.com/manashmndl/DeadSimpleSpeechRecognizer其中数据是基于由文件夹分隔的样本进行训练的,所有mfcc都是一次计算的。

我正试图以不同的方式实现类似的目标。

基于此:https://librosa.github.io/librosa/generated/librosa.feature.mfcc.html

librosa可以为任何音频计算mfcc。详情如下:

import librosa  
y, sr = librosa.load('test.wav')
mymfcc= librosa.feature.mfcc(y=y, sr =sr)  

但我想根据文件中的时间戳逐部分计算音频的mfcc。

该文件具有如下标签和时间戳:

0.0 2.0 sound1
2.0 4.0 sound2
4.0 7.0 silence
7.0 11.0 sound1

我想计算每个范围的mfcc,我希望得到一个带标签的列车数据,看起来像mfcc及其相应的标签。mfcc_1、sound1 mfcc_2、sound2
等等。

我如何做到这一点?

我查看了基于注释文件的音频片段生成mfcc,问题类似,但我发现问题和答案都有点难以理解(因为我对该领域非常陌生)。

TIA

更新:我的代码:

import librosa
from subprocess import call

def ListDir():
    call(["ls", "-l"])

def main():
    ListDir()
    readfile_return_segmentsmfcc()

my_segments =[]
# reading annotated file
def         readfile_return_segmentsmfcc():

    pat ='000.mp3'
    y, sr = librosa.load(pat)

    print "\n sample rate :"
    print sr

    with open("000.txt", "rb") as f:
        for line in f.readlines():
            start_time, end_time, label = line.split('\t')
            start_time = float(start_time)
            end_time = float(end_time)
            label = label.strip()
            my_segments.append((start_time, end_time, label))

            start_index = librosa.time_to_samples(start_time)
            end_index = librosa.time_to_samples(end_time)

            required_slice = y[start_index:end_index]
            required_mfcc = librosa.feature.mfcc(y=required_slice, sr=sr)
            print "Mfcc size is {} ".format(mfcc.shape)


            print start,end,label


    return my_segments


main()

共有1个答案

汪建德
2023-03-14

>

转换到样本索引使用librosa.time_to_samples
start_index=librosa.time_to_samples(start)
end_index=librosa.time_to_samples(end)

使用python[:]运算符从数据中获取相关切片:
slice=y[int(开始索引):int(结束索引)]

切片上计算mfcc等。

 类似资料:
  • 问题内容: 我有一列称为“ s_timestamp”。 如何返回时间戳中具有当天的所有记录? 例如, 我想要以下输出: 让我知道是否不清楚。 问题答案: 只是使用。例如 日期() CURDATE()

  • 问题内容: 我需要计算两个日期之间经过的时间。 这里要注意的是,我需要像YouTube一样用视频评论时间戳来显示它。也就是说,仅以最大的方式显示它。 例如, 如果时间是50秒前,应该说是50秒前。 如果时间超过一分钟,则应说一分钟前/十分钟前,等等。 如果时差是1小时30分钟,则应显示:一个小时前。 如果时间是一个半星期而不是一个星期前应该说的话。 如果时间超过一个月,则应说一个月前/两个月前,等

  • 本文向大家介绍详解C# TimeSpan 计算时间差(时间间隔),包括了详解C# TimeSpan 计算时间差(时间间隔)的使用技巧和注意事项,需要的朋友参考一下 TimeSpan 结构  表示一个时间间隔。 命名空间:System 程序集:mscorlib(在 mscorlib.dll 中) 说明: 1.DateTime值类型代表了一个从公元0001年1月1日0点0分0秒到公元9999年12月3

  • 问题内容: 我在一个MySQL数据库表上工作,该表的列包含我对其他主机执行ping操作时的时间戳记(例如2014-09-16 09:08:05)。我的问题是如何在几分钟内计算出针对特定主机的第一次ping和最后一次ping之间的差异?另外,如何为上述差异的开始和结束指定不同的时间戳(而不是第一次和最后一次ping)。这是表格的示例: 我希望我已经对自己的解释足够清楚。 问题答案: 您可以使用本机的

  • 我正在用chartjs绘制一个图形,其中x轴表示时间,y轴表示相应的数据。 现在我得到了今天、上周、上月和去年的数据。 }; 当我绘制图形时,每个点之间的距离是相同的。但这是不正确的,因为时间间隔不相同。 “去年”和“上月”之间的距离应大于“上周”和“上个月”之间的间隔。 任何人一个想法如何我可以实现这与chartjs,当我看留档我没有看到任何选项。