Оболочка для воспроизведения аудиофайлов

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    281,67 Кб
  • Опубликовано:
    2014-01-17
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Оболочка для воспроизведения аудиофайлов

ВВЕДЕНИЕ

Актуальность темы. Музыка является частью жизни современного человека. Для её воспроизведения используют различные проигрыватели. В наши дни для воспроизведения музыки мы используем компьютерные программы. Количество таких программ постоянно растет. Но не все проигрыватели имеют удобный интерфейс.

Пользователям было бы гораздо практичнее, если бы они имели такую программу, которая имела бы простой и понятный внешний вид. Поэтому тема «оболочка для воспроизведения аудиофайлов» является актуальной, так как содержит в себе все вышеперечисленные функции для удобства пользователей.

Целью данной курсовой работы является создание оболочки для воспроизведения аудиофайлов.

Объектом данной курсовой работы является объектно-ориентированное программирование.

Предметом данной курсовой работы является процесс проектирования оболочки для воспроизведения аудиофайлов.

Для достижения поставленной цели были сформулированы следующие задачи:

1.       Изучить предметную область;

2.       Провести сравнительный анализ языков программирования;

.        Разработать UML - диаграммы;

·        UML -диаграмма прецедентов;

·        UML - диаграмма классов;

·        UML - диаграмма состояния классов;

·        UML - диаграмма деятельности объектов.

4.       Создать информационно - аналитическую систему «Аптека»;

5.       Разработать справочную систему;

.        Создать инсталляционный пакет.

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

В первой главе приведен аналитический обзор языков программирования, их сравнительные характеристики, описание предметной области и формата mp3.

Во второй главе описываются UML - диаграммы, выбранная среда разработки, созданные классы и программный продукт для воспроизведения аудиофайлов.

В заключение подводится итог выполненной работы и прилагается список литературы, использованной при выполнении курсовой работы.

Объем курсовой работы составляет 36 страниц печатного текста, включает 4 рисунка и 3 приложения на 12 страницах.

ГЛАВА I. ПОСТАНОВКА ЗАДАЧИ И ОБЗОР ИНСТРУМЕНТОВ РЕАЛИЗАЦИИ


1.1 Аналитический обзор языков программирования

аудиофайл программирование инсталляционный

Реализация программного обеспечения связана с использованием одного из языков программирования. Наиболее удобными для реализации программных систем, разработанных в рамках объектно-ориентированного подхода, являются объектно-ориентированные языки программирования.

 Объектно-ориентированный язык программирования (ОО-язык) - язык, построенный на принципах объектно-ориентированного программирования.

В основе концепции объектно-ориентированного программирования лежит понятие объекта - некоей субстанции, которая объединяет в себе поля (данные) и методы (выполняемые объектом действия).

В современных ОО языках используются механизмы:

§   Наследование. Создание нового класса объектов путём добавления новых элементов (методов). В данный момент ОО языки позволяют выполнять множественное наследование, то есть объединять в одном классе возможности нескольких других классов.

§   Инкапсуляция. Сокрытие деталей реализации, которое позволяет вносить изменения в части программы безболезненно для других её частей, что существенно упрощает сопровождение и модификацию ПО.

§   Полиморфизм. При полиморфизме некоторые части (методы) родительского класса заменяются новыми, реализующими специфические для данного потомка действия. Таким образом, интерфейс классов остаётся прежним, а реализация методов с одинаковым названием и набором параметров различается. С полиморфизмом тесно связано позднее связывание.

Объектно-ориентированные языки программирования пользуются в последнее время большой популярностью среди программистов, так как они позволяют использовать преимущества объектно-ориентированного подхода не только на этапах проектирования и конструирования программных систем, но и на этапах их реализации, тестирования и сопровождения [10].

Наиболее распространенным объектно-ориентированным языком программирования безусловно является C++. Свободно распространяемые коммерческие системы программирования C++ существуют практически на любой платформе. Широко известна свободно распространяемая система программирования G++, которая дает возможность всем желающим разобрать достаточно хорошо и подробно прокомментированный исходный текст одного из образцовых компиляторов языка C++. Завершается работа по стандартизации языка C++: последний Draft стандарта C++ выпущен в июне 1995 г.

