此列表中的数字之一是否位于两个给定整数之间?

我有一个包含小节线刻度线和可以与小节线重叠的 MIDI 音符的列表。所以我列出了“barlineticks”列表:


barlinepos = [0, 768.0, 1536.0, 2304.0, 3072.0, 3840.0, 4608.0, 5376.0, 6144.0, 6912.0, 0, 576.0, 1152.0, 1728.0, 2304.0, 2880.0, 3456.0, 4032.0, 4608.0, 5184.0, 5760.0, 6336.0, 6912.0, 7488.0]

和一个 MidiFile:


{'type': 'time_signature', 'numerator': 4, 'denominator': 4, 'time': 0, 'duration': 768, 'ID': 0}

{'type': 'set_tempo', 'tempo': 500000, 'time': 0, 'ID': 1}

{'type': 'track_name', 'name': 'Tempo Track', 'time': 0, 'ID': 2}

{'type': 'track_name', 'name': 'New Instrument', 'time': 0, 'ID': 3}

{'type': 'note_on', 'time': 0, 'channel': 0, 'note': 48, 'velocity': 100, 'ID': 4, 'duration': 956}

{'type': 'time_signature', 'numerator': 3, 'denominator': 4, 'time': 768, 'duration': 6911, 'ID': 5}

{'type': 'note_on', 'time': 768, 'channel': 0, 'note': 46, 'velocity': 100, 'ID': 6, 'duration': 575}

{'type': 'note_off', 'time': 956, 'channel': 0, 'note': 48, 'velocity': 0, 'ID': 7}

{'type': 'note_off', 'time': 1343, 'channel': 0, 'note': 46, 'velocity': 0, 'ID': 8}

{'type': 'end_of_track', 'time': 7679, 'ID': 9}

我想检查 MIDI 音符是否与小节线重叠。每条 note_on 消息都有一个“时间”和“持续时间”值。我必须检查其中一个小节线(列表中)是否在注释(“时间”和“持续时间”)的范围内。我试过:


if barlinepos in range(0, 956):

    print(True)

当然这不起作用,因为 barlinepos 是一个列表。如何检查列表中的某个值是否结果为 True?


Helenr
浏览 84回答 1
1回答

守着一只汪

简单迭代即可解决需求:for i in midifile:&nbsp; &nbsp; start, end = i["time"], i["time"]+i["duration"]&nbsp; &nbsp; for j in barlinepos:&nbsp; &nbsp; &nbsp; &nbsp; if j >= start and j<= end:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; print(True)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break&nbsp; &nbsp; print(False)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python