0

我遇到了这个不错的教程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
等等。

我如何实现这一目标?

我查看了generate mfcc's for audio segments based on annotated file ,问题很相似,但我发现问题和答案都很难理解(因为我对这个领域很陌生)。

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()
4

1 回答 1

2
  • 阅读开始和结束时间:
    start=2.0 end=4.0

  • 使用以下方法转换为样本索引librosa.time_to_samples
    start_index = librosa.time_to_samples(start)
    end_index = librosa.time_to_samples(end)

  • 使用 python[:]运算符从数据中获取相关切片:
    slice = y[int(start_index):int(end_index)]

  • 计算 mfcc onslice等。

于 2018-01-31T06:17:50.557 回答