С 1995 года стал широко распространяться новый объектно-ориентированный язык программирования Java, ориентированный на сети компьютеров и, прежде всего, на Internet. Синтаксис этого языка напоминает синтаксис языка C++, однако эти языки имеют мало общего. Java интерпретируемый язык: для него определены внутреннее представление (bytecode) и интерпретатор этого представления, которые уже сейчас реализованы на большинстве платформ. Интерпретатор упрощает отладку программ, написанных на языке Java, обеспечивает их переносимость на новые платформы и адаптируемость к новым окружениям. Он позволяет исключить влияние программ, написанных на языке Java, на другие программы и файлы, имеющиеся на новой платформе, и тем самым обеспечить безопасность при выполнении этих программ. Эти свойства языка Java позволяют использовать его как основной язык программирования для программ, распространяемых по сетям (в частности, по сети Internet).

C# (произносится как «Си-шарп» или «Си-диез») - это простой, современный, строго типизированный объектно-ориентированный язык программирования. C# базируется на семействе языков программирования C и будет хорошо знаком программистам, работавшим с языками C, C++ и Java.# представляет собой объектно-ориентированный язык программирования, однако также обеспечивает поддержку компонентно-ориентированного программирования. Разработка современных приложений все в большей степени базируется на применении программных компонентов в форме автономных и самодокументируемых функциональных модулей. Основной особенностью таких компонентов является реализация модели программирования с использованием свойств, методов, событий и атрибутов, представляющих декларативное описание компонентов, а также включение в них собственной документации. В C# представлены языковые конструкции, непосредственно поддерживающие эти понятия, что делает его близким к естественному языком для создания и применения программных компонентов. В C# представлены функциональные возможности, позволяющие создавать надежные и устойчивые приложения. Среди них: функция сборки мусора для автоматического освобождения памяти, занимаемой неиспользуемыми объектами; функция обработки исключительных ситуаций, обеспечивающая структурированный и расширяемый подход к обнаружению и устранению ошибок; а также строго типизированная структура языка, не допускающая считывания неинициализированных переменных, выхода индекса массива за пределы допустимого диапазона или выполнения непроверенных приведений типов.

В C# применяется унифицированная система типов. Все типы C#, включая простые типы (например, int и double), наследуются от единственного корневого типа object. Таким образом, все типы используют набор общих операций, что обеспечивает согласованные хранение, передачу и обработку значений любого типа. Кроме того, в C# поддерживаются пользовательские ссылочные типы и типы значений, что обеспечивает динамическое размещение объектов в памяти и встроенное хранение упрощенных структур.

Чтобы обеспечить совместимость и возможность дальнейшего развития программ и библиотек C#, в языке C# большое внимание уделяется управлению версиями. В большинстве языков программирования этому вопросу уделяется недостаточное внимание, в результате чего в создаваемых на таких языках программах чаще обычного возникают проблемы при переходе на новые версии зависимых библиотек. В C# реализованы следующие возможности по управлению версиями: разделение модификаторов virtual и override, применение правил разрешения перегрузки метода и поддержка явного объявления членов интерфейса.[4]

Delphi является языком программирования и средой разработки программного обеспечения. Он разработан Borland (ранее известный как Inprise). Язык программирования Делфи, ранее известный как Object Pascal (Pascal с объектно-ориентированными расширениями), первоначально ориентированный только на Microsoft Windows, но в настоящее время позволяет строить собственные приложения для Linux и Microsoft. NET Framework, и других (см. ниже). Программирование для начинающих.
Наиболее популярное использование - разработка настольных приложений и баз данных предприятия, а как инструмент язык программирования Делфи может использоваться и для большинства типов развивающихся проектов. Это был один из первых языков, который стал известным как инструмент RAD (быстрая разработка приложений), когда вышел в 1995 году. Delphi 2, вышедший год спустя, поддерживал 32-разрядную среду Windows , и а только несколько лет спустя вышли C, C + + Builder. В 2001 году стала доступна версия под ОС Linux известная как Kylix (классическая греческая урна). Каждый год выходило по одной новой версии, в 2002 году продукт стал известен как Delphi 7 Studio, язык стал официально называться язык программирования Delphi, а не Object Pascal, а также была добавлена поддержка Linux (через Kylix) и. NET (через Предварительный компилятор). Полная поддержка. NET запланирована на предстоящий Delphi 8 [7].

