Програма для анімації музичних творів
Спосіб створення програми для анімації музичних творів на мові асемблер за допомогою об’єкта ActiveX - Microsoft Agent. Ідея технології системного програмування ActiveX. Символічні назви методів, на яких вона побудована, їх адреси, кількість параметрів.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | украинский |
Дата добавления | 07.06.2010 |
Размер файла | 425,4 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
ЛЬВІВСЬКИЙ ДЕРЖАВНИЙ ІНСТИТУТ НОВІТНІХ ТЕХНОЛОГІЙ ТА УПРАВЛІННЯ ІМ. В. ЧОРНОВОЛА
Факультет
інформаційних
технологій
Курсовий проект на тему:
“Програма для анімації музичних творів”
з дисципліни
“Системне програмне забезпечення ”
Виконав
Студент групи КІ-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.
На низькому рівні методи організовані як таблиця з адресами підпрограм, які їх реалізовують. У таблиці подані символічні назви методів, їх адреси, кількість параметрів.
Адреса |
Назва методу |
Параметри |
Зміст параметрів |
|
0h04h08h0Ch10h14h18h1Ch20h24h28h2Ch30h34h38h3Ch40h44h48h4Ch50h54h58hl5Ch60h64h68h6Ch70h74h78h7Ch80h84h88h8Ch90h94h98h9Ch0A0h0A4h0A8h0ACh0B0h0B4h0B8h0BCh0C0h0C4h0C8h0CCh0D0h0D4h0D8h0DCh0E0h0E4h0E8h0Ech0F0h |
QueryInterfaceAddRefReleaseGetTypeInfoCountGetTypeInfoGetIDsOfNamesInvokeGetVisibleSetPositionGetPositionSetSizeGetSizeGetNameGetDescriptionGetTTSSpeedGetTTSPitchActivateSetIdleOnGetIdleOnPreparePlayStopStopAllWaitInterruptShowHideSpeakMoveToGestureAtGetMoveCauseGetVisibilityCauseHasOtherClientsSetSoundEffectsOnGetSoundEffectsOnSetNameSetDescriptionGetExtraDataShowPopupMenuSetAutoPopupMenuGetAutoPopupMenuGetHelpFileNameSetHelpFileNameSetHelpModeOnGetHelpModeOnSetHelpContextIDGetHelpContextIDGetActiveListenSetLanguageIDGetLanguageIDGetTTSModeIDSetTTSModeIDGetSRModeIDSetSRModeIDGetGUIDGetOriginalSizeThinkGetVersionGetAnimationNamesGetSRStatus |
in, out--outin, in, outin, in, in, in, outin,in,in,in,i/o,outoutin, inout, outin, inout, outoutoutoutoutininoutin, in, in, outin, outininin, outin, outin, outin, outin, in, outin, in, in, outin, in, outoutoutoutinoutininoutin, ininoutoutininoutinoutoutininoutoutinoutinoutout, outin, outout, outoutout |
Адр. ідентиф., Адр.хендлу--Адр. буферуТип, 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, в програмі визначимо назву музичного файлу
MUZIKA db "play arash.mp3",0
та запустимо
call mciSendStringA,offset MUZIKA,0,0,0
Під музику персонаж буде виконувати задану послідовність дій. Список можливих дій персонажу наведено нижче: 'Acknowledge','Alert','Announce','Blink','Confused','Congratulate','Congratulate_2','Decline','DoMagic1','DoMagic2','DontRecognize','Explain','GestureDown','GestureLeft','GestureRight','GestureUp','GetAttention','GetAttentionContinued','GetAttentionReturn','Greet','Hearing_1','Hearing_2','Hearing_3','Hearing_4','Idle1_1','Idle1_2','Idle1_3','Idle1_4','Idle1_5','Idle1_6','Idle2_1','Idle2_2','Idle2_3','Idle3_1','Idle3_2','LookDown','LookDownBlink','LookDownReturn','LookLeft','LookLeftBlink','LookLeftReturn','LookRight','LookRightBlink','LookRightReturn','LookUp','LookUpBlink','LookUpReturn','LookUpLeft','LookUpLeftBlink','LookUpLeftReturn','LookUpRight','LookUpRightBlink','LookUpRightReturn','MoveDown','MoveLeft','MoveRight','MoveUp','Pleased','Process','Processing','Read','ReadContinued','ReadReturn','Reading','RestPose','Sad','Search','Searching','StartListening','StopListening','Suggest','Surprised','Think','Thinking','Uncertain','Wave','Write','WriteContinued','WriteReturn','Writing','Hide','Show'.
Висновок
В даному курсовому проекті було описано специфічний спосіб створення програми для анімації музичного твору. Для анімації було обрано казковий персонаж Microsoft Agent “Чарівник”.
Список літературних джерел
1. Приклади використання функцій (електронна база) ASM_EXAMPLES
2. Методичні вказівки з курсу “Сиcтемне програмування та операційні системи” ЗБІРНИК ЛАБОРАТОРНИХ РОБІТ
3. Довідка по АРІ функціях “Borland C++ v.6.0”
4. Методичні вказівки для виконання курсової роботи Kurs_IIT.doc
5. Пирогов В. Ю. Ассемблер для Windows. -- М.: Издатель Молгачева С.В., 2002. --552 с.: ил.
6. Зубков С. В. Assembler для DOS, Windows и UNIX. - М: ДМК. Пресс, 2000. - 608 с.: ил.
7. Магда Ю. С. Ассемблер. Разработка и оптимизация Windows-приложений. - БХВ-Петербург, 2003. - 544 с.: ил.
Додаток
Код програми
486
model flat,stdcall
extrn ExitProcess:Proc, MessageBoxA:Proc, CoInitialize:Proc
extrn CoCreateInstance:Proc, MultiByteToWideChar:Proc
extrn SysAllocString:Proc, SysFreeString:Proc, OpenFile:Proc
extrn _wsprintfA:Proc,MessageBoxW:proc
extrn Sleep:Proc, mciSendStringA:Proc
extrn GetCursorPos: Proc
VT_BSTR equ 8
OF_EXIST equ 4000h
data
Coord:
XX dd 0
YY dd 0
MUZIKA db "play arash.mp3",0
HKEY_CLASSES_ROOT\CLSID\{D45FD2FC-5C6E-11D1-9EC1-00C04FD7081F} [по умолчанию] = Microsoft Agent Server 2.0
CLSID_AgentServer dd 0d45fd2fch ; Microsoft Agent Server 2.0
dw 5c6eh, 11d1h
db 9Eh,0C1h, 00h, 0C0h,4Fh,0D7h,08h,1Fh;
МЕТОДИ AgentServer:
Load = 1Ch
GetCharacterEx = 2Ch;
-------------------------------------------------------------------------------------------; HKEY_CLASSES_ROOT\Interface\{48D12BA0-5B77-11D1-9EC1-00C04FD7081F} [по умолчанию] = IAgentEx; HKEY_LOCAL_MACHINE\Software\CLASSES\Interface\{48D12BA0-5B77-11D1-9EC1-00C04FD7081F} [по умолчанию] = IAgentEx
IID_IAgentEx dd 48d12ba0h ; IAgentEx dw 5b77h,11d1h
db 9Eh,0C1h, 00h,0C0h,4Fh,0D7h,08h,1Fh;
МЕТОДИ IAgentEx:
SetLanguageID = 0C4h
SetSize = 28h
MoveTo = 70h
Show = 64h
Speak = 6Ch
GetAnimationNames = 0Ech
hide = 68h;
--------------------------------------------------------------------------------------------
IID_IEnumVARIANT dd 00020404h; IEnumVARIANT
dw 0000h,0000h
db 0C0h,00h, 00h,00h,00h,00h,00h,46h;
МЕТОДИ IEnumVARIANT:
Reset = 14h
Next = 0ch;
--------------------------------------
TITLE1 db "Виконує дiю:",0
NUM1 dd 0
IUNKNOWN dd 0
IVAR dd 0;
------------------------------------------------------------------------------------------
hAgent dd 0
hAgentObject dd 0
IChrID dd 0
IReqID dd 0
hAgentChar dd 0
Var1 dd 0
ADR1 dd 0
TYPE_AGENT dd 0;
Вимовляння фрази:
BUF1 db "Танцюють всі!!!",0
ACS db "robby.acs",0 ; Варiант агента
FORMAT1 db "Кiлькiсть дiй: %ld",0
NAME1 db "Play",0.data?
OFSTRUCT db 8 dup(?)
FullName db 260 dup(?)
BUF2 dw 500 dup(?)
TEXT1 db 1000 dup(?)
_esp dd ?
FETCHED dd ?
MAS1 db 20000 dup(?);
--------------------------------------------------------------------------------------------
code
Start:
Call CoInitialize,0 ; Initializes the COM library on the current thread
Call CoCreateInstance, offset CLSID_AgentServer, 0, 5, offset IID_IAgentEx, offset hAgentObject
test eax, eax
js STOP
call OpenFile,offset ACS,offset OFSTRUCT,OF_EXIST
cmp eax,-1
jz NOT_ACS
call MessageBoxA,0,offset FullName,offset ACS,0
Call MultiByteToWideChar,0,0,offset FullName,-1,offset BUF2,500
Call SysAllocString,offset BUF2
mov ADR1,eax
mov TYPE_AGENT,VT_BSTR NOT_ACS:
;----------------------------------------------------------------
mov edx,hAgentObject
mov edx,[edx] ; Load Agent:
call [edx+Load],hAgentObject,TYPE_AGENT,0,ADR1,0,offset IChrID,offset IReqID
Call SysFreeString,ADR1
test eax, eax
js STOP
mov edx,hAgentObject
mov edx,[edx]
; 2ch = Get the Agent Character (GetCharacterEx)
call [edx+GetCharacterEx],hAgentObject,IChrID,offset hAgentChar ; Get the Agent Character
test eax, eax
js STOP
;====================================================
mov edx,hAgentChar
mov edx,[edx]
; 0c4h = SetLanguageID ; 409-English, 419-Russian, 422-Ukrain
call [edx+SetLanguageID],hAgentChar,409h ; Set Language
test eax, eax
js STOP
;------------------------------
mov edx,hAgentChar
mov edx,[edx]
call [edx+SetSize],hAgentChar,250, 270 ; Розмір персонажу
;--------------------------------
mov edx, hAgentChar
mov edx,[edx]
call [edx+MoveTo],hAgentChar,100,200,1,offset Var1 ; MoveTo X,Y,Speed,Id
;--------------------------------
mov edx, hAgentChar
mov edx,[edx]
call [edx+show],hAgentChar,0,offset Var1 ; show
;--------------------------------
Call MultiByteToWideChar,0,0,offset BUF1,-1,offset BUF2,500
Call SysAllocString,offset BUF2
mov ADR1,eax
mov edx,hAgentChar
mov edx,[edx]
call [edx+speak],hAgentChar,eax,0,offset Var1 ; speak
Call SysFreeString,ADR1
;--------------------------------
mov edx,hAgentChar
mov edx,[edx]
call [edx+GetAnimationNames],hAgentChar,offset IUNKNOWN ; GetAnimationNames
test eax, eax
js STOP
mov edx,IUNKNOWN
mov edx,[edx]
call [edx+0],IUNKNOWN,offset IID_IEnumVARIANT,offset IVAR ; QueryInterface
mov edx,IVAR
mov edx,[edx]
call [edx+Reset],IVAR ; Reset
test eax, eax
js STOP
mov edx,IVAR
mov edx,[edx]
call [edx+Next],IVAR,200,offset MAS1,offset FETCHED ; Next
test eax, eax
js STOP
mov eax,FETCHED
call _wsprintfA,offset TEXT1,offset FORMAT1,eax
add esp,12
;call MessageBoxA,0,offset TEXT1,offset TEXT1,0
call Sleep, 7000
call mciSendStringA,offset MUZIKA,0,0,0
call dija,13
call dija,14
call dija,13
call dija,22
call dija,14
call dija,13
call dija,29
call dija,30
call dija,14
call dija,13
call dija,14
call dija,13
call dija,30
call dija,11
call dija,11
call dija,11
call dija,32
call dija,11
call dija,11
call dija,11
call dija,54
call dija,25
call dija,25
call dija,25
call dija,54
call dija,23
call dija,23
call dija,23
call dija,11
call dija,23
call dija,23
call dija,23
call dija,11
call dija,11
call dija,11
call dija,32
call dija,11
call dija,11
call dija,11
call dija,54
call dija,30
call dija,36
call dija,37
call dija,14
call dija,13
call dija,22
call dija,36
call dija,37
call dija,14
call dija,13
call dija,22
call dija,36
call dija,11
call dija,11
call dija,11
call dija,32
call dija,11
call dija,11
call dija,11
call dija,12
call dija,14
call dija,13
call dija,14
call dija,13
call dija,14
call dija,13
call dija,22
call dija,27
call ExitProcess,0
;----------------------------------
mov edx,IVAR
mov edx,[edx]
call [edx+8],IVAR ; Release
test eax, eax
js STOP
;--------------------------------
mov edx,hAgentChar
mov edx,[edx]
call [edx+hide],hAgentChar,0,offset Var1; hide
call MessageBoxA,0,offset BUF1,offset BUF1,0
STOP: call ExitProcess,0
;===============================================
Do_Gesture: ; eax = address
;-----------------------------------------------------------
push eax
mov edx,hAgentChar
mov edx,[edx]
call [edx+58h],hAgentChar,1; Stop play
Call SysAllocString; eax
mov ADR1,eax
mov edx,hAgentChar
mov edx,[edx]
call [edx+50h],hAgentChar,eax,offset Var1 ; gesture
Call SysFreeString,ADR1
ERR1: ret
;----------------------------------
dija Proc p1:dword
call GetCursorPos, offset Coord
mov edx, hAgentChar
mov edx, [edx]
call [edx+MoveTo], hAgentChar, XX, YY, 1, offset IVAR
mov esi,offset MAS1+8
mov ecx,p1
LL1: push ecx
mov eax,[esi]
add esi,16
pop ecx
loop LL1
push eax
call Do_Gesture; eax - address
pop eax
; call MessageBoxW,0,eax,eax,0h
call Sleep,2500
ret
endp
end Start
Подобные документы
Мова Асемблера, її можливості та команди. Розробка алгоритму програми, його реалізація в програмі на мові Асемблера. Введення елементів матриці та обчислення cуми елементів, у яких молодший біт дорівнює нулю. Методи створення програми роботи з матрицями.
контрольная работа [50,3 K], добавлен 12.08.2012Створення програми на мові Асемблера, яка призначена для перегляду в текстовому режимі файлів, розмір яких більший за 64 кілобайти. Основні процедури, з яких вона складеться. Особливості та етапи перегляду великих файлів при невеликому об’ємі пам’яті.
курсовая работа [13,1 K], добавлен 08.08.2009Визначення основних математичних понять по роботі із 3D-графікою і операцій над векторами і матрицями. Алгоритм видалення невидимих ребер та граней при побудові непрозорих об'єктів за допомогою модуля Graph 3D. Методи програмування анімації і спрайтів.
курсовая работа [345,0 K], добавлен 16.09.2010Розробка програми на мові програмування Асемблер для обчислення виразу. Розрахунок значень А, В, С у процедурах. Аналіз отриманих результатів за допомогою відлагоджувальника Turbo Debugger при різних заданих значеннях та перевірка їх правильності.
лабораторная работа [203,4 K], добавлен 09.01.2013Элементы ActiveX - результат повторной попытки фирмы Microsoft разработать модель мобильного кода. Создание документов со связыванием и внедрением объектов. Использование сертификатов Authenticode для шифрования и добавления криптографических подписей.
курсовая работа [97,5 K], добавлен 24.05.2009Розробка програми на мові програмування Assembler, що виводить на екран чоловічка, який через певний час відтворює рухи. Використання кольорового графічного адаптера в текстовому режимі. Основні параметри, цикл заміни кадрів у анімації та їх створення.
контрольная работа [124,1 K], добавлен 24.03.2012Функції бібліотеки анімації. Створення 3D моделей деталей та складального механізму для трактора. Настроювання параметрів відтворення та руху. Основні кроки анімації, їх додавання й видалення, копіювання, коментарі. Робота з компонентами та їх "рухами".
отчет по практике [3,5 M], добавлен 20.07.2012Створення програми з нетривіальною логікою на мові Асемблер, реалізуючи запропонований алгоритм за допомогою команд розгалуження та циклу. Механізми передачі керування та зміна послідовності виконання команд. Типи адресації. Команди умовного переходу.
лабораторная работа [390,3 K], добавлен 27.02.2013Створення двух файлів В1 і В2 з шести двоцифрових цифр з введенням в довільному порядку цифр з клавіатури із записуванням парних цифр в файл В3, а непарних - у файл В4. Процес розробки програми за допомогою мови "Асемблер". Блок-схема алгоритму задачі.
курсовая работа [37,6 K], добавлен 26.11.2011Загальна характеристика алгоритму та опис програми. Керівництво системного програміста. Особливості запуску програми в Linux, FreeBSD, Windows. Аналіз результатів тестування програми, що проектується, вивчення та оцінка її практичної ефективності.
курсовая работа [91,4 K], добавлен 13.06.2014