C# a WPF tvorba MP3 přehrávače
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama

C# a WPF tvorba MP3 přehrávačeC# a WPF tvorba MP3 přehrávače

 

C# a WPF tvorba MP3 přehrávače

Google       Google       29. 6. 2008       28 527×

Ukázka tvorby jednoduchého MP3 přehrávače.

Reklama
Reklama

Co bude potřeba

K tomu, abychom náš MP3 přehrávač mohli vůbec začít programovat, budeme potřebovat nějaké IDE vývojové prostředí, já volím VS 2008, ale výběr nechám jen a jen na vás. Náš MP3 přehrávač budeme psát pomocí platformy .NET 3.5, kterou byste měli mít nainstalovanou. O přehrávání zvuku se nám postará knihovna DirectX (stáhnout). K návrhu programu ve WPF použijeme Microsoft Expression Blend 2.5.

Máme-li vše připravené, pojďme na to.

Vývoj jednoduchého MP3 přehrávače

V tomto článku se nebudu zabývat tvorbou aplikace pomocí Microsoft Expression Blend 2.5, ale samotným naprogramováním funkcí MP3 přehrávače tak, aby přehrával hudební soubory. Spusťte Blend a vytvořte si aplikaci, která bude podobná té mojí.

Zde je XAML kód našeho okna:

<Window
	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
	x:Class="WpfApplication4.Window1"
	x:Name="Window"
	Title="Window1"
	Width="640" Height="480" Foreground="#FFFFFFFF">
	<Window.Background>
		<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
			<GradientStop Color="#FF000000" Offset="0"/>
			<GradientStop Color="#FF004685" Offset="1"/>
		</LinearGradientBrush>
	</Window.Background>

	<Grid x:Name="LayoutRoot">
		<Grid.ColumnDefinitions>
			<ColumnDefinition Width="*"/>
		</Grid.ColumnDefinitions>
		<Button Margin="8,8,0,0" Content="Otevřít" Width="87" Height="39" VerticalAlignment="Top" HorizontalAlignment="Left" FontSize="18" RenderTransformOrigin="0.5,0.5" Click="Button_Click">
			<Button.RenderTransform>
				<TransformGroup>
					<ScaleTransform ScaleX="1" ScaleY="1"/>
					<SkewTransform AngleX="0" AngleY="1"/>
					<RotateTransform Angle="0"/>
					<TranslateTransform X="0" Y="0"/>
				</TransformGroup>
			</Button.RenderTransform>
			<Button.Background>
				<LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
					<GradientStop Color="#FF00197B" Offset="0"/>
					<GradientStop Color="#FFEBEBEB" Offset="0.5"/>
					<GradientStop Color="#FFDDDDDD" Offset="0.5"/>
					<GradientStop Color="#FF001C87" Offset="1"/>
				</LinearGradientBrush>
			</Button.Background>
		</Button>
		<Button Margin="231.912,139,276.088,221" Content="Přehrát" FontSize="22" Click="Button_Click_1">
			<Button.Background>
				<LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
					<GradientStop Color="#FFFFFFFF" Offset="0"/>
					<GradientStop Color="#FF000000" Offset="0"/>
					<GradientStop Color="#FF069C13" Offset="1"/>
				</LinearGradientBrush>
			</Button.Background>
		</Button>
		<Button Margin="71,162,0,221" Content="Stop" Width="123.912" HorizontalAlignment="Left" FontSize="22" Click="Button_Click_3">
			<Button.Background>
				<LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
					<GradientStop Color="#FFF3F3F3" Offset="0"/>
					<GradientStop Color="#FFEBEBEB" Offset="0"/>
					<GradientStop Color="#FF000000" Offset="0.013"/>
					<GradientStop Color="#FFFF0606" Offset="1"/>
				</LinearGradientBrush>
			</Button.Background>
		</Button>
		<Button Margin="0,162,106,221" Content="Pozastavit" Width="124.088" HorizontalAlignment="Right" FontSize="22" Click="Button_Click_2">
			<Button.Background>
				<LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
					<GradientStop Color="#FFF3F3F3" Offset="0"/>
					<GradientStop Color="#FF000000" Offset="0"/>
					<GradientStop Color="#FF000000" Offset="0"/>
					<GradientStop Color="#FFB9F500" Offset="1"/>
				</LinearGradientBrush>
			</Button.Background>
		</Button>
    </Grid>
</Window>

Máme-li okno navrhnuté, tak projekt v Blendu uložíme a Blend zavřeme. Nyní přichází na řadu Visual Studio, ve kterém otevřeme náš projekt, který byl vytvořen a uložen pomocí Blendu. Jako první musíme přidat do ReferencesSolution Explorer knihovny, které budeme potřebovat. A ty jsou:

  • Microsoft.DirectX.AudioVideoPlayback
  • System.Windows.Forms

