Membuat Aplikasi Gendang Belek Sejenis RealDrum

Gendang Belek berarti gendang besar merupakan alat musik tradisional yang permainannya dilakukan secara berkelompok, gendang belek berasal dari suku sasak yang berasal dari pulau Lombok daerah Nusa Tenggara Barat, Sejarah dulu gendang belek dijadian penyemangat prajurit yang pergi berperang.

Mungkin itu sedikit pemahaman mengenai gendang belek, di artikel ini tidak membahas mengenai cara memainkan gendang belek tetapi kita akan membuat gendang belek yang dapat kita mainkan dalam smartphone, dalam pembuatan aplikasi di artikel ini penulis hanya menampilkan source code supaya anda tidak perlu melakukan pengetikan dari aplikasi tersebut, jadi anda hanya mengikuti intruksi dari pengerjaan vidio.

Tutorial Bagian 2

Tutorial Bagian 3

Pembuatan Projek

Terlebih dahulu anda harus download Resource yang diperlukan seperti design, gambar, backsound, animasi, color dan lainnya

Download Resource

Buat aplikasi baru dengan nama GendangBelek kemudian masukan source code berikut dibagian manifest.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.kodetr.gendangbelek">

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:configChanges="keyboardHidden|orientation"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/Theme.AppCompat.NoActionBar">
        <activity
            android:name=".DetailActivity"
            android:screenOrientation="landscape">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".MainActivity"
            android:screenOrientation="landscape" />
        <activity
            android:name=".ItemActivity"
            android:screenOrientation="landscape" />
        <activity
            android:name=".Tentang"
            android:screenOrientation="portrait" />
    </application>
</manifest>

Bagian source code tersebut terdapat class DetailActivity sebagai class utama yang fungsinya saat aplikasi dijalankan activity tersebut yang pertama kali muncul, kemudaian ada class MainActivity, ItemActivity dan yang terakhir class Tentang.

Buat Class EffectButton

Berfungsi sebagai effect tombol setiap alat musik di tekan

package com.kodetr.gendangbelek

import kotlin.math.cos
import kotlin.math.pow

class EffectButton(amplitude: Double, frequency: Double) : android.view.animation.Interpolator {

    private var mAmplitude = 1.0
    private var mFrequency = 10.0

    init {
        mAmplitude = amplitude
        mFrequency = frequency
    }

    override fun getInterpolation(time: Float): Float {
        val amplitude = mAmplitude
        if (amplitude == 0.0) {
        }
        return (-1.0 * Math.E.pow(-time / mAmplitude) * cos(mFrequency * time) + 1).toFloat()
    }
}

Buat Class PlaySound

Berfungsi sebagai pemutar musik dari setiap alat musik

package com.kodetr.gendangbelek

import android.content.Context
import android.media.MediaPlayer

/**
 * Created by kodetr on 12/09/2019.
 */

//TODO: Deklarasi class construktor proses tetap dijalankan
class PlaySound(context: Context) {

    // TODO: Varibale MediaPlayer untuk menjalankan song
    var playGong1Song: MediaPlayer = MediaPlayer.create(context, R.raw.gong1)
    var playGong2Song: MediaPlayer = MediaPlayer.create(context, R.raw.gong2)
    var playGendang1Song: MediaPlayer = MediaPlayer.create(context, R.raw.gendang1)
    var playGendang2Song: MediaPlayer = MediaPlayer.create(context, R.raw.gendang2)
    var playTerompangKecil1Song: MediaPlayer = MediaPlayer.create(context, R.raw.terompongkecil1)
    var playTerompangKecil2Song: MediaPlayer = MediaPlayer.create(context, R.raw.terompongkecil2)
    var playTerompangBesar1Song: MediaPlayer = MediaPlayer.create(context, R.raw.terompongbesar1)
    var playTerompangBesar2Song: MediaPlayer = MediaPlayer.create(context, R.raw.terompongbesar2)
    var playJemprangSong: MediaPlayer = MediaPlayer.create(context, R.raw.jemprang)
    var playJemprang2Song: MediaPlayer = MediaPlayer.create(context, R.raw.jemprang)
    var playPetukSong: MediaPlayer = MediaPlayer.create(context, R.raw.petuk)
    var playTerumpangsinggelSong: MediaPlayer = MediaPlayer.create(context, R.raw.terompongsingle)

