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 624×

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 Malware KONNI se úspěšně skrýval 3 roky. Odhalil ho bezpečnostní tým Cisco Talos

Malware KONNI se úspěšně skrýval 3 roky. Odhalil ho bezpečnostní tým Cisco Talos

Bezpečnostní tým Cisco Talos odhalil celkem 4 kampaně dosud neobjeveného malwaru, který dostal jméno KONNI. Ten se dokázal úspěšně maskovat od roku 2014. Zpočátku se malware zaměřoval pouze na krádeže citlivých dat. Za 3 roky se ale několikrát vyvinul, přičemž jeho současná verze umožňuje útočníkovi z infikovaného počítače nejenom krást data, ale i mapovat stisky na klávesnici, pořizovat screenshoty obrazovky či v zařízení spustit libovolný kód. Pro odvedení pozornosti oběti zasílali útočníci v příloze také obrázek, zprávu a výhružkách severokorejského režimu či kontakty na členy mezinárodních organizací.

Reklama
Reklama
Obrázek ke článku Pouze jedna z deseti lokálních firem ví o pokutách plynoucích z GDPR

Pouze jedna z deseti lokálních firem ví o pokutách plynoucích z GDPR

Trend Micro, celosvětový lídr v oblasti bezpečnostních řešení a VMware, přední světový dodavatel cloudové infrastruktury a řešení pro podnikovou mobilitu, oznámily výsledky výzkumu mezi českými a slovenskými manažery zodpovědnými za ochranu osobních údajů, který zjišťoval, jak jsou připraveni na nové nařízení o ochraně osobních údajů (GDPR). Většina firem v České republice a na Slovensku nad 100 zaměstnanců je již s novým nařízením GDPR obeznámena. Výzkum provedený ve spolupráci s agenturou Ipsos ukázal, že téměř 8 firem z 10 o nařízení ví, přičemž jeho znalost je o něco vyšší na Slovensku (89 %) než v České republice (69 %).

Obrázek ke článku Vyděračský software Locky se vrací, tváří se jako potvrzení platby, odhalil tým Cisco Talos

Vyděračský software Locky se vrací, tváří se jako potvrzení platby, odhalil tým Cisco Talos

Jeden z nejznámějších ransomwarů, Locky, se vrací. Po většinu roku 2016 patřil mezi nejrozšířenější vyděračské softwary. Ke svému šíření využíval emailové kampaně s infikovanými přílohami. Ransomware Locky byl rozesílán prostřednictvím botnetu (internetový robot zasílající spamy) Necurs. Jeho aktivita na konci roku 2016 téměř upadla a spolu s ní i šíření ransomwaru Locky. Před několika týdny se Necurs opět probudil a začal posílat spamy nabízející výhodný nákup akcií. Dne 21. dubna zaznamenal bezpečnostní tým Cisco Talos první velkou kampaň ransomwaru Locky prostřednictvím botnetu Necurs za posledních několik měsíců.

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.

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ý