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

 

ВВЕДЕНИЕ


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

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

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

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

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

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

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 - скриптовый язык <#"justify">1.2 Описание предметной области


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

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

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

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

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


1.3 Описание mp3 формата

- это наиболее популярный формат хранения и передачи информации в цифровой форме, использующий компрессию сигнала. Формат 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.


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

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

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

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


.5 Технические сведения о формате mp3


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



Рис. 1 Пример графика частот mp3 файла


Поток звука при кодировании разбивается на равные по участки (фреймы). Каждый из фреймов кодируется отдельно со своими параметрами и содержит заголовок, в котором эти параметры указаны. Сжатие может быть выполнено с разным качеством и соответственно размером конечного файла.

Степень сжатия характеризуется битрейтом (bitrate) - количество передаваемой за единицу времени информации. Файлы MP3 обычно закодированы с битрейтом от 64 до 320 килобит в секунду (kbps или kb/s), а также с переменным битрейтом (VBR) - когда для каждого фрейма используется свой, оптимальный для данного участка, битрейт.

Исходный сигнал с помощью фильтров разделяется на несколько частотных диапазонов, для каждого диапазона определяется величина маскирующего эффекта от соседних диапазонов и предыдущего фрейма, несущественные сигналы игнорируется. Для оставшихся данных для каждого диапазона определяется, сколькими битами можно пожертвовать, чтобы потери были ниже величины маскирующего эффекта. На этом работа психоакустической модели завершается, а итоговый поток дополнительно сжимается по алгоритму Хаффмана (аналогично RAR архиватору).

При битрейте 320 kbps применяется только итоговое сжатие, без психоакустического моделирования. Следует иметь в виду, что различные кодеки могут кодировать аудиосигнал по-разному, различия особенно проявляются на высоких частотах и низких битрейтах. В формате MP3 кодируется стереосигнал, при этом возможны несколько вариантов преобразования:


.6 Режимы управления кодированием звуковых каналов


Так как формат MP3 поддерживает двухканальное кодирование (стерео), существует 4 режима:

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

·Моно - одноканальное кодирование. Если закодировать двухканальный материал этим способом, различия между каналами будут полностью стёрты, так как два канала смешиваются в один, он кодируется и он же воспроизводится в обоих каналах стереосистемы. Единственным плюсом данного режима может являться только выходное качество по сравнению с режимом Стерео при одинаковом битрейте, так как на один канал приходится вдвое большее количество бит, чем в режиме Стерео.

·Двухканальное стерео (англ. Dual Channel) - два независимых канала, например звуковое сопровождение на разных языках. Битрейт делится на два канала. Например, если заданный битрейт 192 кбит/c, то для каждого канала он будет равен только 96 кбит/c.

·Объединённое стерео (англ. Joint Stereo, M/S Stereo) - один из самых оптимальных способов двухканального кодирования. Например, в одном из режимов «Объединённое стерео» левый и правый каналы преобразуются в их сумму (L+R) и разность (L?R). Для большинства звуковых файлов насыщенность канала с разностью (L?R) получается намного меньше канала с суммой (L+R). Также тут свою роль играет восприятие звука человеком, для которого различия в направлении звука намного менее примечательны. Поэтому объединённое стерео позволяет либо сэкономить на битрейте канала разности (L?R), либо улучшить качество на том же битрейте, поскольку на канал суммы (L+R) отводится большая часть битрейта. Современные кодеки используют различные схемы в разных фреймах (включая чистое стерео) в зависимости от исходного сигнала.


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


Одной из важнейших характеристик 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) и вычислять размер выходного файла.


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


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

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

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

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

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

Недостатки:

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

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


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


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


ГЛАВА II. ПРОЕКТИРОВАНИЕ И РАЗРАБОТКА ПРОГРАММНОГО ПРОДУКТА


.1 UML -диаграммы


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

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

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

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

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


Рис. 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 [Электронный ресурс]. - Режим доступа: #"justify">ПРИЛОЖЕНИЕ А


    Реализация класса 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() + "%";

    }

    }

    }



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

    Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