    // TODO: proses menjalankan song alat gendang belek
    fun playSound(mp: MediaPlayer?) {
        try {
            if (mp != null) {
                if (mp.isPlaying) {
                    mp.pause()
                    mp.seekTo(0)
                    mp.start()
                } else {
                    mp.start()
                }
            }
        } catch (e: Exception) {

        }
    }

    //TODO: Methode untuk menjalankan musik pada saat di tekan pada setiap alat gendang belek
    fun playGong1Song() {
        playSound(playGong1Song)
    }

    fun playGong2Song() {
        playSound(playGong2Song)
    }

    fun playGendang1Song() {
        playSound(playGendang1Song)
    }

    fun playGendang2Song() {
        playSound(playGendang2Song)
    }

    fun playTerompangKecil1Song() {
        playSound(playTerompangKecil1Song)
    }

    fun playTerompangKecil2Song() {
        playSound(playTerompangKecil2Song)
    }

    fun playTerompangBesar1Song() {
        playSound(playTerompangBesar1Song)
    }

    fun playTerompangBesar2Song() {
        playSound(playTerompangBesar2Song)
    }

    fun playJemprangSong() {
        playSound(playJemprangSong)
    }

    fun playPetukSong() {
        playSound(playPetukSong)
    }

    fun playTerumpangsinggelSong() {
        playSound(playTerumpangsinggelSong)
    }

    fun playJemprang2Song() {
        playSound(playJemprang2Song)
    }
}

Buat Class DetailActivity

Fungsi dari class tersebut sebagai menu utama dan sebagai pilihan alat musik yang akan kita mainkan.

package com.kodetr.gendangbelek

import android.content.Intent
import android.content.pm.ActivityInfo
import android.os.Bundle
import android.view.KeyEvent
import android.view.View
import android.view.Window
import android.view.WindowManager
import android.widget.ImageView

import androidx.appcompat.app.AppCompatActivity

/**
 * Created by kodetr on 12/09/2019.
 */

class DetailActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // tampilan layar landscape
        requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
        // menghilangkan judul toolbar
        requestWindowFeature(Window.FEATURE_NO_TITLE)
        //tampilkan fullscreen
        window.setFlags(
            WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN
        )
        setContentView(R.layout.activity_detail)

        //mengambil id pada layout activity_main untuk tombol tentang
        val ivTentang = findViewById<View>(R.id.ivTentang) as ImageView
        // proses jika tombol help di sebelah pojok kanan atas di tekan maka berpindah ke tampilan tentang
        ivTentang.setOnClickListener {
            startActivity(
                Intent(
                    this@DetailActivity,
                    Tentang::class.java
                )
            )
        }
    }

    fun ivPlayAll(v: View) {
        startActivity(Intent(this@DetailActivity, MainActivity::class.java))
        // animasi layout untuk proses keluar dari class splash
        overridePendingTransition(0, android.R.anim.fade_out)
        finish()
    }

    // TODO: proses penekanan pada Gong
    fun ClickGong(view: View) {
        val i = Intent(this, ItemActivity::class.java)
        i.putExtra("item", "gong")
        startActivity(i)
    }

    // TODO: proses penekanan pada Gendang
    fun ClickGendang(view: View) {
        val i = Intent(this, ItemActivity::class.java)
        i.putExtra("item", "gendang")
        startActivity(i)
    }

    // TODO: proses penekanan pada Terumpang Kecil
    fun ClickTerompangKecil(view: View) {
        val i = Intent(this, ItemActivity::class.java)
        i.putExtra("item", "item_terompang_kecil")
        startActivity(i)
    }

    // TODO: proses penekanan pada Terompang Besar
    fun ClickTerompangBesar(view: View) {
        val i = Intent(this, ItemActivity::class.java)
        i.putExtra("item", "terompang_besar")
        startActivity(i)
    }

    // TODO: proses penekanan pada Jemprang 1
    fun ClickJemprang(view: View) {
        val i = Intent(this, ItemActivity::class.java)
        i.putExtra("item", "jemprang")
        startActivity(i)
    }

    // TODO: proses penekanan pada Petuk
    fun ClickPetuk(view: View) {
        val i = Intent(this, ItemActivity::class.java)
        i.putExtra("item", "petuk")
        startActivity(i)
    }

    // TODO: proses penekanan pada Terompang Single
    fun ClickTerompangsinggel(view: View) {
        val i = Intent(this, ItemActivity::class.java)
        i.putExtra("item", "terompang_single")
        startActivity(i)
    }
}

Buat Class MainActivity

Dalam activity ini terdapat semua alat musik yang tinggal di mainkan beserta memilih musik yang akan diputar