Knihovny přidáme následujícím způsobem:

  1. Klikneme pravým tlačítkem myši na References a zvolíme Add References..
  2. V seznamu zvolíme knihovnu, kterou potřebujeme a klikneme na OK.

  3. Tento postup opakujeme dokaď nepřidáme všechny knihovny

Abychom při přehrávání skladby měli přehled o tom, jaká část ze skladby je přehrána, umístíme nyní v designérovi Visual Studia do naší aplikace jeden ProgressBar, který pojmenujeme ukazatel.

Podíváme-li se nyní do okna, ve kterém Visual Studio zobrazuje náš XAML kód, zjistíme, že se rozšířil o jeden řádek:

<ProgressBar Height="19" Margin="71,97,106,0" Name="progressBar1" VerticalAlignment="Top" Value="0" />

Tak a nyní se dostáváme k té zajímavější části. Tou je samotné psaní aplikace. Klikněte tedy pravým tlačítkem na okno naší aplikace a zvolte View Code. Na začátku kódu byste měli mít následující:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Windows.Forms;  //pokud není nutno dopsat
using Microsoft.DirectX.AudioVideoPlayback; //pokud není nutno dopsat

Pokud tam poslední dvě knihovny chybí, dopište je tam ručně. Tak a můžeme vesele programovat. V těle naší třídy pod metodu v mém případě Form1 vytvořte novou metodu, kterou nastavíme jako private a pojmenujeme ji otevri. Tato metoda se nám postará o zobrazení OpenFileDialog, nastavení možných souborů k výběru, uložení cesty k souboru do proměnné. Kód metody je následující:

        private Audio mojeHudba;
        private string NameSound;

private void otevri()
        {
            OpenFileDialog od = new OpenFileDialog();
            od.Filter = "Hudební soubory" + " (*.wma; *.mp3)|*.wma; *.mp3|Všechny soubory|*.*";
            od.ShowDialog();
            NameSound = od.FileName;
        }

Nyní přejdeme opět do designéra VS 2008, dvakrát poklepeme na tlačítko Otevřít. V programu se nám vytvoří další metoda nazevTlacit_Click. Tato metoda bude odkazovat na metodu otevri.

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            otevri();
        }

Úplně stejným způsobem vytvoříme metody prehraj, pozastav, zastav, které používají metody z knihovny DirectX. Akce tlačítek Přehrát, Pozastavit, Zastavit vytvoříme též úplně tím stejným způsobem. U metody prehraj metodou Audio.FormFile vytáhneme náš zvuk a uložíme do proměnné, se kterou budou pracovat metody prehraj, pozastav a zastav. Kód bude vypadat následovně:

        private void prehraj()
        {
            mojeHudba = Audio.FromFile(NameSound);
            mojeHudba.Play();
        }

        private void pozastav()
        {
            mojeHudba.Pause();
        }

        private void zastav()
        {
            mojeHudba.Stop();
        }

        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            prehraj();
        }

        private void Button_Click_2(object sender, RoutedEventArgs e)
        {
            pozastav();
        }

        private void Button_Click_3(object sender, RoutedEventArgs e)


        {
            zastav();
        }

