1.08.2003
25. Возвращение смолкнувших нот
Пользователи Finale давно уже привыкли к тому, что у них всё время что-то пропадает. То лига исчезнет, то акцент улетит. А вот теперь дело уже дошло и до самих нот.
Исчезновение нот происходит достаточно таинственным образом. Finale показывает их на экране, печатает на принтере, даже проигрывает. Однако если экспортировать партитуру в MIDI-файл, то некоторые из них проигрываться перестают.
Нам уже были известны некоторые примеры пропадения отдельных звуков, однако тогда это проявлялось уже при проигрывании в Finale, в данном же случае оно происходит несколько позже
Благодаря коллеге homa, нам стали известны конкретные ситуации с пропавшими нотами. Вот одна из них (исчезнувшая нота помечена):
Сравнение всех аналогичных фрагментов позволяет увидеть, что во всех случаях исчезнувшему в MIDI-файле звуку предшествует этот же звук в другом голосе. В данном случае си в партии дискантов следует за тем же си в партии альтов.
Заглянем в недра MIDI-файла при помощи шестнадцатиричного редактора. Вот фрагмент файла, соответствующий приведённому выше нотному образцу:
/* Система кодирования информации в MIDI-файле проста. По сути нам нужно знать только две команды: 90 (включить ноту) и 80 (выключить ноту). За командой следует одно число, указывающее на высоту ноты, и другое, обозначающее громкость. Замыкает последовательность 00, если сразу же можно переходить к следующей команде, либо число, указывающее на временнýю задержку перед этим. */
Выпишем теперь все команды из MIDI-файла, соответствующие исследуемому такту, человеческим языком:
90 4C 40 | Включить ми2 | дискант |
90 47 40 | Включить си | альт |
8C | Выждать четверть с точкой | |
80 4C 00 | Выключить ми2 | дискант |
90 47 40 | Включить си | дискант |
80 47 00 | Выключить си | альт |
90 40 40 | Включить ми | альт |
84 | Выждать восьмушку | |
80 47 00 | Выключить си | дискант |
90 47 40 | Включить си | дискант |
80 40 00 | Выключить ми | альт |
90 40 40 | Включить ми | альт |
90 | Выждать половинную | |
80 47 00 | Выключить си | дискант |
80 40 00 | Выключить ми | альт |
Вот, что происходит, после того, как прозвучала первая четверть с точкой в такте: программа выключает предыдущий звук дисканта (ми2) и включает новый си (эта команда выделена цветом). Затем то же самое для альта: выключает предыдущее си и включает новое ми.
Вопрос: почему же выделенная команда не работает? Ответ: потому что эта команда включает звук, который сразу же выключается следующей командой. MIDI-синтезатор не знает, что мы включили звук для дискантов, а выключаем его для альтов. Он мыслит в рамках одной «клавиатуры», а потому чётко выполняет команду включает звук и тут же выключает.
Таким образом мы приходим к старому решению, а именно распределить все голоса на разные MIDI-каналы. Как это делается читайте под заголовком «Решение 1» в выпуске про неисполняемые унисоны.
Да, кстати! воскликнет внимательный читатель. А почему же при проигрывании в самой Finale этой проблемы не возникало? Почему ноты пропадали только в MIDI-файле?
Судя по всему Finale при собственном проигрывании формирует иную последовательность команд (например, сперва выключая все предыдущие ноты, а затем включая все новые), нежели при записи в MIDI-файл, а потому этот дефект до поры, до времени и не проявляется.