피아노의 MIDI 파일에서 모든 음표의 시작 및 정지 시간을 얻으려고합니다. 필자의 이해에서 델타 시간이있는 note_on 및 note_off 이벤트가 있으며 시작 및 중지 시간을 얻는 데 사용할 수 있습니다. 그러나, 내가 헷갈 렸던 것은 시간 변수와 관련이있다. 나는 다음과 같은 출력을 얻을 같은MIDI 메시지 혼동 [파이썬]
for msg in mid:
print(msg.dict())
로 난 그냥 간단한 프로그램이있을 때 : 나의 이해에서
{'note': 60, 'velocity': 61, 'type': 'note_on', 'channel': 0, 'time': 0.0016891895833333333}
{'note': 64, 'velocity': 57, 'type': 'note_on', 'channel': 0, 'time': 0.20270275}
{'note': 67, 'velocity': 56, 'type': 'note_on', 'channel': 0, 'time': 0.20270275}
{'note': 67, 'velocity': 0, 'type': 'note_on', 'channel': 0, 'time': 0.20270275}
{'note': 72, 'velocity': 60, 'type': 'note_on', 'channel': 0, 'time': 0}
{'type': 'set_tempo', 'tempo': 794702, 'time': 0.20101356041666665}
을,이 노트가 모든보다 1 틱 있습니다 델타 시간을 갖고 있음을 의미 나에게 완전히 틀린 것처럼 보입니다. 그러나, 내가 좋아하는 것은 이러한 방식으로 note_on, note_off 및 set_tempo 이벤트가 발생하는 순서대로 수행된다는 것입니다. 그들은 모두 100 + 틱 가지고
<meta message set_tempo tempo=794702 time=480>
<meta message set_tempo tempo=810811 time=120>
<meta message set_tempo tempo=800000 time=960>
<meta message set_tempo tempo=810811 time=360>
...
=== Track 1
<meta message midi_port port=0 time=0>
<meta message track_name name=u'Piano right' time=0>
<message program_change channel=0 program=0 time=0>
<message control_change channel=0 control=7 value=100 time=0>
<message control_change channel=0 control=10 value=64 time=0>
<message control_change channel=0 control=91 value=127 time=0>
<meta message text text=u'bdca426d104a26ac9dcb070447587523' time=0>
<message note_on channel=0 note=67 velocity=56 time=241>
<message note_on channel=0 note=67 velocity=0 time=120>
메시지에 시간 요소가 나에게 더 의미가 있지만, 순서입니다 : 내가 대신
mid.print_tracks()
작업을 수행 할 때 I는 다음과 같은 출력을 얻을 트랙을 선택하면 모든 템포 변경 사항이 즉시 인쇄 된 다음 오른손의 모든 노트 이벤트가 출력되고 왼손 등의 모든 노트 이벤트가 인쇄됩니다. 시간 속성을 가진 MIDI 이벤트의 목록을 print_tracks()에서 얻을 수있는 100 개 이상의 숫자로 얻을 수있는 두 가지 장점을 모두 얻을 수 있습니까?
이러한 개체를 생성 한 라이브러리는 무엇입니까? –
지정하지 않으셔서 죄송합니다. 제가 사용하는 라이브러리는 Mido입니다 https://mido.readthedocs.io/en/latest/ –