2016-12-11 57 views
2

를 사용하여 미디 파일에서 어쿠스틱베이스 드럼을 추출 여기에서 미디 파일을 다운로드 이 노래.music21 라이브러리

from music21 import * 
import os 
fp = os.path.join(common.getSourceFilePath(), 'midi', 'testPrimitive', 'Taylor Swift - You Belong With Me.mid') 
mf = midi.MidiFile() 
mf.open(fp) 
mf.read() 
mf.close() 
s = midi.translate.midiFileToStream(mf) 
partStream = s.parts.stream() 
for p in partStream: 
    print p.partName 

그런 다음 출력이 ... 나는 타악기 어느 쪽이 모르는

Saxophone 
None 
Electric Bass 
None 
None 
Electric Guitar 
None 
None 
None 
Banjo 
Banjo 
Banjo 
StringInstrument 
Piano 

후 :

내가 아래에있는 내 코드, 미디 파일을 구문 분석 music21 라이브러리를 사용 어떤 부분이 타악기인지 알고 있는데, 그 부분에서 어쿠스틱베이스 드럼을 추출하여 어쿠스틱베이스 drum.mid 파일로 출력하고 싶습니다. 아무도 그것을 어떻게 할 수 말해 줄래? 감사합니다

mf.tracks이 [14], 그때 그 피치 번호 부분을 추출 충격 필요한 수단 그렇다면 출력이 14 인

from music21 import * 
import os 
fp = os.path.join(common.getSourceFilePath(), 'midi', 'testPrimitive', 'Taylor Swift - You Belong With Me.mid') 
mf = midi.MidiFile() 
mf.open(fp) 
mf.read() 
mf.close() 
for n in range(len(mf.tracks)): 
    for c in mf.tracks[n].getChannels(): 
     if c == 10: 
      print n 

[편집] I 코드 밑도는 ,

35 36 그럼 I 코드 아래 사용된다

for n in range(len(mf.tracks[14].events)): 
    if mf.tracks[14].events[n].pitch == 35 or mf.tracks[14].events[n].pitch == 36: 
     print n 

그럼 많은 출력이있다. 나는 다음에 무엇을해야하는지 생각 중입니다.

답변

1

General MIDI에서 모든 타악기 이벤트는 채널 9에서 전송됩니다. 채널 9의 이벤트로 트랙을 검색해야합니다. 스트림 객체는 아마도 도움이되지 않습니다.

해당 파일에서 "Drums"라는 트랙입니다. (왜 음악 21이 이름을 고르지 않았는지 모르겠다.)

음향베이스 이벤트를 추출하려면 음표 번호 35를 사용하지 않는 모든 음표를 삭제하십시오. 음표 번호 36의 다른베이스 드럼을 실제로 사용합니다.)

+0

music21의 타악기 지원은이 시점에서 매우 부족합니다. 저는 개발자이자 전 타악기 연주자라고 말하면서 두려워요. –