Scenarist Pro: часть 7

4.6.4. Примеры программирования в Scenarist NT

     Прежде чем приступить к описанию конкретных примеров использования команд, мы рекомендуем вам создать тестовый проект в Scenarist, весьма удобный для отладки любых сложных проектов и просто для освоения Scenarist. Для создания этого проекта надо проделать такие действия: 

  1. Сделать .bmp картинку 720х576 с надписью Тайтл меню. В качестве subpicture сделать надпись "Переход к Root". 

  2. Аналогичную картинку сделать с надписью Root меню и в subpicture сделать две кнопки "Просмотр фильма" и "Выбор  эпизодов".

  3. Создать три картинки для меню эпизодов, вид которых ясен из рисунка (все надписи, кроме "Первое PTT меню", есть кнопки в subpicture):

    Понятно, что остальные две картинки PTT меню такие же, но номера частей другие.

  4. Для подготовки фильмов в наш тестовый проект в видеоредакторе надо:

    1. Написать в титровальной программе редактора для вступительного клипа слова FirstPlay и с минимальным bitrate закодировать в MPEG-2 на 30 секунд клип. Никакие файлы импортировать в проект не требуется.

    2. Создать проект, в котором написать титры "Часть 1", задав длительность 1 минута, затем "Часть 2" с такой же длительностью и т.д. до части 12-ой включительно. Кодировать полученный фильм с минимальным bitrate. Никакие файлы импортировать в проект не требуется.

     Файлы .bmp с меню и subpicture к ним и файлы проектов для FirstPlay и основного фильма для Ulead MediaStudio Pro 7.0 вы можете переписать здесь (~70 кБ). Необходимые пояснения по файлам находятся в readme.txt внутри архива. Далее создадим тестовый проект в Scenarist. Файл сценария тестового DVD для Scenarist также лежит в архиве с остальными файлами проекта, ссылка на который дана выше.

    Наш проект имеет такой вид:

 

      В качестве пояснения, если по каким-либо причинам вы не сможете запустить наш готовый сценарий:

  • Основной фильм разбит на двенадцать глав (сцен) по минуте каждый в соответствии с сделанными титрами.

  • В Title меню связь с единственной кнопки идет на Root меню

  • Из Root меню с кнопки "Просмотр фильма" идет связь к фильму, с кнопки "Выбор эпизодов" - к PTT меню

  • В PTT меню от кнопок "Часть 1", "Часть 2" и т.д. идут связи к соответствующим частям (сценам) фильмам, от кнопки "Главное меню" к Root меню, от кнопки "Назад" к предыдущему меню эпизодов (к Root для первого меню эпизодов), от кнопки "Вперед" к следующему меню эпизодов (к Root для последнего меню эпизодов).

  • Post FirstPlay соединен с основным фильмом, а Post основного фильма соединен с Root меню.

Остальные связи вполне понятны из рисунка.
     Смысл этого проекта в том, что глядя на экран в Simulation window Scenarist или экран телевизора при просмотре результатов работы, вы всегда будете совершенно точно знать, где вы находитесь. По "живому" фильму это значительно труднее сделать. Кроме этого, весь проект займет на DVD диске менее 200 мегабайт (если вы использовали bitrate при кодировании не более 2000 кбит/сек) и его запись на диск отнимет всего несколько минут. Как мы увидим позже, не все действия Scenarist по выполнению им некоторых команд можно проверить в самом Scenarist - в некоторых случаях потребуется запись на диск. Мы рекомендуем использовать этот проект всем, кто начинает осваивать Scenarist.

4.6.1. Пример первый - возвращение из меню в тот же момент фильма, откуда в меню уходили

      Задача: Зритель во время просмотра фильма нажимает кнопку меню, просматривает меню, или просто желает таким способом прервать на время просмотр, но потом, выбирая в меню просмотр фильма, хочет вернуться то же место, откуда он перешел в меню. Кратко это функция называется Resume. Решение этой задачи несложно и для начала рассмотрим именно ее. 
      При решении любой задачи необходимо руководствоваться обыкновенным здравым смыслом, поэтому первой операцией, которой нам надо сделать, это как-то запомнить тот факт, что мы смотрели фильм и вышли в меню именно из него. Проще всего это сделать, записав какое-нибудь число в GPRM регистр. Для этого щелкнем мышью на ярлыке Pre основного фильма. программа автоматически вызовет Simulation window и на экране появится такой диалог:

 

    Как видно из рисунка, никаких команд на Pre нет. Для ввода команды сначала следует снять флажок у No Command (Нет команды). На экране появится диалог ввода команды:

Поскольку нам надо просто записать в GPRM число, то мы выберем в ниспадающем меню Command (Команда) команду Set to GPRM (Установить GPRM):

По умолчанию команда Set to GPRM настроена на присвоение значения (Assign) одного регистра GPRM другому. Если мы хотели бы присвоить значение SPRM регистра регистру GPRM, то в поле Set следовало бы выбрать SPRM. Нам же требуется занести число и для этого в поле Set нам надо выбрать Immediate (Немедленно):

 

    Занесем в регистр GPRM0 число 100. Для нашего примера совершенно все равно, какое именно число будет занесено, лишь бы оно отличалось от нуля. Тем самым, поскольку мы "повесили" команду на Pre, при любом входе в фильм мы присваиваем GPRM0 значение 100.
    Теперь нам надо обнулить это число по окончании фильма. Для этого щелкнем мышью на ярлыке Post фильма (помните, что в нашем сценарии Post был соединен с Root меню): 

 

Как видно из рисунка, после окончания фильма программа дает возможность при использовании функции Resume вернуться к любой главе (сцене) фильма, причем по умолчанию переход происходит к началу фильма, т.е. первой главе (сцене). Для нашей задачи такой автоматический способ возвращения по завершении просмотра подходит, но мы будем считать, что его нет для чистоты эксперимента. Поскольку очередность команд менять нельзя, мы просто заменим команду перехода в Root меню на команду присвоения нулевого значения регистру GPRM0:

 

Теперь нажмем кнопку Add (Добавить) и введем команду перехода к Root меню:

C фильмом все необходимые действия проделаны, теперь настало время для работы с Root меню. Выберем ячейку Buttons (Кнопки) в Root меню и в Simulation window мы увидим:

 

 Нас интересует как раз первая команда, поскольку она относится к кнопке "Просмотр фильма". Как мы писали ранее, на кнопку можно "повесить" только одну команду, а поскольку реализовать полностью все нужные нам действия никакой единственной командой, даже Type 3, не удастся, надо придумать способ, как обойти это ограничение. Наиболее простое решение в этом случае - просто перейти к Post в Root меню, поскольку на Post можно "повесить" до 128 команд. Так мы и сделаем:

 

 Как видно из рисунка, мы "повесили" на кнопку команду безусловного перехода к Post. Теперь щелкнем мышью на ярлыке Post Root меню:

Снимем флажок с параметра No Command (Нет команды) и выберем команду Jump by Sub-Instructions с подкомандой Resume, как показано на рисунке:

Команда Jump by Sub-Instructions с подкомандой Resume как раз и возвращает зрителя в то место Title, откуда зритель попал в меню. Если оставить все как есть, то переход по Resume будет выполняться всегда, что нам не подходит, поскольку зритель может попасть в Root меню из вступительного клипа (First Play), например и тогда нажатие кнопки "Просмотр фильма" в Root меню приведет к тому, что зритель снова вернется в вступительный клип, а не перейдет к просмотру фильма. Поэтому установим флажок Compare (Сравнить):

Выбор Compare (Сравнение) означает, что действие по команде, в которой вы разрешили сравнение, будет выполнено в том и только в том случае, если результат сравнения - истина (true). Если результат ложь (false), то команда будет просто пропущена и DVD плеер перейдет к обработке следующей по списку команде. Установите в поле Compare Immediate и введите число 100 в соответствующем поле, как показано на рисунке выше. Если в GPRM будет число 100, то переход к точке выхода из фильма (Resume) произойдет, в противном случае нет. Но что означает значение регистра GPRM0, не равное 100? Это означает, что зритель еще не смотрел фильм и нам надо просто перейти к соответствующему Title, что мы и сделаем, добавив по кнопке Add команду Jump to Title (Переход к тайтлу) и выбрав в поле ниже Title_2, как показано на рисунке:

 

На этом собственно программирование закончено. Следует иметь ввиду, что вы не сможете проверить в Simulation window переход по Resume. Несмотря на то, что программа явно отрабатывает этот переход, в окне Simulation window картинка не меняется. Но, сделав образ DVD-Video на жестком диске, вы можете убедиться в правильности работы заданных вами команд, используя программный DVD плеер, такой как PowerDVD, например. Не забудьте замыкать ячейку Cell Root меню саму на себя, поскольку если вы для Root меню будете использовать видеоклип, то при незамкнутом цикле воспроизведения плеер попадет в Post и перейдет к просмотру фильма. 

На этом мы завершили описание первого примера, сценарий которого вы можете переписать отсюда