Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Создание Медиаплеера на языке С++ (Теоретическая часть о языке с++)

Содержание:

ВВЕДЕНИЕ

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

Термин мультимедиа также, зачастую, используется для обозначения носителей информации, позволяющих хранить значительные объемы данных и обеспечивать достаточно быстрый доступ к ним (первыми носителями такого типа были CD - compact disk). В таком случае термин мультимедиа означает, что компьютер может использовать такие носители и предоставлять информацию пользователю через все возможные виды данных, такие как аудио, видео, анимация, изображение и другие в дополнение к традиционным способам предоставления информации, таким как текст.

Среди средств мультимедиа звук - явление особое. Текст и графика вроде бы неплохо сдружились друг с другом и постоянно идут рука об руку. Но при этом и часть своей самобытности потеряли - текст и графика сегодня редко встречаются по отдельности.

Звук, напротив, постоянно пребывает в одиночном плавании. А все потому, что слишком жаден до внимания этот вид информации - все на себя перетягивает. Звучит, к примеру, на странице Интернета какая-нибудь мелодия - и вот уже и текст в голову не лезет, и картинки уже не так радуют глаз.

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

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

Аудиоряд может включать речь, музыку, эффекты (звуки типа шума, грома, скрипа и т.д., объединяемые обозначением WAVE (волна). Главной проблемой при использовании этой группы мультисреды является информационная емкость. Для записи одной минуты WAVE-звука высшего качества необходима память порядка 10 Мбайт, поэтому стандартный объем CD (до 640 Мбайт) позволяет записать не более часа WAVE. Для решения этой проблемы используются методы компрессии звуковой информации.

Другим направлением является использование в мультисреде звуков (одноголосая и многоголосая музыка, вплоть до оркестра, звуковые эффекты) MIDI (Musical Instrument Digital Interface). В данном случае звуки музыкальных инструментов, звуковые эффекты синтезируются программно-управляемыми электронными синтезаторами. Коррекция и цифровая запись MIDI-звуков осуществляется с помощью музыкальных редакторов (программ-секвенсоров). Главным преимуществом MIDI является малый объем требуемой памяти - 1 минута MIDI-звука занимает в среднем 10 Кбайт.

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

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

В рамках данной курсовой работы поставлена задача написать программу MP3 Player на языке С++. Программа должна обеспечить выбор прослушиваемого музыкального файла следующих расширений: «.mp3», «.wav», «.midi»; регулировку громкости звука.

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

Задачи данного проекта:

1. Описать и разработать мультимедиа-проигрыватель для ОС Windows;

2. Создать удобный пользовательский интерфейс;

3. Создать регулятор громкости;

4. Создать строку названия треков;

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

Объектом исследования является ООП.

Для решения задачи использована среда разработки С++ Builder 6.

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

1. ТЕОРЕТИЧЕСКАЯ ЧАСТЬ О ЯЗЫКЕ С++

Язык программирования С++ был разработан на основе языка Си Бьярном Страуструпом (Bjarne Stroustrup) и вышел за пределы его исследовательской группы в начале 80-х годов. Язык С++ является надмножеством языка Си, поэтому программы, написанные на языке Си могут обрабатываться компилятором языка С++. В программах на языке С++ можно использовать тексты на языке С и обращаться к библиотечным функциям языка Си. Язык С++ был создан с учетом следующих целей: улучшить язык Си, поддержать абстракцию данных и обеспечить объектно-ориентированное программирование.

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

Рассмотрим достоинства языка программирования C++:

  • Высокая совместимость с языком Си;
  • Поддержка различных стилей программирования;
  • Вычислительная производительность;

Недостатки:

  • Синтаксис, провоцирующий ошибки;
  • Некоторые преобразования типов неинтуитивны;
  • Плохая поддержка модульности

Основные среды языка C++: Visual C++, C++ Builder, Borland C++.

2. РАЗРАБОТКА ЭСКИЗНОГО ПРОЕКТА ПРОГРАММЫ

2.1 Назначение и область применения

Медиаплеер (программное обеспечение) - программное обеспечение для воспроизведения мультимедиа контента из файлов или потока на персональном компьютере. Приложение можно использовать в качестве простейшего и бесплатного плеера аудио файлов.

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

2.2 Технические характеристики

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

Так же должны быть реализовано наличие таких опций как:

Воспроизведение, Пауза, Остановка, Отображение списка треков (Плейлист).

2.3 Описание алгоритма

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

В соответствии с анализом технического задания можно выделить следующие основные блоки:

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

При переводе вышеописанных алгоритмов на язык высокого уровня С++ получается программа, реализующая «Media Player».

Основным компонентом программы является компонент MediaPlayer (рис. 1)– универсальный проигрыватель аудиоинформации. Компонент MediaPlayer инкапсулирует интерфейс управления носителями (Media Control Interface - MCI) Windows.

Рисунок 1. Компонент Media Player

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

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

После того, как пользователь выбрал каталог, содержащий аудио файлы, формируется список треков. Для воспроизведения нужно выбрать конкретный трек из предоставленного списка.

3. РАССТАНОВКА ЭЛЕМЕНТОВ УПРАВЛЕНИЯ

3.1 Разработка интерфейса программы

Как говорилось выше, наш медиаплеер мы будем строить на основе компонента MediaPlayer (вкладка System). После добавления его на форму установите свойство Visible в false, т.к. мы создадим свои кнопки.

Далее выносим на нашу форму следующие компоненты:

- BitBtn (вкладка Additional) в количестве 4 штуки для реализации кнопок воспроизведения, паузы, остановки и отдельно от управления четвертую кнопку открытия файлов (рис. 2);

Рис. 2 Будущие кнопки управления

- ListBox (вкладка Standart), в котором после открытия файлов будет текущий плейлист;

- ползунок громкости sTrackBar (вкладка AlphaStandart) (рис. 3).

Рис. 3 Регулятор громкости и плейлист на вкладке AlphaStandart

Расставим элементы на форме для удобства их использования конечному пользователю. Должно получиться следующее (рис. 4):

Рис. 4 Расстановка кнопок

Отдельно стоит упомянуть элемент sOpenDialog. Он служит для открытия и выбора файлов пользователем. Его мы поместим справа от компонента MediaPlayer, так как оба они не видны конечному пользователю.

Откроем свойство Filter компонента sOpenDialog и пропишем следующие форматы файлов: MP3, WAVE, MIDI, а также чтобы показывало все форматы ALL FILES.

Рис. 5 Свойства фильтра sOpenDialog

3.2 Изменение свойств кнопок управления

Переименуем кнопки BitBtn в свойстве Caption на аналогичные элементы управления Play, Pause, Stop. Четвертую кнопку BitBtn4 назовем «Open File…»

Загрузим в них изображения, используя свойства Glyph. Значки находятся по адресу Program Files\Common Files\Borland Shared\Images\Buttons. (для 64 битной версии Windows – Program Files (x86)\.... Я использовал vcrplay, vcrpause, vcrstop, fldropen2.

Так же заменим иконку программы. В свойстве нашей основной формы воспользуемся Icon. Иконки можно найти по адресу Program Files\Common Files\Borland Shared\Images\Icons.

Следующим на изменение будет регулятор громкости sTrackBar. В свойстве ThumbLenght пропишем 16. Сделаем ползунок вертикальным – свойству Orientation выберем trVertical. Потянув за углы отрегулируем размер элемента. Для красоты добавим полосы уровня звука с обоих сторон: свойство TickMarks – выбрать tmBoth.

На данном этапе программа выгрядит так (рис. 6):

Рис. 6 Изменение свойств кнопок медиаплеера

На данном этапе мы имеем графическую оболочку нашего плеера. Осталось изменить название формы на более стандартное Media Player и приступить к следующему шагу: написанию кода.

4. НАЗНАЧЕНИЕ КНОПКАМ ФУНКЦИОНАЛА

Чтобы реализовать элементы следует каждой кнопке нашего плеера присвоить свойственные им рабочие функции:

  • кнопке Play – проигрыш композиции;
  • кнопке Stop – остановку композиции;
  • кнопке Pause – приостановку.

Важно!
Текст модуля нельзя копировать напрямую, т.к. это вызовет ошибки при компиляции(относится к обработчикам событий). Следует сперва щелкнуть, например, по кнопке, а затем вставить код.

Для этого кликаем 2 раза на элемент BitBtn (Play). Появится окно со следующим кодом:

Листинг 1:

void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{

}

Затем между фигурными скобкам вставляем код:
MediaPlayer1->Play();

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

Листинг 2:

void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{MediaPlayer1->Play();}

Следующие кнопки паузы и остановки делаем аналогично. В итоге получаем небольшой код:

Листинг 3:

//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn1Click(TObject *Sender)

{ MediaPlayer1->Play();}

//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn2Click(TObject *Sender)

{ MediaPlayer1->Pause();}

//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn3Click(TObject *Sender)

{ MediaPlayer1->Stop();}

//---------------------------------------------------------------------------

Главное достоинство в программе С++Builder 6 – это автоматическое включение всех заголовков и библиотек в нашу программу. Ничего не написав, но добавив элементы на форму, мы автоматически сгенерировали следующий код:

Листинг 4:

//----------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

//----------------------------------------------------------------

#pragma package(smart_init)

#pragma link "sDialogs"

#pragma link "sTrackBar"

#pragma resource "*.dfm"

TForm1 *Form1;

//----------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

        : TForm(Owner)

{

}

//----------------------------------------------------------------

Активируем открытие файлов. Для этого 2 раза щелкнем по кнопке «Open File…» и пропишем следующий код:

Листинг 5:

//----------------------------------------------------------------

void __fastcall TForm1::BitBtn4Click(TObject *Sender)

{

 if (sOpenDialog1->Execute())

//выбираем файл и подгружаем в MediaPlayer

 {

 MediaPlayer1->FileName=sOpenDialog1->FileName;

 MediaPlayer1->Open();

 }

 ListBox1->Items->Add(sOpenDialog1->FileName);

//добавляем путь к файлу в ListBox

}

//----------------------------------------------------------------

Следующий элемент – регулятор громкости.

Листинг 6:

//----------------------------------------------------------------

void __fastcall TForm1::sTrackBar1Change(TObject *Sender)

{

 sTrackBar1->Max = 65350;

 waveOutSetVolume(0, MAKELONG(sTrackBar1->Position, sTrackBar1->Position));//регулируем громкость

}

//----------------------------------------------------------------

Наконец, последним элементом мы добавим окно закрытия программы, чтобы пользователь смог закрыть медиаплеер:

Листинг 7:

//событие формы OnClose

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)

{

 MediaPlayer1->Close();

5. ОКОНЧАТЕЛЬНЫЙ ВИД ПРОГРАММЫ И КОДА

5.1 Внешний вид и оформление

С кодом на данном этапе закончили, осталось найти подходящую картинку на фон плеера. Можно использовать из файлов программы C++ Builder6, как в случае с иконками управления воспроизведением.

Я решил использовать гугл картинки подходящей тематики.

Так же не лишним будет расставить элементы так, чтобы они смотрелись гармонично и не мешали друг другу. Можно переместить 2 невидимых глазу элемента (media player и sOpenDialog) за окно программы, чтобы освободить место и уменьшить плеер (рис. 7).

Рис. 7 Вид плеера

5.2 Окончательный вид кода

Листинг программы:

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Player1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma link "sDialogs"

#pragma link "sTrackBar"

#pragma resource "*.dfm"

TForm1 *Form1;

//---------------------------------------------------------------------------

Листинг программы (продолжение):

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{}

//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn1Click(TObject *Sender)

{ MediaPlayer1->Play();}

//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn2Click(TObject *Sender)

{ MediaPlayer1->Pause();}

//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn3Click(TObject *Sender)

{ MediaPlayer1->Stop();}

//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn4Click(TObject *Sender)

{ if (sOpenDialog1->Execute())

//выбираем файл и подгружаем в MediaPlayer

{ MediaPlayer1->FileName=sOpenDialog1->FileName;

MediaPlayer1->Open(); }

ListBox1->Items->Add(sOpenDialog1->FileName);

//добавляем путь к файлу в ListBox}

//---------------------------------------------------------------------------

void __fastcall TForm1::sTrackBar1Change(TObject *Sender)

{ sTrackBar1->Max = 65350 ;

waveOutSetVolume(0, MAKELONG(sTrackBar1->Position, sTrackBar1->Position));//регулируем громкость}

//---------------------------------------------------------------------------

ЗАКЛЮЧЕНИЕ

В результате выполнения работы создана программа «Media Player».

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

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

Так же в программу можно добавить возможность воспроизведения видео файлов, наподобие оригинальной Windows Media Player.

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

Программа написана на переносной версии C++Builder6, однако обладает полным функционалом работающей программы.

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

1. Иванов В.Б. Прикладное программирование на С/С++. С нуля до мультимедийных и сетевых приложений [Электронный ресурс]/ Иванов В.Б.— Электрон. текстовые данные.— М.: СОЛОН-ПРЕСС, 2011.— 240 c.— Режим доступа: http://www.iprbookshop.ru/65139.html.— ЭБС «IPRbooks»

2. Костюкова Н.И. Программирование на языке Си [Электронный ресурс]: методические рекомендации и задачи по программированию/ Костюкова Н.И.— Электрон. текстовые данные.— Новосибирск: Сибирское университетское издательство, 2017.— 160 c.— Режим доступа: http://www.iprbookshop.ru/65289.html.— ЭБС «IPRbooks».

3. Мейер Б. Основы объектно-ориентированного проектирования [Электронный ресурс]/ Мейер Б.— Электрон. текстовые данные.— М.: Интернет-Университет Информационных Технологий (ИНТУИТ), 2016.— 765 c.— Режим доступа: http://www.iprbookshop.ru/73692.html.— ЭБС «IPRbooks».

4. Рублев В.С. Языки логического программирования [Электронный ресурс]/ Рублев В.С.— Электрон. текстовые данные.— М.: Интернет-Университет Информационных Технологий (ИНТУИТ), 2016.— 125 c.— Режим доступа: http://www.iprbookshop.ru/73741.html.— ЭБС «IPRbooks».

5. Сорокин А.А. Объектно-ориентированное программирование [Электронный ресурс]: учебное пособие. Курс лекций/ Сорокин А.А.— Электрон. текстовые данные.— Ставрополь: Северо-Кавказский федеральный университет, 2014.— 174 c.— Режим доступа: http://www.iprbookshop.ru/63110.html.— ЭБС «IPRbooks».

6. Тяпичев Г.А. Быстрое программирование на С++ [Электронный ресурс]/ Тяпичев Г.А.— Электрон. текстовые данные.— М.: СОЛОН-ПРЕСС, 2010.— 373 c.— Режим доступа: http://www.iprbookshop.ru/65094.html.— ЭБС «IPRbooks».