python - Music21,窗口分析获取时间?
问题描述
我尝试了music21的WindowAnalysis。但是我想知道如何将窗口的索引转换为歌曲的时间(以秒为单位)。例如,我怎么知道第一个窗口在什么时候播放?例如进入歌曲 2.5 秒
s = music21.converter.parse('../data/medley/15046.midi')
p = music21.analysis.discrete.KrumhanslSchmuckler()
wa = music21.analysis.windowed.WindowedAnalysis(s, p)
windo_count=4
a, b = wa.analyze(windo_count)
song = pm.PrettyMIDI('../data/medley/15046.midi')
cello_program = pm.instrument_name_to_program('Cello')
cello = pm.Instrument(program=cello_program)
prev=a[0]
change_loc=[]
#some code that detects change and should append now the time in seconds
for i,beat in enumerate(a[1:]):
#i is the tuple (key,major/minor/etc,time)
if beat[0]!=prev[0] and beat[1]!=prev[1]:
#key changed, at index
change_loc.append(my_question)
解决方案
使用 pretty_midi 可以获得从节拍到时间的映射,例如
import pretty_midi as pm
song = pm.PrettyMIDI('data/medley/15046.midi')
print(song.get_beats())
编辑:可以在此处找到更多信息:如何在 midi 中将条数转换为时间?(音乐)
推荐阅读
- c++ - 如何正确使用全局运算符new、new[]、delete和delete[]
- ios - Swift 4:将一组自定义对象(带有嵌套的自定义对象)保存并检索到 UserDefaults
- google-app-engine - 如何使用 App.yaml 将文件正确上传到 Google App Engine
- css - CSS shape-outside 与书写模式 vertical-rl 不兼容
- python-3.x - 无效的选择器:不允许使用 Selenium 的复合类名称错误
- python - NLTK 使 Bigrams 和 Trigrams 同时做两个错误
- c# - 由于我的代码错误,visual c# 无法加载表单!登录DB.Designer.cs
- python - 将数组“压缩”为 {item:occurrences} 形式的字典
- c - For循环似乎变得无限
- progressive-web-apps - PWA 启动浏览器是否及时更新