C# Ses Kaydı Programı
C# Ses Kaydı Programı
Daha fazlası için: gorselprogramlama.com
Bu uygulamanın tam halini görmek için iletişime geçebilirsiniz.(Programcı’nın Mail Adresi)
Programımıza başlamadan önce ilk olarak bunifu ve NAudio kütüphanelerimizi eklememiz gerekmekte. En alta linkleri bırakacağım sevgili okur.
Bunifu ekledikten sonra programımıza thinButton,bunifu.progressbar, tileButton ve iki adet label ekliyoruz. Tasarımızın aşağıdaki gibi yapıyoruz.
Şimdi using kısımlarımızı ekliyoruz.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Speech.Recognition; using System.Speech.Synthesis; using System.Threading; using System.Diagnostics; using Bunifu.Framework.UI; using System.Runtime.InteropServices; using NAudio.CoreAudioApi;
Şimdi import etmemiz gereken dll’imizi tanımlıyoruz.
public partial class seskaydi : Form { public seskaydi() { InitializeComponent(); } [DllImport("winmm.dll", EntryPoint = "mciSendStringA", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)] //İmport edilecek dll dosyamız. private static extern int mciSendString(string lpstrCommand, string lpstrReturnString, int uReturnLength, int hwndCallback); //Kayit için metodumuzu belirttik
Şimdi de load’ımızı tanımlayalım.
private void seskaydi_Load(object sender, EventArgs e) { tmrKayitSure.Interval = 1000;//Bir saniyede çalışması için özelliğini belirttik. tmrcm.Interval = 1;//saniyenin binde birinde çalışması için özelliğini tanımladık. btnKayit.BackColor = Color.Transparent;//btnKayit arkaplanı transparan olsun dedik. btnKayit.Visible = false;//btnKayit programın çalışma anında görünmez olsun . tmrcm.Start();// Ses kaydımızın timerını şimdiden başlatalım. var deviceEnumerator = new MMDeviceEnumerator();//cihazlarımızı saydıralım. var devices = deviceEnumerator.EnumerateAudioEndPoints(DataFlow.Capture, DeviceState.Active); //aktif ve giriş cihazlarını seçelim. (Capture:"Giriş",Active:"Aktif") if (devices != null)//Eğer boş değilse { cmbMik.Items.AddRange(devices.ToArray());//cmbmik adlı comboboxumuza cihazlarımızı ekleyelim. } }
Ardından tmrKayitSure_Tick metodunu tanımlayalım.
private void tmr_Tick(object sender, EventArgs e) { string[] lbl = label1.Text.Split('.');//Süre labelimizi noktaya göre parçalayalım int[] saatdksn = new int[3];//3 boyutlu bir dizi tanımladık. saatdksn[0] = Convert.ToInt32(lbl[0]);//Süremizin saat kısmını tamamladığımız diziye attık. saatdksn[1] = Convert.ToInt32(lbl[1]);//Süremizin dakika kısmını tamamladığımız diziye attık. saatdksn[2] = Convert.ToInt32(lbl[2]);//Süremizin saniye kısmını tamamladığımız diziye attık. if(saatdksn[2] != 59)// Eğer saniyemiz 59 değil ise { label1.Text = saatdksn[0] + "." + saatdksn[1] + "." + (saatdksn[2] + 1); //saniye kısmını bir artırdık } else if(saatdksn[2]==59)//Eğer saniyemiz 59 ise { label1.Text = saatdksn[0] + "." + (saatdksn[1]+1) + "." + (0); //saniye kısmını sıfırlayıp dakika kısmını artıralım } if(saatdksn[1]==59 && saatdksn[2]==59)//Eğer dakika kısmı ve saniye kısmı 59 ise { label1.Text = (saatdksn[0]+1) + "." + 0 + "." + (0); //saat kısmını bir artırıp diğerlerini sıfırlayalım. } }
btnKaiyt_Click metodunu tanımlayalım.
private void btnKayit_Click(object sender, EventArgs e) { if(btnKayit.ButtonText== " ►")//eğer butonun texti play simgesi ise { btnKayit.ButtonText = "▐▐";//Buton metnini pause şeklinde yazdık tmrKayitSure.Start();//Kayit süremizi bir bir çalıştırdık. Record();//Kayda başladık. } else//eğer buton metni pause ise { tmrKayitSure.Stop();//Kayıt süremizi durdurduk. btnKayit.ButtonText = " ►";//Buton metnimiz paly olsun dedik. SaveFileDialog dialog = new SaveFileDialog();//Kaydet diyaloğu tanımladık. dialog.Filter = "Ses Dosyası|*.wav";//dialog kaıt diyalogumuzu ses dosyası olarak filtreledik dialog.FileName = "adsiz.wav";//adsiz.wav olarak isim tanımladık. if (dialog.ShowDialog()==DialogResult.OK)//Eğer dialoğumuzda tamam'a basılırsa { string dosyayolu = dialog.FileName;//Dosya yolumuzu aldık Save(dosyayolu);//Save metodumuz ile kaydettik. MessageBox.Show("Kaydedildi ✔", "-Bilgi-", MessageBoxButtons.OK, MessageBoxIcon.Information); //Mesaj kutumuzu "Kaydedildi" olarak gösterdik } else//Eğer dialogumuzda iptale tıklarsak { MessageBox.Show("Kaydedilmedi ✖", "-Bilgi-", MessageBoxButtons.OK, MessageBoxIcon.Information); //Mesaj kutumuzu "kaydedilmedi" olarak gösterdik } Closee();//Closee metodumuzu çalıştırdık. } }
Record,Closee,Save metodlarımızı tanımlamadığımız için hata verecek. Ancak şimdi bütün metotlarımızı tanımlayalım.
public static void Record()//Record metodu tanımladık { mciSendString("open new Type waveaudio Alias recsound", "", 0, 0); //Yönlendireceğimiz komutu tanımladık. (yeni wave tipinde record açalım.) mciSendString("record recsound", "", 0, 0); } public static void Save(string path)//Dosya yoluna göre kaydeden save metodu tanımladık { mciSendString("save recsound " + path, "", 0, 0);//Dosya yolumuza kaydımızı kaydedelim. } public static void Closee()//Kaydı kapatama metodu tanımladık. { mciSendString("close recsound ", "", 0, 0);//Kaydı kapattık. }
tmrcm_Tick metodumuzu tanımlayalım.
private void tmrcm_Tick(object sender, EventArgs e) { if (cmbMik.SelectedItem != null)//Eğer mikrofon seçili ise { var device = (MMDevice)cmbMik.SelectedItem;//seçili mikrofonu cihaz olarak tanımladık. prgsSes.Value = (int)Math.Round(device.AudioMeterInformation.MasterPeakValue * 100); //Ses progressBarımız frekansa göre saniyenin binde birinde dolsun. } }
Form_Closing metodumuzu etkinleştirip aşağıdaki bloğu ekleyelim.
private void seskaydi_FormClosing(object sender, FormClosingEventArgs e) { tmrcm.Stop();//Uygulamamız kapatılırken kayit süremiz dursun tmrKayitSure.Stop();//Uygulamamız kapatılırken kayit süremiz dursun }
Sıradaki yapmamız gereken işlem ise combobox(cmbMik)’ımızdaki seçili öğe değişince ne olacağını yazmak…
private void cmbMik_SelectedIndexChanged(object sender, EventArgs e) { if(cmbMik.SelectedIndex!=-1)//Eğer mikrofonumuz seçili ise { btnKayit.Visible = true;//btnKayit görünür olsun dedik. btnKaydedilenler.Visible = true;//btnKaydedilenler görünür olsun dedik. } }
Son işlem olarak btnKaydedilenler butonuna tıkladıktan sonra olacakları yazalım ve uygulamamızı bitirelim.
private void btnKaydedilenler_Click(object sender, EventArgs e) { string acilacakDosya;//acilacakDosya yolu tanımladık. acilacakDosya = @"C:\Users\onder\Music";//dosyayolunu acilacakDosya değişkenine atadık. Process.Start(acilacakDosya);//Dosya yolumuzdaki klasörü açtık }
Programımızın tam kod blogu ise şu şekilde olacak.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Speech.Recognition; using System.Speech.Synthesis; using System.Threading; using System.Diagnostics; using Bunifu.Framework.UI; using System.Runtime.InteropServices; using NAudio.CoreAudioApi; namespace seskaydi { public partial class seskaydi : Form { public seskaydi() { InitializeComponent(); } [DllImport("winmm.dll", EntryPoint = "mciSendStringA", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)] //İmport edilecek dll dosyamız. private static extern int mciSendString(string lpstrCommand, string lpstrReturnString, int uReturnLength, int hwndCallback); //Kayit için metodumuzu belirttik private void seskaydi_Load(object sender, EventArgs e) { tmrKayitSure.Interval = 1000;//Bir saniyede çalışması için özelliğini belirttik. tmrcm.Interval = 1;//saniyenin binde birinde çalışması için özelliğini tanımladık. btnKayit.BackColor = Color.Transparent;//btnKayit arkaplanı transparan olsun dedik. btnKayit.Visible = false;//btnKayit programın çalışma anında görünmez olsun . tmrcm.Start();// Ses kaydımızın timerını şimdiden başlatalım. var deviceEnumerator = new MMDeviceEnumerator();//cihazlarımızı saydıralım. var devices = deviceEnumerator.EnumerateAudioEndPoints(DataFlow.Capture, DeviceState.Active); //aktif ve giriş cihazlarını seçelim. (Capture:"Giriş",Active:"Aktif") if (devices != null)//Eğer boş değilse { cmbMik.Items.AddRange(devices.ToArray());//cmbmik adlı comboboxumuza cihazlarımızı ekleyelim. } } private void tmr_Tick(object sender, EventArgs e) { string[] lbl = label1.Text.Split('.');//Süre labelimizi noktaya göre parçalayalım int[] saatdksn = new int[3];//3 boyutlu bir dizi tanımladık. saatdksn[0] = Convert.ToInt32(lbl[0]);//Süremizin saat kısmını tamamladığımız diziye attık. saatdksn[1] = Convert.ToInt32(lbl[1]);//Süremizin dakika kısmını tamamladığımız diziye attık. saatdksn[2] = Convert.ToInt32(lbl[2]);//Süremizin saniye kısmını tamamladığımız diziye attık. if(saatdksn[2] != 59)// Eğer saniyemiz 59 değil ise { label1.Text = saatdksn[0] + "." + saatdksn[1] + "." + (saatdksn[2] + 1); //saniye kısmını bir artırdık } else if(saatdksn[2]==59)//Eğer saniyemiz 59 ise { label1.Text = saatdksn[0] + "." + (saatdksn[1]+1) + "." + (0); //saniye kısmını sıfırlayıp dakika kısmını artıralım } if(saatdksn[1]==59 && saatdksn[2]==59)//Eğer dakika kısmı ve saniye kısmı 59 ise { label1.Text = (saatdksn[0]+1) + "." + 0 + "." + (0); //saat kısmını bir artırıp diğerlerini sıfırlayalım. } } private void btnKayit_Click(object sender, EventArgs e) { if(btnKayit.ButtonText== " ►")//eğer butonun texti play simgesi ise { btnKayit.ButtonText = "▐▐";//Buton metnini pause şeklinde yazdık tmrKayitSure.Start();//Kayit süremizi bir bir çalıştırdık. Record();//Kayda başladık. } else//eğer buton metni pause ise { tmrKayitSure.Stop();//Kayıt süremizi durdurduk. btnKayit.ButtonText = " ►";//Buton metnimiz paly olsun dedik. SaveFileDialog dialog = new SaveFileDialog();//Kaydet diyaloğu tanımladık. dialog.Filter = "Ses Dosyası|*.wav";//dialog kaıt diyalogumuzu ses dosyası olarak filtreledik dialog.FileName = "adsiz.wav";//adsiz.wav olarak isim tanımladık. if (dialog.ShowDialog()==DialogResult.OK)//Eğer dialoğumuzda tamam'a basılırsa { string dosyayolu = dialog.FileName;//Dosya yolumuzu aldık Save(dosyayolu);//Save metodumuz ile kaydettik. MessageBox.Show("Kaydedildi ✔", "-Bilgi-", MessageBoxButtons.OK, MessageBoxIcon.Information); //Mesaj kutumuzu "Kaydedildi" olarak gösterdik } else//Eğer dialogumuzda iptale tıklarsak { MessageBox.Show("Kaydedilmedi ✖", "-Bilgi-", MessageBoxButtons.OK, MessageBoxIcon.Information); //Mesaj kutumuzu "kaydedilmedi" olarak gösterdik } Closee();//Closee metodumuzu çalıştırdık. } } public static void Record()//Record metodu tanımladık { mciSendString("open new Type waveaudio Alias recsound", "", 0, 0); //Yönlendireceğimiz komutu tanımladık. (yeni wave tipinde record açalım.) mciSendString("record recsound", "", 0, 0); } public static void Save(string path)//Dosya yoluna göre kaydeden save metodu tanımladık { mciSendString("save recsound " + path, "", 0, 0);//Dosya yolumuza kaydımızı kaydedelim. } public static void Closee()//Kaydı kapatama metodu tanımladık. { mciSendString("close recsound ", "", 0, 0);//Kaydı kapattık. } private void tmrcm_Tick(object sender, EventArgs e) { if (cmbMik.SelectedItem != null)//Eğer mikrofon seçili ise { var device = (MMDevice)cmbMik.SelectedItem;//seçili mikrofonu cihaz olarak tanımladık. prgsSes.Value = (int)Math.Round(device.AudioMeterInformation.MasterPeakValue * 100); //Ses progressBarımız frekansa göre saniyenin binde birinde dolsun. } } private void seskaydi_FormClosing(object sender, FormClosingEventArgs e) { tmrcm.Stop();//Uygulamamız kapatılırken kayit süremiz dursun tmrKayitSure.Stop();//Uygulamamız kapatılırken kayit süremiz dursun } private void cmbMik_SelectedIndexChanged(object sender, EventArgs e) { if(cmbMik.SelectedIndex!=-1)//Eğer mikrofonumuz seçili ise { btnKayit.Visible = true;//btnKayit görünür olsun dedik. btnKaydedilenler.Visible = true;//btnKaydedilenler görünür olsun dedik. } } private void btnKaydedilenler_Click(object sender, EventArgs e) { string acilacakDosya;//acilacakDosya yolu tanımladık. acilacakDosya = @"C:\Users\onder\Music";//dosyayolunu acilacakDosya değişkenine atadık. Process.Start(acilacakDosya);//Dosya yolumuzdaki klasörü açtık } } } /*abdurrahman.onder@ogr.sakarya.edu.tr Masaüstü yazılım danışmanlığı ve geliştiriciliği yapıyorum. Fikri olan ve program siparişi olanların programlarını yazarım*/
Program hafızası fazla olduğu için .zip şeklinde paylaşamıyorum 🙂 Ancak Programı kaynak olarak isteyecek olanlar mail atabilir. Sorgusuz sualsiz kaynak kodları kendileri ile paylaşacağım…
Mail Adresim: abdurrahman.onder@ogr.sakarya.edu.tr
dadasmail.com abi dosya ile atarmısın açil
NAudio’yu usinglere yazdım fakat hata veriyor bu kütüphaneyi nasıl yükleyeceğim yardım edebilir misiniz adı nedir kütüphane kısımında