Замечательные особенности языка Delphi включают:

·              Прозрачная обработка объектов через ссылки или указатели

·              Свойства как часть языка, вкупе с функциями Get и Set, которые являются прозрачной инкапсуляцией доступа к членам полям

·              Свойства индекса и свойствами по умолчанию, которые обеспечивают доступ к коллекции удобным и прозрачным способом

·              Делегаты или по-другому методы указателей безопасного типа, которые используются для приведения в действие события вызванных компонентами

·              Делегирование реализации интерфейса в поле или свойство класса

·              Простота внедрения обработчики Windows сообщение, отметь метод класса с числом / имя окна сообщений для обработки

·              Большинство функций, перечисленных выше, были введены в Delphi первой и адаптированы на других языках позже.

Scala - мультипарадигмальный язык программирования, спроектированный кратким и типобезопасным для простого и быстрого создания компонентного программного обеспечения, сочетающий возможности функционального и объектно-ориентированного программирования.

Первые версии языка созданы в 2003 году коллективом лаборатории методов программирования Федеральной политехнической школы Лозанны под руководством Мартина Одерского, язык реализован для платформ Java и .Net. По мнению Джеймса Стрэчена, создателя языка программирования Groovy, Scala может стать преемником языка Java.- объектно-ориентированный язык программирования с динамической типизацией, разработанный в Xerox PARC Аланом Кэйем, Дэном Ингаллсом, Тедом Кэглером, Адель Голдберг, и другими в 1970-х годах. Язык был представлен как Smalltalk-80. Smalltalk продолжает активно развиваться и собирает вокруг себя сообщество пользователей [4].оказал большое влияние на развитие многих других языков, таких как: Objective-C, Actor, Java, Groovy и Ruby. Многие идеи 1980-х и 1990-х по написанию программ появились в сообществе Smalltalk. К ним можно отнести рефакторинг, шаблоны проектирования (применительно к ПО), карты Класс-Обязанности-Взаимодействие и экстремальное программирование в целом. Основатель концепции Wiki, Вард Каннингем, также входит в сообщество Smalltalk.

PHP - скриптовый язык <#"700531.files/image001.gif">

Рис. 2 Диаграмма прецедентов

 

Диаграмма классов

Диаграмма классов (class diagram) служит для представления статической структуры модели системы в терминологии классов объектно-ориентированного программирования. Диаграмма классов может отражать, в частности, различные взаимосвязи между отдельными сущностями предметной области, такими как объекты и подсистемы, а также описывать их внутреннюю структуру и типы отношений.

Диаграмма классов (рис.3) представляет собой граф, вершинами которого являются элементы типа «классификатор», связанные различными типами структурных отношений. Диаграмма классов может также содержать интерфейсы, пакеты, отношения и даже отдельные экземпляры, такие как объекты и связи.

Рис. 3 Диаграмма классов

 

2.2 Описание классов


Для осуществления работы модели использовалось два класса

·        DPlayer (ПРИЛОЖЕНИЕ А)

·        DMessage (ПРИЛОЖЕНИЕ Б)

Класс DPlayer выполняет основные задачи по воспроизведению mp3 файлов, а класс DMessage реализует механизм локализации.

.3 Интерфейс приложения

После запуска приложения, пользователь будет наблюдать внешний вид проигрывателя (рис.4). Сперва нужно выбрать песню, которую будем воспроизводить. Затем выбрать оптимальную громкость для прослушивания. Интуитивно понятный интерфейс даёт пользователю возможность воспроизвести, приостановить, остановить или загрузить новую мелодию. Основной проект DPlayerProgramm (ПРИЛОЖЕНИЕ В) состоит из: ресурсов (изображения кнопок и главной формы), экземпляров классов поставляемой библиотеки DPlayerClasses и обработки событий функциональных кнопок

