Halo Sobat Coding, siapa yang suka musik? kalau saya suka sekali main piano jadi pada tutorial kali ini kita akan membuat program piano1 oktaf sederhana, jadi kita bias main piano di PC deh asik kan? Hhaha… :D   Berikut deskripsi program yang akan kita buat. • Program berguna untuk me...

Program Piano 1 Oktaf

Halo Sobat Coding, siapa yang suka musik? kalau saya suka sekali main piano jadi pada tutorial kali ini kita akan membuat program piano1 oktaf sederhana, jadi kita bias main piano di PC deh asik kan? Hhaha… :D

 

Berikut deskripsi program yang akan kita buat.

• Program berguna untuk meng-generate nada dari Do rendah sampai Do tinggi (8 tangga nada).

• Nada dibunyikan dengan tombol keyboard.

• Output suara melalui speaker beep atau internal speaker.

 

Pertama kita akan membuat tampilan program langkah-langkahnya adalah sebagai berikut:

Buat project baru dengan nama programPiano

Masukkan ke dalam Form1 komponen-komponen yang dibutuhkan sebagai berikut. 11 buah Label , dan 1 buah Panel . Atur tata letaknya kira-kira seperti pada gambar di bawah ini.

 Untuk langkah selanjutnya, kita akan mengubah semua nilai properties pada masing-masing objek yang ada pada Form1, termasuk nilai properties Form1 itu sendiri. Untuk mengetahui komponen dan properties yang mana yang akan diubah, dan apa nilainya, silahkan Anda lihat pada Tabel di bawah ini.

 

 

 

 

Setelah melakukan pendesainan tampilan, langkah selanjutnya adalah coding langkah-langkahnya adalah sebagai berikut :

Buat class baru dengan cara klik menu PROJECT Pada Menu Utama lalu pilih Add Class... atau bisa dengan menekan kombinasi tombol Shift + Alt + C. seperti gambar di bawah ini

Maka akan tampil kotak dialog Add New Item. Pada kotak dialog tersebut, pilih Class dan isi dengan nama NadaPiano.cs, klik tombol Add. seperti  gambar di bawah ini.

Setelah itu akan tercipta file class baru yang kita buat tadi. Pada class tersebut, ketikkan kode berikut ini.

class NadaPiano
    {
        int angkaNada;

        public NadaPiano()
        { angkaNada = 0; }

        public int getAngkaNada()
        {
            return angkaNada;
        }

        public string cekNada(char namaTombol)
        {
            string namaNada;
            angkaNada = 0;

            switch (namaTombol)
            {
                case 'A':
                    angkaNada = 1;
                    namaNada = "DO";
                    break;

                case 'S':
                    angkaNada = 2;
                    namaNada = "RE";
                    break;

                case 'D':
                    angkaNada = 3;
                    namaNada = "MI";
                    break;

                case 'F':
                    angkaNada = 4;
                    namaNada = "FA";
                    break;

                case 'G':
                    angkaNada = 5;
                    namaNada = "SOL";
                    break;

                case 'H':
                    angkaNada = 6;
                    namaNada = "LA";
                    break;

                case 'J':
                    angkaNada = 7;
                    namaNada = "SI";
                    break;

                case 'K':
                    angkaNada = 8;
                    namaNada = "DO";
                    break;

                default:
                    angkaNada = 0;
                    namaNada = "UnPitch";
                    break;
            }
            return namaNada;
        }

        private int[] frekuensiNada = new int[8] { 260, 290, 320, 340, 390, 440, 490, 520 };
        public void bunyikanNada(int angkaNada)
        {
            Console.Beep(frekuensiNada[angkaNada], 200);
        }
    }

