from music21 import *
https://web.mit.edu/music21/doc/index.html
#악보처리용 프로그램 추가 (한번만 하면ok)
#https://musescore.org 에서 다움로드 및 install
us=environment.UserSettings()
us["musescoreDirectPNGPath"]="C:/Program Files/MuseScore_3/bin/MuseScore3.exe"
us["musicxmlPath"]="C:/Program Files/MuseScore_3/bin/MuseScore3.exe"
#악보를 로드하고 화면에 출력 및 재생하기
s = corpus.parse('bach/bwv65.2.xml') #악보로드
s.analyze('key') #악보의 키 분석
s.show() #악보 출력 


s.show('midi') #음악 재생 
s.write('midi', fp='bwv65.mid') #'bwv65.mid'으로 저장
#음표를 입력 및 작곡에 유용한 기본 명령어 사용방법
note1 = note.Note("C4") #4옥타브 도 4분음
note2 = note.Note("F#") #4옥타브 파반올림 4분음
note3 = note.Note("B3") #3옥타브 시 4분음
note4 = note.Note("C") #5옥타브 도음 4분음
note4.duration.type='eighth' #whole,half,quarter,eighth,sixteenth
note4.pitch.octave=5 #1,2,3,4,5,6,7 4:default
note5 = note.Note("D") #4옥타브 레음 (half+quarter)음
note5.duration=duration.Duration(3) #half+quarter, 3박자 quarter 3개
note5.pitch.octave=5 #1,2,3,4,5,6,7 4:default
note6 = note.Rest() #쉼표
note6.duration=duration.Duration(1) #1박자
stream1 = stream.Stream()
stream1.append(note1)
stream1.append(note2)
stream1.append(note3)
stream1.append(note4)
stream1.append(note5)
stream1.append(note6)
stream1.show('text')
#{0.0} <music21.note.Note C>
#1.0} <music21.note.Note F#>
#{2.0} <music21.note.Note B>
#{3.0} <music21.note.Note C>
#{3.5} <music21.note.Note D>
#{6.5} <music21.note.Rest rest>
stream1.show() #display score(악보)
stream1.show('midi') #play music
for i,thisNote in enumerate(stream1):
if thisNote.name == 'rest' :print(i,'Rest')
else :print(i,thisNote.step,thisNote.nameWithOctave)
#0 C C4
#1 F F#
#2 B B3
#3 C C5
#4 D D5
#5 Rest
stream1.show() #display score(악보) 
stream1.show('midi') #play music 
stream1.show('midi', fp='test0.mid') #save midi format
print(stream1.index(note3)) #2
#2
stream1.pop(stream1.index(note3))
for i,thisNote in enumerate(stream1):
if thisNote.name == 'rest' :print(i,'Rest')
else :print(i,thisNote.step,thisNote.nameWithOctave)
#0 C C4
#1 F F#
#2 C C5
#3 D D5
#4 Rest
stream1.show() #display score(악보) 
stream1.show('midi') #play music 
stream1.show('midi', fp='test1.mid') #save
stream1.clear()