Розробка програми-емулятора 'Фортепіано'

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Украинский
    ,
    Формат файла:
    MS Word
    314,29 Кб
  • Опубликовано:
    2013-10-11
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Розробка програми-емулятора 'Фортепіано'

МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ

НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВРСИТЕТ УКРАЇНИ

«КИЇВСЬКИЙ ПОЛІТЕХНЧНИЙ ІНСТИТУТ»

Інтситут прикладного системного аналізу

Кафедра математичних методів системного аналізу








КУРСОВИЙ ПРОЕКТ

зЗ дисципліни: “ПРОГРАМУВАННЯ ТА АЛГОРИТМІЧНІ МОВИ”

на тему: “Розробка програми-емулятора фортепіано”

Перевірив: Кузнєцова Наталія Володимирівна

Виконав Щука Роман



Київ - 2012

Зміст

Вступ

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

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

.2 Метод розв’язку задачі

.3 Опис алгоритму

.4 Опис програми

.5 Опис інтерфейсу

Висновки

Список використаної літератури

Додаток

Вступ

В роботі реалізовано програму-емулятор "Фортепіано". Для відтворення звуку в даному проекті використовуються перша та друга октави. Кожна нота визначається своєю «персональною» частотою, що вимірюється в герцах. В ході розробки програмного продукту було розглянуто декілька аналогів емуляторів. Однією з найбільших переваг даного емулятора «Фортепіано» є зручний та зрозумілий для користувача інтерфейс та простота використання.

Розроблена програма являє собою емулятор фортепіано. Даний програмний продукт створений на мові програмування Pascal, зокрема в середовищах ABCPascal, TurboPascal, BorlandPascal 7.0. При розробці програми також використовувався емулятор операційної системи DOS з метою покращення роботи відеорежиму Pascal. Для коректного використання програми слід використовувати операційну систему Windows 98, 2000, XP, 8

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

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

В даному проекті було поставлено декілька задач. Постановка першого завдання заключалась в оформленні зручного та зрозумілого інтерфейсу та в створенні малюнку , на якому відображались клавіші фортепіано. Наступною задачею стало відтворення звуку при натисненні відповідної клавіші, а також замальовування тієї частини екрану (клавіші фортепіано), що відповідала натиснутій клавіші на клавіатурі. Зокрема автор вирішив задачу запису програної користувачем мелодії з можливістю її подальшого відтворення та виведення на екран відповідних клавіш, натиснутих в процесі запису. Розробник також реалізував задачу виведення на екран нот згідно з міжнародними позначеннями. При вирішенні описаних вище задач автор намагався створити максимально просту програму для використання користувачем будь-якого віку не залежно від наявності музичної освіти.

1.2 Метод розв’язку задачі

Для розв’язку вищесказаних задач розробник створив окремий модуль та вбудовані до нього процедури. Розроблений модуль був призначений для оформлення зовнішнього вигляду окремих блоків програми в режимах гри, запису та відтворення. Модуль містить ряд процедур, за допомогою яких розробник виконав поставленні задачі. Кожна процедура має окреме призначення. Розроблені процедури передбачають створення зображення клавіш фортепіано на екрані у відповідних режимах; встановлення «персональної» частоти (в герцах) для кожної клавіші, виведення звуку через динаміки та зміну забарвлення тієї частини екрану, що відповідає натиснутій клавіші під час її натискання на клавіатурі; створення окремих текстових файлів, в які записується мелодія в режимі запису, а також виведення натиснутих користувачем клавіш та назв нот на екран під дошкою фортепіано в режимах виведення та відтворення.

1.3 Опис алгоритму

На рисунку 2.1 зображено структурну блок-схему роботи програми

Рис. 1.1

1.4 Опис головних констант, типів, процедур та функцій і їх змінних

Константи

NORM = 0 - нормальний колір фону (чорний)= 9 - змінений (колір поточного пункту меню) фон._item = 5 - кількість пунктів у меню.

Типи

NOTE = RECORD - Використовується для створення головного меню.= array of NOTE - Використовується для створення полів записів у головному меню, надання початкових координат для виведення тексту та кольору зображення._ABC - файл що зберігає записи символьного типу.

Змінні

