python - 根据时间戳计算不同时间间隔的mfcc

标签 python audio mfcc librosa

我碰到了这个不错的教程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,声音1
mfcc_2,声音2
等等。

我该如何实现?

我看着generate mfcc's for audio segments based on annotated file,问题很相似,但是我发现问题和答案都很难遵循(因为我对这个 Realm 很陌生)。

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

最佳答案

  • 读取开始时间和结束时间:start=2.0end=4.0
  • 使用 librosa.time_to_samples 转换为样本索引:start_index = librosa.time_to_samples(start)end_index = librosa.time_to_samples(end)
  • 使用python [:]运算符从数据中获取相关 slice :slice = y[int(start_index):int(end_index)]
  • slice等上计算mfcc。
  • 关于python - 根据时间戳计算不同时间间隔的mfcc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48513824/

    相关文章:

    java - 输出的 wav 文件大小比原始文件大几倍

    flash - 如何使用 Flash 让我的一个类为多个平台加载声音文件?

    javascript - 在基于网络的语音识别中使用 mfcc 的后续步骤

    audio - 我想知道 'd-vector'进行说话人区分

    python - 如何连接两个单独的字符串

    python - 持续计算 pandas 数据框中大于阈值的值数量

    python - pandas df.apply 意外更改数据框

    python - 从 bash 执行 python 脚本后没有得到提示

    javascript - html5 音频 currentTime 不起作用

    signal-processing - 如何使用 Octave 获得 mfcc 功能