• Tidak ada hasil yang ditemukan

Program Piano. Kenapa penanganan event keyboard ini sangat penting?

N/A
N/A
Protected

Academic year: 2021

Membagikan "Program Piano. Kenapa penanganan event keyboard ini sangat penting?"

Copied!
14
0
0

Teks penuh

(1)

Pada E-Trik ini kita akan membuat program piano 1 oktaf sederhana. 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.

Tujuan pembuatan program, untuk mengenalkan bagaimana cara untuk menangani event dari keyboard atau sering disebut dengan keyboard event handler.

Kenapa penanganan event keyboard ini sangat penting?

Seringkali dalam memakai aplikasi kita menggunakan tombol-tombol yang ada pada keyboard untuk menjalankan fungsi tertentu dari aplikasi tersebut, atau yang dikenal dengan istilah shortcut. Atau juga mungkin Anda pernah menggunakan aplikasi yang hanya memperbolehkan user untuk menginput data berupa angka saja.

Dan apabila kita menggunakan cara standar yang disediakan oleh C#, maka shortcut yang bisa kita buat hanya kombinasi ALT + <karakter yang diinginkan>.

(2)

A. Mendesain Tampilan Program

Langkah-langkah mendesain tampilan program adalah sebagai berikut: 1. Buat project baru dengan nama programPiano, simpan di folder

e-Trik_4.

2. 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.

Gambar 2 Tata Letak Awal Komponen

3. Untuk langkah selanjutnya, kita akan mengubah semua nilai properties pada masing-masing objek yang ada pada Form1, termasuk nilai properties

Form1itu sendiri. Untuk mengetahui komponen dan properties yang mana yang akan diubah, dan apa nilainya, silahkan Anda lihat pada Tabel 1.

Tabel 1. Properties dan Value yang Akan Diubah Nama Kontrol Nama Properties Value / Nilai

Form1 BackColor Black

FormBorderStyle None

(3)

MaximizeBox False

Size 243, 232

StartPosition CenterScreen label1 BackColor Transparent

Font Palatino Linotype Font style Bold

Font size 12

ForeColor 192, 255, 192 Location 62, 5

Text Program Piano

label2 (Name) lblNamaNot

AutoSize False BackColor White

Font Microsoft Sans Serif Font style Bold

Font size 26 Location 30, 55

Size 182, 39

Text ?

TextAlign MiddleCenter label3 BackColor LightBlue

Font Palatino Linotype Font style Italic

Font size 8

Location 57, 0

Text Maxi Grand Piano label4-label11 AutoSize False

BackColor White BorderStyle Fixed3D

Size 13, 60

(4)

label4 (Name) tutsDO Location 10, 19

label5 (Name) tutsRE

Location 35, 19

label6 (Name) tutsMI

Location 60, 19

label7 (Name) tutsFA

Location 85, 19

label8 (Name) tutsSOL

Location 110, 19

label9 (Name) tutsLA

Location 135, 19

label10 (Name) tutsSI

Location 160, 19

label11 (Name) tutsDO2

Location 185, 19 panel1 BackColor LightBlue

BorderStyle Fixed3D Location 12, 148

Size 214, 85

Catatan :

Untuk pengaturan properties yang sama pada label4-label11, bisa dilakukan sekaligus. Caranya, klik pada label4, tahan CTRL, klik label5-label11. Untuk properties Text, agar bisa dikosongkan ketik dulu sembarang kata, lalu hapus.

(5)

B. Coding Program

Langkah-langkah melakukan coding program adalah sebagai berikut: 1. Buat class baru dengan cara tekan tombol , pilih Add Class... Atau

bisa dengan menekan kombinasi tombol Shift + Alt +C. Maka akan tampil kotak dialog Add New Item. Lihat gambar di bawah ini.

Gambar 3 Menambah Class Baru

2. Pada kotak dialog tersebut, pilih Class dan isi dengan nama NadaPiano. cs, klik tombol Add.

Gambar 4 Memberi Nama Class Baru

3.

tersebut, ketikkan kode berikut ini.

1. Klik di sini

2. Pilih ini

1. Pilih Class

2. Isi Nama Class

(6)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 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’:

(7)

Keterangan Program:

- Baris 3: mendeklarasikan variabel bertipe Integer dengan nama

33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 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; }

int[] frekuensiNada = new int[8] { 260, 290, 320, 340, 390, 440, 490, 520 };

public void bunyikanNada(int angkaNada) {

Console.Beep(frekuensiNada[angkaNada], 200); }

(8)

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 angkaNadadan 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 adalah 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 satuanmilisecond. Atau yang biasa disebut dengan durasi (duration). 4. Setelah itu, klik satu kali pada Form1, lalu tekan tombol F7, ketikkan

kode yang berwarna merah seperti dibawah ini.

1 2 3 4 5

bool bunyikanNada = true; public Form1()

{

InitializeComponent(); }

(9)

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.