Keterangan Program:

 

  • Baris 3: mendeklarasikan variabel bertipe Integer dengan nama angkaNada.
  • Baris 4-5: konstruktor class NadaPiano.
  • Baris 6-9: membuat method dengan nama getAngkaNada(), yang berguna untuk mengambil isi dari variabel angkaNada.
  • Baris 10: membuat method dengan nama cekNada(), method ini memiliki nilai kembalian bertipekan string.
  • Baris 12: mendeklarasikan variabel dengan tipe data string, yang bernama namaNada.
  • Baris 13: men-set isi dari variabel angkaNada dengan angka 0.
  • Baris 14-52: menentukan isi dari variabel angkaNada dan namaNada, dengan cara membandingkan namaTombol yang ditekan oleh user dengan karakter tombol yang ditentukan dari awal. Yaitu karakter, ‘A’, ‘S’, ‘D’, ‘F’, ‘G’, ‘H’, ‘J’, ‘K’. Akan tetapi, jika tidak ada yang cocok, maka isi dari variabel angkaNada ada
    bool bunyikanNada = true;
    
            public Form1()
            {
                InitializeComponent();
            }
    lah angka 0 dan isi dari variabel namaNada adalah “UnPitch”.
  • Baris 53: mengembalikan nilai isi dari variabel namaNada.
  • Baris 55: mendeklarasikan array bertipe Integer, sepanjang 8, dengan nama frekuensiNada. Lalu, array ini langsung diisi dengan nilai-nilai frekuensi yang diperlukan untuk menciptakan nada Do rendah sampai Do tinggi.
  • Baris 56: membuat method dengan nama bunyikanNada(), method ini tidak memiliki nilai kembalian, makanya di-set void. Baris 58: membunyikan speaker beep, dengan frekuensi yang ditentukan oleh array frekuensiNada[angkaNada], angkaNada berfungsi untuk menentukan indeks array keberapakah yang akan dipanggil. Lalu, angka 200, berguna sebagai penentu berapa lama suara akan dibunyikan dalam satuan milisecond. Atau yang biasa disebut dengan durasi (duration).

 

Setelah itu, klik satu kali pada Form1, lalu tekan tombol F7, ketikkan kode bool bunyikanNada = true; di atas public form  seperti dibawah ini.

bool bunyikanNada = true;

        public Form1()
        {
            InitializeComponent();
        }

Keterangan Program:

 

  • Baris 1: mendeklarasikan variabel bertipe Boolean, dengan nama bunyikanNada. Dan langsung di-set menjadi true.
  • Baris 2-5: baris ini tidak perlu diketik, karena baris ini sudah ada dengan sendirinya pada saat kita membuat project baru.

 

Kemu d i a n , k i t a a k a n memb u a t me t h o d d e n g a n n ama cekApakahTutsDitekan(). Ketikan kode  berikut ini.

public Form1()
        {
            InitializeComponent();
        }

        private Color cekApakahTutsDitekan(int angkaNada, int i)
        {
            if (angkaNada == i)
                return Color.Tomato;
            else
                return Color.White;
        }

Keterangan Program:

 

  • Baris 1-4: baris ini tidak perlu diketik, karena penulis hanya ingin menunjukkan dimana letak kode yang akan kita ketik.
  • Baris 5: membuat method dengan nama cekApakahTutsDitekan(), pada method ini terdapat dua parameter yaitu angkaNada dan i. Method ini juga memiliki nilai kembalian yang bertipekan objek Color.
  • Baris 7-10: periksa apakah isi variabel angkaNada sama dengan isi dari variabel i. Jika benar, kembalikan warna merah tomat (Color.Tomato).

Dan jika salah, kembalikan warna putih (Color.White). Isi dari variable angkaNada adalah nada yang sesuai dengan tombol yang ditekan. Dan isi variabel i, hanya berguna sebagai variabel pembanding.

Setelah itu, ketikan kode berikut ini. Letakkan di bawah method yang sudah kita buat sebelumnya.

private void gambarTutsDitekan(int angkaNada)
        {
            tutsDO.BackColor = cekApakahTutsDitekan(angkaNada, 1);
            tutsRE.BackColor = cekApakahTutsDitekan(angkaNada, 2);
            tutsMI.BackColor = cekApakahTutsDitekan(angkaNada, 3);
            tutsFA.BackColor = cekApakahTutsDitekan(angkaNada, 4);
            tutsSOL.BackColor = cekApakahTutsDitekan(angkaNada, 5);
            tutsLA.BackColor = cekApakahTutsDitekan(angkaNada, 6);
            tutsSI.BackColor = cekApakahTutsDitekan(angkaNada, 7);
            tutsDO2.BackColor = cekApakahTutsDitekan(angkaNada, 8);
        }

Keterangan Program:

  • Baris 3-10: berguna untuk mengubah warna (BackColor) dari objek Label tutsDO sampai tutsDO2. Warna yang akan di-set terdiri atas dua pilihan putih dan merah tomat. Putih, mengindikasikan gambar tuts tidak ditekan, sedangkan warna merah tomat, berarti gambar tuts sedang ditekan. Pilihan warna ini ditentukan oleh method yang sebelumnya telah kita buat pada langkah sebelumnya, yaitu method cekApakahTutsDitekan().

Kembali ke designer form. Klik satu kali Form1. Pada bagian Properties, klik simbol   Lalu klik dua kali pada event KeyDown. Seperti gambar di bawah ini