package com.kodetr.gendangbelek

import android.app.ActivityOptions
import android.content.Intent
import android.content.pm.ActivityInfo
import android.media.AudioManager
import android.media.MediaPlayer
import android.net.Uri
import android.os.Bundle
import android.view.KeyEvent
import android.view.View
import android.view.Window
import android.view.WindowManager
import android.view.animation.Animation
import android.view.animation.AnimationUtils
import android.widget.Button
import android.widget.ImageView
import android.widget.Toast

import androidx.appcompat.app.AppCompatActivity

/**
 * Created by kodetr on 12/09/2019.
 */

class MainActivity : AppCompatActivity() {

    private var playSound: PlaySound? = null
    private val RQS_OPEN_AUDIO_MP3 = 0
    private var audioFileUri: Uri? = null
    private var mediaPlayer: MediaPlayer? = null
    private var animationDuration: Double = 0.toDouble()
    private var effect: EffectButton? = null
    private var anim: Animation? = null
    private var ivAmbilMusik: ImageView? = null
    private var ivPlay: ImageView? = null
    private var ivStop: ImageView? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // tampilan layar landscape
        requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
        // menghilangkan judul toolbar
        requestWindowFeature(Window.FEATURE_NO_TITLE)
        //tampilkan fullscreen
        window.setFlags(
            WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN
        )
        setContentView(R.layout.activity_main)

        //mengambil id pada layout activity_main untuk tombol tentang
        val ivTentang = findViewById<View>(R.id.ivTentang) as ImageView
        // proses jika tombol help di sebelah pojok kanan atas di tekan maka berpindah ke tampilan tentang
        ivTentang.setOnClickListener {
            startActivity(
                Intent(
                    this@MainActivity,
                    Tentang::class.java
                )
            )
        }

        // deklarasi mediaplayer
        playSound = PlaySound(this@MainActivity)
        mediaPlayer = MediaPlayer()

        // TODO: proses ambil musik dari memory internal atau external
        //mengambil id pada layout activity_main untuk ambil musik
        ivAmbilMusik = findViewById<View>(R.id.ivAmbilMusik) as ImageView
        ivAmbilMusik!!.setOnClickListener { v ->
            val intent = Intent()
            intent.action = Intent.ACTION_GET_CONTENT
            intent.type = "audio/*"
            val options = ActivityOptions.makeScaleUpAnimation(
                v, 0,
                0, v.width, v.height
            )
            startActivityForResult(
                Intent.createChooser(intent, "Pilih Musik"),
                RQS_OPEN_AUDIO_MP3,
                options.toBundle()
            )

            // kondisi jika musik berjalan kemudian penekanan ambil musik maka musik distop, gambar pause akan berubah menjadi play
            if (mediaPlayer!!.isPlaying) {
                ivPlay!!.setImageDrawable(resources.getDrawable(R.drawable.ic_play))
                // musik stop
                mediaPlayer!!.stop()
                try {
                    // musik berhenti pada posisi distop jika di jalankan makan akan dimulai pada posisi distop
                    mediaPlayer!!.seekTo(0)
                } catch (t: Throwable) {
                    t.printStackTrace()
                }
            }
        }

        // TODO: proses play musik
        //mengambil id pada layout activity_main untuk play
        ivPlay = findViewById<View>(R.id.ivPlay) as ImageView
        ivPlay!!.setOnClickListener {
            if (mediaPlayer != null) {
                if (mediaPlayer!!.isPlaying) {
                    if (mediaPlayer != null) {
                        // musik pause
                        mediaPlayer!!.pause()
                        // jika musik sedang berjalan maka gambar play akan berubah menjadi play
                        ivPlay!!.setImageDrawable(resources.getDrawable(R.drawable.ic_play))
                    }
                } else {
                    if (mediaPlayer != null) {
                        // musik start
                        mediaPlayer!!.start()
                        ivPlay!!.setImageDrawable(resources.getDrawable(R.drawable.ic_pause))
                    }
                }
            } else {
                Toast.makeText(this@MainActivity, "Musik Belum di pilih", Toast.LENGTH_SHORT).show()
            }
        }

        // TODO: proses stop musik
        //mengambil id pada layout activity_main untuk tombol stop
        ivStop = findViewById<View>(R.id.ivStop) as ImageView
        ivStop!!.setOnClickListener {
            if (mediaPlayer!!.isPlaying) {
                if (mediaPlayer != null) {
                    ivPlay!!.setImageDrawable(resources.getDrawable(R.drawable.ic_play))
                    mediaPlayer!!.stop()
                    try {
                        mediaPlayer!!.seekTo(0)
                    } catch (t: Throwable) {
                        t.printStackTrace()
                    }

                } else {
                    Toast.makeText(this@MainActivity, "Musik Belum di pilih", Toast.LENGTH_SHORT)
                        .show()
                }
            }
        }

        //TODO: animasi effect pada tombol seteap alat gendang belek
        animationDuration = 0.1 * 1000
        effect = EffectButton(1.0, 3.0)
        anim = AnimationUtils.loadAnimation(this, R.anim.bounce)
        anim!!.duration = animationDuration.toLong()
        anim!!.interpolator = effect
    }


    // TODO: proses penekanan pada Gong 1
    fun ClickGong1(view: View) {
        //mengambil id Gong 1 pada design layout activity_main
        val gong1 = findViewById<View>(R.id.gong) as Button
        // animasi penekanan Gong 1
        gong1.startAnimation(anim)
        //play song  Gong 1 dari class PlaySound Gong 1
        playSound!!.playGong1Song()
    }

    // TODO: proses penekanan pada Gong 2
    fun ClickGong2(view: View) {
        //mengambil id  Gong 2pada design layout activity_main
        val gong2 = findViewById<View>(R.id.gong2) as Button
        // animasi penekanan Gong 2
        gong2.startAnimation(anim)
        //play song Gong 2 dari class PlaySound
        playSound!!.playGong2Song()
    }

    // TODO: proses penekanan pada Gendang 1
    fun ClickGendang1(view: View) {
        //mengambil id Gendang 1 pada design layout activity_main
        val gendang1 = findViewById<View>(R.id.gendang1) as Button
        // animasi penekanan Gendang 1
        gendang1.startAnimation(anim)
        //play song Gendang 1 dari class PlaySound
        playSound!!.playGendang1Song()
    }

    // TODO: proses penekanan pada Gendang 2
    fun ClickGendang2(view: View) {
        //mengambil id Gendang 2 pada design layout activity_main
        val gendang2 = findViewById<View>(R.id.gendang2) as Button
        // animasi penekanan Gendang 2
        gendang2.startAnimation(anim)
        //play song Gendang 2 dari class PlaySound
        playSound!!.playGendang2Song()
    }

    // TODO: proses penekanan pada Terumpang Kecil 1
    fun ClickTerompangKecil1(view: View) {
        //mengambil id Terumpang Kecil 1 pada design layout activity_main
        val terompangkecil1 = findViewById<View>(R.id.terompangkecil1) as Button
        // animasi penekanan Terumpang Kecil 1
        terompangkecil1.startAnimation(anim)
        //play song Terumpang Kecil 1 dari class PlaySound
        playSound!!.playTerompangKecil1Song()
    }

    // TODO: proses penekanan pada Terumpang Kecil 2
    fun ClickTerompangKecil2(view: View) {
        //mengambil id Terumpang Kecil 2 pada design layout activity_main
        val terompangkecil2 = findViewById<View>(R.id.terompangkecil2) as Button
        // animasi penekanan Terumpang Kecil 2
        terompangkecil2.startAnimation(anim)
        //play song Terumpang Kecil 2 dari class PlaySound
        playSound!!.playTerompangKecil2Song()
    }

    // TODO: proses penekanan pada Terompang Besar 1
    fun ClickTerompangBesar1(view: View) {
        //mengambil id Terompang Besar 1 pada design layout activity_main
        val terompangbesar1 = findViewById<View>(R.id.terompangbesar1) as Button
        // animasi penekanan Terompang Besar 1
        terompangbesar1.startAnimation(anim)
        //play song Terompang Besar 1 dari class PlaySound
        playSound!!.playTerompangBesar1Song()
    }

    // TODO: proses penekanan pada Terompang Besar 2
    fun ClickTerompangBesar2(view: View) {
        //mengambil id Terompang Besar 2 pada design layout activity_main
        val terompangbesar2 = findViewById<View>(R.id.terompangbesar2) as Button
        // animasi penekanan Terompang Besar 2
        terompangbesar2.startAnimation(anim)
        //play song Terompang Besar 2 dari class PlaySound
        playSound!!.playTerompangBesar2Song()
    }

    // TODO: proses penekanan pada Jemprang 1
    fun ClickJemprang(view: View) {
        //mengambil id Jemprang 1pada design layout activity_main
        val jemprang = findViewById<View>(R.id.jemprang) as Button
        // animasi penekanan Jemprang 1
        jemprang.startAnimation(anim)
        //play song Jemprang 1 dari class PlaySound
        playSound!!.playJemprangSong()
    }

    // TODO: proses penekanan pada Jemprang 2
    fun ClickJemprang2(view: View) {
        //mengambil id Jemprang 2 pada design layout activity_main
        val jemprang2 = findViewById<View>(R.id.jemprang2) as Button
        // animasi penekanan Jemprang 2
        jemprang2.startAnimation(anim)
        //play song Jemprang 2 dari class PlaySound
        playSound!!.playJemprang2Song()
    }

    // TODO: proses penekanan pada Petuk
    fun ClickPetuk(view: View) {
        //mengambil id Petuk pada design layout activity_main
        val petuk = findViewById<View>(R.id.petuk) as Button
        // animasi penekanan Petuk
        petuk.startAnimation(anim)
        //play song Petuk dari class PlaySound
        playSound!!.playPetukSong()
    }

    // TODO: proses penekanan pada Terompang Single
    fun ClickTerompangsinggel(view: View) {
        //mengambil id Terompang Single pada design layout activity_main
        val terumpangsinggel = findViewById<View>(R.id.terompangsinggle) as Button
        // animasi penekanan Terompang Single
        terumpangsinggel.startAnimation(anim)
        //play song Terompang Single dari class PlaySound
        playSound!!.playTerumpangsinggelSong()
    }

    // TODO: hasil kembalian berupa PATH URL musik dari memory internal atau external pada saat proses musik perama kali diambil
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        if (resultCode == RESULT_OK) {
            if (requestCode == RQS_OPEN_AUDIO_MP3) {
                //  TODO: PATH URL musik
                audioFileUri = data!!.data
                //  TODO: proses handle jika terjadi error
                try {
                    //  TODO: pengaturan mediaplayer dan proses menjalankan musik
                    mediaPlayer!!.setAudioStreamType(AudioManager.STREAM_MUSIC)
                    mediaPlayer!!.setDataSource(applicationContext, audioFileUri!!)
                    mediaPlayer!!.prepare()
                    mediaPlayer!!.start()
                    // proses musik dijalankan maka gambar berubah ke pause
                    ivPlay!!.setImageDrawable(resources.getDrawable(R.drawable.ic_pause))

                } catch (e: Exception) {

                }

            }
        }
        super.onActivityResult(requestCode, resultCode, data)
    }

    // TODO: proses musik dijalankan wlaupun aplikasi dikeluarkan
    override fun onDestroy() {
        super.onDestroy()
        if (mediaPlayer != null) {
            mediaPlayer!!.release()
            ivPlay!!.setImageDrawable(resources.getDrawable(R.drawable.ic_play))
        }
    }

    override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            startActivity(Intent(this, DetailActivity::class.java))
            this@MainActivity.finish()
            return true
        }
        return super.onKeyDown(keyCode, event)
    }
}

