Статьи

Представление партитуры

Партитура рассматривается как иерархия: каждая партитура содержит 0 или более нотоносцев; каждый нотоносец содержит такты (хотя каждый нотоносец содержит одинаковое количество тактов) и каждый такт содержит ‘тактовые объекты’. Ключи, текст и аккорды – различные типы тактовых объектов.
Чтобы добавить какой-либо тактовый объект (т.е. объект, принадлежащий такту), типа какого-нибудь текста, в партитуру, сначала Вы должны получить желаемый нотоносец (и поместить его в переменную): staff = newscore.NthStaff(1); затем Вы должны получить из этого нотоносца нужный такт (и тоже поместить его в переменную): bar = staff.NthBar(1); наконец, нужно скомандовать такту создать текст: bar.AddText(0,text,"Technique"). Вы должны выбрать имя (или индексный номер – подробнее смотри в справочнике) стиля текста, который хотите использовать (и это должен быть один из стилей текста нотоносца, потому что мы добавляем текст к нотоносцу).
Заметьте, что такты и нотоносцы нумеруются, начиная с единицы; в случае тактов, эта нумерация неизменна независимо от любых изменений номеров тактов в партитуре. В случае нотоносцев, верхний нотоносец имеет номер 1, все нотоносцы пронумерованы, даже если они скрыты. Таким образом, определённый нотоносец всегда имеет один и тот же номер на протяжении всей партитуры.
Метод тактов AddText будет описан позже, но первый из требуемых параметров – ритмическое положение в такте.
Каждая нота в такте имеет ритмическое положение, которое указывает, где она находится (в начале, через одну четверть от начала и т.д.), но это касается и других объектов такта. Оно показывает, к чему прикреплён объект, а в случае с техническим текстом (Technique), где располагается его левый край. Таким образом, чтобы поместить текст в начале такта, мы использовали значение 0. Чтобы поместить текст через одну четверть после начала такта, нужно использовать значение 256 (единицы измерения – 1024-е ноты, так что четверть равняется 256 единицам, только не подумайте, что это слишком сложно):
bar.AddText(256,text,"Technique");
Чтобы избежать использования непонятных чисел, как 256, в ваших программах, существуют предопределённые переменные, представляющие определённые длительности нот, которые можно использовать (они перечислены ниже):
bar.AddText(Quarter,text,"Technique");
или можно использовать британский эквивалент:
bar.AddText(Crotchet,text,"Technique");
Для четверти с точкой, вместо того, чтобы использовать 384, можно воспользоваться другой предопределённой переменной:
bar.AddText(DottedQuarter,text,"Technique");
или сложить две переменные:
bar.AddText(Quarter+Eighth,text,"Technique");
Это намного понятнее, чем использование чисел.

Системный нотоносец
Как Вы знаете из использования Sibelius, некоторые объекты относятся не к отдельному нотоносцу, а сразу ко всем. К ним относятся названия, темпы, ремарки и специальные тактовые чёрты; можно сказать, что они относятся ко всем нотоносцам, потому что (например) они остаются во всех партиях после их извлечения.
Все эти объекты на самом деле сохраняются скрытым нотоносцем, называемым системным. Его можно представить как невидимый нотоносец, всегда находящийся над другими. Системный нотоносец так же разделен на такты, как и другие нотоносцы. Чтоб добавить название ‘Potato’ в вашу партитуру, необходимо добавить в плагин следующий код:
sys = newscore.SystemStaff; // заносим в переменную системный нотоносец
bar = sys.NthBar(1);
bar.AddText(0,"POTATO SONG","Subtitle");

Как Вы можете увидеть, SystemStaff – переменная, которую можно получить непосредственно из партитуры. Помните, что Вы должны использовать системные стили текста (здесь используется Subtitle), когда добавляете текст к системному нотоносцу. Стили текста нотоносцев, как Technique, не будут работать. Также Вы должны определить такт и положение в такте; это может показаться лишним для всегда находящегося посредине страницы названия, но для темпа или обозначения метронома, очевидно, потребуется.

Представление нот, пауз, аккордов и других музыкальных единиц
Sibelius представляет ноты, аккорды и паузы как последовательность. Пауза не имеет нотной головки, нота имеет одну, а аккорд две и более. Это вводит дополнительную иерархию: большинство из того, что Вы видите в такте, определённые типы тактовых объектов, которые могут содержать более мелкие вещи (а именно, нотные головки). Не существует единого названия для того, что может быть и паузой, и нотой, и аккордом, и поэтому мы изобрели своё - NoteRest. NoteRest с 0, 1 или 2 нотными головками – это то, что Вы обычно называете паузой, нотой или аккордом.
Если n – переменная, содержащая NoteRest, то переменная n.NoteCount содержит количество нот, а n.Duration содержит длительность, измеряемую 1/256 четверти. Вы можете также получить n.Highest и n.Lowest, которые содержат высшую и низшую ноты (если предположить, что n.NoteCount не 0). Если Вы установите lownote = n.Lowest, то сможете кое-что узнать о самой низкой в аккорде ноте, например, lownote.Pitch (число) и lownote.Name (строка). Подробнее об этих переменных и методах можно узнать в разделе «справочник» ниже.
Другие музыкальные объекты, как ключи, линии, слова вокала и тональность имеют соответствующие объекты в ManuScript, которые тоже имеют в наличии переменные и методы. Например, если Вы имеете переменную ln типа Line (Линия), то ln.EndPosition содержит позицию конца этой линии.