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

 

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

Google       Google       29. 6. 2008       33 377×

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

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 Hybridní inteligentní systémy 2

Hybridní inteligentní systémy 2

V technické praxi využíváme často kombinaci různých disciplín umělé inteligence a klasických výpočtů. Takovým systémům říkáme hybridní systémy. V tomto článku se zmíním o určitém typu hybridního systému, který je užitečný ve velmi složitých výrobních procesech.

Obrázek ke článku Jak vést kvalitně tým v IT oboru: Naprogramujte si ty správné manažerské kvality

Jak vést kvalitně tým v IT oboru: Naprogramujte si ty správné manažerské kvality

Vedení týmu v oboru informačních technologií se nijak zvlášť neliší od jiných oborů. Přesto však IT manažeři čelí výzvě v podobě velmi rychlého rozvoje a tím i rostoucími nároky na své lidi. Udržet pozornost, motivaci a efektivitu týmu vyžaduje opravdu pevné manažerské základy a zároveň otevřenost a flexibilitu pro stále nové výzvy.

Obrázek ke článku Síla týmů se na home office může vytrácet. Odborníci radí, jak z pracovních omezení vytěžit maximum

Síla týmů se na home office může vytrácet. Odborníci radí, jak z pracovních omezení vytěžit maximum

Za poslední rok se podoba práce zaměstnanců změnila k nepoznání. Především plošné zavedení home office, které mělo být zpočátku jen dočasným opatřením, je pro mnohé už více než rok každodenní realitou. Co ale dělat, když se při práci z domova ztrácí motivace, zaměstnanci přestávají komunikovat a dříve fungující tým se rozpadá na skupinu solitérů? Odborníci na personalistiku dali dohromady několik rad, jak udržet tým v chodu, i když pracovní podmínky nejsou ideální.

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