Рис.4 Внешний вид

Выводы по ГЛАВЕ II


Во второй главе описано создание UML-диаграмм. Так была описана среда разработки ПО и модель «оболочка для воспроизведения аудиофайлов» содержащая 2 класса. Приложение дает возможность пользователю проигрывать mp3 файлы, содержит приятный и удобный интерфейс.

ЗАКЛЮЧЕНИЕ


В ходе курсового проектирования были усвоены и закреплены принципы разработки программного обеспечения с использованием объектно-ориентированного анализа.

В итоге была создана оболочка для воспроизведения аудиофайлов, которая включает следующие возможности:

·        возможность воспроизведения, остановки и приостановки mp3 файла;

·        перематывание песни на любые промежутки времени;

·        отображения названия песни и её общую длительность;

·        возможность регулировки уровня звука;

·        малый размер приложения (141 Кб);

·        легкая переносимость программы;

Основным недостатком программы является отсутствие возможности создания плей-листа. Планируется устранить данный недостаток с выходом следующей версии программы.

Также были систематизированы знания и получены новые навыки.

СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ

1. Оtvetin [Электронный ресурс]. - Режим доступа: http://otvetin.ru/naukatchech/607-kto-izobrel-pervye-chasy.html

2. Модели объектов и их назначение [Электронный ресурс]. - Режим доступа: http://school.xvatit.com/index.php

3. Свободная энциклопедия - Википедия [Электронный ресурс]. - Режим доступа: http://ru.wikipedia.org/wiki/

4. Citforum [Электронный ресурс]. - Режим доступа: http://citforum.ru/programming/tasm3/tasm3_4.shtml

5. С# [Электронный ресурс]. - Режим доступа: http://cesharp.narod.ru/

6. Введение в язык C++[Электронный ресурс]. - Режим доступа: http://dvo.sut.ru/libr/cvti/i618buz/1.htm

7. Герберт Шилдт: Полный справочник по С#.: Пер. с англ. - М.: Издательский дом "Вильямc", 2004. - 752 с.

8.  scala [Электронный ресурс]. - Режим доступа: http://ru-scala.livejournal.com/

ПРИЛОЖЕНИЕ А

Реализация класса DPlayer.cs.

namespace DPlayerClasses

{

public class DPlayer

{

public readonly int MAX_DISPLAY_SIZE = 45;

private string _command;

private bool isOpen;

private bool isPause;

private int volume;

private int navigate;

public bool IsOpen

{

get { return isOpen; }

}

public bool IsPause

{

get { return isPause; }

}

//

//Выполняется проигрывание

//

public bool IsPlay

{

get

{

if (this.Status == "playing") return true;

else return false;

}

}

//

//Длинна файла, секунды

//

public int Length

{

get

{

if (isOpen)

{.Text.StringBuilder sb = new System.Text.StringBuilder(128);("status MediaFile length", sb, 128, IntPtr.Zero);

if (sb.Length == 0) return 0;

return Convert.ToInt32(sb.ToString()) / 1000;

}

else return 0;

}

}

//

//Громкость (0-100)

//

public int Volume

{

get

{

return this.volume;

}

set

{

}

}

//

//Движение по треку, переход на позицию

//

public int Navigate

{

get

{

if (!isOpen) return -1;.Text.StringBuilder sb = new System.Text.StringBuilder(128);("status MediaFile position", sb, 128, IntPtr.Zero);

return Convert.ToInt32(sb.ToString()) / 1000;

}

set

{

this.navigate = value;("seek MediaFile to " + value * 1000, null, 0, IntPtr.Zero);

mciSendString("play MediaFile", null, 0, IntPtr.Zero);

}

}

//

//Получение текущего статуса

//

public String Status

{

get

{.Text.StringBuilder sb = new System.Text.StringBuilder(128);

mciSendString("status MediaFile mode", sb, 128, IntPtr.Zero);

return sb.ToString();

}

}

public DPlayer()

{

volume = 100;

navigate = 0;

}

[DllImport("winmm.dll")]static extern long mciSendString(string Cmd, StringBuilder StrReturn, int ReturnLength, IntPtr HwndCallback);

public string LoadMP3File()

{

OpenFileDialog ofd = new OpenFileDialog();

ofd.InitialDirectory = Environment.SpecialFolder.MyMusic.ToString();

ofd.Filter = "mp3 files |*.mp3";

ofd.FilterIndex = 1;

if (ofd.ShowDialog() == DialogResult.OK)

{

return ofd.FileName.ToString();

}

return String.Empty;

}

public void PlayMP3Loop(bool loop)

{

if (isOpen)

{

_command = "play MediaFile";

if (loop)

{

_command += " REPEAT";

}

mciSendString(_command, null, 0, IntPtr.Zero);

isPause = false;

}

}

public void OpenMP3Player(string sFileName)

{

_command = "open \"" + sFileName + "\" type mpegvideo alias MediaFile";

mciSendString(_command, null, 0, IntPtr.Zero);

isOpen = true;

}

public void StopMP3Player()

{

if (isOpen)

{

}

}

public void PauseMP3Player()

{

//Если играет трек

if (isPause == false)

{

//Останавливаем проигрывание

mciSendString("pause MediaFile", null, 0, IntPtr.Zero);

isPause = true;

}

}

public void CloseMP3Player()

{

_command = "close MediaFile";

mciSendString(_command, null, 0, IntPtr.Zero);

isOpen = false;

}

}

}