Buat class ItemActivity

Digunakan untuk menampilkan hanya alat musik tertentu beserta memilih musik yang akan dijalankan

package com.kodetr.gendangbelek

import android.app.ActivityOptions
import android.content.Intent
import android.content.pm.ActivityInfo
import android.media.AudioManager
import android.media.MediaPlayer
import android.net.Uri
import android.os.Bundle
import android.view.KeyEvent
import android.view.View
import android.view.Window
import android.view.WindowManager
import android.view.animation.Animation
import android.view.animation.AnimationUtils
import android.widget.Button
import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.Toast

import androidx.appcompat.app.AppCompatActivity

/**
 * Created by kodetr on 12/09/2019.
 */

class ItemActivity : AppCompatActivity() {

    private var playSound: PlaySound? = null
    private val RQS_OPEN_AUDIO_MP3 = 0
    private var audioFileUri: Uri? = null
    private var mediaPlayer: MediaPlayer? = null
    private var animationDuration: Double = 0.toDouble()
    private var effect: EffectButton? = null
    private var anim: Animation? = null
    private var ivAmbilMusik: ImageView? = null
    private var ivPlay: ImageView? = null
    private var ivStop: ImageView? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // tampilan layar landscape
        requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
        // menghilangkan judul toolbar
        requestWindowFeature(Window.FEATURE_NO_TITLE)
        //tampilkan fullscreen
        window.setFlags(
            WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN
        )
        setContentView(R.layout.activity_item)

        //mengambil id pada layout activity_main untuk tombol tentang
        val ivTentang = findViewById<View>(R.id.ivTentang) as ImageView
        // proses jika tombol help di sebelah pojok kanan atas di tekan maka berpindah ke tampilan tentang
        ivTentang.setOnClickListener {
            startActivity(
                Intent(
                    this@ItemActivity,
                    Tentang::class.java
                )
            )
        }

        // deklarasi mediaplayer
        playSound = PlaySound(this@ItemActivity)
        mediaPlayer = MediaPlayer()

        // TODO: proses ambil musik dari memory internal atau external
        //mengambil id pada layout activity_main untuk ambil musik
        ivAmbilMusik = findViewById<View>(R.id.ivAmbilMusik) as ImageView
        ivAmbilMusik!!.setOnClickListener { v ->
            val intent = Intent()
            intent.action = Intent.ACTION_GET_CONTENT
            intent.type = "audio/*"
            val options = ActivityOptions.makeScaleUpAnimation(
                v, 0,
                0, v.width, v.height
            )
            startActivityForResult(
                Intent.createChooser(intent, "Pilih Musik"),
                RQS_OPEN_AUDIO_MP3,
                options.toBundle()
            )

            // kondisi jika musik berjalan kemudian penekanan ambil musik maka musik distop, gambar pause akan berubah menjadi play
            if (mediaPlayer!!.isPlaying) {
                ivPlay!!.setImageDrawable(resources.getDrawable(R.drawable.ic_play))
                //                    musik stop
                mediaPlayer!!.stop()
                try {
                    // musik berhenti pada posisi distop jika di jalankan makan akan dimulai pada posisi distop
                    mediaPlayer!!.seekTo(0)
                } catch (t: Throwable) {
                    t.printStackTrace()
                }

            }
        }

        //      TODO: proses play musik
        //mengambil id pada layout activity_main untuk play
        ivPlay = findViewById<View>(R.id.ivPlay) as ImageView
        ivPlay!!.setOnClickListener {
            if (mediaPlayer != null) {
                if (mediaPlayer!!.isPlaying) {
                    if (mediaPlayer != null) {
                        // musik pause
                        mediaPlayer!!.pause()
                        // jika musik sedang berjalan maka gambar play akan berubah menjadi play
                        ivPlay!!.setImageDrawable(resources.getDrawable(R.drawable.ic_play))
                    }
                } else {
                    if (mediaPlayer != null) {
                        // musik start
                        mediaPlayer!!.start()
                        ivPlay!!.setImageDrawable(resources.getDrawable(R.drawable.ic_pause))
                    }
                }
            } else {
                Toast.makeText(this@ItemActivity, "Musik Belum di pilih", Toast.LENGTH_SHORT).show()
            }
        }

        //      TODO: proses stop musik
        //mengambil id pada layout activity_main untuk tombol stop
        ivStop = findViewById<View>(R.id.ivStop) as ImageView
        ivStop!!.setOnClickListener {
            if (mediaPlayer!!.isPlaying) {
                if (mediaPlayer != null) {
                    ivPlay!!.setImageDrawable(resources.getDrawable(R.drawable.ic_play))
                    mediaPlayer!!.stop()
                    try {
                        mediaPlayer!!.seekTo(0)
                    } catch (t: Throwable) {
                        t.printStackTrace()
                    }

                } else {
                    Toast.makeText(this@ItemActivity, "Musik Belum di pilih", Toast.LENGTH_SHORT)
                        .show()
                }
            }
        }

        //TODO: animasi effect pada tombol seteap alat gendang belek
        animationDuration = 0.1 * 1000
        effect = EffectButton(1.0, 3.0)
        anim = AnimationUtils.loadAnimation(this, R.anim.bounce)
        anim!!.duration = animationDuration.toLong()
        anim!!.interpolator = effect

        val i = intent
        val item = i.getStringExtra("item")

        val inPetuk = findViewById<View>(R.id.in_petuk) as LinearLayout
        val inGong = findViewById<View>(R.id.in_gong) as LinearLayout
        val inTerompangSingle = findViewById<View>(R.id.in_terompang_single) as LinearLayout
        val inTerompangKecil = findViewById<View>(R.id.in_terompang_kecil) as LinearLayout
        val inTerompangBesar = findViewById<View>(R.id.in_terompang_besar) as LinearLayout
        val inGendang = findViewById<View>(R.id.in_gendang) as LinearLayout
        val inJemprang = findViewById<View>(R.id.in_jemprang) as LinearLayout

