Глава I. Постановка задачи и обзор инструментов реализации — КиберПедия 

Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...

Глава I. Постановка задачи и обзор инструментов реализации

2020-04-01 157
Глава I. Постановка задачи и обзор инструментов реализации 0.00 из 5.00 0 оценок
Заказать работу

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

 

Описание предметной области

 

Информационная часть программы заключается в воспроизведении выбранного пользователем файла.

Графический интерфейс программы содержит следующие элементы:

.   Удобный для пользователя интерфейс

.   Кнопки для управления воспроизводимых файлов

Для разработки ПО было принято использовать язык программирования С#, так как он очень удобен при работе с классами, что делает его так же удобным при работе в объектно-ориентированном программировании.

 


Описание mp 3 формата

- это наиболее популярный формат хранения и передачи информации в цифровой форме, использующий компрессию сигнала. Формат MP3, или MPEG Audio Layer-3, был разработан компаниями Fraunhofer IIS и Thomson. По сравнению с WAV-файлами, являющимися копиями треков Audio CD (PCM, 16 bit, Stereo, 44,1 kHz), MP3-композиции занимают намного меньше места на диске. На обыкновенном CD-R/RW-бланке можно сохранить свыше 11 часов музыки вполне пристойного качества.

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

Для MP3 написано множество отличных программ (кодировщиков, проигрывателей и т.д.), налажено производство аппаратных (стационарных, карманных и автомобильных) плееров, каждый современный телефон поддерживает MP3-мелодии (и даже имеет встроенный плеер для их удобного воспроизведения). По сравнению со многими другими форматами сжатия аудио MP3 обеспечивает лучшее качество звучания и сегодня по своей популярности занимает, пожалуй, второе место после Audio CD.

История создания

разработан рабочей группой института Фраунгофера под руководством Карлхайнца Бранденбурга и университета Эрланген-Нюрнберг в сотрудничестве с AT&T Bell Labs и Thomson (Джонсон, Штолл, Деери и др.).

Основой разработки MP3 послужил экспериментальный кодек ASPEC (Adaptive Spectral Perceptual Entropy Coding). Первым кодировщиком в формат MP3 стала программа L3Enc, выпущенная летом 1994 года. Спустя один год появился первый программный MP3-плеер - Winplay3.

При разработке алгоритма тесты проводились на вполне конкретных популярных композициях. Основной стала песня Сюзанны Веги «Tom's Diner». Отсюда возникла шутка, что «MP3 был создан исключительно ради комфортного прослушивания любимой песни Бранденбурга», а Вегу стали называть «мамой MP3».

Битрейт и его значение

 

Одной из важнейших характеристик MP3-файла является битрейт - скорость потока обрабатываемых данных, или общее количество информации, передаваемой в единицу времени. Эта величина не зависит от того, содержит этот поток моно- или стереозвук.

Битрейт 128 Kbps с легкой руки Fraunhofer IIS был признан оптимальным для использования в интернете, а некоторые производители кодеров распространили мнение о том, что этой скорости вполне достаточно для кодирования музыки с качеством, близким к Audio CD. Однако это не так. На хорошей аппаратуре невосполнимые потери аудиоинформации становятся заметными.

Чем выше битрейт, тем больше места на диске потребуется для сохранения конечного MP3-файла, но и, как правило, тем выше будет качество закодированного сигнала. В целом же каждое значение битрейта имеет свою область применения.

Даже профессиональные эксперты с тонким музыкальным слухом порой не в состоянии отличить на хорошей аппаратуре звучание трека Audio CD и его образа, закодированного в MP3-файл с низким коэффициентом сжатия, например 4:1 (320 Kbps).

Еcли вы имеете дело только с компьютерными акустическими системами или недорогой бытовой радиоаппаратурой, то для кодирования и последующего прослушивания композиций вполне достаточно 160-192 Kbps. Для компрессии быстро устаревающей поп-музыки, а также для "выкладывания" музыкального архива в сети вполне подойдет и 128 Kbps. Значения битрейта ниже 128 Kbps не позволяют добиться должного качества звучания. Скорости 64-96 Kbps чаще всего используют для сжатия аудиоуроков иностранного языка, лекций, интервью и аудиотрансляций.

