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í.

prehravac1.png  prehravac2.png
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>

historie.png
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.

Diskuze (1) Další článek: Vyšla nová verze linuxové distribuce CentOS

Témata článku: , , , , , , , , , , , , , , , , , , ,