Staňte se programátorem: Napište si vlastní GOM Player II.

Minule jste si s námi mohli naprogramovat jednoduchý multimediální přehrávač v jazyku C#, dnes jeho funkce rozšíříme o paměť a možnost vytvoření jednoduchého playlistu.

V předchozí části našeho programátorského seriálu jsme si ukázali, jak využít komponentu AxWindowsMediaPlayer, která představuje přehrávací část Windows Media Playeru. Ukázali jsme si, jak přehrávat a pozastavovat nahrávky, jak nastavovat jejich hlasitost a jak vykreslit průběh přehrávání pomocí metod třídy System.Drawing.Graphics. V dnešním díle se dozvíte, jak si uložit historii nahrávek do jednoduchého souboru a jak nastavit režim celé obrazovky při stisku klávesy Enter. Esc nám pak pro změnu poslouží k návratu do okenního režimu.

Náš aktualizovaný přehrávač bude disponovat také bohatší nabídkou ovládacích tlačítek, procentuálně zobrazí pozici, ve které se přehrávaný film, internetová televize nebo písnička nachází a dokonce budete moci využít i jednoduchý editor seznamu skladeb včetně podpory pro shuffle – náhodné přehrávání.

Klepněte pro větší obrázek  Klepněte pro větší obrázek
Vylepšený přehrávač a editor skladeb k přehrání

Ukládání historie do XML souboru

Pro ukládání historie je vhodné zvolit XML formát právě díky jeho jednoduchosti. Formát XML souboru bude mít následující podobu:

<?xml version="1.0" encoding="utf-8"?>
<nahravky>
  <nahravka1>D:\beatles – Hey Jude</nahravka1>
  <nahravka2>C:\Program Files\Shared\Overseer – Horndog.mp3</nahravka2>
  *
  *
  *
</nahravky>

Klepněte pro větší obrázek
Historie přehrávání, která se načetla z XML souboru

V kořenovém uzlu nahrávky budou uloženy poduzly obsahující jednotlivé cesty k již dříve přehrávaným nahrávkám. Pro manipulaci s XML dokumentem nám pomůže třída System.Xml.XmlDocument, která načtený XML dokument uchovává celou dobu v paměti – díky tomu je použití této třídy vhodné pro malé XML dokumenty. Pro získání nahrávek, jež jsou uloženy v kořenovém uzlu nahrávky použijeme metodu SelectNodes, která jako argument očekává výraz XPath, což je jednoduchý dotazovací jazyk s podobným použitím jako SQL u databází. Více o tomto jazyce najdete zde. Metoda SelectNodes vrací pole typu XmlNodeList, což je kolekce obsahující instance třídy XmlNode představující jednotlivé uzly vybrané na základě dotazu Xpath. Pro získání textové hodnoty uložené v tomto uzlu slouží vlastnost InnerText.

public static string[] NahrajNahravky()
{
  List<string> list = new List<string>();
  XmlDocument xml = new XmlDocument();
  xml.Load(Application.StartupPath + @"\history.xml");
  XmlNodeList nody = xml.SelectNodes(@"/nahravky/*");
  for (int x = nody.Count - 1; x >= 0; x--)
  {
    XmlNode nod = nody[x];
    if (nod.InnerText != "")
    {
      list.Add(nod.InnerText.Replace(Environment.NewLine,""));
    }
  }
  return list.ToArray();
}

Pro vytvoření nového uzlu použijeme instanci třídy XmlElement, které pomocí vlastnosti InnerText přiřadíme textovou hodnotu, jež bude uložena v tomto uzlu. Pro přiřazení tohoto uzlu k jeho rodiči slouží metoda AppendChild rodičovského uzlu. Nově upravený XML dokument je nutné uložit pomocí metody Save třídy XmlDocument.

public static void UlozNahravku(string cesta)
{
  XmlDocument xml = new XmlDocument();
  xml.Load(Application.StartupPath + @"\history.xml");
  XmlNode nod = xml.SelectSingleNode(@"/nahravky");
  XmlElement el = xml.CreateElement("nahravka" + (nod.ChildNodes.Count+1).ToString());
  el.InnerText = cesta;
  nod.AppendChild(el);
  xml.Save(Application.StartupPath + @"\history.xml");
}

Přepínání režimů obrazovky

Pro zapnutí režimu obrazovky při stisku klávesy enter, musíme danému formuláři registrovat událost OnKeyPress, která bude zavolána vždy při stisku jakékoli klávesy. Pro identifikaci konkrétní klávesy použijeme vlastnost KeyChar instance třídy KeyPressEventArgs, která je argumentem této události. Vlastnost KeyChar vrací typ char obsahující stisknutý znak v kódové sadě Unicode. Klávesa enter má v Unicode index 13.

private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
  if (((int)e.KeyChar) == 13) // enter
  {
    // Odstraní okraje formuláře
    this.FormBorderStyle = FormBorderStyle.None;
    // Maximalizuje okno
    this.WindowState = FormWindowState.Maximized;
    // Skryje nabídku a panel hlasitosti
    panel1.Visible = false;
    this.menuStrip1.Visible = false;
  }

Pro zachycení stisku klávesy escape použijeme index číslo 27 v kódovací sadě unicode:

  else if (((int)e.KeyChar) == 27) // escape
  {
    this.FormBorderStyle = FormBorderStyle.Sizable;
    this.WindowState = FormWindowState.Normal;
    panel1.Visible = true;
    this.menuStrip1.Visible = true;
  }
}

S přehrávačem ještě nekončíme

Stávající přehrávač jsem obohatil nejen o výše popsané funkce, navíc jsem přidal okno pro vytváření seznamu přehrávaných nahrávek, tj. playlist. Jeho popis by však byl dosti šložitý a určitě by vyšel na další článek, který bych rád věnoval rozšíření přehrávače o manipulaci s CD mechanikou, titulky, nastavování atributů CD nahrávek. Případně o další vaše nápady.

Pokud si chcete podrobněji prostudovat kód přehrávače, můžete si samozřejmě jako vždy stáhnout kompletní zdrojové kódy včetně projektu pro bezplatné vývojové prostředí Microsoft Visual C# 2008 Express Edition a pokud jazyku C# nevládnete, můžete si stáhnout přeložený EXE program pro operační systém Windows s nainstalovanou platformou Microsoft .NET Framework novější verze.

Témata článku: Software, Programování, Hudba, filmy, seriály, Unicode, Escape, Beatles, Playlist

1 komentář

Nejnovější komentáře

  • wetty 6. 4. 2009 21:04:43
    Zrovna dneska jsem hledal jak přehrávat multimédia :-D. K námětu....
Určitě si přečtěte

Operační systém běžným počítačům nedal Bill Gates, ale Gary Kildall

Operační systém běžným počítačům nedal Bill Gates, ale Gary Kildall

** Gary Kildall pochopil, že levné výpočetní čipy mohou posloužit jako univerzální počítače pro všechny ** Připravil pro ně proto první operační systém ** Později mu systém vyfoukl Microsoft a nazval ho MS DOS

23.  4.  2017 | Pavel Tronner | 51

Původní Starcraft: Brood War je nyní zdarma. Konec práce! Jde se pařit

Původní Starcraft: Brood War je nyní zdarma. Konec práce! Jde se pařit

** Legendární hra Starcraft je nyní k dispozici zdarma ** Chystá se i nová remasterovaná verze s hezčí grafikou

19.  4.  2017 | Jakub Čížek | 25

Umělá inteligence je sice v plenkách, už teď ale přestáváme rozumět, jak vlastně funguje. To je problém

Umělá inteligence je sice v plenkách, už teď ale přestáváme rozumět, jak vlastně funguje. To je problém

** Už je to tady, lidé přestávají chápat počítače ** Systémy neuronových sítí začínají pracovat tak, že ani jejich tvůrci přesně neví, co se uvnitř děje ** Do budoucna to může být závažný problém

Včera | Jakub Čížek | 109

Brno otevřelo největší českou dílnu pro bastlíře. Kladívka, vrtačky, 3D tiskárny, laserové řezačky. Je tu vše

Brno otevřelo největší českou dílnu pro bastlíře. Kladívka, vrtačky, 3D tiskárny, laserové řezačky. Je tu vše

** Máte nápad, ale chybí vám stroje a pořádná dílna? ** Chcete postavit ptačí budku, nebo krabičku pro Arduino? ** Brno otevřelo svůj FabLab – laboratoř pro bastlíře

19.  4.  2017 | Jakub Čížek | 31

Před 35 lety měl premiéru legendární počítač ZX Spectrum. Připomeňte si „Gumáka“

Před 35 lety měl premiéru legendární počítač ZX Spectrum. Připomeňte si „Gumáka“

** Slavný osmibitový počítač Sinclair ZX Spectrum byl uveden právě před 35 lety ** Připomeňte si tento průkopnický počítač v tematických článcích ** Podívejte se, jak funguje dnes

23.  4.  2017 | Pavel Tronner | 13

Český Google Překladač začal používat umělou inteligenci. Konec „drahoušků zákazníků“

Český Google Překladač začal používat umělou inteligenci. Konec „drahoušků zákazníků“

** Google ve svém překladači roky používal statistickou technologii ** Nyní zavádí strojové učení a neuronové sítě ** Rozdíl by měl být zvláště na větších textech patrný už nyní

20.  4.  2017 | Jakub Čížek | 31


Aktuální číslo časopisu Computer

První test AMD Ryzen

Velké testy: 22 powerbank a 8 bezdrátových setů

Radíme s koupí Wi-Fi routeru

Co dokáží inteligentní domy?