Основные виды битрейтов:

. CBR расшифровывается как Constant Bit Rate, то есть постоянный битрейт, который задаётся пользователем и не изменяется при кодировании произведения. Таким образом, каждой секунде произведения соответствует одинаковое количество закодированных бит данных (даже при кодировании тишины). CBR может быть полезен для потоков мультимедиа данных по ограниченному каналу; в таком случае кодирование использует все возможности канала данных. Для хранения данный режим кодирования не является оптимальным, так как он не может выделить достаточно места для сложных отрезков исходного произведения, при этом бесполезно тратя место на простых отрезках. Повышенные битрейты (выше 256 кбит/c) могут решить данную проблему, выделив больше места для данных, но зато и пропорционально увеличивая размер файла.

2. VBR расшифровывается как Variable Bit Rate, то есть изменяющийся битрейт или переменный битрейт, который динамически изменяется программой-кодером при кодировании в зависимости от насыщенности кодируемого аудиоматериала и установленного пользователем качества кодирования (например, тишина закодируется с минимальным битрейтом). Этот метод MP3-кодирования является самым прогрессивным и до сих пор развивается и улучшается, так как аудиоматериал разной насыщенности может быть закодирован с определённым качеством, которое обычно выше, чем при установке среднего значения в методе CBR. Плюс к тому, размер файла уменьшается за счёт фрагментов, не требующих высокого битрейта. Минусом данного метода кодирования является сложность предсказания размера выходного файла.

Но этот недостаток VBR-кодирования незначителен в сравнении с его достоинствами.

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

3. ABR расшифровывается как Average Bit Rate, то есть усредненный битрейт, который является гибридом VBR и CBR: битрейт в кбит/c задаётся пользователем, а программа варьирует его, постоянно подгоняя под заданный битрейт. Таким образом, кодер будет с осторожностью использовать максимально и минимально возможные значения битрейта, так как рискует не вписаться в заданный пользователем битрейт. Это является явным минусом данного метода, так как сказывается на качестве выходного файла, которое будет немного лучше, чем при использовании CBR, но намного хуже, чем при использовании VBR. С другой стороны, этот метод позволяет наиболее гибко задавать битрейт (может быть любым числом между 8 и 320, против исключительно кратных 16 чисел метода CBR) и вычислять размер выходного файла.

Преимущества и недостатки

 

Преимущества:

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

·   Степень сжатия и качество может регулироваться пользователем.

·   Фреймовая структура удобна для передаче по сети, позволяет переход к любому месту файла.

·   Широкое распространение аппаратуры и программ.

Недостатки:

· Технические недостатки. Количество каналов звука ограничено двумя, в отличии от более современных AAC и Ogg Vorbis.

·   Юридические ограничения. Патентом на MP3 владеет компания Alcatel-Lucent, которая требует лицензирования некоторых способов использования формата. Срок действия связанных с MP3 патентов истекает в 2007-2017 годах. Почти полный стандарт появился в открытом доступе 6 декабря 1991 года. В США изобретения публично раскрытые более года не могут быть запатентованы.

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

 

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

 


UML -диаграммы

 

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

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

Диаграмма прецедентов (рис.2) - диаграмма, на которой отражены отношения, существующие между актёрами и прецедентами.

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

Проще сказать, диаграмма прецедентов отображает поведение системы или ее части под тем углом, под каким её видит пользователь.

 

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


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

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

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

 

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


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

 

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

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

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

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

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

 

После запуска приложения, пользователь будет наблюдать внешний вид проигрывателя (рис.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 с.

1.  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

{

this.volume = value;("setaudio MediaFile volume to " + value * 10, null, 0, IntPtr.Zero);

}

}

//

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

//

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)

{

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

}

}

 

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() + "%";

}

}

}

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

 


Поделиться с друзьями:

Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...

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

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

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.248 с.