game yang dibangun lebih semakin hidup dan terasa nyata, hal ini juga yang membuat para pemain lebih tertarik, bayangkan apabila di dalam suatu

dokumen-dokumen yang mirip
PERTEMUAN III OBJEK DAN CLASS TUJUAN PRAKTIKUM

Score: Persentage: % ~ u ~ Generated by Foxit PDF Creator Foxit Software For evaluation only.

Cara Membaca File Text di JAVA

BAB 5 Mendapatkan Input dari Keyboard

TPI4202 e-tp.ub.ac.id. Lecture 4 Mas ud Effendi

BAB 5 Mendapatkan Input dari Keyboard

1. Manakah jawaban yang benar,pada saat Anda mengcompile dan menjalankan class berikut ini:

PEMROGRAMAN BERORIENTASI OBJEK

EXCEPTION. 2. Pada kondisi bagaimana klausa finally tidak akan dieksekusi? Kode didalam block try memiliki statement return

Modul Praktikum Pemrograman

Apa yang menjadi output potongan kode diatas? Error karena tidak ada String yang di-passing kedalam konstruktor Bapak

Variabel tersebut seharusnya bisa dideklarasikan didalam try block dan block catch

Waktu Sisa : 0:43:4. Sukses. Kesalahan pada URL. File tidak lengkap. Kesalahan umum. Mengerjakan finally. Diluar block

BAB I PERSYARATAN PRODUK

E-Book PEMROGRAMAN BERORIENTASI OBJEK. Disusun Oleh: Arfian Hidayat, S.Kom

SUMBER BELAJAR PENUNJANG PLPG

Pertemuan 2 Struktur Kontrol Percabangan

Pada pembuatan game di java, sering kali para programer. mendefinisikan banyak object seperti suara, gambar, dan grafik geometri yang

Tidak ada satupun dari pilihan di atas yang benar karena checked exception tidak bisa ditulis

Topik. Stream I/O Cara menggunakan Stream Hierarchy Java I/O Membaca File Menulis File Menghapus File Cara membaca isi Direktori dalam file

BAB 2 COLLECTION & THREAD

Pengenalan JavaScript

A. TUJUAN : Dapat mengimplementasi-kan kelas-kelas Java yang digunakan dalam pemrogaman jaringan.

1. Apa yang harus dilakukan oleh programmer untuk menangani user-defined exception? Menuliskan exception sebagai start method

Sukses. Kesalahan pada URL. File tidak lengkap. Kesalahan umum

MK. Pemrograman Berorientasi Objek. Input dari Keyboard. Karmilasari

2 TIPE DATA DAN VARIABEL

Dasar-Dasar OOP di Java

Input Nilai tanpa Case String di Java

Modul 3 Flow Control dan Input

Tipe if : If tanpa else (if) If dengan else (if-else) Nested if

KA2173 Pemrograman Berorientasi Objek. 10 BAB X PENGAKSESAN DATABASE. H a l 64

Obyektif : KONTROL ALUR PROGRAM

Bahasa Pemrograman :: Dasar Pemrograman Java

Encapsulation (Encapsulasi) Minggu 5 Pemrograman Berorientasi Objek Alfa Faridh Suni

Badiyanto, S.Kom., M.Kom. PBO java

BAB II VARIABEL DAN TIPE DATA

LAPORAN PRAKTIKUM PEMROGRAMAN DASAR TIPE-TIPE FUNGSI ATAU METHOD

SEKOLAH TINGGI MANAJEMEN INFORMATIKA & KOMPUTER JAKARTA STI&K SATUAN ACARA PERKULIAHAN

BAB 2 INPUT DARI KEYBOARD

PRAKTEK 1 CLASS, ATTRIBUTE, METHOD, DAN OBJEK

Pemrograman Fery Updi,M.Kom

BAHASA PEMROGRAMAN JAVA PUTU INDAH CIPTAYANI JURUSAN SISTEM INFORMASI STMIK AMIKOM YOGYAKARTA

1. Keyword mana yang memiliki fungsi sama dengan keyword this dan menyediakan reference ke atribut turunan dari objek? super

Inheritance dan Kata Kunci static

PRAKTIKUM 8 FILE INPUT OUTPUT

PERTEMUAN 3 OBJEK DAN CLASS

PEMROGRAMAN JAVA. Yoannita, S.Kom. Input Kondisi (IF-ELSE, SWITCH)