Nyní máme hotov základ našeho přehrávače. Jako další ošetříme několik věcí. Jistě jste si všimli, že když nevyberu soubor pomocí Otevřít a kliknu na Přehrát, program spadne. Když přehrávám skladbu a kliknu ještě na Přehrát, tak se skladba spustí ještě jednou a hraje v pozadí té první. Tento problém vyřešíme takto:

  1. V aplikaci vytvoříme dvě proměnné typu boolean, kterou nazveme hraje a otevren.
    private Boolean hraje;
    private Boolean otevren;
  2. Do metody prehraj přidáme podmínku if, která zabrání vzniku chyby:
     private void prehraj()
            {
                if(otevren ==true)
                {
                     if (mojeHudba == null) 
                    {
                        mojeHudba = Audio.FromFile(NameSound); ;
                    }
                    mojeHudba.Play();
                    hraje = true;
                }
    Tím jsme zabránili spuštění hudby ještě jednou.
  3. Aby kód v předchozím bodě fungoval, musíme upravit metodu otevri přidáním řádku, který bude nastavovat proměnnou otevren na true, a tím pádem dovolí akci tlačítka Přehrát volat metodu prehraj:
    private void otevri()
            {
                OpenFileDialog od = new OpenFileDialog();
                od.Filter = "Hudební soubory" + " (*.wma; *.mp3)|*.wma; *.mp3|Všechny soubory|*.*";
                od.ShowDialog();
                NameSound = od.FileName;
                otevren = true; // tento řádek nám říká, že soubor je načten
            }
  4. Aby program nepadal při stisku tlačítka Stop a Pozastavit, upravíme metody zastav a pozastav následovně:
    private void pozastav()
            {
                try
                {
                    mojeHudba.Pause();
                    hraje = false;
                }catch
                {
                    //chybu ignoruji
                }
            }
    
            private void zastav()
            {
                try
                {
                    mojeHudba.Stop();
                }
                catch
                {
                    //chybu ignoruji
                }
    
            }
  5. Poslední věcí, kterou musíme ošetřit, je, že když má uživatel přehrávanou skladbu a klikne na Otevřít, tak aby se původní skladba vypnula a začala se přehrávat nová. To provedeme přidáním podmínky do akce tlačítka Přehrát:
    private void Button_Click(object sender, RoutedEventArgs e)
            {
                if(hraje == true)
                {
                    zastav();
                    otevri();
                    prehraj();
                }else
                {
                    otevri();
                }
            }
  6. Ošetření chyb je hotové.

Poslední věcí, která nám dnes zbývá, je oživení našeho ProgressBaru. V naši třídě si definujeme další proměnou typu Timer a jménem casovac:

Timer casovac;

Nyní naši metodu prehraj rozšíříme o pár řádků, které se nám budou starat o zobrazení přehrání skladby na ProgressBar:

private void prehraj()
        {
            if(otevren ==true)
            {
                if (mojeHudba == null)
                {
                    mojeHudba = Audio.FromFile(NameSound); ;
                }
                mojeHudba.Play();
                hraje = true;
                ukazatel.Maximum = (int)mojeHudba.Duration; //nový řádek
                casovac = new Timer(); //nový řádek
                casovac.Enabled = true; //nový řádek
               casovac.Interval = 100; //nový řádek
                casovac.Tick += new EventHandler(casovac_tick); //nový řádek


            }
        }

K tomu, aby nám následující kód pracoval, musíme mít metodu, která se jmenuje casovac_tick, ta nám nastavuje postupně hodnotu načtení ProgressBaru a po přehrání celé skladby ji vypne. Její kód je následující:

 private void casovac_tick(object sender, EventArgs e)
        {
            if (hraje == true)
            {
                ukazatel.Value = (int)mojeHudba.CurrentPosition;
                if (((mojeHudba.CurrentPosition / mojeHudba.Duration) * 100) == 100)
                {
                    zastav();
                }
            }
        }

Poslední, co spácháme, je nastavení, aby se zastavilo i načítání ProgressBaru, když uživatel stiskne Zastavit. Metoda zastav vypadá následovně:

private void zastav()
        {
            try
            {
                this.ukazatel.Value = this.ukazatel.Minimum;  // nový řádek kódu
                hraje = false;
                mojeHudba.Stop();
            }
            catch
            {
                //chybu ignoruji
            }

        }

Závěr s poděkováním

Náš MP3 přehrávač je hotov a ani to nebolelo. Nyní můžete pro váš výtvor vytvořit instalátor a vesele propagovat mezi svými známými, spolužáky, kolegy a jinými. Tento článek je určen už pokročilejším programátorům C#, kteří vědí, o čem je řeč. Článek je již takto obsáhlý, a proto vynechávám vlákna aplikace. A závěrem děkuji Chrastymu za jeho odbornou konzultaci, bez které by tento článek nevznikl.

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

Hlasování bylo ukončeno    
0 hlasů
Google
Student ČVUT FJFI katedry softwarového inženýrství v ekonomii. Mezi jeho zájmy patří programování a sport. Autor má zkušenosti s PHP 5, MySQL, XHTML a CSS. Zajímá se o platformu .NET, jazyk C#, ASP.NET a WPF.
Web    

Nové články

Obrázek ke článku Dovozci baterií mění logistiku, letadlo nahrazuje námořní doprava

Dovozci baterií mění logistiku, letadlo nahrazuje námořní doprava

Dovozci baterií do mobilů či notebooků upouštějí od letecké přepravy zboží. V letošním roce plánují dovézt až 80 % produktů lodí. Přitom před 5 lety byla většina baterií do mobilních přístrojů dovezených do České republiky přepravována letadlem. Za proměnou způsobu transportu akumulátorů stojí zpřísnění pravidel pro leteckou přepravu, která přinášejí vyšší náklady i náročnou agendu.

Reklama
Reklama
Obrázek ke článku JIC otevírá největší digitální dílnu pro veřejnost v České republice

JIC otevírá největší digitální dílnu pro veřejnost v České republice

JIC otevírá první nonstop veřejně dostupnou digitální dílnu světového formátu s vybavením za 3 miliony korun. Dílnu může využívat po registraci kdokoliv. V  prostorách vzniknou prototypy produktů místních startupů, projekty kutilů a studentů i umělecká díla. Cílem dílny je zpřístupnit veřejnosti drahé přístroje a přitáhnout více podnikavých lidí k technickým oborům.

Obrázek ke článku Nový IT hráč na českém trhu

Nový IT hráč na českém trhu

V roce 2015 otevřela v Praze na Pankráci v budově City Tower své kanceláře společnost EPAM Systems (NYSE:EPAM), jejíž centrála se nachází v USA. Společnost byla založená v roce 1993 a od té doby prošla velkým vývojem a stále roste.

loadingtransparent (function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })();
Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032017 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý