Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 5 - Hudba, zvuk a video, hlášky a vlastní mediaplyer

Začněme něčím, co vám možná chybělo, ale co jsem ve svých programech měl! A to je HUDBA, ZVUKY a VIDEO! Samozřejmě to jde! Začněme tedy s MÉDII!:

Otevřete si položku System (v nabídce objektů), v níž je hned vlevo Timer. Třetí zleva je to, co hledáme:

MediaPlayer

To vám přehraje skoro všechno! Nejprve si řekneme, jaké má funkce navíc a potom jak přehrávat určité soubory:

  • AutoEnable - Když není otevřená médium, jsou tlačítka na přehrávání nepřístupná. Když se ale otevře, jsou přístupná. Zde se tato funkce zapíná (True) a vypíná (False).
  • AutoOpen - Když zadáte adresu média (např.: C:\Windows\Me­dia\Ding.wav), automaticky se otevře (když není otevřené, nedá se přehrát, ale když se otevře neexistující médium, může způsobit problémy). Zde se tato funkce zapíná (True) a vypíná (False).
  • AutoRewind - Když médium zastavíte tlačítkem (nebo příkazem) STOP, automaticky se přetočí na začátek (pokud by se nepřetočilo, nehrálo by). Zde se tato funkce zapíná (True) a vypíná (False).
  • ColoredButtons - Když kliknete na malé plus vedle nápisu, volíte, zda budou tlačítka pro přehrávání barevná (Fasle znamená, že budou obrázky černé!).
  • DeviceType - Nastavení, které médium se bude přehrávat (typ média). O tom budu psát níže podrobněji.
  • Display - Přehráváte-li video, někde se musí objevit obraz. Zde nastavíte, kde (například nějaký panel, nebo samostatné okno...).
  • EnabledButtons - Zde nastavíte, která tlačítka budou přístupná.
  • FileName - Toto je jedna z nejdůležitějších položek. Zde nastavíte adresu média (tj. kde je médium (soubor hudby, zvuku nebo videa) umístěné na disku, CD, disketě, DVD, webu nebo v síti ... např.: C:\Windows\Me­dia\Canyon.mid).
  • VisibleButtons - Zde nastavíte, která tlačítka budou viditelná.

A to je vše! Slíbil jsem, že se trochu rozepíšu o DeviceType. To se však dozvíte v jednotlyvých typech médií:

Hudba

Tak tu si rozdělíme: Hudba může být dvou typů:

1. typ: MIDI: hudba je v počítači uložená tak, že jsou zadané noty, hudební nástroje, tempo a spousty dalších věcí, pomocí kterých počítač hraje. Je to velmi úsporné, ale je to pouze melodie. Nejde k tomu zpěv. 2.typ: WAVE: hudba je zaznamenána stejně, jako třeba na CDčku. Je prostě zaznamenán zvuk a ten se pak přehraje. To ale většinou zabírá příliš místa. Já používám pouze MIDI hudbu. Ta má koncovku MID , nebo RMI. Ale to je jedno, co z toho. Když přejmenujete hudbu např. Music.rmi na Music.mid, nic se nestane. U WAVE hudby je to jiné. Základní je asi koncovka WAV (zaznamenávají se s ní hlavně zvuky). A potom dnes známější MP3. Ta je trochu úspornější. Ale nejúspornější je samozřejmě MIDI! Pokud chcete přehrávat hudbu z CD, nastavte DeviceType na dtCDAudio. Pro WAVE hudbu je zde položka dtWaveAudio. Pokud jste si ale z nabídky hudebních typů nevybrali, nebo hodláte přehrávat něco, co nevíte, co je to za typ, nastavte dtAutoSelect. To si samo zvolí to nejvhodnější. (Hodí se u MIDI hudby.)

To základní o hudbě už umíte, takže jdeme dál:

Zvuky

Zvuky jsou prostě WAVE média. Dají se nahrát pomocí mikrofonu. Mívají většinou koncovku WAV. A teď pár věcí k MP3: MP3 může být hudba i zvuk (stejně jako WAV). Pokud váš WindowsMediaPlayer dokáže přehrát MP3 média (což by měl), neměl by být problém.

Tak to by byly zvuky.:

Video

Ha! A je to tu! Zde využijete i položky Display. Když u ní nic nenastavíte, zobrazí se obraz v novém okně. Video je buď s koncovkou AVI (u DeviceType nastavte dtAVIVideo), nebo MPG (nebo taky MPEG - to může někdy blbnout ... platí to samé, jako u RMI a MID!). A to je asi zase vše.