A. TUJUAN PEMBELAJARAN 1. Mengetahui cara menangani exception dengan cara melempar exception. 2. Mengetahui cara membuat sendiri class exception.

BAB III ANALISA MASALAH DAN PERANCANGAN SISTEM

PEMROGRAMAN BERORIENTASI OBJEK

PRAKTIKUM 7 DASAR INPUT OUTPUT

STREAM DAN FILE. PipedInputStream, SequenceInputStream, dan StringBufferInputStream.

BAB IV IMPLEMENTASI DAN PEMBAHASAN SISTEM. Tahap implementasi merupakan prosedur yang harus. dilakukan untuk menyelesaikan desain sistem yang ada pada

Modul Praktikum 3 Pemograman Berorientasi Objek

Pemrograman Berorientasi. Class dan Obyek 2

BAB Argument Command-Line dan System Properties

BAHASA PEMROGRAMAN JAVA

Variabel dengan tipe dasar hanya dapat menyimpan sebuah nilai

Praktikum 3 Konsep Class, Attribute dan Method

int i = 0; while (i < 10) { System.out.println( Informatika Unpas ); i++; }

2. Pilih instruksi yang dapat digunakan dalam method actionperformed untuk membedakan antara tombol buttonone dan buttontwo.

Definisi Eksepsi (exception)

BAB 1 KONSEP DASAR JAVA

Nama Lengkap : Muiz Lidinillah NIM :

IF PEMROGRAMAN LANJUT EXCEPTION. Oleh : Andri Heryandi, M.T.

PEMROGRAMAN JAVA : VARIABEL DAN TIPE DATA

MODUL 1 PENGENALAN OOP

PEMROGRAMAN JARINGAN MODUL 3 STREAM

Modul Praktikum Bahasa Pemrograman 1

Dasar Pemrograman. Kondisi dan Perulangan. By : Hendri Sopryadi, S.Kom, M.T.I

JAVA BASIC PROGRAMMING Joobshet

LAPORAN RESMI. PRAKTIKUM TEKNOLOGI WEB Pengenalan JavaScript

LAB PEMROGRAMAN I (JAVA FUNDAMENTAL) PERTEMUAN 3 Dosen : Bella Hardiyana S. Kom

Identifier, Keywords, Variabel, Tipe Data Primitif dan Operator PBO. Ramos Somya

Pemrograman Lanjut Jurusan S1 Teknik Informatika. 9/17/2012 Ratno

BAB 3 TYPE DATA, VARIABLE DAN OPERATOR

KENDALI PROSES. Untuk mengatur arus program, pemrograman java menyediakan struktur perulangan (looping), kondisional, percabangan, dan lompatan.

Modul II Object Oriented Programming

Membuat dan Menggunakan Class

PERTEMUAN VII Multithreaded Programming. Praktikan mampu membuat program sederhana mengenai threading

Dasar-Dasar OOP di Java

IF PEMROGRAMAN LANJUT TUGAS 1. Oleh : Andri Heryandi, M.T.

MODUL 11 J2ME (Java 2 Micro Edition)

Class & Object 2 ~Praktikum~ Imam Fahrur Rozi

PRAKTIKUM 17 MENANGANI EXCEPTION

PEMAHAMAN DASAR DASAR JAVA

I. Tujuan Instruksional Umum Komunikasi antar objek pada kelas yang berbeda Memahami berbagai macam modifier dan karakteristiknya II.

Abstract Class dan Interface. Viska Mutiawani, M.Sc

PEMROGRAMAN VISUAL BASIC

PERTEMUAN 2 ARRAY, PERCABANGAN, DAN PERULANGAN

Masukkan connector tersebut ke dalam direktori pada tempat jdk di-instal dengan path

MODUL PRAKTIKUM PEMROGRAMAN BERORIENTASI OBJEK

BAB IV IMPLEMENTASI DAN PENGUJIAN

Sesi 8. Event Handling & Exception Handling. Tujuan Intruksional

Array 1 Dimensi pada Java

Tujuan Intruksional. Mampu menjelaskan tentang event handling Mampu menjelaskan tentang method Mampu menggunakan event handling Mampu membuat method

LAPORAN PRAKTIKUM PEMROGRAMAN BERBASIS OBJEK

OVERLOADING, CONSTRUCTOR DAN DESTRUCTOR. Dewi Sartika, M.Kom

BONUS. Dasar Java Mobile. Mengenal Java Mobile Mengenal MIDlet Mobile Grafis Mobile Animasi Latihan Soal

Transkripsi:

BAB 4 EFEK SUARA 4.1 Pendahuluan Pada sebuah permainan efek suara sangat dibutuhkan untuk membuat game yang dibangun lebih semakin hidup dan terasa nyata, hal ini juga yang membuat para pemain lebih tertarik, bayangkan apabila di dalam suatu permainan tidak ada suara sama sekali. Efek suara sangat diperlukan oleh game misalnya ketika sebuah objek mengalami tabrakan, ledakan bom, suara tembakan, dll. 4.2 Tujuan Setelah mempelajari modul ini peserta diharapkan dapat: Memanggil dan Memainkan File Suara. Memanggil dan Memainkan File MIDI Sequence. Mengetahui perbedaan antara file berekstensi midi dan (Aiff, Au, Wav) Mengetahui cara menggunakan class File dan URL untuk meload file suara 4.3 Mengakses File Suara API Sound pada Java mendukung 3 macam format suara yang digunakan di Web dan Aplikasi Desktop yaitu: 1. AIFF 2. AU 3. WAV Pemrograman Game Java 1

Untuk memanggil dan mendengarkan suara, Java memerlukan paket javax.sound.sampled.* untuk disertakan di baris awal program yang dapat dituliskan seperti dibawah ini: import javax.sound.sampled.*; Apabila menggunakan eclipse, maka akan terlihat menu pop-up yang menampilkan nama-nama package dalam javax. Jika mengetikan javax.sound diikuti dengan titik maka akan terlihat package di dalamnya yaitu sampled dan midi. Dengan menambahkan.* pada akhir statement maka compiler sudah memberitahukan untuk meng-import semua class dalam javax.sound.sampled. AudioSystem dan AudioInputStream adalah class yang berada di dalam paket javax.sound.sampled dan digunakan untuk memanggil dan memainkan sebuah suara. Kunci utama untuk pemanggilan suara adalah class bernama AudioInputStream. Class ini digunakan untuk memuat sebuah file suara dari file lokal dimana program diletakkan atau dari URL lain di internet. Berikut ini adalah pembuata sebuah obyek/instance baru dari class tersebut. AudioInputStream suara; Statement ini biasanya diposisikan sebagai variable global dalam class, didefinisikan pada baris-baris awal dalam class sebelum semua method ditulis. Selain itu juga dapat didefinisikan sebagai variable private, public, atau protected (defaultnya adalah public). Dalam peraturan pemrograman berbasis objek, public memposisikan variable agar dapat diakses oleh class lain diluar variable tersebut didefinisikan, private berarti variable tersebut tidak dapat diakses dari class lain, sedangkan protected hampir mirip dengan private hanya Pemrograman Game Java 2

saja class-class yang menjadi sub-classnya(melalui inheritance) bisa menggunakannya. Kode untuk memuat suara dari URL biasanya diletakkan dalam konstruktor. Method yang digunakan untuk memuat sebuah file suara adalah AudioSystem.getAudioInputStream. Method ini menerima sebuah File, InputStream atau URL, ada dua cara untuk membuat audio stream (AudioFormat dan Encoding). suara = AudioSystem.getAudioInputStream(new File( BOOM.wav )); Nilai balik dari method ini adalah AudioInputStream. Karena getaudioinputstream tidak memiliki versi yang dapat di overload dan hanya menerima input berupa string dari nama file, maka harus melewatkan sebuah objek File kedalamnya. Cukup mudah menggunakan objek dari File, hanya dengan memberikan nama file pada kontruktor method File. Apabila ingin mengambil sebuah file dari sebuah URL, kode yang digunakan adalah sebagai berikut : URL lokasi = new URL( http://www.vedcmalang.ac.id/suara/boom.wav ); suara = AudioSystem.getAudioInputStream(lokasi); Apabila ingin mendistribusikan program java yang telah dibuat dan ingin mendapatkan hasil yang maksimal, sebaiknya mengganti method new File() dan new URL() untuk memuat semua sumber (seperti sebuah file gambar atau suara) dengan memanfaatkan this.getclass().getresource(), dimana Method getresource() berada di instance class yang saat ini digunakan this.getclass().. Berikut ini sebuah method yang di tulis menggunakan fungsi tersebut : public URL geturl(string namafile){ Pemrograman Game Java 3

URL url=null; try{ url=this.getclass().getresource(namafile); catch(exception e){ return url; AudioInputStream tidak dapat langsung digunakan untuk memainkan suara, AudioInputStream hanya dapat mengakses file audio tanpa kemampuan untuk memainkanya. Untuk itu, perlu menggunakan class lain yang bernama Clip (Import javax.sound.sampled.clip). Clip klip =AudioSystem.getClip(); 4.4 Memuat dan Mememainkan Klip Suara Sebelumnya sudah mempunyai sebuah AudioInputStream dan sebuah Clip, jadi hanya perlu untuk membuka file suara dan memainkannya. Langkah ini dua-duanya dilakukan oleh class Clip. Pertama, bukalah file suara : klip.open(suara); Berikutnya, ada dua cara atau method untuk memainkan klip, dengan menggunakan class Clip yaitu : Method start() dapat digunakan untuk memainkan klip suara dengan kode seperti berikut: klip.start(); Untuk yang kedua adalah method loop(), dimana method ini menyediakan sebuah pilihan yang memperbolehkan untuk menentukan seberapa banyak klip akan diulang. baik dengan jumlah tertentu maupun tak hingga. Dibawah ini kode yang memungkinkan untuk memainkan klip suara dengan method loop() : klip.loop(0); Pemrograman Game Java 4

Ingat, parameter menunjukkan seberapa banyak ia akan diulang. Berikut ini adalah bagaimana agar klip suara dapat dimainkan terus menerus : klip.loop(clip.loop_continously); Pada kenyataannya programer sering lupa untuk menghentikan suara yang telah dimainkan padahal tidak semua suara dimainkan terus menerus seperti suara tabrakan dll, untuk itu jika ingin menghentikan klip suara dapat menggunakan method stop() seperti pada potongan kode dibawah ini: klip.stop(); 4.5 Memuat dan Mememainkan MIDI MIDI adalah singkatan dari Musical Instrument Digital Interface. MIDI adalah sebuah kumpulan format musik, bukan sebuah format sample, artinya musik MIDI tidak direkam menggunakan konverter analog-to-digital (yang berada pada sound card di dalam komputer). Perlu diketahui bahwa file berekstensi (aiff,au dan wav) berukuran cukup besar, sedangkan aplikasi tidak ingin pengguna menunggu lima menit atau lebih (khususnya dial-up) hanya untuk menunggu sampai klip selesai didownload(game jaringan). Hal ini terjadi ketika anda memanggil method open(), jadi ketika anda mencoba untuk membuka sebuah file suara berukuran besar, maka method ini akan memaksa pengguna untuk menunggu selama waktu download klip suara. Hal ini yang dapat menjawab permasalahan tersebut adalah MIDI sequence. Memuat file MIDI memerlukan sedikit lebih banyak cara dari pada memuat file berekstensi (aiff,au dan wav). Hal ini karena file MIDI dimainkan Pemrograman Game Java 5

melalui perangkai (sequencer) bukan melalui sound mixer. Class Sequence digunakan untuk memuat file MIDI : Sequence suara = MidiSystem.getSequence(new File( contoh.mid )); Meskipun kode tersebut disiapkan agar file MIDI dapat dimainkan melalui sequencer, kita belum sama sekali membuat instance dari sequencer: Sequencer ambilsuara= MidiSystem.getSequencer(); Berikutnya, Memberitahukan kepada class Sequencer bahwa kita memiliki file midi (melalui class Sequence): ambilsuara.setsequence(suara); Sekarang yang perlu dilakukan adalah membuka file dan memainkannya: ambilsuara.open(); ambilsuara.start(); Untuk memainkan MIDI secara berulang-ulang sebanyak yang diinginkan gunakan method setloopcount() dimana parameternya sebagai penentu: ambilsuara.setloopcount(1); Apabila ingin dimainkan secara terus menerus tanpa henti gunakan kode berikut: ambilsuara.setloopcount(sequencer.loop_continuously); Terakhir adalah menghentikan MIDI, prosesnya sama seperti menghentikan file (aiff,au,wav) yaitu dengan cara memanggil method stop(): ambilsuara.stop(); Pemrograman Game Java 6

4.6 Penanganan Error Java menyediakan penanganan error pada class Sound, compiler secara otomatis akan menolak atau memberikan pesan kesalahan apabila tidak menggunakan blok try... catch. Sebagai contoh, ketika memuat sebuah file, pertama kali akan diperiksa dengan IOException sebelum menggunakan handler umum(exception). Class AudioSystem, AudioInputStream dan Clip membutuhkan handler dibawah ini : IOException LineUnavailableException UnsuportedAudioFileException Cara menggunakan sebuah error handler untuk program yang akan memainkan sebuah suara. Kode berikut ini diletakkan pada konstruktor : KONSTRUKTOR(){ try { //kode program catch (MalformedURLException e){ catch (IOException e){ catch (LineUnavailableException e){ catch (UnsuportedAudioFileException e){ Disamping itu class Sequence dan Sequencer juga membutuhkan penanganan error yang tidak jauh berbeda dengan class Class AudioSystem, AudioInputStream dan Clip. Cara penanganannya dapat dituliskan sebagai berikut: KONSTRUKTOR(){ try { // kode program catch (InvalidMidiDataException e) { catch (IOException e) { catch (MidiUnavailableException e) { Pemrograman Game Java 7

Penanganan error sangat diperlukan untuk mencegah program yang dijalankan crash atau rusak. 4.7 Class OperasiSuara Pembuatan class OperasiSuara dimaksudkan agar dapat digunakan pada pembuatan game nanti dengan mempermudah peserta ketika mengakses dan mendengarkan suara. import java.io.*; import java.net.*; import javax.sound.sampled.*; public class OperasiSuara{ private AudioInputStream suara; private Clip klip; private String namafile = ""; private boolean looping = false; private int repeat = 0; public OperasiSuara(){ try{ klip = AudioSystem.getClip(); catch(lineunavailableexception e) {System.out.println("Terjadi kesalahan pada klip suara : "+e.tostring()); public OperasiSuara(String filesuara) { this();//memanggil default konstruktor pertama (tanpa parameter); load(filesuara); public boolean load(string filesuara){ try{ setfilename(filesuara); suara = AudioSystem.getAudioInputStream(getURL(namaFile)); klip.open(suara); return true; catch(ioexception e){ catch(unsupportedaudiofileexception e){ catch(lineunavailableexception e){ public void setfilename(string nama_fail) {namafile = nama_fail; public void setlooping(boolean ulang) {looping = ulang; Pemrograman Game Java 8

public void setrepeat(int ulangi) {repeat= ulangi; public Clip getclip() { return klip; public int getrepeat() {return repeat; public boolean getlooping() {return looping; public String getnamafile() {return namafile; private URL geturl(string filename){ URL url = null; try { url = this.getclass().getresource(filename); System.out.println(url); catch(exception e){ System.out.println("error url : "+e.tostring()); return url; public boolean isloaded(){ return (boolean)(suara!= null); public void play(){ if (!isloaded()) return; klip.setframeposition(0); if(looping) klip.loop(clip.loop_continuously); else klip.loop(repeat); public void stop(){ klip.stop(); 4.8 Class OperasiMIDI Pembuatan class OperasiMIDI sangat dibutuhkan ketika peserta sudah masuk pada pembuatan geme dimana perserta hanya mengakses method yang disediakan di class ini dan tanpa harus menuliskannya secara berulangulang. import java.io.*; import java.net.*; import javax.sound.midi.*; public class OperasiMidi{ private Sequence suara; private Sequencer ambilsuara; private String namafile; private boolean looping = false; private int repeat = 0; public OperasiMidi(){ try{ ambilsuara = MidiSystem.getSequencer(); Pemrograman Game Java 9

catch(midiunavailableexception e){ public OperasiMidi(String filemidi){ this();//memanggil default konstruktor pertama (tanpa parameter); load(filemidi); public boolean load(string filemidi){ try{ namafile = filemidi; suara = MidiSystem.getSequence(getURL(namaFile)); ambilsuara.setsequence(suara); ambilsuara.open(); return true; catch(invalidmididataexception e){ catch(midiunavailableexception e){ catch(ioexception e){ public void setlooping(boolean ulang) {looping =ulang; public void setrepeat(int ulangi) {repeat= ulangi; public Sequence getsuara() { return suara; public String getfilename() {return namafile; public boolean getlooping() {return looping; public int getrepeat() {return repeat; private URL geturl(string filename){ URL url = null; try { url = this.getclass().getresource(filename); catch(exception e){ return url; public boolean isloaded(){ return (boolean)(ambilsuara.isopen()); public void play(){ if(!ambilsuara.isopen()) return; if(looping){ ambilsuara.setloopcount(sequencer.loop_continuously); ambilsuara.start(); else{ ambilsuara.setloopcount(repeat); ambilsuara.start(); public void stop(){ ambilsuara.stop(); Pemrograman Game Java 10