2016-04-15 6 views
1

Im пытается получить все заметки с их продолжительностью (мерами).Music21 Получение всех заметок с длительностью

from music21 import * 

allBach = corpus.search('bach') 

x = allBach[0] 
p = x.parse() 

partStream = p.parts.stream() 

for n in p.pitches: 
    print "Pitch: " + str(n) 

print "*************" 

for n in p.notes: 
    print "Note: " + str(n) 
#print "Duration " + str(x.parse().duration) 

Приведенный выше код производит следующий вывод

Pitch: E5 
Pitch: G5 
Pitch: A5 
Pitch: D5 
Pitch: F#5 
Pitch: A5 
Pitch: D5 
Pitch: F#5 
Pitch: A5 
Pitch: C6 
Pitch: G4 
Pitch: B4 
Pitch: D5 
************* 

Я знаю, что шаг является только название ноты с его октаву, но Im пытается получить значения ноты с его длительности (мер).

Также, если вы можете мне помочь, не могли бы вы также объяснить, почему p.notes ничего не возвращает. Спасибо.

ответ

2

Вот версия скрипта, который делает то, что вы хотите:

from music21 import * 

allBach = corpus.search('bach') 

x = allBach[0] 
p = x.parse() 

partStream = p.parts.stream() 

for n in p.flat.notes: 
    print "Note: %s%d %0.1f" % (n.pitch.name, n.pitch.octave, n.duration.quarterLength) 

Главное вы попались путем было поведение .notes собственности на Stream объектов. music21 реализует иерархическую структуру контейнеров, включая: Scores, Parts и Measures. Большинство итерирующих свойств только для чтения (включая .notes) относятся к этой иерархии на , а не, произвольно спускающейся с нее. music21 затем предоставляет свойство только для чтения .flat до flatten, что иерархия только объекты листового типа (примечания и остатки).

Объект, который вы получили от вашей призыв к p.parts.stream() был Score объектом и поэтому спрашивать непосредственно за его .notes привел в пустой итератора, как бы не было Notes, которые были прямыми потомками этого Score. Но использование .flat.notes выравнивает иерархию и поэтому дает вам прямой доступ к Notes.

В решении, также заметить, что я доступ значения по .pitch.name, .pitch.octave и .duration.quarterLength напрямую, а не просто прошу для str представления Note объекта.

В вашем вопросе вы, кажется, объединяете понятия «продолжительность» и «меру». В теории музыки продолжительность - это время, в течение которого длится нота (часто измеряемая в битах), а «мера» - это (американский английский) название метрического деления, содержащего некоторое количество ударов (сделанных из заметок и/или остатков), определяемых текущая подпись времени в действии. В обозначениях меры ограничиваются персоналом по вертикальным линиям.

 Смежные вопросы

  • Нет связанных вопросов^_^