To by byly typy! Ale jak je pouštět?

Je to jednoduché. Stačí pár příkazů:

  • Open - Otevře médium (hodí se, když u AutoOpen máte False).
  • Play - Začne přehrávat médium.
  • Pause - Pozastaví přehrávání.
  • Stop - Zastaví přehrávání média (pokud máte u AutoRewind True, přetočí se médium na začátek).
  • Rewind - Přetočí médium na začátek (hodí se, když u AutoRewind máte False).

Všechny předchozí příkazy se používají takto:

Jmenoprehravace.Prikaz;

Pro pochopení příklad:

MediaPlayer1.Open;

A teď pár věcí, co se určitě budou hodit:

Adresa := ExtractFileDir(ParamStr(0))+'\';

Nejlepší věc, co jsem kdy použil. Na co? Adresa musí být string(prostě proměnná typu string pojmenovaná Adresa)! No a ten příkaz vpravo vám vypíše adresu složky, ve které máte uložený EXE soubor programu. Hodí se to např. takto:

Chcete přehrát MIDI soubor Hudba.mid. Máte ho uložený u programu. Kdybyste jako FileName zadali pouze Hudba.mid, mohl by mít program problémy. Když ale zadáte výše uvedený příkaz do procedury OnCreate (když se vytváří okno) a jako FileName zadáte Adresa + 'Hudba.mid', tak už to bude bez problému. P.S.: Na konci příkazu je +'\'. Je to tam proto, protože když máte program například uložený na adrese např. C:\Programy\Pro­gram1\Project1­.exe, část příkazu vpravo vám vypíše adresu C:\Programy\Pro­gram1. Když byste neměli na konci příkazu +'\', museli byste psát např. Adresa + '\Hudba.mid'. Ale to teď nemusíte! :-)

P.S.2.: String Adresa se může jmenovat klidně jinak. (Já používám Adresar - to jako Adresář)

Řekl jsem pár, takž dvě. A tu je ta druhá:

if MediaPlayer1.Position = MediaPlayer1.TrackLength[1] then

Ano, pak musíte napsat jeden příkaz, nebo ho ohraničit BEGINem a ENDem. Tento příkaz říká: Pokud je pozice MediaPlayeru1 (délka přehrané části média) stejná, jako délka média v MediaPlayeru1, potom... ! Takže už určitě víte, na co se to používá. Tento příkaz dáte někam do časovače (Timer) a každou dobu Intervalu v Timeru se bude kontrolovat, zda médium dohrálo. Pokud ano, stane se to, co napíšete dál. Např.:

if MediaPlayer1.Position = MediaPlayer1.TrackLength[1] then
    MediaPlayer1.Play;

To se celkem hodí, ne? A můžete přidávat hudbu a zvuky! Ale musíte mít MediaPlayer.

Kostra programu

A teď si probereme kostru programu! Nechápete? Však pochopíte! Zde je text, který si Delphi samo napíše, když zadáte novou aplikaci a dvakrát kliknete na okno:

  unit Unit1;

  interface

  uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

  type
TForm1 = class(TForm)
  procedure FormCreate(Sender: TObject);
private
  { Private declarations }
public
  { Public declarations }
end;

  var
Form1: TForm1;

  implementation

  {$R *.dfm}

  procedure TForm1.FormCreate(Sender: TObject);
  begin

  end;

  end.

Proberme si to postupně po odstavcích:

  • unit Unit1; - Unit znamená jednotka. V našem případě část programu. Tímto nápisem musí začínat text každého okna. Je to prostě úvod pro program, který mu říká, že to, co spouští se (v našem případě) jmenuje Unit1. - To je ta pravá část příkazu!
  • interface - To je opět pouze pro program, aby věděl, že se mu budou zadávat proměnné a objekty!
  • uses - Kvůli této položce rozebírám program! Zde je totiž zadáno, které soubory má program načíst, aby se mohl vytvořit EXE soubor. Všechny tyto soubory (nebo aspoň většinu) byste měli najít u Delphi v podadresáři Lib! Většinou si všechno Delphi vyplní samo, ale někdy musíte doplnit soubor sami!
  • type - Zde jsou zapsány typy objektů, nebo proměnných, které nejsou obsaženy v souborech, které jsou zadány za USES! Zde máme:
TForm1 = class(TForm)
  procedure FormCreate(Sender: TObject);
private
  { Private declarations }
public
  { Public declarations }
end;

Ano, to vše patří k sobě. TForm1 je název typu objektu a class(TForm) značí, že je to Okno. Dále máme předepsané procedury, které jsou níže oknu přiřazeny (viz. níže). Pod private se píší proměnné, které smí použít pouze okno typu a proměnné zapsané pod public, smí použít všechna okna!

  • var - Tak tohle jestli nevíte, tak jste nečetli předchozí návody a nebo vnímáte jedním okem tam a bůhví kudy ven! Podle toho, že je zde Form1: TForm1;, se tady asi bude určovat název okna! Ano! Vytváří se zde objekt typu TForm1, který se jmenuje Form1. Jasné? Snad ano...
  • implementation - To, stejně jako interface značí část programu. Tentokrát ale už část, která se bude provádět a bude vidět navenek!
  • {$R *.dfm} - Toto značí ještě jeden soubor, ze kterého má program také čerpat důležité věci (viz. jindy).
  • *procedure - To už ale znáte. Procedury už jsme probírali a vy jistě víte, kam patří! :-)
  • end. - End s tečkou značí konec celého programu. A mám takový pocit, že už jsme vám to někdy říkal (vlastně psal, ale vyjde to na stejno!).

Tak! A teď, když jsem vám konečně vysvětlil, kde co v programu je, se vraťme k WAVE souborům. Speciálně s koncovkou WAV! U uses jsem psal, že někdy se musí soubor zapisovat. A tak si ho zapíšeme, abyste mohli používat následující příkazy. Před středník na konci uses tedy vpište:

  • MMSystem - Tím jsete programu řekli, že budete používat přehrávání wavů bez přehrávače! (můžete i s ním, ale je to zbytečné!) Tady je příkaz, který k tomu slouží:
PlaySound(Název souboru, 0, typpřehrávání);
  • Název souboru je např.: 'Zvuk.wav', 0 je 0 a typy přehrávání vám dva základní napíšu:
  • SND_ASYNC - Zvuk se jednou zahraje (to je základní funkce)
  • SND_LOOP - Zvuk se hraje neustále dokola (když skončí, spustí se znovu).

P.S.: Nedají se přehrávat dva zvuky naráz.

Hlášky

Přestaňme už probírat média! Co takhle okno s hláškou? Např.: "Opravdu chceš ukončit hru?" Takže do toho: Slouží k tomu jediný příkaz:

if Application.MessageBox(PChar('hláška'),PChar('názevokna'),
    MB_tlačítka) = Tlačítko then

:-O... Šílené, ale lehko vysvětlitelné!

Místo hláška doplníte to, co se objeví v okně jako text.
Místo názevokna napíšete to, co bude napsáno na okraji okna (prostě nadpis)!
Místo tlačítka doplníte např.: OK - vznikne tedy MB_OK.
A místo Tlačítko doplníte např.: IdOK.

A teď si probereme typy názvů za MB_:

  • OK - v okně bude pouze tlačítko OK
  • OKCANCEL - v okně bude tlačítko OK a Storno
  • YESNO - v okně budou tlačítka Ano a Ne
  • YESNOCANCEL - v okně budou tlačítka Ano, Ne a Storno
  • RETRYCANCEL - v okně budou tlačítka Znovu a Storno
  • ABORTRETRYIGNORE - v okně budou tlačítka Zrušit, Znovu a Ignorovat

Můžete si také přidat obrázek. Za např. MB_YESNO napíšete + MB_ a něco z těchto možností:

  • ICONEROR - obrázek chyby
  • ICONINFORMATION - obrázek informace
  • ICONWARNING - obrázek chyby
  • ICONQUESTION - obrázek otázky

MB_... už probrané máme a tak se pusťme do položky uvedené jako Tlačítko. Tato část textu totiž určuje, které z nabízených tlačítek bylo zmáčknuto. Možnosti:

  • IdOK - bylo stisknuto OK
  • IdCANCEL - bylo stisknuto Storno
  • IdYES - bylo stisknuto Ano
  • IdNO - bylo stisknuto Ne
  • IdABORT - bylo stisknuto Zrušit
  • IdRETRY - bylo stisknuto Znovu
  • IdIGNORE - bylo stisknuto Ignorovat

A nakonec si uveďme příklad:

id := Application.MessageBox(PChar('Pozor! Program má problémy s načtením souboru!'),PChar('Chyba!'),
MB_ABORTRETRYIGNORE + MB_ICONEROR);

if id = IdABORT then
   Close
else
if id = IdRETRY then
  ProceduraNactiSoubor;

