Metronom Örneği (Çizim Yapma, Ses Çalma)

Metronom örneği ile C#'ta çizim yapma ve ses çalmayı öğrenelim.

İyi Günler.
Bu derste C# ile çok basit bir metronom örneği yapacağız. Tabi amacımız metronom yapmak değil amacımız C# ile çizim yapma özelliklede çizgi çizme ve Wav dosyası çalma.
Başlıyoruz.
Öncelikle yeni bir C# Windows uygulaması açıyoruz.İçerisine 1 Textbox 1de timer ekliyoruz timerin enabled özelliğini true yapın. Resimde gösterdiğim Propertiesleri şekildeki gibi değiştirin şimdi bunları niye değiştirdiğimizi söyleyeyim.
Metronom örneği ile C#'ta çizim yapma ve ses çalmayı öğrenelim.





Değiştirdiğimiz özellikler pencerenin boyutu ile ilgili özellikler. Çünkü biz çizim yaparken pencerenin boyuyla karşılaştıracağız, eğer pencerenin genişliğine ulaşırsa tersine dönecek (Bunu yazının sonunda daha iyi anlayacaksınız) Bu yüzden "Size" ve "MaximumSize" özelliğini aynı yaptık ve ve "MaximizeBoxu" false yaparak tam ekran yapmayı engelledik. Böylelikle kullanıcı hiçbir şekilde pencerenin boyutuyla oynayamayacaktır.

Şimdi ben kodların hepsini veriyorum ve bölüm bölüm açıklayacağım.


System.Media.SoundPlayer sd = new System.Media.SoundPlayer();

        Pen kalem = new Pen(Color.Red, 5);

        int x = -5;

        int y = 5;



              

        private void Form1_Paint(object sender, PaintEventArgs e)

        {

            x -= y;

            if (x == this.Width)

            {

                y = +5;

                sd.Play();

            }

            if (x == this.Width * -1)

            {

                y = -5;

                sd.Play();

            }



            e.Graphics.TranslateTransform(this.Width/2, this.Height / 2);

            e.Graphics.DrawLine(kalem, 0, 0,x, this.Height*-1);

            

        }



        private void Form1_Load(object sender, EventArgs e)

        {

            timer1.Interval = 1;

            sd.SoundLocation = "ding.wav";

        }



        private void timer1_Tick(object sender, EventArgs e)

        {

            Invalidate();

        }



        private void textBox1_TextChanged(object sender, EventArgs e)

        {

            try

            {

                timer1.Interval = Convert.ToInt32(textBox1.Text);

            }

            catch (Exception ex)

            {

                MessageBox.Show("Yanlış değer girdiniz");

            }

        }





Siz şimdi C:/Windows/Media klasörü altında "Windows Xp Ding" dosyası var onu projenizin debug klasörü içerisine alıp isminide ding yapın.

Vista veya Win7 kullananlarda aynı klasör varsa baksın, yoksa başka bir wav dosyası kullanabilirler.

Şimdi Kodlarımızı açıklayalım:


System.Media.SoundPlayer sd = new System.Media.SoundPlayer();

        Pen kalem = new Pen(Color.Red, 5);

        int x = -5;

        int y = 5;



System.Media.SoundPlayer tipinde "sd" adındaki değişken vaw dosyalarını çalacak.

Pen türündeki kalemide çizgi çizmek için kullanacağız ilk parametresi rengi belirtiyor, ikincisi de kalınlığını, yani bu kalem 5 birim kalınlığında ve kırmızı bir kalem.

x ve y değişkenlerinide çizgi çizerken kordinatlarda kullanacağız.


private void Form1_Load(object sender, EventArgs e)

        {

            timer1.Interval = 1;

            sd.SoundLocation = "ding.wav";

        }



Timerin intervalini 1 yaptık. Ses dosyamızın adresini belirtik ses dosyamızı debug içine attığımız için sadece adını ve uzantısını yazmak yeterli.


private void timer1_Tick(object sender, EventArgs e)

        {

            Invalidate();

        }



