
- •Хід роботи
- •Створити форму як діалогове вікно програми "Звуки Windows" (рисунок 1).
- •Задати властивості компонента MediaPlayer1
- •Запрограмувати подію OnCreate для форми
- •6. Запрограмувати подію OnCreate для форми
- •7. Запрограмувати подію Notify для зміни стану плеєра
- •8. Запрограмувати натиснення на кнопку Play/Stop
- •9. Запрограмувати виведення в полі Label1 інформацію про поточний трек
Лабораторна робота 9
Тема. Використання мультимедіа в C++ Builder. Компонент MediaPlayer
Мета.Навчитись створювати програми, що забезпечують перегляд відеороликів і мультиплікації, відтворення музики, звукових ефектів, тощо.
Завдання до роботи:
Задача 1. Відтворення звуку. Створіть програму, використавши компонент MediaPiayer для відтворення звуку, за допомогою якої, можна прослуховувати звукові фрагменти, що супроводжують події Windows, — такі, як початок і завершення роботи, появу діалогового вікна та інші.
Програма повинна працювати таким чином: після запуску функція обробки події onCreate формує список звукових файлів (WAV, MID і RMI), які знаходяться в підкаталозі Media головного каталога Windows. За допомогою функцій FindFirst і FindNext забезпечити пошук файлів, що задовольняють критеріям. Після того, як список сформований, використати метод Play для відтворення звукових файлів.
Задача 2. Програвач компакт-дисків. На основі компоненту MediaPiayer створити програвач компакт-дисків. На початку роботи на індикаторі повинна виводитись інформація про час відтворення CD або повідомлення про необхідність вставити в дисковод Audio CD, або номер і тривалість трека, а також час від початку відтворення.
Теоретичні відомості
Більшість сучасних програм, що працюють в середовищі Windows, є мультимедійними. C++ Builder надає в розпорядження програміста два компоненти, які дозволяють розробляти мультимедійні програми:
-
Animate — забезпечує виведення анімації без звуку;
-
MediaPlayer — дозволяє вирішувати складніші завдання, наприклад відтворювати відеоролики, звук і супроводжувану звуком анімацію.
Теоретичні відомості
Компонента MediaPlayer
Компонента MediaPlayer забезпечує відтворення звукових файлів різних форматів (WAV, MID, RMI, МРЗ), повноцінної, супроводжуваної звуком анімації і відеороликів (AVI) і музичних компакт-дисків.
Значок компоненти MediaPlayer знаходиться на вкладці System.Компонента MediaPlayer є групою кнопок, подібних тим, які можна бачити на звичайномузичному аудіо- або відеоплеєрі. Властивості компоненти MediaPlayer, доступні під час розробки форми, наведені в таблиці 1.
Таблиця 1. Властивості компоненти MediaPlayer
Властивість |
Опис |
DeviceType |
Тип пристрою. Визначає конкретний пристрій, який є компонентом MediaPlayer. Тип пристрою задається іменованою константою: dtAutoSelect — тип пристрою визначається автоматично по розширенню файлу; dtVaweAudio — програвач звуку; dtAVlvideo— відеопрогравач; dtCDAudio — CD-проигрыватель |
FileName |
Ім'я файлу, в якому знаходиться відтворний звуковий фрагмент або відеоролик |
AutoOpen |
Ознака автоматичного завантаження відразу після запуску програми файлу відеоролика або звукового фрагмента |
Display |
Визначає компонент, поверхня якого використовується як екран для відтворення відеоролика (зазвичай як екран для відображення відео використовують компонент Panel) |
VisibleButtons |
Складена властивість. Визначає видимі кнопки компоненту. Дозволяє зробити невидимими деякі кнопки |
Окрім властивостей, доступних в процесі розробки форми, компонента MediaPlayer надає властивості, доступні під час роботи програми (таблиця 2), які дозволяють отримати інформацію про стан медіаплеєра, відтворений файл або трек Audio CD. Якщо MediaPlayer використовується для відтворення Audio CD, то інформація про відтворний трек може бути представлена у форматі tfTMSF (Track, Minute, Second, Frame — трек, хвилина, секунда, кадр).
Таблиця 2. Властивості компоненти MediaPlayer, які доступні під час роботи програми
Властивість |
Опис |
Length |
Довжина (час, необхідний для відтворення) відкритого файлу (наприклад, WAV або AVI) або всіх треків Audio CD |
Tracks |
Кількість треків на відкритому пристрої (кількість композицій на Audio CD) |
TrackLength |
Довжина (тривалість) треків. Властивістю є масив |
Position |
Позиція (час від початку) в процесі відтворення трека |
TimeFormat |
Формат представлення значень властивостей Length, TrackLength і Position. Найбільш універсальним є формат tfMilliseconds. Якщо медиаплеер є програвачем звукових CD, то зручно використовувати формат tfTMSF |
Mode |
Стан пристрою відтворення. Пристрій може знаходитися в стані відтворення (mpPlaying). Процес відтворення може бути зупинений (mpStopped) або припинений (mpPaused). Пристрій може бути не готовий до роботи (mpNotReady) або в пристрої (CD-дисководі) може бути відсутнім носій (mpOpen) |
Display |
Екран — поверхня, на якій здійснюється відображення кліпу. Якщо значення властивості не задане, то відображення здійснюється в окремому, створюваному під час роботи програми вікні |
DisplayRect |
Розмір і положення області відображення кліпу на поверхні екрану |
Play() |
Активізує процес відтворення. Дія методу аналогічно клацанню на кнопці Play |
Stop ( ) |
Зупиняє процес відтворення |
Pause ( ) |
Припиняє процес відтворення |
Next ( ) |
Перехід до наступного трека, наприклад до наступної композиції на Audio CD |
Previous ( ) |
Перехід до попереднього трека, наприклад до наступної композиції на Audio CD |
Step ( ) |
Перехід до наступного кадру |
Back ( ) |
Перехід до попереднього кадру |
Хід роботи
Задача 1. Відтворення звуку
-
Створити форму як діалогове вікно програми "Звуки Windows" (рисунок 1).
Рис. 1. Форма і діалогове вікно програми "Звуки Windows"
-
Задати властивості компонента MediaPlayer1
Таблиця 3. Значення властивостей компоненту MediaPlayer1
Властивості |
Значення |
DeviceType |
dtAutoSelect |
VisibleButtons .btNext |
false |
VisibleButtons . BtPrev |
false |
VisibleButtons .btStep |
false |
VisibleButtons. btBack |
false |
VisibleButtons .btRecord |
false |
VisibleButtons. btEject |
false |
-
Розмістити на форму компоненти ListBox1, який використовується для вибору звукового файлу, і два компоненти ТLabel, перший з яких використовується для виведення інформаційного повідомлення, другий, — для відображення імені файлу, вибраного користувачем.
-
Запрограмувати подію OnCreate для форми
void __fastcall TForml::FormCreate(TObject *Sender)
{
char *wd;//каталог Windows
wd = (char*)AllocMem(MAX_PATH);
GetWindowsDirectory(wd,MAX_PATH);
SoundPath = wd;
// звукові файли знаходяться в підкаталозі Media
SoundPath = SoundPath + "\\Media\\";
// формуємо список звукових файлів
TSearchRec sr;
if (FindFirst( SoundPath + "*.wav", faAnyFile, sr) == 0)
{
// знайдено файл з розширенням wav
ListBoxl->Items->Add(sr.Name);
// добляємо ім’я файла в список
while (FindNext(sr) == 0)
ListBoxl->Items->Add(sr.Name);
}
if (FindFirst( SoundPath + "*.mid", faAnyFile, sr) == 0) {
// знайдено файл з розширенням mid
ListBoxl->Items->Add(sr.Name);
while (FindNext(sr} = 0)
ListBoxl->Items->Add(sr.Name); }
if (FindFirstf SoundPath + "*.rmi", faAnyFile, sr) == 0) {
ListBoxl->Items->Add(sr.Name);
while (FindNext(sr) == 0)
ListBoxl->Items->Add(sr.Name); }
// виконати перший файл
if ( ListBoxl->Items->Count != 0)
{
Label2->Caption = ListBoxl->Items->Strings[1];
MediaPlayerl->FileName = SoundPath + ListBoxl->Items->Strings[l];
MediaPlayerl->Open();
MediaPlayerl->Play();
}
}
-
Запрограмувати подію OnClick компонента ListBoxl для клащання на елементі сиску
void__fastoall TForml::ListBoxlClick(TObject *Sender)
{
Label2->Caption = ListBoxl->Items->Strings[ListBoxl->ItemIndex];
MediaPlayerl->FileName = SoundPath + Label2->Caption;
MediaPlayerl->Open();
MediaPlayerl->Play() ;
}
Задача 2. Програвач компакт-дисків
1. Створити форму як на рисунку 2. Розмістіть кнопки Button1, Button2 і Button3 для керування плеєром і задайте для них властивості visible значення false.
Рис. 2. Форма програми CD Player
2. Задати значки на кнопках керування: текст, зображений шрифтом Webdings. При використанні цього шрифту, наприклад, цифрі 4 відповідає значок Play. Відповідність значків Webdings і звичайних символів відображено в таблиці 4.
Таблиця 4. Зображення символів шрифту Webdings
Символ Webdings |
Звичайний символ — наприклад, шрифт Arial |
Код символу (шестнадцатеричный) |
|
9 |
39 |
|
4 |
34 |
|
: |
3А |
|
< |
3З |
3. За допомогою директив припроцесора запрограмувати, щоб на кнопках плеєра відображались символи шрифту Webdings
#define Webdings
#ifdef Webdings
#define PLAY "4"
#define STOP "<"
#define PREVIOUS "9"
#define NEXT ":"
#else
// текст на кнопках при використанні звичайного шрифта, наприклад, Arial
#define PLAY "Play"
#define STOP "Stop"
#define PREVIOUS "Previous"
#define NEXT "Next"
#endif
4. За допомогою директив припроцесора запрограмувати переведення інтервалу часу, який виражається в мілісекундах в хвилини і секунди
#define MINUTE(ms) ( (ms/1000)/60)
#define SECOND,(ms) ( (ms/1000) %60)
5. Розмістити на форму компонент Timer та запрограмуйте обробку події OnTimer, яка виводитиме на індикатор (у полі мітки Label1) номер трека і час відтворення.
void __fastcall TForml::TimerTimer(TObject *Sender)
{
int trk;// трек
int min, sec;
AnsiString st;
if ( MediaPlayer->Mode == mpPlaying)
{ // одержати номер трека, що виконується
trk = MCI_TMSF_TRACK(MediaPlayer->Position);
if ( trk != Track)//відбулася зміна трека
{ TrackInfo0 ;
Track = trk; if { Track == 2)
Button2->Enabled = true;
if ( Track == MediaPlayer-XTracks)
Button3->Enabled = false;}
min = MCI_TMSF_MINUTE(MediaPlayer->Position);
sec = MCIJTMSF_SECOND(MediaPlayer->Position);
st.printf("%d:%.2d",min,sec); Label2->Caption = st; return;
}
if ( (MediaPlayer->Mode == mpStopped) && (MediaPlayer-XTracks > 1))
{Timer->Enabled = false;
Buttonl->Caption = PLAY;
Buttonl->Enabled = true;
Buttonl-XTag = 0;
MediaPlayer->Notify = true;
// одержати інформацію про час звучання CD
MediaPlayer-XTimeFormat = tfMilliseconds;
int ms = MediaPlayer->Length;
AnsiString st = "Audio CD. Час звучання: ";
st = st + IntToStr(MINUTE(ms));
st = st + ":" + IntToStr(SECOND(ms)};
Labell->Caption = st;
MediaPlayer-XTimeFormat = tfTMSF;
Labell->Visible = true; Track = 0;
return;
}
if (( MediaPlayer->Mode == mpOpen)||
(MediaPlayer->Mode == mpStopped) && (MediaPlayer->Tracks == 1))
{ Labell->Caption = "Вставьте Audio CD";
if ( Labell->Visible) Labell->Visible = false; else Labell->Visible = true;
}
}