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

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

 
Hledat
Moderní platforma pro vytvoření vašeho nového webu – Wix.com.
Nyní už můžete mít web zdarma.
Vybavení pro Laser Game
Spuštěn Filmový magazín

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

Google       Google       29. 6. 2008       29 406×

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 První český hackathon ve vlaku inspirovaly služby jako  Tinder, Airbnb nebo Uber

První český hackathon ve vlaku inspirovaly služby jako Tinder, Airbnb nebo Uber

Patnáct set kilometrů, cesta přes dva státy, šestnáct hodin programování a přísun energy drinků, tak by se dal shrnout unikátní hackathon ve vlaku pořádaný Kiwi.com. Z Prahy do Košic a zpět se svezlo celkem 13 týmů, každý s originálním nápadem. Hlavní výhru, voucher na letenky v hodnotě 2 500 EUR, si v Praze převzal tým až z Ukrajiny.

Reklama
Reklama
Obrázek ke článku Gamifikace nakupování dorazila i do České republiky

Gamifikace nakupování dorazila i do České republiky

Zákazníci zejména retailových společností jsou často znuděni klasickými věrnostními či motivačními programy. Většinou z toho důvodu, že jsou jeden jako druhý a nepřináší nic nového. Ale i v České republice se projevují zahraniční trendy, nedávno zde totiž vstoupila na trh a rychle se uchytila nová platforma kombinující to nejlepší z věrnostních a motivačních programů, která navíc využívá prvky gamifikace – Rondo.cz. Na hlavní milníky vývoje nálad a motivace zákazníků a nejnovější trendy se zaměřil Jan Hřebabecký, spoluzakladatel Rondo.cz

Celý článekGoogle2. listopadu 2017PR
Obrázek ke článku NopCommerce – datová vrstva a přístup k datům – 2. díl

NopCommerce – datová vrstva a přístup k datům – 2. díl

V minulém článku jsme si představili platformu NopCommerce z globálního pohledu. V dnešním díle se již zaměříme na konkrétní část systému, a to datovou vrstvu. Představíme si základní stavební kameny systému v podobě doménových objektů. Ukážeme si, jakým způsobem rozšířit doménové objekty a jakým způsobem přistupuje NopCommerce k nastavení systému a modulů.

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032018 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý