Modul 2 Akuisisi Dan Visualisasi 1. User Interface User interface (UI) adalah cara bagaimana komputer dan pengguna dapat berkomunikasi. UI yang baik adalah yang ramah terhadap pengguna (user friendly), baik pengguna yang masih awam (baru menggunakan program yang kita buat) maupun yang sudah mahir (sudah terbiasa menggunakan program yang kita buat). Sebenarnya UI ini bukanlah hal yang baru, PC (Personal Computer) yang ada saat ini tentu tidak akan pernah dipakai orang jika tidak memiliki UI. UI yang paling mendasar dari tiap PC adalah keyboard dan layar monitor. Pada modul ini kita akan mempelajari bagaimana membuat UI dalam bahasa C yang berikutnya akan digunakan pada program-program selanjutnya. 2. Akuisisi Data Program-program yang telah kita buat sebelumnya senantiasa menggunakan nilai masukan yang menjadi bagian dari program itu sendiri, sehingga pengguna tidak bisa mengubah atau memasukan nilai. Pada bagian ini kita akan mempelajari beberapa cara untuk membuat program yang dapat meminta masukan ke pengguna. 2.1 Masukan String Fungsi yang dapat digunakan adalah gets() atau scanf() yang keduanya merupakan fungsi dari pustaka stdio.h. Sebagai contoh perhatikan dan coba program instring.c. 2.2 Masukan Integer Untuk masukan integer, karena tidak ada fungsi di standard library C yang mendukungnya, maka kita bisa melakukan trik dengan cara meenggunakan gets() lalu data yang tersimpan dikonversi ke integer dengan fungsi atoi(). Sebagai contoh perhatikan dan coba program inint.c. 2.3 Membuka dan Menyimpan File Untuk kemudahan dalam penggunaan data bersama antar dua program, atau untuk keperluan penyimpanan, maka suka tidak suka kita harus bermain dengan file. Dalam bahasa C sendiri, operasi file adalah sangat mudah, yang perlu anda lakukan adalah membuka file dengan fopen(), lalu tergantung tipe operasinya anda dapat membaca, mengubah atau menambahkan isi file tersebut. Sintaks dari fopen adalah : file_pointer = fopen("namafile", "tipe"); tipe sendiri dapat berupa salah satu dari berikut : "r" Membuka file hanya untuk dibaca (read-only) "w" Membuat file baru (hapus jika sudah ada) "a" Buka file untuk ditambahkan (buat jika belum ada) "r++" Buka file untuk dibaca dan ditulis "w++" Buat file baru untuk dibaca dan ditulis "a++" Buka file untuk ditambahkan, dibaca dan ditulis Untuk sistem operasi seperti MS-DOS yang memberikan perlakuan beda pada file teks dan binary, maka anda harus menambahkan b pada tipe di atas, semisal "rb" atau "w+b". Tapi untuk OS lain seperti UNIX hal tersebut tidak perlu. Setelah diperoleh file pointer, maka berikutnya adalah mengakses isi dari file tersebut, fungsi-fungsi yang dapat digunakan antara lain fgets(), fputs(), fread() atau fwrite(). Sebagai contoh perhatikan dan coba program file.c. ELatihan: Buatlah sebuah program yang meminta masukan berupa sinyal kepada pengguna, dengan panjang tertentu, lalu hasilnya disimpan ke dalam file dengan nama tertentu. 3. Visualisasi Visualisasi yang dimaksud di sini adalah respon tampilan di layar monitor sesuai masukan yang kita berikan. Lebih khusus lagi, pada modul ini, kita akan mempelajari cara membuat plot sinyal. 2.1 Borland Graphic Interface (BGI) BGI merupakan fasilitas yang disediakan Borland Turbo C untuk melakukan interfacing dengan tampilan layar monitor. Biarpun sederhana, namun pada pelatihan ini konsep penggunaan layar monitor dan trik penggambaran sinyal yang lebih ditekankan, yang sangat berguna untuk pemrograman lainnya. Jangan lupa sertakan graphics.h di tiap awal program anda. 2.2 Inisialisasi Sebelum menggunakan BGI ini, hal pertama yang harus anda lakukan adalah melakukan inisialisasi. Caranya adalah sebagai berikut : int drv = VGA, mode = VGAHI; initgraph(&drv, &mode, "c:/tc/"); 2.3 Memberi Warna Sebelum membuat objek di dalam layar, anda harus terlebih dahulu mensetting warna objek tersebut, menggunakan fungsi setcolor() dengan sintaks : setcolor(warna); warna adalah bernilai integer yang menyatakan indeks warna , misal 0 untuk hitam dan 7 untuk putih. 2.4 Menggambar Garis Untuk menggambar sebuah garis digunakan fungsi line(), dengan sintaks sebagai berikut : line(x1,y1,x2,y2); yang akan menggambar garis dari koordinat (x1,y1) ke (x2,y2). 2.5 Menggambar Lingkaran Untuk menggambar sebuah lingkaran digunakan fungsi circle(), dengan sintaks sebagai berikut : circle(x,y,d); yang akan menggambar lingkaran berdiameter d pada posisi pusat di koordinat (x,y). ELatihan: Buatlah sebuah fungsi bernama stem() dan plot() yang masing-masing berfungsi untuk menggambar sinyal dalam waktu diskrit dan kontinyu. 4. Format File WAVE Salah satu format file yang paling sering digunakan, khususnya di Windows, adalah file WAVE (dengan ekstensi .wav). Format ini digunakan untuk menyimpan informasi audio digital. Pada bagian ini, kita akan mencoba membaca file WAVE lalu mengambil isinya untuk dianalisa kemudian. Nama Field Ukuran (byte) 4 chunk_size 4 format 4 subchunk1_ID 4 subchunk1_size 4 audio_format 2 num_channel 2 sample_rate 4 byte_rate 4 block_align 2 bitpersample 2 subchunk2_ID 4 subchunk2_size 4 data subchunk2_size chunk_ID "data" "fmt " "RIFF" ID Blok gambar 2.1 Format file WAVE mengikuti aturan RIFF (Resource Interchange File Format) yang dibuat oleh Microsoft. Alokasi bit untuk WAVE terlihat seperti gambar 2.1, dengan keterangan masing-masing adalah sebagai berikut : Nama Tipe Ukuran Deskripsi (byte) chunk_ID char 4 chunk_size long 4 String yang bertuliskan "riff", jika benar formatnya adalah RIFF. Berisi panjang keseluruhan data dalam file, tidak termasuk ke dalamnya chunk_ID dan chunk_size. format char 4 Untuk file WAV harus berisi "WAVE". Berisi "fmt ", perhatikan spasi setelah subchunk1_ID char 4 fmt, ini digunakan agar ukurannya tetap 4 byte atau 4 karakter. subchunk1_size long 4 audio_format int 2 num_channel int 2 sample_rate long 4 Panjang dari format header (dalam byte). Untuk PCM bernilai 16. Berisi 1 untuk PCM dan 2 untuk ADPCM. Jumlah channel, bernilai 1 jika mono dan 2 jika stereo. Sampling rate dalam sample/second. Misal 22050 untuk sampling rate 22 Khz. Jumlah byte per second yang harus byte_rate long 4 dibangkitkan player untuk mengeluarkan suara secara real time. Jumlah byte yang dikeluarkan tiap waktu. block_align int 2 Sama dengan byte per sample dikali jumlah channel. Jumlah bit per sample kuantisasi. Biasanya bitpersample int 2 subchunk2_ID char 4 ID untuk chunk data. Berisi "data". subchunk2_size long 4 Panjang data audio dalam byte. berisi 8 atau 16. Program wavread.c memperlihatkan contoh pembacaan file WAVE. ELatihan: Buatlah sebuah fungsi bernama wavread() dan wavwrite() masingmasing untuk membaca dan menulis file WAVE.