:: Меню ::

Головна
Передмова
СЕРЕДОВИЩЕ РОЗРОБКИ C++ BUILDER
Початок роботи
Перший проект
ПРАКТИКУМ ПРОГРАМУВАННЯ
Графіка
Мультимедіа
Бази даних
Компонент програміста
Консольне застосування
Довідкова система
Створення настановного диска
Приклади програм
C++ Builder — короткий довідник
Книга для гостей
Контакти
Добавити у вибране

:: Друзі ::

 
Лечение в Швейцарии Многие наши клинки входят в сеть Leading clinics of Switzerland (Ведущие клиники Швейцарии). Лечение в Швейцарии с компанией SCG – это эффективность, надежность и индивидуальное обслуживание по самым высоким стандартам.

:: Лічильники ::

=

 

 

 

 

 

Відтворення звуку



Як приклад використання компоненту Mediapiayer для відтворення звуку розглянемо програму, використовуючи яку, можна прослуховувати звукові фрагменти, супроводжуючі події Windows, — такі, як почало і завершення роботи, появу діалогового вікна і ін. Форма і діалогове вікно програми "Звуки Windows" представлені на мал. 4.5, текст — в лістингу 4.2, а значення властивостей компоненту Mediapiayer1 — в таблиці. 4.7.



Мал. 4.5. Форма і діалогове вікно програми "Звуки Windows"


Таблиця 4.7. Значення властивостей компоненту Mediaplayer1


Компонент

Значення

Devicetype

dtautoselect

Visiblebuttons .btNext

false

Visiblebuttons . Btprev

false

Visiblebuttons .btStep

false

Visiblebuttons. btback

false

Visiblebuttons .btRecord

false

Visiblebuttons. bteject

false


Помімо доомпонента Mediaplayer на формі знаходиться компонент Listbox який використовується для вибору звукового файлу, і два компоненти Labe1перший з яких використовується для виведення інформаційного повідомлення, другий — для відображення імені файлу, вибраного користувачем.

 Лістинг 4.2. Використання компоненту Mediaplayer для відтворення звуку

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); 
// додамо ім'я файлу в список
// ще є файли з розширенням wav?
while (Findnext(sr) == 0)
Listboxl->items->add(sr.Name);
}
if (Findfirst( Soundpath + "*.mid", faanyfile, sr) == 0) {
// знайдений файл з розширенням mid
Listboxl->items->add(sr.Name); 
// додамо ім'я файлу в список
// ще є файли з розширенням mid?
while (Findnext(sr} = 0)
Listboxl->items->add(sr.Name); }
if (Findfirstf Soundpath + "*.rmi", faanyfile, sr) == 0) {
// знайдений файл з розширенням rmi
Listboxl->items->add(sr.Name); 
// додамо ім'я файлу в список
// ще є файли з розширенням rmi?
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() ;
 } 

Працює програма таким чином. Відразу після запуску функція обробки події oncreate формує список звукових файлів (WAV, MID і RMI), які знаходяться в підкаталозі Media головного каталога Windows. Оскільки на різних комп'ютерах каталог, в який встановлена операційна система, може називатися по-різному, то для отримання його імені використовується API функція Getwindowsdirectory значенням якої є повне ім'я каталога Windows. Список звукових файлів формується

За допомогою функцій Findfirst і Findnext. функція Findfirst забезпечує пошук файлу, що задовольняє критерію пошуку, вказаному при виклику функції. Функція Findnext продовжує процес пошуку. Обом функціям як параметр передається структура типу Tsearchrec поле Name якою (у разі успіху) містить ім'я файлу, що задовольняє критерію пошуку. Після того, як список звукових файлів сформований, застосуванням методу Play активізується процес відтворення першого файлу.

Клацання на елементі списку обробляється функцією Tfom1: :Listbox1click яка привласнює значення властивості Filename компоненту Mediapiayer1 за допомогою методу open відкриває вибраний файл і застосуванням методу Play активізує процес відтворення.

Наступний приклад показує, як на основі компоненту Mediapiayer можна створити цілком пристойний програвач компакт-дисків. Вид форми і діалогового вікна програми приведений на мал. 4.6. Окрім компонентів, показаних на малюнку, у формі є компонент Mediapiayer. Оскільки кнопки компоненту Mediapiayer під час роботи програми не використовуються (для управління плеєром служать кнопки Button1, Button2 і Buttons), властивості visible привласнено значення false а сам компонент знаходиться за межею форми.



Мал. 4.6. Форма програми CD Player


Значки на кнопках управління — це текст, зображений шрифтом Webdings. При використанні цього шрифту, наприклад, цифрі 4 відповідає значок Play. Відповідність значків Webdings і звичайних символів відображає таблицю. 4.8.

Таблиця 4.8. Зображення символів шрифту Webdings


Символ Webdings

Звичайний символ — наприклад, шрифт Arial

Код символу (шістнадцятиричний)



9

39



4

34


:




<



Компонент Timer використовується для організації циклу опиту стану медіаплєєра. Під час відтворення CD функція обробки події Ontimer виводить на індикатор (у полі влучні Label1) номер трека і час відтворення.

Вид вікна програми відразу після її запуску у випадку, якщо в CD-дисководе знаходиться Audio CD, приведений на мал. 4.7. У випадку, якщо в CD-дисководе диска немає або диск не звуковий, замість інформації про час відтворення буде виведено повідомлення "Вставте Audio CD". Клацання на кнопці Play (Button1) активізує процес відтворення. Під час відтворення на індикаторі відбивається номер і тривалість відтворного трека, а також час від початку відтворення (мал. 4.8).



Мал. 4.7. На початку роботи на індикаторі виводиться інформація про час відтворення CD або повідомлення про необхідність вставити в дисковод Audio CD



Мал. 4.8. Під час відтворення на індикаторі відображається інформація про відтворний трек


Текст програми приведений в лістингу 4.3. Слід звернути увагу на подію Notify яке може генерувати Mediapiayer. Подія Notify виникає у момент зміни стану плеєра за умови, що значення властивості Notify рівно true. У даній програмі подія Notify використовується для виявлення факту відкриття CD-дисковода користувачем.

Лістинг 4.3. Програвач компакт-диск дисків

#define Webdings //на кнопках плеєра стандартні символи
// зображення яких узяте з шрифту Webdings 
#ifdef Webdings 

// шрифту 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 
// ці макроси забезпечують переклад інтервалу часу
 // вираженого в мілісекундах в хвилини і секунди 
#define MINUTE(ms) ( (ms/1000)/60) 
#define SECOND(ms) ( (ms/1000) %60) 
// виводить в полі Label 1 інформацію про поточний трек 
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; } 
void __fastcall Tforml::formcreate(Tobject *Sender) 
{ 
Buttonl->caption = PLAY;
Button2->caption = PREVIOUS; 
Button3->caption = NEXT; 
Mediaplayer->notify = true; // вирішити подію 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; 
}
// клацання на кнопці Play/stop 
void _fastcall Tforml::buttonlclick(Tobject *Sender) 
{ 
if ( Buttonl-xtag = 0) { 
// клацання на кнопці Play 
Mediaplayer->play() ; 
Buttonl->caption = STOP; 
Buttonl->hint = "Стоп"; 
Buttonl->tag = 1; 
Button3->enabled = true; // доступна кнопка "Наступний трек" 
Mediaplayer->notify = true; 
Timer->enabled = true; 
Tracklnfо(); 
}
 else { 
// клацання на кнопці Stop 
Buttonl->caption = PLAY;
Buttonl->hint = "Відтворення"; 
Buttonl->tag = 0; 
Mediaplayer->notify = true; 
Mediaplayer->stop();
Timer->enabled = false; } } 
// сигнал від таймера: вивести номер трека
// і час відтворення 
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; 
} 
/* Якщо дисковод відкритий або в нім немає 
Audio CD, то Mode == mpopen. 
Чекаємо диск, тобто до тих пір, поки не буде 
Mode == mpstopped + к-ть треків > 1
*/ 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; 
} 
// дисковод відкритий або в дисководі не Audio CD 
if (( Mediaplayer->mode == mpopen)|| 
(Mediaplayer->mode == mpstopped) && 
(Mediaplayer->tracks == 1))
 { 
Labell->caption = "Вставте Audio CD";
 if ( Labell->visible) 
Labell->visible = false; else Labell->visible = true; 
} 
} 
// клацання на кнопці "Наступний трек"
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"; 
} 
// клацання на кнопці "Попередній трек" 
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"; } 
// користувач закрив вікно програми 
void __fastcall Tforml::formclose(Tobject *Sender, Tcloseaction Saction) 
{ 
Mediaplayer->stop(); 
Mediaplayer->close(); } 

 


pregnant at 9 months Новый уровень секса с индивидуалками Хабаровска станет вам доступен уже сейчас.
x

:: Наша кнопка ::

Отримати код:

Підтримайте наш сайт і розмістіть нашу кнопку на своєму ресурсі.


:: Реклама ::


:: Посилання ::

-


 

 

 


Copyright by Zvircom © 2009