Menu_selected - відповідає за вибраний пункт меню_last_selected - відповідає за попередній пункт, що був вибраний- змінна символьного типу.

Процедури

Print - виводить окремий пункт меню.

Вхідні дані: номер пункту меню, який треба вивести.- виводить все меню._in - заповнює меню, надаючи координати виведення та колір фону.- малює фортепіано._let - виводить звук при натисненні відповідної клавіші.

Вхідні дані: координати натиснутої клавіші, частота звуку, символ, що відповідає клавіші на клавіатурі._let1 - виводить звук при натисканні відповідної клавіші (як і попередня процедура), однак довжина звуку вдвічі коротша.

Вхідні дані: координати натиснутої клавіші, частота звуку, символ, що відповідає клавіші на клавіатурі.- записує символи у файл.

Вхідні дані: Два текстові файли, призначенні для запису символів, що відповідають натисненим клавішам на клавіатурі та виведення на екран відповідних символів.- читає символи з файлу

Вхідні дані: Два текстові файли, призначенні для запису символів, що відповідають натисненим клавішам на клавіатурі та виведення на екран відповідних символів.- використовується для режиму простої гри.- в режимі «запис» викликає процедуру WriteToFile.- виводить символи з файла на екран.- читає з файлу букви, що відповідають нотам та виводить на екран.

Вхідні дані: Два текстові файли, призначенні для запису символів, що відповідають натисненим клавішам на клавіатурі та виведення на екран відповідних символів.

1.5 Опис інтерфейсу

В даному програмному продукті було створено зручний для користувача інтерфейс. Інтерфейс програми інтуїтивно зрозумілий. Пересування в меню виконується за допомогою клавіатури. Використовуються клавіші «стрілка вверх», «стрілка вниз» та клавіша “Enter”. На рисунку 2.2 зображено вигляд головного меню при завантаженні програми.

Рис. 1.2

Користувачу пропонується вибрати, те що йому потрібно за допомогою стрілок вниз/вверх та клавіші Enter.- Режим простої гри.melody - Записує мелодію в окремий файл.last melody - Виводить останню записану мелодію.last melody - Відтворює останню записану мелодію.- вийти з гри

На рисунку 1.3 показано вікно режиму простої гри на фортепіано.

Рис. 1.3

На рис. 1.4 показано виведення останньої записаної мелодії в двох режимах. Перший - назва кнопки на клавіатурі. Другий - назва ноти.

інтерфейс клавіша фортепіано екран

Рис. 1.4

Режим виведення та відтворення останньої записаної мелодії (рис 1. 5)

Рис 1. 5

Висновки

В данному проекті реалізовано програму-емулятор «Фортепіано». В ході роботи автор отримав досвід роботи з графікою на мові Паскаль, навчився працювати з текстами в середовищі мови програмування, що є неоціненним вкладом та незамінним досвідом в кар’єрі майбутнього програміста. Отже, цей курсовий проект суттєво підвищив рівень програмування автора, покращив навички системного підходу розв’язування поставленої задачі та поповнив знання автора для роботи в середовищах BorlandPascal, ABCPascal, TurboPascal.

До переваг емулятора «Фортепіано» можна віднести малі системні вимоги, просте використання програми, досить знучний та зрозумілий інтерфейс гри, що дозволить з легкістю грати та записувати мелодії користувачам будь-якого віку не залежно від наявності музичної освіти та досвіду роботи з персональним комп’ютером.

До недоліків програми можна віднести відсутність можливості збереження кількох мелодій одночасно, відсутність паузи та розпізнання довжини звуку в режимі відтворення, а також незручне розташування «ігрової палітри» у зв’язку з недостатньою вмістимістю клавіш на клавіатурі.

Список використаної літератури

1. Немнюгин С.А. Программирование на языке высокого уровня - Ученик для ВУЗов. 2-е издание, -СПб.:Питер, 2004.-544с.:ил.

. А.И.Марченко, Л.А.Марченко Программирование в среде Turbo Pascal 7.0. 7-ое изд. - К.: ВЕК+, 2003. - 464с., ил.

Додаток

Лістинг програми

