根据时间戳为不同的时间间隔计算 mfcc
compute mfcc for varying time intervals based on time stamps
我遇到了这个不错的教程 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
等等。
如何实现?
我查看了 ,问题很相似,但我发现问题和答案都有些难以理解(因为我是这个领域的新手)。
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.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)]
在 slice
上计算 mfcc,等等
我遇到了这个不错的教程 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
等等。
如何实现?
我查看了
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.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)]
在
slice
上计算 mfcc,等等