Lalu, ketik kode berikut ini. Kode ini akan berjalan, apabila user menekan tombol keyboard pada Form1

private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if ((e.Control == true) && (e.KeyCode == Keys.Q))
                this.Close();
            else
            {
                if (e.Control != true)
                {
                    NadaPiano objPiano = new NadaPiano();
                    char tombolKeyboardYangDitekan = Convert.ToChar(e.KeyCode);
                    lblNamaNot.Text = objPiano.cekNada(tombolKeyboardYangDitekan);

                    int angkaNada = objPiano.getAngkaNada();
                    if ((angkaNada > 0) && (bunyikanNada == true))
                    {
                        gambarTutsDitekan(angkaNada);
                        objPiano.bunyikanNada(angkaNada - 1);
                        bunyikanNada = false;
                    }
                }
            }
        }

Keterangan Program:

  • Baris 3 dan 4: periksa apakah tombol CTRL dan tombol Q pada keyboard ditekan. Jika benar, tutup aplikasi. Atau dengan kata lain, periksa apakah kombinasi tombol CTRL + Q pada keyboard ditekan.
  • Baris 7: periksa apakah tombol CTRL tidak ditekan. Jika benar jalankan baris kode 9-18.
  • Baris 9: buat objek baru dari class NadaPiano, dengan nama objPiano.
  • Baris 10: ambil karakter tombol yang sedang ditekan, lalu simpan ke dalam variabel bertipe char dengan nama tombolKeyboardYangDitekan.
  • Baris 11: cek apakah tombol yang ditekan adalah tombol yang benar untuk menghasilkan nada, menggunakan method cekNada(). Jika benar, maka pada komponen Label lblNamaNot akan muncul nama not, DO, RE, MI, dan seterusnya. Akan tetapi, jika salah yang akan muncul adalah tulisan UnPitch.
  • Baris 12: ambil isi variabel angkaNada yang ada pada class NadaPiano dengan menggunakan method getAngkaNada(). Lalu, simpan ke variable lokal angkaNada.
  • Baris 13-18: periksa apakah variabel angkaNada memiliki nilai yang lebih besar daripada 0 dan apakah variabel bunyikanNada bernilai true. Jika benar, maka baris program 15-17 akan dijalankan.
  • Baris 15: panggil method gambarTutsDitekan().
  • Baris 16: panggil method bunyikanNada(), melalui objek objPiano.
  • Baris 17: set variabel -Baris 16: panggil method bunyikanNada menjadi bernilai false.

 

Lakukan langkah yang sama seperti pada langkah sebelumnya dengan menekan tombol , akan tetapi event yang dipilih adalah event KeyUp (bukan event KeyDown). Event iniberguna untuk menjalankan kode, jika user mengangkat jarinya dari tombolkeyboard. Atau dengan kata lain, user melepas tombol keyboard setelahsebelumnya ditekan. Seperti gambar di bawah ini.

Kemudian, ketikkan kode di bawah ini.

private void Form1_KeyUp(object sender, KeyEventArgs e)
        {            
            gambarTutsDitekan(0);
            bunyikanNada = true;
        }

Keterangan Program:

  • Baris 3: panggil method gambarTutsDitekan().
  • Baris 4: set variabel bunyikanNada menjadi true.

Coding sudah selesai, sekarang saatnya untuk menjalankan program, tekan F5 lalu program akan running, langkah langkah menjalankan program adalah sebagai berikut :

Setelah program dijalankan, Anda bisa menekan tombol A pada keyboard untuk nada DO rendah, tombol S untuk nada RE, tombol D untuk nada MI, F = FA, G = SOL, H = LA, J = SI, K = DO tinggi. Maka nama nada akan tampil sesuai dengan tombol yang ditekan  seperti gambar di bwah ini.

Coba Anda tekan tombol nada agak lama, maka pada gambar tuts yang ada dibagian bawah form akan berubah warna sesuai nada yang ditekan Coba Anda menekan tombol selain itu, maka akan muncul tulisan UnPitch seperti gambar di bawah ini

Sekian Tutorial kali ini, bagaimana? asik gak? bisa main piano di PC dengan program yang kita buat sendiri? Selamat Mencoba, Let's Coding and Let's Play

 

 

 

 

 

 

 

 


About Author

Sendy PK

Saya adalah Programmer yang memiliki impian untuk menguasai dunia kunjungi situs pribadi saya di www.spk.my.id dan Online Shop saya di www.spkshop.web.id


Comment & Discussions

    Please LOGIN before if you want to give the comment.