program main_menu;,KURS2;= record {tip dl9 menu},y : integer;: string;: byte;;= array [1..5] of note;array1 : line;,x,y : integer;: char;_selected, menu_last_selected : word;= 0;= 9;_item = 5;print (i : integer); {procedura vuvoda pynkta men'y}array1[i] do:= 15+16*color;(x,y);(post);;;PrintMenu; {vuvodit vse pynktu men'y}i : integer;i := 1 to max_item do(i);;fill_in; {zapoln9et pynktu men'y}: string;i := 1 to max_item doarray1[i] do:= 35;:= 9 + i;:= norm;;;[1].color := change;[1].post := ' START ';[2].post := ' RECORD MELODY ';[3].post := ' OUT LAST MELODY ';[4].post := 'PLAY LAST MELODY ';[5].post := ' EXIT ';;(0);;_selected := 1;_last_selected := 1;_in;(1);(2);(3);(4);(5);KeyPressed do Ch := ReadKey;:= readkey;Ch of

#80: begin_last_selected := menu_selected;menu_selected = max_item_selected := 1 {men9et cvet men'y}_selected := menu_selected + 1;;

#72: begin_last_selected := menu_selected;menu_selected = 1_selected := max_item_selected := menu_selected - 1;;

#13: beginmenu_selected = 1 then; {sm. modyl'}; {sm. modyl'}; {sm. modyl'};menu_selected = 2 then;; {sm. modyl'};;menu_selected = 3 then;; {sm. modyl'};;menu_selected = 4 then;(ABC1); {sm. modyl'};;menu_selected = 5 then;;;[menu_last_selected].color := norm;[menu_selected].color := change;(menu_selected);(menu_last_selected);false;.KURS2;,graph;= array [1..1000] of char;_ABC = file of char;,graphmode : integer;,g : integer;: char;,mas2 : let;,k2 : integer;,ABC2 : File_ABC;_down = 100;sound_let(x,y,s: integer; ch1 : char);sound_let1(x,y,s: integer; ch1 : char);paint;select1;select2;select3;select4 (var ABC1 : File_ABC);WriteToFile (var ABC1,ABC2 : File_ABC);OutFromFile (var ABC1,ABC2 : File_ABC);select3; {vuvodit simvolu iz faila na ekran}(DefaultFont,HorizDir,1);(ABC1,ABC2);(DefaultFont,HorizDir,2);;;OutFromFile (var ABC1,ABC2 : File_ABC);

{chitaet simvolu iz faila}g : integer;: char;:= 50;(ABC1,'FILE1.txt');(ABC1);not eof(ABC1) do(ABC1,ch);(g,200,ch);:= g + 15;;(ABC1);:= 50;(ABC2,'FILE2.txt');(ABC2);not eof(ABC2) do(ABC2,ch);ch = '#' then g := g - 7;(g,250,ch);:= g + 15;;(ABC2);;select4 (var ABC1 : File_ABC);

{chitaet iz faila bykvu, kotorue sootvetstvujut notam}g : integer;: char;:= 50;(ABC1,'FILE1.txt');(ABC1);

{ assign(ABC2,'FILEKURS2.txt');(ABC2);}not eof(ABC1) do(ABC1,ch);ch of

'Z' :_let1(42,78,261, 'Z');(g,200,ch);;

'S':_let1(60,54,277,'S');(g,200,ch);;

'X':_let1(84,78,293,'X');(g,200,ch);;

'D':_let1(108,54,311,'D');(g,200,ch);;

'C':_let1(126,78,329,'C');(g,200,ch);;

'V':_let1(162,78,349,'V');(g,200,ch);;

'G':_let1(180,54,369,'G');(g,200,ch);;

'B':_let1(204,78,392,'B');(g,200,ch);;

'H':_let1(228,54,415,'H');(g,200,ch);;

'N':_let1(252,78,440,'N');(g,200,ch);;

'J':_let1(276,54,466,'J');(g,200,ch);;

'M':_let1(294,78,493,'M');(g,200,ch);;

'Q':_let1(42+288,78,523, 'Q');(g,200,ch);;

'2':_let1(60+288,54,554,'2');(g,200,ch);;

'W':_let1(288+84,78,587,'W');(g,200,ch);;

'3':_let1(288+108,54,622,'3');(g,200,ch);;

'E':_let1(126+288,78,659,'E');(g,200,ch);;

'R':_let1(162+288,78,698,'R');(g,200,ch);;

'5':_let1(288+180,54,739,'5');(g,200,ch);;

'T':_let1(288+204,78,784,'T');(g,200,ch);;

'6':_let1(288+228,54,830,'6');(g,200,ch);;

'Y':_let1(288+252,78,880,'Y');(g,200,ch);;

'7':_let1(288+276,54,932,'7');(g,200,ch);;

'U':_let1(288+294,78,987,'U');(g,200,ch);;;:= g + 15;;(ABC1);;;sound_let(x,y,s: integer; ch1 : char);

{vudaet zvyk pri nazhatii sootvetstvennoy klaviwizvyk}(Red);(x,y,ch1);(s);(100);;(Green);(x,y,ch1);;sound_let1(x,y,s: integer; ch1 : char);

{vudaet zvyk pri nazhatii sootvetstvennoy klaviwizvyk}(Red);(x,y,ch1);(s);(220);;(Green);(x,y,ch1);;WriteToFile (var ABC1,ABC2 : File_ABC); {zapisuvaet v fail notu}i,j : integer;(ABC1,'FILE1.txt');(ABC1);i := 0 to k1 do(ABC1,mas1[i]);(ABC1);(ABC2,'FILE2.txt');(ABC2);i := 0 to k2 do(ABC2,mas2[i]);(ABC2);;paint; {risyet dosky fortepiano}:= Detect;(GraphDriver,GraphMode,'D:\BP\BIN\BGI');;(White);(SolidLn,0,ThickWidth);(SolidFill,White);(30,0,606,y_down);(100,80,White);(Black);(SolidFill,Black);:= 54;(i,0,i+24,75);(i+5,5,Black);:= i + 48;(i,0,i+24,75);(i+5,5,Black);:= i + 72;(i,0,i+24,75);(i+5,5,Black);:= i + 48;(i,0,i+24,75);(i+5,5,Black);:= i + 48;(i,0,i+24,75);(i+5,5,Black);:= i + 72;(i,0,i+24,75);(i+5,5,Black);:= i + 48;(i,0,i+24,75);(i+5,5,Black);:= i + 72;(i,0,i+24,75);(i+5,5,Black);:= i + 48;(i,0,i+24,75);(i+5,5,Black);:= i + 48;(i,0,i+24,75);(i+5,5,Black);(30,0,30,100);(150,0,150,100);(318,0,318,100);(438,0,438,100);(606,0,606,100);(30,100,606,100);:= 66;(i,100,i,75);(i + 48,100,i + 48,75);:= i + 120;(g,100,g,75);(g + 48,100,g + 48,75);(g + 96,100,g + 96,75);:= i + 288;i > 400;(Green);(DefaultFont,HorizDir,2);(42,78,'Z');(84,78,'X');(126,78,'C');(162,78,'V');(204,78,'B');(252,78,'N');(294,78,'M');(60,54,'S');(108,54,'D');(180,54,'G');(228,54,'H');(276,54,'J');(42+288,78,'Q');(84+288,78,'W');(126+288,78,'E');(162+288,78,'R');(204+288,78,'T');(252+288,78,'Y');(294+288,78,'U');(60+288,54,'2');(108+288,54,'3');(180+288,54,'5');(228+288,54,'6');(276+288,54,'7');(DefaultFont,HorizDir,1);(400,300,'ESC - Exit');(DefaultFont,HorizDir,2);;select1; {prosta9 igra na fortepiano}keypressed do ch := readkey;:= ReadKey;ch of

'z':_let(42,78,261, 'Z');;

's':_let(60,54,277,'S');;

'x':_let(84,78,293,'X');;

'd':_let(108,54,311,'D');;

'c':_let(126,78,329,'C');;

'v':_let(162,78,349,'V');;

'g':_let(180,54,369,'G');;

'b':_let(204,78,392,'B');;

'h':_let(228,54,415,'H');;

'n':_let(252,78,440,'N');;

'j':_let(276,54,466,'J');;

'm':_let(294,78,493,'M');;

'q':_let(42+288,78,523, 'Q');;

'2':_let(60+288,54,554,'2');;

'w':_let(288+84,78,587,'W');;

'3':_let(288+108,54,622,'3');;

'e':_let(126+288,78,659,'E');;

'r':_let(162+288,78,698,'R');;

'5':_let(288+180,54,739,'5');;

't':_let(288+204,78,784,'T');;

'6':_let(288+228,54,830,'6');;

'y':_let(288+252,78,880,'Y');;

'7':_let(288+276,54,932,'7');;

'u':_let(288+294,78,987,'U');;;ch = #27;;;select2; {pri nazhatii klaviwi zapisyet v fail}i,j : integer;i := 1 to k1 do[i] := ' ';:= 0;i := 1 to k2 do[i] := ' ';:= 0;keypressed do ch := readkey;:= ReadKey;ch of

'z':_let(42,78,261, 'Z');[k1] := 'Z';[k2] := 'C';:= k1 + 1;:= k2 + 1;;

's':_let(60,54,277,'S');[k1] := 'S';[k2] := 'C';:= k1 + 1;:= k2 + 1;[k2] := '#';:= k2 + 1;;

'x':_let(84,78,293,'X');[k1] := 'X';[k2] := 'D';:= k1 + 1;:= k2 + 1;;

'd':_let(108,54,311,'D');[k1] := 'D';[k2] := 'D';:= k1 + 1;:= k2 + 1;[k2] := '#';:= k2 + 1;;

'c':_let(126,78,329,'C');[k1] := 'C';[k2] := 'E';:= k1 + 1;:= k2 + 1;;

'v':_let(162,78,349,'V');[k1] := 'V';[k2] := 'F';:= k1 + 1;:= k2 + 1;;

'g':_let(180,54,369,'G');[k1] := 'G';[k2] := 'F';:= k1 + 1;:= k2 + 1;[k2] := '#';:= k2 + 1;;

'b':_let(204,78,392,'B');[k1] := 'B';[k2] := 'G';:= k1 + 1;:= k2 + 1;;

'h':_let(228,54,415,'H');[k1] := 'H';[k2] := 'G';:= k1 + 1;:= k2 + 1;[k2] := '#';:= k2 + 1;;

'n':_let(252,78,440,'N');[k1] := 'N';[k2] := 'A';:= k1 + 1;:= k2 + 1;;

'm':_let(294,78,493,'M');[k1] := 'M';[k2] := 'B';:= k1 + 1;:= k2 + 1;;

'q':_let(42+288,78,523, 'Q');[k1] := 'Q';[k2] := 'C';:= k1 + 1;:= k2 + 1;;

'2':_let(60+288,54,554,'2');[k1] := '2';[k2] := 'C';:= k1 + 1;:= k2 + 1;[k2] := '#';:= k2 + 1;;

'w':_let(288+84,78,587,'W');[k1] := 'W';[k2] := 'D';:= k1 + 1;:= k2 + 1;;

'3':_let(288+108,54,622,'3');[k1] := '3';[k2] := 'D';:= k1 + 1;:= k2 + 1;[k2] := '#';:= k2 + 1;;

'e':_let(126+288,78,659,'E');[k1] := 'E';[k2] := 'E';:= k1 + 1;:= k2 + 1;;

'r':_let(162+288,78,698,'R');[k1] := 'R';[k2] := 'F';:= k1 + 1;:= k2 + 1;;

'5':_let(288+180,54,739,'5');[k1] := '5';[k2] := 'F';:= k1 + 1;:= k2 + 1;[k2] := '#';:= k2 + 1;;

't':_let(288+204,78,784,'T');[k1] := 'T';[k2] := 'G';:= k1 + 1;:= k2 + 1;;

'6':_let(288+228,54,830,'6');[k1] := '6';[k2] := 'G';:= k1 + 1;:= k2 + 1;[k2] := '#';:= k2 + 1;;

'y':_let(288+252,78,880,'Y');[k1] := 'Y';[k2] := 'A';:= k1 + 1;:= k2 + 1;;

'7':_let(288+276,54,932,'7');[k1] := '7';[k2] := 'A';:= k1 + 1;:= k2 + 1;[k2] := '#';:= k2 + 1;;

'u':_let(288+294,78,987,'U');[k1] := 'U';[k2] := 'B';:= k1 + 1;:= k2 + 1;;

#27:(ABC1,ABC2);;;ch = #27;;;.

Похожие работы на - Розробка програми-емулятора 'Фортепіано'

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!