【发布时间】:2019-07-14 17:05:58
【问题描述】:
我在跳转到找到 here 的 melspec 功能集的特定帧时遇到问题。从特征集中获取特征的目的是分析每秒节拍 (BPS) 的差异,以便我可以匹配两个轨道的 BPS,以便在两个轨道之间混合或扭曲轨道的时间以同步两首乐曲在一起。该功能集确实指定了following:
Pre-extracted in the "feature" directory are space-delimited floating-point ASCII matrices: beat_synchronus: one beat-synchronus vector per line non-beat-synchronus: 512-sample hop frames @ 22050Hz sample rate, one vector per line one vector per line:"
我不太清楚如何解释 - melspec 节拍或非节拍同步,以及在分隔帧方面如何工作?
感谢this 的回答,我已经了解了帧持续时间,但我不知道如何将从帧持续时间中获得的知识应用于导航到特定时间码或帧的任务。我得到的最接近的是计算出偏移量除以帧,以计算出需要跳过多少帧才能达到偏移量(例如,进入轨道的 1 秒给出 2583 帧)。但是,该文件没有划分为行,据我所知,它只是一个连续的条目列表。这导致了给定帧的大小是多少的问题(如果这是正确的术语)是否需要跳过第二个条目到 2383 个条目才能找到正确的条目每个帧都有特定数量的条目,我需要跳过 2583 个大小为 x 的帧?大小 x (512?) 是多少?
我已经能够为 melspec 打开文件,但对于 melspec 文件,条目之间没有分隔符。相反,它是一个连续的条目列表。
到目前为止,我的代码如下计算一帧的持续时间,从而计算出偏移轨道中要跳过的帧数。但是,这并不表示给定帧的大小以及如何从 melspec 文件中访问它。
spectrogram 是给定功能集的文件路径。 offset 是从轨道开始偏移的时间(以秒为单位)。
def skipToFrame(spectrogram, offset):
SAMPLE_RATE =22050
HOP_LENGTH = 512
#work out the duration of each frame.
FRAME_TIME = HOP_LENGTH/SAMPLE_RATE
# work out how many frames are in the offset period (e.g 1 second).
SHIFT_FRAMES = offset/FRAME_TIME
# readlines of file so that offset is applied.
with open(spectrogram) as feature_set:
indices = int(SHIFT_FRAMES)
for line in feature_set:
print(line)
feature_set.close()
这给出了一个包含 10 行结果的列表,这些结果似乎不是自然地由行分隔的。
【问题讨论】: