5. díl - Hudba, zvuk a video, hlášky a vlastní mediaplyer

Ostatní jazyky Delphi 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


 

Stáhnout

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

 

  Aktivity (1)

Článek pro vás napsal Kukensius
Avatar
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 ...

Jak se ti líbí článek?
Celkem (2 hlasů) :
55555


 


Miniatura
Všechny články v sekci
Delphi
Miniatura
Následující článek
Menu, seznamy obrázků a poznámky

 

 

Komentáře

Avatar
RiAn Soft
Člen
Avatar
RiAn Soft:

Já sem furt na hlášky používal proceduru ShowMessage('');
Ale nikdy sem nevedel delat hlasky jako Ano/Ne a pod. To se mi hodí, Dík moc :D

Odpovědět 18.10.2012 15:13
Everything is possible
Avatar
B@$$teR
Člen
Avatar
B@$$teR:

;) thx, pomohol si mi pri seminarke ;)

Odpovědět 25.10.2012 23:27
Padá server, přej si něco !
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.