2016-12-08 38 views
1

music21을 사용하여 기존 팝송을 위해 만들어진 많은 MIDI 파일을 처리 중입니다.music21 : 멜로디 트랙 골라 내기

채널 10은 퍼커션 용으로 예약되어 있지만 멜로디 트랙은 모두 다른 채널을 사용하므로 기본 멜로디 (보컬) 트랙을 골라 낼 수있는 효율적인 방법이 있는지 궁금합니다.

나는 하모닉스 (코드)를 중첩하는 대신 단일 음표로 구성된 트랙과 노래 전체에서 연주하는 트랙을 선택하는 것이 하나의 방법이라고 추측하고 있지만 다른 효율적인 방법이 있습니까?

답변

1

특정 파일의 인코딩 방식에 따라 각 부품의 이름을 기준으로 필터링을 시도 할 수 있습니다. 그러면 다음과 같이 보입니다.

import music21 
from music21 import * 

piece = converter.parse("full_path_to_piece.midi") 
for part in piece.parts: 
    print(part[0].bestName()) # replace this print statement with a relevant if statement 
+0

고맙습니다. bestName은 사용자가 설정 한 트랙 이름을 참조합니까, 아니면 자동으로 사운드 패치의 이름과 일치합니까? 또한, bestName이 None을 반환 할 때 어떤 경우입니까? – ytrewq

+0

bestName()에 관한 문서에 따르면, "실행 가능한 이름을 찾고, 먼저 악기를 본 다음, 부분을 그리고 약자를 사용합니다."라고합니다. 그 중 어떤 것도 원본 파일에 이름이 주어지지 않으면 None을 반환한다고 가정합니다. 설명서는 다음과 같습니다. http://web.mit.edu/music21/doc/moduleReference/moduleInstrument.html?highlight=bestname#music21.instrument.Instrument.bestName – Alex

0

SMF 형식은 이벤트가 트랙으로 구성되는 방식에 대한 제한이 없습니다. 채널 당 하나의 트랙을 갖는 것이 일반적이지만 하나의 트랙에 여러 채널을 포함하거나 동일한 채널에 대한 이벤트가있는 여러 트랙을 가질 수도 있습니다.

트랙 구성은 전적으로 사람이 결정합니다. 임의의 두뇌가 어떻게 작동하는지 정확하게 판단 할 수있는 코드를 작성할 수는 없습니다.

멜로디가 첫 번째 트랙에 있거나 특정 구조를 가지고있을 가능성이 있지만, 이러한 규칙이 파일에 실제로 사용되는지 알아야합니다. 취급.