2017-01-19 7 views
1

私は、スコアの1つのピッチを別のピッチで置き換えようとしています(最終目標はハーモニーパートを生成することです)。music21でピッチを置き換える方法スコア

>>> from music21 import * 
>>> score = converter.parse('test.mid') 
>>> type(score) 
<class 'music21.stream.Score'> 

>>> p0 = score.parts[0].pitches[0] 
>>> p0sharp = p0.transpose(1) 
>>> print p0 
A3 
>>> print p0sharp 
B-3 
>>> score.replace(p0, p0sharp) 
>>> print score.parts[0].pitches[0] 
A3 

どうすればよいですか?


アップデート:私は "test.mid"ファイルhereを投稿しました。

答えて

3

transposeのコードを確認しました。ちょうどinPlace=Trueを渡すと、それは魔法のように動作します。それが役に立てば幸い!

from music21 import * 
score = converter.parse('test.mid') 
p0 = score.parts[0].pitches[0] 
print p0 
p0.transpose(1, inPlace=True) 
print score.parts[0].pitches[0] 

、既存のMIDIファイルロードせずに完全な作業例をしたい人のために:

from music21 import stream, instrument, meter 
from music21.note import Note 
from music21.stream import Score 

# Creating the example score 
n = Note("A2", type='quarter') 
part = stream.Part() 
measure = stream.Measure() 
measure.append(n) 
part.append(measure) 
score = Score() 
score.append(part) 

p0 = score.parts[0].pitches[0] 
print p0 
p0.transpose(1, inPlace=True) 
print score.parts[0].pitches[0] 
+0

私のために働きました。ありがとう! – AndyP

+0

旧バージョンのmusic21(<2013)では、一部の機能ではデフォルトで 'inPlace = True'が設定されていたため、フラグを含まない古いコードのデモをフォローしていた可能性があります。現在のv.4リリースでは、デフォルトでinPlaceがTrueである唯一の場所は、inPlace = Falseを持つことが意味をなさない場所です。 v.5アルファでは、これらのメソッドにはinPlaceタグがありません。 –

関連する問題