Hot Posts

6/recent/ticker-posts

C# ile Sesin Dalga Boylarını - Şekillerini Çizdirmek

Bu makalemizde yukarıdaki örnek resimde görüldüğü gibi sesin dalga boyunu veya dalga şekillerini nasıl yazdırabiliriz bu sorunun cevabını arıyor olacağız.

Öncelikle bu projemizin .NET 4.0 ve sonraki sürümlerinde başarılı olarak çalıştığını vurgulamakta fayda olacaktır. Çünkü Chart nesnesi, C# Form bünyesine, .NET 4.0'dan sonra eklenmiş bir nesnedir.

Vakit kaybetmeden başlayalım. Öncelikle bütün ses işleme, ses verileri elde etme, ses analizleri gibi konularda sizin yardımınıza koşacak nitelikteki profesyonel bir kütüphane olan "NAudio" kütüphanesini projemize import etmeliyiz.

NAudio Kütüphanesini Projemize Nasıl Ekleyebiliriz?



  1. Öncelikle NAudio 1.8 Released yazısına tıklayarak kütüphaneyi doğrudan indiriyoruz.
  2. Daha sonra sağ taraftan projemizin bulunduğu klasöre tıklayıp "Add References" seçeneğini seçip "Browse" seçeğinden kütüphaneyi seçiyoruz.
  3. Visual Studio 2017 Türkçe olanlar ise "Hizmet Başvurusu Ekle" ve "Gözat" seçeneklerinden bu işlemi gerçekleştirebilirler.


  • Ekleme işleminden sonra projemizin arayüzüne bir button ve bir Chart nesnesi eklenir.
  •  Daha sonra OpenFileDialog nesnesiyle .wav formatı için Dialog penceresi, Button'un Click Eventinde aşağıdaki gibi çağrılır;


1
2
3
4
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "Audio Files (.wav)|*.wav";
            ofd.ShowDialog();
            string path = ofd.FileName;

 Eğer OpenFileDialog nesnesinde bir sıkıntı yaşamadıysanız diğer kodlarınızı aşağıdaki gibi yazarak, Chart nesnesine, seçmiş olduğunuz .wav formatındaki bir ses dosyasının dalga formlarını çizdirebilirsiniz.



 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
if (ofd.ShowDialog() == DialogResult.OK)
  {
    chart1.Series.Add("wave");
    chart1.Series["wave"].ChartType = 
 DataVisualization.Charting.SeriesChartType.FastLine;
    chart1.Series["wave"].ChartArea = "ChartArea1";
     NAudio.Wave.WaveChannel32 wave = new NAudio.Wave.WaveChannel32(new NAudio.Wave.WaveFileReader(path));
     byte[] buffer = new byte[16384];
     int read = 0;
                while(wave.Position<wave.Length)
     {
      read = wave.Read(buffer, 0, 16384);
      for (int i = 0; i < read/4; i++)
          {                    
 chart1.Series["wave"].Points.Add(BitConverter.ToSingle(buffer, i * 4));
          }
 }
   }

Yukarıdaki işlemlerden sonra aşağıdaki gibi bir ekran çıktısı alacaksınızdır;


İlgili Projenin GitHub Linki için;


Makalemizin Devamında Ses Verisinin Değerlerini Elde Etme, Ses Verisi Üzerinde Data Mining (Veri Madenciliği) Yöntemlerini de Ekliyor Olacağım. Soru ve Görüşlerinizi Yorum Olarak Aktarabilirsiniz.

Post a Comment

0 Comments