ПРИЛОЖЕНИЕ Б

Реализация класса DMessage.cs.

namespace DPlayerClasses

{

public class DMessage

{

public enum Constants : short

{

// Подсказки

HINT_STOP,

HINT_PLAY,

HINT_PAUSE,

HINT_EJECT,

// Состояния воспроизведения

STATE_STOP,

STATE_PLAY,

STATE_PAUSE,

STATE_INITIAL_MP3NAME_H,

STATE_INITIAL_MP3NAME,

STATE_INITIAL_TIME_H

}

private readonly int MES_AMOUNT;

private string[] value;

public DMessage()

{

MES_AMOUNT = Enum.GetValues(typeof(Constants)).Length;

value = new string[MES_AMOUNT];

}

public string GetMessage(short type)

{

if (type >= 0 && type < MES_AMOUNT)

{

return value[type];

}

return string.Empty;

}

public void LoadLangFile(string file)

{

try

{

XDocument xdoc = XDocument.Load(file);

var messages = xdoc.Elements("DPlayer").Elements("mes");

if (messages.LongCount() != MES_AMOUNT)

{

throw new Exception("Invalid language file");

}

for (int i = 0; i < MES_AMOUNT; i++ )

{

value[i] = messages.ElementAt(i).Value;

}

catch (Exception ex)

{

throw new Exception(ex.Message);

}

}

}

}

ПРИЛОЖЕНИЕ В

Реализация главной части проекта.

using System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;DPlayerClasses;System.Runtime.InteropServices;

DPlayerProgramm

{

public partial class Form1 : Form

{

private const string LANG_FILE = "ln/ru-RU.xml";

String mp3Name = String.Empty;

DPlayer DPlayer = new DPlayer();

DMessage DMes = new DMessage();

int iFormX, iFormY, iMouseX, iMouseY;//глобальные переменные

//int resetCounter = 0;

private void Form1_MouseDown(object sender, MouseEventArgs e)

{

iFormX = this.Location.X;

iFormY = this.Location.Y;

iMouseX = MousePosition.X;

iMouseY = MousePosition.Y;

}

private void Form1_MouseMove(object sender, MouseEventArgs e)

{

int iMouseX2 = MousePosition.X;

int iMouseY2 = MousePosition.Y;

if (e.Button == MouseButtons.Left)

this.Location = new Point(iFormX + (iMouseX2 - iMouseX), iFormY + (iMouseY2 - iMouseY));

}

public Form1()

{

try

{

DMes.LoadLangFile(LANG_FILE);

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

InitializeComponent();

this.VOLUME.Text = DPlayer.Volume.ToString()+"%";

}

private void button1_Click(object sender, EventArgs e)

{

Form1.ActiveForm.Close();

}

private void MIN_Click(object sender, EventArgs e)

{

Form1.ActiveForm.WindowState = FormWindowState.Minimized;

}

private void EJECT_Click(object sender, EventArgs e)

{

mp3Name = DPlayer.LoadMP3File();

int substr;

if (mp3Name != String.Empty)

{

try

{NAME.Text = System.IO.Path.GetFileNameWithoutExtension(mp3Name); ((substr = MP3NAME.Text.Length) > DPlayer.MAX_DISPLAY_SIZE)

substr = DPlayer.MAX_DISPLAY_SIZE;

MP3NAME.Text = MP3NAME.Text.Substring(0, substr);

DPlayer.CloseMP3Player();

DPlayer.OpenMP3Player(mp3Name);

DPlayer.PlayMP3Loop(false);.MP3NAME_H.Text = DMes.GetMessage((short)DMessage.Constants.STATE_PLAY);

.MP3TIME_TOTAL.Text = String.Format("{0:00}:{1:00}", DPlayer.Length / 60, DPlayer.Length % 60);

this.TIME_TRACK.Maximum = DPlayer.Length;

catch (Exception ex)

{

MessageBox.Show(ex.Message.ToString());

}

}

}

private void PLAY_Click(object sender, EventArgs e)

{

try

{

DPlayer.OpenMP3Player(mp3Name);

DPlayer.PlayMP3Loop(false);

if (DPlayer.IsPause == false)

this.PAUSE.Enabled = true;

this.MP3NAME_H.Text = DMes.GetMessage((short)DMessage.Constants.STATE_PLAY);

}

catch (Exception ex)

{

MessageBox.Show(ex.Message.ToString());

}

}

private void PAUSE_Click(object sender, EventArgs e)

{

try

{

DPlayer.PauseMP3Player();

if(DPlayer.IsPause == true)

this.PAUSE.Enabled = false;.MP3NAME_H.Text = DMes.GetMessage((short)DMessage.Constants.STATE_PAUSE);

}

catch (Exception ex)

{

MessageBox.Show(ex.Message.ToString());

}

}

private void STOP_Click(object sender, EventArgs e)

{

try

{

DPlayer.CloseMP3Player();.MP3NAME_H.Text = DMes.GetMessage((short)DMessage.Constants.STATE_STOP);

this.MP3TIME_CUR.Text = String.Format("{0:00}:{1:00}", 0, 0);

this.TIME_TRACK.Value = 0;

}

catch (Exception ex)

{

MessageBox.Show(ex.Message.ToString());

}

}

private void RIGHT_Click(object sender, EventArgs e)

{

if (DPlayer.Navigate < DPlayer.Length + 5) DPlayer.Navigate += 5;

}

private void LEFT_Click(object sender, EventArgs e)

{

if (DPlayer.Navigate > 5) DPlayer.Navigate -= 5;

}

private void DTimer_Tick(object sender, EventArgs e)

{

int pos;

if (DPlayer.IsPlay)

{

pos = DPlayer.Navigate;

this.MP3TIME_CUR.Text = String.Format("{0:00}:{1:00}", pos / 60, (pos) % 60);

this.TIME_TRACK.Value = pos;

if (DPlayer.Navigate == DPlayer.Length - 1)

{

try

{

DPlayer.CloseMP3Player();

this.MP3NAME_H.Text = DMes.GetMessage((short)DMessage.Constants.STATE_STOP);.MP3TIME_CUR.Text = String.Format("{0:00}:{1:00}", 0, 0);

this.TIME_TRACK.Value = 0;

catch (Exception ex)

{

MessageBox.Show(ex.Message.ToString());

}

}

}

}

private void TIME_TRACK_Scroll(object sender, ScrollEventArgs e)

{

DPlayer.Navigate = this.TIME_TRACK.Value;

}

private void VOLUME_TRACK_Scroll(object sender, ScrollEventArgs e)

{

DPlayer.Volume = this.VOLUME_TRACK.Value;

this.VOLUME.Text = this.VOLUME_TRACK.Value.ToString() + "%";

}

}

}

Похожие работы на - Оболочка для воспроизведения аудиофайлов

 

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