5. K e m u d i a n , k i t a a k a n m e m b u a t m e t h o d d e n g a n n a m a

cekApakahTutsDitekan(). Ketikan kode yang berwarna merah berikut ini.

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 variabeli. Jika benar, kembalikan warna merah tomat (Color.Tomato). Dan jika salah, kembalikan warna putih (Color.White). Isi dari variabel

angkaNada adalah nada yang sesuai dengan tombol yang ditekan. Dan isi variabel i, hanya berguna sebagai variabel pembanding.

1 2 3 4 5 6 7 8 9 10 11 public Form1() { InitializeComponent(); }

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

(10)

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

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 5, yaitu method cekApakahTutsDitekan().

6. Kembali ke designer form. Klik satu kali Form1. Pada bagian Properties, klik simbol ini , Lalu klik dua kali pada eventKeyDown.

Gambar 5 Memilih Event KeyDown

1 2 3 4 5 6 7 8 9 10 11

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); }

2. Klik Simbol Ini

3. Klik Dua Kali Disini 1. Pastikan Form1Terpilih

(11)

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

Keterangan Program:

- Baris 3 dan 4: periksa apakah tombol CTRL dan tombol Qpada 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. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

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(tombolKeyboard YangDitekan);

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

(12)

- 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 variabel lokalangkaNada.

- Baris 13-18: periksa apakah variabel angkaNada memiliki nilai yang lebih besar daripada 0 dan apakah variabel bunyikanNadabernilai 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.

8. Lakukan langkah yang sama seperti pada langkah 6, akan tetapi event yang dipilih adalah event KeyUp (bukan event KeyDown).Event ini berguna untuk menjalankan kode, jika user mengangkat jarinya dari tombol keyboard. Atau dengan kata lain, user melepas tombol keyboard setelah sebelumnya ditekan.

Gambar 6 Memilih Event KeyUp 9. Kemudian, ketikkan kode di bawah ini.

(13)

Keterangan Program:

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

10. Setelah itu tekan tombol F6, untuk melakukan Build Solution. Jika ada error, coba Anda teliti lagi apakah ada kode yang terlewat atau salah dalam pengetikannya. Jika tidak ada error, tekan tombol F5. Maka program akan dijalankan.

C. Ujicoba Program

Langkah-langkah melakukan ujicoba program adalah sebagai berikut: 1. 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 (Gambar 7).

2. Coba Anda tekan tombol nada agak lama, maka pada gambar tuts yang ada dibagian bawah form akan berubah warna sesuai nada yang ditekan (Gambar 7).

3. Coba Anda menekan tombol selain itu, maka akan muncul tulisan UnPitch

(Gambar 8).

4. Tekan kombinasi tombo CTRL + Q, untuk menutup aplikasi.

1 2 3 4 5

private void Form1_KeyUp(object sender, KeyEventArgs e) {

gambarTutsDitekan(0); bunyikanNada = true; }

(14)

Gambar 7 Tampilan Program Jika Tombol Yang Ditekan Benar

Gambar

Tabel 1. Properties dan Value yang Akan Diubah Nama Kontrol Nama Properties Value / Nilai
Gambar 4   Memberi Nama Class Baru
Gambar 5   Memilih Event KeyDown1234567891011
Gambar 6   Memilih Event KeyUp 9. Kemudian, ketikkan kode di bawah ini.
+2

Referensi

Dokumen terkait

Indikator pertama adalah motif Aggressiveness (sifat agresif) yang terbagi atas 5 pernyataan akan tetapi yang dibahas hanya 4 pernyataan karena 1 pernyataan yang lain tidak valid

Risiko dari kanker kolorektal meningkat bersamaan dengan usia, terutama pada pria dan wanita berusia 50 tahun atau lebih (Depkes, 2006) dan hanya 3% dari kanker kolorektal muncul

Divisi Identifikasi memberikan laporan yang sangat komprehensif tentang populasi ternak (sapi potong, perah dan kerbau) sebelum erupsi Merapi, ternak terancam,

walaupun baginda mahu memberi amaran kepada orang-orang yang rapat kepadanya, baginda akan bercakap secara umum, umpamanya:”Keadaan setengah orang ialah ….”JIkalau perlu

Dengan demikian, maka variabel independen yang terdiri dari Pendapatan Asli Daerah, PDRB Perkapita, dan Tingkat Pendidikan yang diproksikan dengan Rata-rata Lama

Tujuan dari penelitian ini adalah untuk mengetahui kuat tekan dan densitas pada beton normal dan beton berbahan fly ash 10 % ( sebagai pengganti semen) , serta

Memahami konsep matematika merupakan tujuan pembelajaran matematika yang pertama. Untuk mencapai kemampuan pemahaman konsep tersebut dibutuhkan suatu metode pembelajaran

Dari data pada Tabel 4 menunjukkan bahwa kecepatan 1000 rpm resistansinya sebesar 523,333 Ω, pada kecepatan putar 2000 rpm resistansinya sebesar 396,667 Ω, dan 3000