Hodnotu id si uložíme to předem připravené proměnné, bude to klasický integer. Pokud kliknete na Zrušit, program skončí. Pokud na Znovu, spustí se procedura ProceduraNacti­Soubor. Pokud kliknete na Ignorovat, program bude pokračovat v práci. P.S.: Pokud máte pouze MB_OK, stačí psát jen

Application.MessageBox(PChar('hláška'),PChar('názevokna'), MB_OK);

a dál jen to, co se stane po odkliknutí okna!

Scrollbar

A na závěr jeden objekt z položky Standart: SCROLLBAR - To je to, co vidíte vpravo na okně! A někdy i dole! Ten posuvník. Funguje podobně jako TrackBar (viz minule - bod 7.) až na pár věcí navíc:

  • Kind - Nastavíte, zda je posuvník shora dolů, nebo zleva doprava (vodorovný, nebo svislý)
  • LargeChange - Když kliknete někam na lištu posuvníku, ukazatel se pohne o několik míst směrem k místu, kam jste klikli. Zde nastavíte, o kolik míst (o jaký počet) se posune.
  • PageSize- Zde nastavíte šířku posuvníku (v pixelech)
  • SmallChange - Zde nastavíte, o kolik míst se posune posuvník, když kliknete na šipku na kraji lišty. (většinou to bývá nižší číslo než LargeChange)

Program

A dochází na to pro vás asi nejsmutnější: KONEC! Už jenom příklad a je po všem!

Co takhle vyrobit si přehrávač Videa, hudby a zvuku? Nejprve vytvořte MediaPlayer. Jmenuje se Hudba a je neviditelný. Potom dvě tlačítka. HudbaStop(tak se bude jedno jmenovat) bude mít nápis Stop a HudbaPlay(to je to druhé) bude mít nápis Play. Klikněte 2x na okno a pište:

Hudba.FileName := 'Hudba.mid';
Hudba.Open;

A nezapomeňte k programu přiložit MIDI hudbu pojmenovanou Hudba.mid! Po stisknutí HudbaStop nastavte Hudba.Stop; a po stisknutí HudbaPlay nastavte Hudba.Play;. A máte přehrávač hudby! Teď přidáme video: Vytvořte opět MediaPlayer. Jmenuje se Video a je neviditelný. Potom dvě tlačítka a panel. VideoStop(tak se bude jmenovat první tlačítko) bude mít nápis Stop a VideoPlay(to je to druhé) bude mít nápis Play. Ať je nepomícháte s tlačítky k Hudbě! Panel pojmenujte panel a smažte Caption. U MediaPlayeru Video nastavte Display na Panel (Delphi by ho mělo nabídnout!). Klikněte 2x na okno a pište:

Video.FileName := 'Video.avi';
Video.Open;

A nezapomeňte k programu přiložit AVI video pojmenované Video.avi! Po stisknutí VideoStop nastavte Video.Stop; a po stisknutí VideoPlay nastavte Video.Play;. A máte přehrávač videa! A nakonec změna! Nebudeme dávat MediaPlayer! Do položky uses dopište MMSystem.

Potom vytvořte tlačítko Zvuk s nápisem Zvuk. Po kliknutí u něho nastavte:

PlaySound('Zvuk.wav', 0, Snd_Async);

A opět nesmíte zapomenout vytvořit Zvuk.wav! A je to! Primitivní, ale co jiného se zvukem a videem? Já vím! Rozhodně něco jiného, ale už je pozdě:-D ! Tak ahoj příště!

A nakonec jsem pro vás připravil balík MIDI hudby (329kB, po rozbalení 1,08MB), který když rozbalíte (je potřeva WinZIP), získáte 60 různých celkem slušných písniček! Naleznete ho přiložený v archivu na konci článku. A pokud se vám nelíbí, hledejte jinde na internetu a jistě nějaké jiné najdete...

...Kukensius

Delphi

 

Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 606x (3.86 MB)
Aplikace je včetně zdrojových kódů v jazyce Delphi

 

Předchozí článek
Události, vlastní procedury a typy, převody textu a čísel
Všechny články v sekci
Delphi
Přeskočit článek
(nedoporučujeme)
Menu, seznamy obrázků a poznámky
Článek pro vás napsal Kukensius
Avatar
Uživatelské hodnocení:
6 hlasů
Jméno: Lukáš Kučera alias Kukensius<br/> Narození: říjen 1987 (ve znamení vah)<br/> Bydliště: Jihlava, Česká Republika<br/> Studium: 1. ročník magisterského studia<br/> Škola: Vysoké učení technické v Brně<br/> Fakulta: Fakulta elektrotechniky ...
Aktivity