2016-12-06 38 views
2

music21을 사용하여 멀티 트랙 MIDI 파일을 각 트랙마다 음표 및 길이 배열로 변환하려고합니다. 그것은 16 개 트랙 미디 파일 test.mid 주어진 예를 들어music21 : 트랙 당 노트와 지속 시간 분석하기

, 내가 (음의 피치, 기간 (플러스 어쩌면 위치))로 구성된 튜플 (16 개) 배열을 좀하고 싶습니다

. music21에 대한

문서를 따라하기보다는 어렵고, 정말 이것에 어떤 도움을 주셔서 감사합니다 것입니다 ..

답변

1

이 music21에서이 작업을 수행하기 위해 하나 이상의 방법은, 그래서 이것은 단지 하나의 간단한 방법입니다. durational 값이 분 음표 1.0, 반 노트는 2.0 같다, 등 : 동일하도록, 부동 소수점으로 표현되어 있습니다

import music21 
from music21 import * 

piece = converter.parse("full_path_to_piece.midi") 
all_parts = [] 
for part in piece.parts: 
    part_tuples = [] 
    for event in part: 
    for y, in event.contextSites(): 
     if y[0] is part: 
     offset = y[1] 
    if getattr(event, 'isNote', None) and event.isNote: 
     part_tuples.append((event.nameWithOctave, event.quarterLength, offset)) 
    if getattr(event, 'isRest', None) and event.isRest: 
     part_tuples.append(('Rest', event.quarterLength, offset)) 
    all_parts.append(part_tuples) 

대체 솔루션 음악을 액세스하는 했는가 프레임 워크를 사용하는 것 music21을 통해 기호 표기법으로 파일을 만들고 pandas 데이터 프레임에 정보를 저장합니다. 이 작업을 수행 할 수 있습니다

pip install vis-framework 

또 다른 해결책은 대신 music21의 Humdrum을 사용하는 것입니다.

+0

정말 고마워요! "note of position"으로, 노트의 타임 스탬프를 의미하므로 배열을 조작 한 후 미디 파일을 재구성 할 수 있습니다. 그것도 이벤트 필드의 일부입니까? 또한 "휴식 감지 포함"이란 무엇을 의미합니까? – ytrewq

+0

타임 스탬프를 사용하면 조각의 처음부터 일시적인 위치를 의미합니까? 음악 21 용어 (및 VIS 용어)에서는 종종 이벤트의 "오프셋"이라고합니다. 그게 내게 알려주는 의미이고, "오프셋"속성이 있기 때문에 나의 대답을 편집 하겠지만, 예상대로 사용하기가 쉽지는 않습니다. 내가 쉼을 포함하는 것에 대해 의미했던 것은, 나의 대답에있는 코드는 현재 쉼을 건너 뛰고있다. 언제 휴식을 취했는지 알고 싶니? – Alex

+0

또한 music21에는 소프트웨어에 관한 아주 좋은 정보원 인 Google 그룹이 있습니다. 또한 music21 질문에 선호되는 위치라고 생각합니다. https://groups.google.com/forum/?hl=ko#!forum/music21list – Alex