Смекни!
smekni.com

Програма для анімації музичних творів (стр. 1 из 2)

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

ЛЬВІВСЬКИЙ ДЕРЖАВНИЙ ІНСТИТУТ НОВІТНІХ ТЕХНОЛОГІЙ ТА УПРАВЛІННЯ ІМ. В. ЧОРНОВОЛА

Факультет

інформаційних

технологій

Курсовий проект на тему:

“Програма для анімації музичних творів”

з дисципліни

“Системне програмне забезпечення ”

Виконав

Студент групи КІ-31

Митюк Я.

ЛЬВІВ 2009


Вступ

В даному курсовому проекті розглядається програма, яка призначена для анімації заданого музичного твору за допомогою об’єкта ActiveX - Microsoft Agent. Цей компонент був створений для підтримки дружнього інтерфейсу з користувачем і виглядає як казковий персонаж, що керується певними командами. Персонажі можуть виглядати по-різному, але всі вони підтримують один стандартний набір команд.

Огляд літературних джерел

В даному курсовому проекті я користувався такою літературою:

“Assembler для Windows” автором якої є В. Ю. Пирогов.

Ця книга містить тільки працюючі програми з докладним розбором програм і коментарями. В книзі розглядаються способи й засоби аналізу й виправлення коду програм. В книзі також показані переваги мови асемблера над мовами високого рівня.

“Assembler для DOS, Windows и UNIX” автор Зубков С.В.

В книжці висвітлюються всі аспекти сучасного програмування на асемблері для DOS, Windows 95/NT и UNIX (Solaris, Linux и FreeBSD), включаючи створення резидентних програм і драйверів, пряме програмування периферійних пристроїв, керування захищеним режимом, і багато іншого. Детально розглядається архітектура процесорів Intel. В книжці є багато прикладів працюючих програм. Видання орієнтовано як на професіоналів, так і на початківців, без навиків програмування.

“Ассемблер. Разработка и оптимизация Windows-приложений” автор Юрій Магда.

В книжці розглядається один з ефективних методів оптимізації програм – використання мови асемблера, описана методика розробки окремих модулів на ньому для використання в програмах на мовах високого рівня, показано, як з допомогою асемблера можна розробити повнофункціональну Windows-програму. Особливу увагу відведено оптимізації програм, написаних на мовах високого рівня, з допомогою асемблера.

Основна частина

1. Теоретичні положення

Ідея технології ActiveX полягає в тому, щоб зв’язати WEB-технологію з компонентами, які встановлені на комп’ютері у користувача. Таким чином, компонент може бути активізований і керуватися через WEB-сторінки, якщо в них є посилання на ці об’єкти. Другий варіант ActiveX – це можливість керування компонентом з віддаленого WEB-сервера, або робота компонента під управлінням цього сервера.

Технологія ActiveX побудована на методах OLE і використовує стандартні функції реєстрації та створення COM-об’єктів. Для роботи з COM-об’єктом необхідно створити екземпляр його інтерфейсу за допомогою API функції CoCreateInstance. Після створення екземпляру об’єкту (інтерфейсу) його необхідно відповідним чином ініціалізувати. Уникнути ініціалізації можна, якщо створювати екземпляр інтерфейсу більш спеціалізованими функціями, наприклад, функцією OleLoadPicture для інтерфейсу IPicture.

