Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Програма повинна працювати таким чином: після запуску функція обробки події onCreate формує список звукових файлів (WAV, MID і RMI), які знаходяться в підкаталозі Media головного каталога Windows. За допомогою функцій FindFirst і FindNext забезпечити пошук файлів, що задовольняють критеріям. Після того, як список сформований, використати метод Play для відтворення звукових файлів.
Більшість сучасних програм, що працюють в серед Windows, є мультимедійними. C++ Builder надає в розпорядження програміста два компоненти, які дозволяють розробляти мультимедійні програми:
Компонента 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. Відтворення звуку
Рис. 1. Форма і діалогове вікно програми "Звуки Windows"
Таблиця 3. Значення властивостей компоненту MediaPlayer1
Властивості |
Значення |
DeviceType |
dtAutoSelect |
VisibleButtons .btNext |
false |
VisibleButtons . BtPrev |
false |
VisibleButtons .btStep |
false |
VisibleButtons. btBack |
false |
VisibleButtons .btRecord |
false |
VisibleButtons. btEject |
false |
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();
}
}
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;
}
}
6. Запрограмувати подію OnCreate для форми
void __fastcall TForml::FormCreate(TObject *Sender)
{ Buttonl->Caption = PLAY;
Button2->Caption = PREVIOUS;
Button3->Caption = NEXT;
MediaPlayer->Notify = true; // дозволити подію Notify }
7. Запрограмувати подію Notify для зміни стану плеєра
void __fastcall.TForml::MediaPlayerNotifу(TObject *Sender)
{
switch ( MediaPlayer->Mode)
{case mpOpen: // користувач відкрив дисковод (
Buttonl->Enabled = false;
Button1->Caption = PLAY;
Button1->Tag = 0;
Button2->Enabled = false;
Button3->Enabled = false;
Label2->Caption = "00:00";
//по сигналу від таймера будемо перевіряти стан дисковода
Timer->Enabled = True; }
}
MediaPlayer->Notify = true;
}
8. Запрограмувати натиснення на кнопку Play/Stop
void _fastcall TForml::ButtonlClick(TObject *Sender)
{ if ( Buttonl-XTag = 0) {
MediaPlayer->Play();
Buttonl->Caption = STOP;
Buttonl->Hint = "Стоп";
Buttonl->Tag = 1;
Button3->Enabled = true;
MediaPlayer->Notify = true;
Timer->Enabled = true;
Tracklnfо();
} else {
Buttonl->Caption = PLAY;
Buttonl->Hint = "Відтворення";
Buttonl->Tag = 0;
MediaPlayer->Notify = true;
MediaPlayer->Stop();
Timer->Enabled = false; } }
9. Запрограмувати виведення в полі Label1 інформацію про поточний трек
void __fastcall TForml::TrackInfo()
{ int ms;
AnsiString st;
Track = MCI_TMSF_TRACK(MediaPlayer->Position);
MediaPlayer->TimeFormat = tfMilliseconds;
ms = MediaPlayer-XTrackLength[Track];
MediaPlayer->TimeFormat = tfTMSF;
st = "Трек "+ IntToStr(Track);
st = st + ". Длительность "+ IntToStr(MINUTE(ms));
st = st + ":" + IntToStr(SECOND(ms));
Label1->Caption = st; }
10. Запрограмувати кнопку «Наступний трек»
void__fastcall TForml::Button3Click(TObject *Sender)
{ MediaPlayer->Next();
// якщо перейшли до останнього треку, то кнопку Next зробити недоступною
if ( MCI_TMSF_TRACK(MediaPlayer->Position) == MediaPlayer->Tracks)
Button3->Enabled = false;
if (! Button2->Enabled) Button2->Enabled = true;
Tracklnfо();
Label2->Caption = "0:00";
}
11. Запрограмувати кнопку «Попередній трек»
void__fastcall TForml::Button2Click(TObject *Sender)
{
MediaPlayer->Previous(); // на початок поточного треку
MediaPlayer->Previous(); // на початок попереднього треку
if ( MCI_TMSF_TRACK(MediaPlayer->Position) == 1)
Button2->Enabled = false;
if ( ! Button3->Enabled) Button3->Enabled = true;
Tracklnfо();
Label2->Caption = "0:00"; }
12. Запрограмувати закриття прогрми та зупинки плеєра
void __fastcall TForml::FormClose(TObject *Sender, TCloseAction SAction)
{ MediaPlayer->Stop();
MediaPlayer->Close(); }
13. Розглянути вигляд вікна програми після її запуску ( рис. 3).
Рис. 3. Вигляд вікна під час виконання програми
14. Запустити програму на виконання, протестувати її та продемонструвати результат викладачу.
Контрольні запитання