        when (item) {
            "petuk" -> inPetuk.visibility = View.VISIBLE
            "gong" -> inGong.visibility = View.VISIBLE
            "terompang_single" -> inTerompangSingle.visibility = View.VISIBLE
            "item_terompang_kecil" -> inTerompangKecil.visibility = View.VISIBLE
            "terompang_besar" -> inTerompangBesar.visibility = View.VISIBLE
            "gendang" -> inGendang.visibility = View.VISIBLE
            "jemprang" -> inJemprang.visibility = View.VISIBLE
        }

    }


    // TODO: proses penekanan pada Gong 1
    fun ClickGong(view: View) {
        //mengambil id Gong 1 pada design layout activity_main
        val gong1 = findViewById<View>(R.id.gong) as Button
        // animasi penekanan Gong 1
        gong1.startAnimation(anim)
        //play song  Gong 1 dari class PlaySound Gong 1
        playSound!!.playGong1Song()
    }

    // TODO: proses penekanan pada Gong 2
    fun ClickGong2(view: View) {
        //mengambil id  Gong 2pada design layout activity_main
        val gong2 = findViewById<View>(R.id.gong2) as Button
        // animasi penekanan Gong 2
        gong2.startAnimation(anim)
        //play song Gong 2 dari class PlaySound
        playSound!!.playGong2Song()
    }

    // TODO: proses penekanan pada Gendang 1
    fun ClickGendang1(view: View) {
        //mengambil id Gendang 1 pada design layout activity_main
        val gendang1 = findViewById<View>(R.id.gendang1) as Button
        // animasi penekanan Gendang 1
        gendang1.startAnimation(anim)
        //play song Gendang 1 dari class PlaySound
        playSound!!.playGendang1Song()
    }

    // TODO: proses penekanan pada Gendang 2
    fun ClickGendang2(view: View) {
        //mengambil id Gendang 2 pada design layout activity_main
        val gendang2 = findViewById<View>(R.id.gendang2) as Button
        // animasi penekanan Gendang 2
        gendang2.startAnimation(anim)
        //play song Gendang 2 dari class PlaySound
        playSound!!.playGendang2Song()
    }

    // TODO: proses penekanan pada Terumpang Kecil 1
    fun ClickTerompangKecil1(view: View) {
        //mengambil id Terumpang Kecil 1 pada design layout activity_main
        val terompangkecil1 = findViewById<View>(R.id.terompangkecil1) as Button
        // animasi penekanan Terumpang Kecil 1
        terompangkecil1.startAnimation(anim)
        //play song Terumpang Kecil 1 dari class PlaySound
        playSound!!.playTerompangKecil1Song()
    }

    // TODO: proses penekanan pada Terumpang Kecil 2
    fun ClickTerompangKecil2(view: View) {
        //mengambil id Terumpang Kecil 2 pada design layout activity_main
        val terompangkecil2 = findViewById<View>(R.id.terompangkecil2) as Button
        // animasi penekanan Terumpang Kecil 2
        terompangkecil2.startAnimation(anim)
        //play song Terumpang Kecil 2 dari class PlaySound
        playSound!!.playTerompangKecil2Song()
    }

    // TODO: proses penekanan pada Terompang Besar 1
    fun ClickTerompangBesar1(view: View) {
        //mengambil id Terompang Besar 1 pada design layout activity_main
        val terompangbesar1 = findViewById<View>(R.id.terompangbesar1) as Button
        // animasi penekanan Terompang Besar 1
        terompangbesar1.startAnimation(anim)
        //play song Terompang Besar 1 dari class PlaySound
        playSound!!.playTerompangBesar1Song()
    }

    //  TODO: proses penekanan pada Terompang Besar 2
    fun ClickTerompangBesar2(view: View) {
        //mengambil id Terompang Besar 2 pada design layout activity_main
        val terompangbesar2 = findViewById<View>(R.id.terompangbesar2) as Button
        // animasi penekanan Terompang Besar 2
        terompangbesar2.startAnimation(anim)
        //play song Terompang Besar 2 dari class PlaySound
        playSound!!.playTerompangBesar2Song()
    }

    //  TODO: proses penekanan pada Jemprang 1
    fun ClickJemprang(view: View) {
        //mengambil id Jemprang 1pada design layout activity_main
        val jemprang = findViewById<View>(R.id.jemprang) as Button
        // animasi penekanan Jemprang 1
        jemprang.startAnimation(anim)
        //play song Jemprang 1 dari class PlaySound
        playSound!!.playJemprangSong()
    }

    //  TODO: proses penekanan pada Jemprang 2
    fun ClickJemprang2(view: View) {
        //mengambil id Jemprang 2 pada design layout activity_main
        val jemprang2 = findViewById<View>(R.id.jemprang2) as Button
        // animasi penekanan Jemprang 2
        jemprang2.startAnimation(anim)
        //play song Jemprang 2 dari class PlaySound
        playSound!!.playJemprang2Song()
    }

    //  TODO: proses penekanan pada Petuk
    fun ClickPetuk(view: View) {
        //mengambil id Petuk pada design layout activity_main
        val petuk = findViewById<View>(R.id.petuk) as Button
        // animasi penekanan Petuk
        petuk.startAnimation(anim)
        //play song Petuk dari class PlaySound
        playSound!!.playPetukSong()
    }

    //  TODO: proses penekanan pada Terompang Single
    fun ClickTerompangsinggel(view: View) {
        //mengambil id Terompang Single pada design layout activity_main
        val terumpangsinggel = findViewById<View>(R.id.terompangsinggle) as Button
        // animasi penekanan Terompang Single
        terumpangsinggel.startAnimation(anim)
        //play song Terompang Single dari class PlaySound
        playSound!!.playTerumpangsinggelSong()
    }

    //  TODO: hasil kembalian berupa PATH URL musik dari memory internal atau external pada saat proses musik perama kali diambil
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        if (resultCode == RESULT_OK) {
            if (requestCode == RQS_OPEN_AUDIO_MP3) {
                //  TODO: PATH URL musik
                audioFileUri = data!!.data
                //  TODO: proses handle jika terjadi error
                try {
                    //  TODO: pengaturan mediaplayer dan proses menjalankan musik
                    mediaPlayer!!.setAudioStreamType(AudioManager.STREAM_MUSIC)
                    mediaPlayer!!.setDataSource(applicationContext, audioFileUri!!)
                    mediaPlayer!!.prepare()
                    mediaPlayer!!.start()
                    // proses musik dijalankan maka gambar berubah ke pause
                    ivPlay!!.setImageDrawable(resources.getDrawable(R.drawable.ic_pause))

                } catch (e: Exception) {

                }

            }
        }
        super.onActivityResult(requestCode, resultCode, data)
    }

    // TODO: proses musik dijalankan wlaupun aplikasi dikeluarkan
    override fun onDestroy() {
        super.onDestroy()
        if (mediaPlayer != null) {
            mediaPlayer!!.release()
            ivPlay!!.setImageDrawable(resources.getDrawable(R.drawable.ic_play))
        }
    }

    override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            startActivity(Intent(this, DetailActivity::class.java))
            this@ItemActivity.finish()
            return true
        }
        return super.onKeyDown(keyCode, event)
    }
}

Buat class Tentang

Berfungsi menampilkan keterangan tentang aplikasi, harap dimaklumi penulis tidak menampilkan mengenai aplikasi hanya sekedar menampilkan ke situs tertentu jika tindakan ditekan pada bagian menu utama atau bagian yang lainnya.

package com.kodetr.gendangbelek

import android.annotation.SuppressLint
import android.os.Bundle
import android.view.View
import android.webkit.WebView
import android.webkit.WebViewClient

import androidx.appcompat.app.AppCompatActivity

/**
 * Created by kodetr on 12/09/2019.
 */

class Tentang : AppCompatActivity() {

    @SuppressLint("SetJavaScriptEnabled")
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_tentang)
        //mengambil id pada layout activity_tentang pada bagian webview
        val webView = findViewById<View>(R.id.webView) as WebView
        // mengaktifkan mode java script
        webView.settings.javaScriptEnabled = true
        // menampilkan tindakan browser
        webView.webViewClient = MyBrowser()
        // tujuan pada URL
        webView.loadUrl("https://www.kodetr.com")
    }

    // class browser untuk menampilkan tidakan menampilkan browser
    private inner class MyBrowser : WebViewClient() {
        override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
            view.loadUrl(url)
            return true
        }
    }
}

Jika anda sudah mengikuti artikel ini sesuai intruksi dari vidio maka anda berhasil membuat aplikasi Gendang Belek.

Demikian yang dapat saya sampaikan dari artikel ini semoga bermanfaat, jika ada yang ditanyakan silahkan di kolom komentar dibawah, selamat mencoba.

Share Comments
comments powered by Disqus