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() в это место и надеются, что он может выглядеть так, как текст.

Другие вопросы по тегам