music21, как создать element.lyric, даже если в этом смещении нет заметки или элемента (создать невидимый элемент?)
Как я могу иметь лирику через равные промежутки времени, даже если в партитуре нет соответствующего элемента со смещением?
Мне нужно сделать:
myElement.lyric = 'bla bla'
Могу ли я создавать невидимые элементы?
1 ответ
Ответ прост, если вы хотите, чтобы текст в "пустых" местах в music21
, Просто создайте note.Lyric
возразить и положить его в base.ElementWrapper
, Например:
s = stream.Measure()
n = note.Note()
n.lyric = "Hel-"
s.insert(0, n)
l = note.Lyric('-lo')
ew = base.ElementWrapper(l)
s.insert(1, ew)
Теперь у вас есть поток с нотой с лирикой в такте 1 (смещение 0) и голой лирикой в такте 2 (смещение 1).
Я уже могу угадать ваш следующий вопрос: "Почему он не отображается, когда я показываю его в [Finale/MuseScore/Sibelius/VexFlow/Lilypond]?"
Есть разница между тем, что может быть представлено в music21
и что можно экспортировать в любом заданном формате. Некоторые форматы, такие как Lilypond или Humdrum, имеют возможность помещать тексты песен непосредственно в партитуру. Некоторые форматы, которые это возможно, имеют поддержку music21 (я думаю, что только Lilypond). Некоторые форматы поддерживают это, но music21 нет. И еще есть форматы, которые не поддерживают это, такие как MusicXML. Однако есть некоторые обходные пути, такие как создание отдыха в определенном месте, прикрепление к нему лирики, а затем скрытие остальных. Это то, что делают большинство клиентов MusicXML. И тогда есть проблема, которая music21
может поддерживать функцию, формат может поддерживать функцию, но клиент музыкальной нотации может не поддерживать (например, music21 поддерживает ossias; MusicXML также поддерживает; Finale также поддерживает; но Finale не поддерживает импорт или экспорт MusicXML ossias.)
Лучший способ увидеть, что возможно, - создать то, что вы хотите, в своем программном обеспечении для записи, экспортировать его в musicxml. Импортируйте musicxml в music21 и посмотрите, какие типы объектов music21 представляют эти слова. Затем экспортируйте обратно из music21 в musicxml и повторно импортируйте в свое программное обеспечение для записи.
Извините, это не простой ответ. Это одна из самых сложных вещей.
В качестве обходного пути - многие люди предпочитают помещать объект TextExpression() в это место и надеются, что он может выглядеть так, как текст.