Invalidate form_paintteki kodların tekrar işletilmesini sağlayacak.


private void textBox1_TextChanged(object sender, EventArgs e)

        {

            try

            {

                timer1.Interval = Convert.ToInt32(textBox1.Text);

            }

            catch (Exception ex)

            {

                MessageBox.Show("Yanlış değer girdiniz");

            }

        }



Textboxa yazılan değer timerin intervaline aktarılacak.

Try-catch bloğu arasına aldık çünkü kullanıcı textboxa bir harfte yazabilir ozaman hata verecektir.


private void Form1_Paint(object sender, PaintEventArgs e)

        {

            x -= y;

            if (x == this.Width)

            {

                y = +5;

                sd.Play();

            }

            if (x == this.Width * -1)

            {

                y = -5;

                sd.Play();

            }



            e.Graphics.TranslateTransform(this.Width/2, this.Height / 2);

            e.Graphics.DrawLine(kalem, 0, 0,x, this.Height*-1);

            

        }



Asıl kodlarımız burada.

X -=y ile x'i sürekli y kadar azaltacak. (y negatif olunca artıracak).
İf kontrollerinide x == this.Width yani x formun ucuna ulaşınca ses çıkartmak ve y pozitif ise negatif, negatif ise pozitif yapmak için kullandık.

Sesleri çalmak için sd.Play() kullandık.


e.Graphics.TranslateTransform(this.Width/2, this.Height / 2);



ile formun orta noktasını 0,0 kordinatı olarak belirledik.


e.Graphics.DrawLine(kalem, 0, 0,x, this.Height*-1)



Bunun ile çizgiyi çiziyoruz.5 tane parametre alıyor.Bunlardan ilki hangi kalemle çizeceğimizi belirtiyor, diğerleri ise kordinatlar.

this.Height*-1 bunu çizgimizin formun en üstüne kadar çıkması için kullandık bunu negatif yapmak için -1 ile çarptık pozitif olsa çizgi aşağı doğru çizilirdi.
  • Etiketler;
Emre Şahin
Hakkari'de doğdu. İlköğretim 5.Sınıfta ilk bilgisayarını aldı ve hemen Photoshop ile tasarıma başlayıp sonra Html ile programlaya giriş yaptı. <p>Şu anda ağırlıklı olarak C# kullanmakta, bunun yanısıra Vb.net, Delphi ve Asp.Net ile de uğraşıyor. Tasarım programlarından ise Photoshop, Fireworks, 3Ds Max'e meraklı. <p>Şu anda Hakkari Fen Lisesi'nde okuyor.
Yorum Yaz

Yorum yazabilmek için üye girişi yapmanız gerekiyor!

Harbiden helal olsun.
#cobby önce projeni bir yere kaydet sonra o klasöre gir ordan bin/Debug klasörlerine gir sonrada ding dosyasını oraya at
iyi gunler örneginiz için çok teşekkür ederim, ancak ben programı çalıştıramadım kodlarınızı yapıştırdım ve dediklerinize uydum ancak olmadi nerde sorun olabilir tam olarak bilemiyorum yardımcı olursanız çok seivnirim. ding.wav i debug dosyasına da koydum. İyi gunler.
forma textbox ve timerı eklediğinize emin olun sonra Formun propertieslerini resimlerdeki gibi düzelt sonra deneyin Yine olmazssa hata verdiği yeri yazın
yardımınız için teşekkur ederim problem events lari belirtmeyi unutmusum yaptıklarınızı yapıştırırken. Örenğiniz için teşekkurler derslerimi hatırlamama yardımcı oldu. İyi gunler.
merhaba örneğiniz çok güzel olmuş benim bir sorum olacaktı 5 tanel textboxa 0-100 arasında sayı giriliyor ve girilen sayıların büyüklüğüne göre textboxların altına grafik şeklinde uzun bir renkli şekiller oluşuyor bunun kodunu nasıl yazabilirim acaba yardımcı olursanız çok sevinirim

Yukarı Git