Microsoft Agent був створений для підтримки дружнього інтерфейсу з користувачем і виглядає як казковий персонаж, що керується певними командами. Компоненти Microsoft Agent входять в склад операційних систем Windows, починаючи з версії 2000. На інші системи ці компоненти можна інсталювати з сервера фірми Microsoft (http://www.microsoft.com/msagent). Персонажі можуть виглядати по-різному, але всі вони підтримують один стандартний набір команд.

Технологія ActiveX не залежить ні від мови програмування, ні від платформи; тому її можна віднести до одної з технологій системного програмування.

До активізованого об’єкта “Microsoft agent” можна застосовувати наступні методи MoveTo, Play, Speak.

На низькому рівні методи організовані як таблиця з адресами підпрограм, які їх реалізовують. У таблиці подані символічні назви методів, їх адреси, кількість параметрів.

Адреса

Назва методу Параметри Зміст параметрів
0h 04h 08h 0Ch 10h 14h 18h 1Ch 20h 24h 28h 2Ch 30h 34h 38h 3Ch 40h 44h 48h 4Ch 50h 54h 58hl 5Ch 60h 64h 68h 6Ch 70h 74h 78h 7Ch 80h 84h 88h 8Ch 90h 94h 98h 9Ch 0A0h 0A4h 0A8h 0ACh 0B0h 0B4h 0B8h 0BCh 0C0h 0C4h 0C8h 0CCh 0D0h 0D4h 0D8h 0DCh 0E0h 0E4h 0E8h 0Ech 0F0h QueryInterface AddRef Release GetTypeInfoCount GetTypeInfo GetIDsOfNames Invoke GetVisible SetPosition GetPosition SetSize GetSize GetName GetDescription GetTTSSpeed GetTTSPitch Activate SetIdleOn GetIdleOn Prepare Play Stop StopAll Wait Interrupt

Show

Hide Speak MoveTo GestureAt GetMoveCause

GetVisibilityCause

HasOtherClients SetSoundEffectsOn

GetSoundEffectsOn

SetName SetDescription GetExtraData ShowPopupMenu SetAutoPopupMenu GetAutoPopupMenu GetHelpFileName SetHelpFileName SetHelpModeOn GetHelpModeOn SetHelpContextID GetHelpContextID GetActive Listen SetLanguageID GetLanguageID GetTTSModeID SetTTSModeID GetSRModeID SetSRModeID GetGUID GetOriginalSize Think GetVersion GetAnimationNames GetSRStatus
in, out - - out in, in, out in, in, in, in, out in,in,in,in,i/o,out out in, in out, out in, in out, out out out out out in in out in, in, in, out in, out in in in, out in, out in, out in, out in, in, out in, in, in, out in, in, out out out out in out in in out in, in in out out in in out in out out in in out out in out in out out, out in, out out, out out out Адр. ідентиф., Адр.хендлу - - Адр. буферу Тип, ID, Адр. буферу IID, Size, Name, ID, Адр. буф. ID,IID,ID,Flg,Адр.буф,Адр.буф Адреса ідентифікатора Координати X,Y Адреса координат X,Y Ширина, висота Адреса ширини, висоти Адреса буферу Адреса буферу Адреса змінної Адреса змінної Значення початкового стану Значення-прапорець Адреса змінної Тип, Ім’я, Черга, Адр. ідентиф. Адреса буферу, Адр.ідентифік. Ідентифікатор Тип дії Ідентифікатор, Адр. ідентифік. Ідентифікатор, Адр. ідентифік. Швидкість, Адр. ідентифік. Швидкість, Адр. ідентифік. Адр.тексту,Адр.файлу,Адр.ID. X, Y, Швидкість, Адр.ідентиф. X, Y, Адр. ідентифік. Адреса буферу Адреса буферу Адреса змінної Значення-прапорець Адреса змінної Адреса буферу Адреса буферу Адреса буферу X, Y Прапорець Адреса прапорця Адреса імені Адреса імені Прапорець Адреса прапорця Адреса IID Адреса рядка Адреса прапорця Прапорець Ідентифікатор Адр. Ідентифікатора Адреса рядка Адр. Ідентифікатора Адреса рядка Адреса рядка Адреса рядка Адреса X, Адреса Y Адр. рядка, Адр. ідентиф. Адр. ідентиф., Адр. ідентиф. Адреса буферу Адреса прапорця

Кожна таблиця методів містить на початку стандартні спеціалізовані методи QueryInterface, AddRef, Release.

Для виклику довільного методу використовується три команди асемблера:

mov edx, хендл інтерфейсу об’єкта

mov edx, [edx]

call [edx+ адреса метода в таблиці], хендл інтерфейсу об’єкта, параметри

Для деяких методів (наприклад, Speak) необхідно виділяти системну область пам’яті. Пам’ять з програми користувача для них не підходить. Для цього існує функція SysAllocString, яка резервує фрагмент системної пам’яті і одразу ж копіює в нього рядок з пам’яті користувача, який закінчується двома нулями. Після використання цей фрагмент знищується за допомогою функції SysFreeString, параметром якої є адреса цього фрагменту.

Всі керуючі дії для об’єктів ActiveX необхідно передавати в юнікодах. Для перетворення рядка в юнікод в програмі використана функція MultiByteToWideChar.

Постановка задачі

Нашою метою є скласти програму для анімації музичних творів на мові асемблер за допомогою об’єкта ActiveX - Microsoft Agent. Завантажити його можна з сайту Microsoft (безкоштовно): http://activex.microsoft.com/activex/controls/agent2/MSagent.exe

Для анімації мною було обрано стандартний персонаж “Чарівник”.

Для того, щоб наш персонаж міг розмовляти треба встановити Microsoft Text-To-Speech http://activex.microsoft.com/activex/controls/sapi/spchapi.exe

Щоб він міг розмовляти російською необхідно завантажити голосовий драйвер Lernout&Hauspie TTS3000: http://activex.microsoft.com/activex/controls/agent2/lhttsrur.exe

Офіційно на сайті Microsoft можна завантажити такі персонажі:


Чарівник:

Джин:
Папугай:
Робот:

Але в мережі існують сотні персонажів, наприклад на сайті http://characters.narod.ru можна завантажити такі персонажі:

Звуковий файл, який будемо використовувати для анімації помістимо в папку з програмою і назвемо наприклад arash.mp3, в програмі визначимо назву музичного файлу