我正在使用Python来隔离音乐中的元素。训练模型,我将音频分成帧,每个帧都有一个标签 - 1或0.不幸的是,由于舍入错误,我的标签总是短或1或2帧。
将我的音频转换为帧,我的值为(13,3709)
s = []
for y in audio:
mfcc = librosa.feature.mfcc(y= y, sr = 16000, n_mfcc=13, n_fft=2048, hop_length = 1024)
s.append(mfcc)
将我的文本文件(对于我正在使用的mp3)从毫秒转换为帧数,我得到一个3708的向量值。
output = []
for block in textCorpus:
block_start = int(float(block[0]) * 16000 / 1024) # Converted to frame number
block_end = int(float(block[1]) * 16000 / 1024) # Converted to frame number
singing = block[2]
block_range = np.arange(block_start, block_end, 1) # Step size is 1 (per frame number)
# extraneous code
我尝试在Decimal
和math.floor
变量中使用math.ceil
,block_start
和block_stop
,但我似乎无法匹配我的音频帧长。
答案 0 :(得分:1)
使用标准库中的Fraction包: https://docs.python.org/2/library/fractions.html
对于精确有理数运算很有用。
答案 1 :(得分:0)
如果您按顺序获取块,也许您可以放弃乘法和除法,只需通过简单的添加来解决它们:
def labelToFrames(textCorpus):
output = []
offset = 0
increment = 0.064 # or 1024/16000
for block in textCorpus:
block_start = block[0]
block_end = block[1]
singing = block[2]
while offset < block_end:
ms_start = '{0:.3f}'.format(offset)
offset = min(block_end,offset + increment)
ms_end = '{0:.3f}'.format(offset)
add_to_output = [ms_start, ms_end, singing]
output.append(add_to_output)
return output