Anda di halaman 1dari 170

PERANCANGAN APLIKASI PEMUTAR MUSIK BESERTA PENAMPIL

LIRIK MUSIK BERBASIS ANDROID

Tugas Akhir disusun untuk memenuhi syarat


Mencapai gelar Kesarjanaan Komputer pada
Program Studi Teknik Informatika
Jenjang Program Strata-1

Oleh :

Septadi Nugraha
11.01.53.0028

13576

FAKULTAS TEKNOLOGI INFORMASI


UNIVERSITAS STIKUBANK (UNISBANK)
SEMARANG
2016

i
PERNYATAAN KESIAPAN UJIAN SKRIPSI

Saya, Septadi Nugraha, dengan ini menyatakan bahwa Laporan Skripsi yang

berjudul:

PERANCANGAN APLIKASI PEMUTAR MUSIK BESERTA PENAMPIL

LIRIK MUSIK BERBASIS ANDROID

Adalah benar hasil karya saya dan belum pernah diajukan sebagai karya ilimiah,

sebagian atau seluruhnya, atas nama saya atau pihak lain.

(Septadi Nugraha)

NIM : 11.01.53.0028

Disetujui oleh Pembimbing

Kami setuju Laporan tersebut diajukan untuk Ujian Skripsi

Semarang : Februari 2016

(Saefurrohman, S.Kom, M.Cs)

Pembimbing

ii
iii
HALAMAN PENGESAHAN

Telah dipertahankan di depan tim dosen penguji Tugas Akhir Fakultas Teknologi

Informasi UNIVERSITAS STIKUBANK (UNISBANK) Semarang dan diterima

sebagai salah satu syart guna menyelesaikan Jenjang Program Strata 1, Program

Studi Teknik Informatika

Semarang : Februari 2016

Ketua

(Saefurrohman, S.Kom, M.Cs)

Sektretaris

(Mardi Siswo Utomo, S.Kom, M.Cs)

Anggota

(Hari Murti, S.Kom, M.Cs)

MENGETAHUI:

UNIVERSITAS STIKUBANK (UNISBANK)

SEMARANG

Fakultas Teknologi Informasi

Dekan

(Dr.Drs.Yohanes Suhari, M.MS)

iii
MOTTO DAN PERSEMBAHAN

MOTTO

1. Untuk mendapatkan kesuksesan, keberanianmu harus lebih besar daripada

ketakutanmu.

2. Kecerdasan bukanlah tolak ukur kesuksesan, tetapi dengan menjadi cerdas

kita bisa menggapai kesuksesan.

3. Kita tidak akan mengetahui apa itu kesuksesan sebelum merasakan

kegagalan.

PERSEMBAHAN

Skripsi ini saya persembahkan kepada :

1. Allah SWT atas segala rakhmat dan hidayahnya yang telah memberikan

kekuatan, kesehatan dan kesabaran dalam mengerjakan skripsi ini.

2. Kedua orang tua saya dan keluarga besar saya yang selalu mendukung dan

memberikan doa.

3. Teman-teman seperjuangan yang selalu memberikan semangat dan motivasi.

4. Mas Amri yang selalu menyediakan makanan dan minuman favorit.

5. Semua pihak yang telah membantu dalam penelitian untuk penulisan skripsi

ini yang tidak bisa peneliti sebutkan satu persatu.

iv
FAKULTAS TEKNOLOGI INFORMASI
UNIVERSITAS STIKUBANK (UNISBANK) SEMARANG

Program Studi : Teknik Informatika


Tugas Akhir Sarjana Komputer
Semester Ganjil Tahun 2016

PERANCANGAN APLIKASI PEMUTAR MUSIK BESERTA


PENAMPIL LIRIK MUSIK BERBASIS ANDROID

Septadi Nugraha
NIM : 11.01.53.0028

Abstrak
Musik adalah suatu hal yang tidak bisa dipisahkan dari manusia. Sekarang
musik sudah seperti kebutuhan hidup manusia. Dimanapun mereka berada,
mereka ingin mendengarkan musik yang dapat membuat tenang atau menambah
semangat. Musik tidak jauh dari lirik lagu, jika tidak ada lirik lagu maka
musikpun tidak ada. Sebagian manusia tidak mengerti lirik lagu dari musik yang
didengar. Untuk memudahkan manusia dan pecinta musik dalam memutar musik
dan menampilkan lirik lagu dimanapun mereka berada maka dibuatlah Aplikasi
Pemutar Musik Berserta Penampil Lirik.
Dalam menampilkan lirik menggunakan Teknik Scraping Lirik. Teknik
Scraping merupakan teknik untuk memotong halaman HTML dan mengambil
informasi yang dibutuhkan. Untuk menampilkan lirik dibutuhkan koneksi internet,
karena lirik diambil dari website www.azlyrics.com. Pembuatan Aplikasi Pemutar
Musik menggunakan Android Studio, dan berjalan pada sistem operasi android
minimal 4.1 (Jelly Bean).

Kata Kunci
Musik, Lirik, Pemutar Musik, Teknik Scraping Lirik, Android

Semarang : Februari 2016

Pembimbing

(Saefurrohman, S.Kom, M.Cs)

v
KATA PENGANTAR

Dengan memanjatkan puji syukur kehadirat Allah SWT.yang telah

melimpahkan segala rahmat, hidayah dan inayah-Nya kepada penulis sehingga

laporan tugas akhir dengan judul “Perancangan Aplikasi Pemutar Musik

Beserta Penampil Lirik Musik Berbasis Android” Penulisan tugas akhir skripsi

ini bertujuan untuk memenuhi salah satu syarat untuk menempuh jenjang strata

satu pada Universitas Stikubank (UNISBANK) Semarang.

Penulis mengucapkan terima kasih kepada semua pihak atas bantuan,

bimbingan dan dukungan penuh dari berbagai pihak yang dengan tulus dan sabar

membimbing penulis menyelesaikan pembuatan tugas akhir skripsi ini, sehingga

penulis dapat menyelesaikan laporan tugas akhir skripsi ini dengan tepat waktu.

Dengan kerendahan hati, pada kesempatan ini peneliti mengucapkan rasa terima

kasih yang sebesarnya kepada :

1. Tuhan Yang Maha Esa yang selalu memberikan kesehatan, akal, pikiran dan

rejeki sehingga dapat terselesaikan tugas akhir skripsi ini.

2. Orang Tua dan keluarga saya yang telah memberikan doa, semangat,

dukungan dan motivasi baik secara moril maupun materiil dalam

menyelesaikan tugas akhir skripsi ini.

3. Bapak Dr. H. Hasan Abdul Rozak, SH, CN, MM selaku Rektor Universitas

Stikubank Semarang.

4. Bapak Dr. Drs. Y. Suhari, M.MSI, selaku Dekan Fakultas Teknologi

Informasi.

vi
5. Bapak Jati Sasongko Wibowo, S.Kom., M.Cs, selaku Ketua Program

StudiS1- Teknik Informatika.

6. Bapak Saefurrohman, S.Kom, M.Cs selaku Pembimbing Tugas Akhir Skripsi

yang telah memberikan bimbingan serta pengarahan dalam

penyusunanskripsi ini.

7. Dosen-dosen pengampu di Program Studi Teknik Informatika Fakultas

Teknologi Informasi Universitas Stikubank Semarang yang telah memberikan

ilmu dan pengalamannya masing-masing, sehingga peneliti dapat

mengimplementasikan ilmu yang telah disampaikan.

8. Teman-teman yang selalu bersama mendukung dan memberikan motivasi

dalam proses penyusunan tugas akhir skripsi.

9. Semua pihak yang telah membantu dalam penelitian untuk penulisan skripsi

ini yang tidak bisa peneliti sebutkan satu persatu.

Semoga Allah SWT memberikan balasan yang lebih besar kepada beliau-

beliau, dan pada akhirnya penulis berharap bahwa penulisan laporan tugas akhir

ini dapat bermanfaat dan berguna sebagaimana fungsinya.

Semarang, Februari 2016

Penulis

Septadi Nugraha

vii
DAFTAR ISI

HALAMAN JUDUL..................................................................................... i
HALAMAN PERSETUJUAN ...................................................................... ii
HALAMAN PENGESAHAN ....................................................................... iii
MOTTO DAN PERSEMBAHAN ................................................................ iv
ABSTRAK .................................................................................................... v
KATA PENGANTAR .................................................................................. vi
DAFTAR ISI ................................................................................................. viii
DAFTAR TABEL ......................................................................................... xii
DAFTAR GAMBAR .................................................................................... xiii

BAB I PENDAHULUAN
1.1 Latar Belakang ............................................................... 1
1.2 Perumusan Masalah ........................................................ 2
1.3 Batasan Masalah.............................................................. 3
1.4 Tujuan Penelitian ............................................................ 3
1.5 Manfaat Penelitian .......................................................... 3
1.6 Metodologi Penelitian ..................................................... 4
1.6.1 Jenis dan Sumber Data ... ...................................... 4
1.6.2Metode Pengumpulan Data ..................................... 5
1.6.2Metodelogi Pengembangan Sistem ......................... 5
1.7 Sistematika Penulisan. .................................................... 9

BAB II TINJAUAN PUSTAKA


2.1 Penelitian Terdahulu ....................................................... 11
2.2 Perbedaan Penelitian yang Dilakukan Dengan Penelitian yang
terdahulu .......................................................................... 14
2.2.1 Perbedaan Penelitian Dalam Bentuk Tabel ..................... 16

viii
BAB III LANDASAN TEORI
3.1 Audio ............................................................................... 18
3.1.1 Jenis Audio ................................................................... 18
3.1.2 Audio Digital ................................................................ 19
3.1.3 Format Audio ...................................................... 19
3.2 Audio Player ................................................................... 20
3.3 Lirik Lagu........................................................................ 21
3.4 Android ........................................................................... 21
3.4.1 Arsitektur Android .............................................. 22
3.4.2 Activity Lifecycle Android ................................. 26
3.4.3 Arsitektur Audio Android ................................... 29
3.5 Android SDK (Software Development Kit) .................... 31
3.5.1 Android Studio .................................................... 32
3.5.2 Fitur – Fitur Android Studio ............................... 32
3.5.3 Perbandingan Android Studio vs Eclipse ADT .. 33
3.6 Database SQlite ............................................................... 33
3.7 Scraping Lirik.................................................................. 34
3.8 Unified Modeling Language (UML) ............................... 34
3.8.1 Diagram UML ................................................. 35
3.8.2 Notasi dalam UML.......................................... 37
BAB IV ANALISA DAN PERANCANGAN SISTEM
4.1 Deskripsi Sistem ............................................................. 42
4.2 Perancangan Sistem............... ......................................... 43
4.2.1 Use Case Diagram............... ............................ 44
4.2.2 Activity Diagram............... .............................. 45
4.2.3 Sequence Diagram............... ........................... 58
4.2.4 Class Diagram............... .................................. 69
4.2.5 Struktur Navigasi............... ............................. 78
4.2.6 Perancangan Desain Interface............... .......... 79
4.3 Analisa Kebutuhan Perangkat Lunak......... ..................... 86

ix
4.3.1 Analisa Kebutuhan Perangkat Keras ................... 87

BAB V IMPLEMENTASI SISTEM


5.1 Halaman Menu ................................................................ 89
5.2 Halaman Library Song .................................................... 90
5.3 Halaman Library Album ................................................. 91
5.4 Halaman Library Artis .................................................... 92
5.5 Halaman Playlist ............................................................. 92
5.6 Halaman Playing Queue .................................................. 93
5.7 Halaman Lyrics ............................................................... 94
5.8 Halaman Player ............................................................... 95
5.9 Halaman Search .............................................................. 96
5.10 Halaman Setting .............................................................. 97
5.11 Halaman About ............................................................... 98

BAB VI HASIL PENELITIAN DAN PEMBAHASAN


6.1 Hasil Penelitian ............................................................... 99
6.2 Pengujian Sistem Pada Handphone Android .................. 99
6.3 Tampilan Menu ............................................................... 99
6.4 Tampilan Library Song ................................................... 101
6.5 Tampilan Library Album ................................................ 103
6.6 Tampilan Album Song .................................................... 104
6.7 Tampilan Library Artis ................................................... 105
6.8 Tampilan Artis Album .................................................... 106
6.9 Tampilan Playlist ............................................................ 107
6.10 Tampilan Playing Queue ................................................. 108
6.11 Tampilan Lyrics .............................................................. 109
6.12 Tampilan Player .............................................................. 111
6.13 Tampilan Search.............................................................. 113
6.14 Tampilan Setting ............................................................. 115

x
6.15 Tampilan About .............................................................. 116

BAB VII PENUTUP


7.1 Kesimpulan ..................................................................... 117
7.2 Saran ................................................................................ 118

DAFTAR PUSTAKA
LAMPIRAN

xi
DAFTAR TABEL

Tabel 2.1 Perbedaan Penelitian ................................................................ 16

Tabel 3.1 Perbandingan Android Studio vs Eclipse ADT ....................... 33

xii
DAFTAR GAMBAR

Gambar 1.1 Model Proses Waterfall ...................................................... 6


Gambar 3.1 Arsitektur Android ............................................................. 23
Gambar 3.2 Activity Lifecycle Android ................................................ 27
Gambar 3.3 Arsitek Audio Android ....................................................... 30
Gambar 3.4 Notasi Actor ....................................................................... 38
Gambar 3.5 Notasi Class........................................................................ 38
Gambar 3.6 Notasi Use case .................................................................. 38
Gambar 3.7 Notasi Interaction ............................................................... 39
Gambar 3.8 Notasi Interface .................................................................. 39
Gambar 3.9 Notasi Note ........................................................................ 40
Gambar 3.10 Notasi Depency .................................................................. 40
Gambar 3.11 Notasi Association ............................................................. 40
Gambar 3.12 Notasi Generalization ......................................................... 41
Gambar 4.1 Proses Scraping Lirik ......................................................... 42
Gambar 4.2 Use case Diagram ............................................................... 44
Gambar 4.3 Activity Diagram Library Song ......................................... 45
Gambar 4.4 Activity Diagram Library Album ...................................... 46
Gambar 4.5 Activity Diagram Library Artis .......................................... 47
Gambar 4.6 Activity Diagram Playlist ................................................... 47
Gambar 4.7 Activity Diagram Playing Queue ....................................... 48
Gambar 4.8 Activity Diagram Lyrics .................................................... 49
Gambar 4.9 Activity Diagram Scraping Lyrics ..................................... 50
Gambar 4.10 Activity Diagram Playing Song ......................................... 51
Gambar 4.11 Activity Diagram Pause ..................................................... 51
Gambar 4.12 Activity Diagram Shuffle ................................................... 52
Gambar 4.13 Activity Diagram Repeat.................................................... 53
Gambar 4.14 Activity Diagram Previous................................................. 53
Gambar 4.15 Activity Diagram Next ....................................................... 54
Gambar 4.16 Activity Diagram Seacrh .................................................... 55

xiii
Gambar 4.17 Activity Diagram Shuffle All ............................................. 55
Gambar 4.18 Activity Diagram Sort By .................................................. 56
Gambar 4.19 Activity Diagram Setting ................................................... 57
Gambar 4.20 Activity Diagram About ..................................................... 57
Gambar 4.21 Sequence Diagram Library Song ....................................... 58
Gambar 4.22 Sequence Diagram Library Album .................................... 59
Gambar 4.23 Sequence DiagramLibrary Artis ........................................ 59
Gambar 4.24 Sequence DiagramPlaylist ................................................. 60
Gambar 4.25 Sequence DiagramPlaying Queue ...................................... 61
Gambar 4.26 Sequence DiagramLyrics ................................................... 61
Gambar 4.27 Sequence DiagramScraping Lyrics .................................... 62
Gambar 4.28 Sequence DiagramPlaying Song ........................................ 63
Gambar 4.29 Sequence DiagramPause .................................................... 64
Gambar 4.30 Sequence DiagramShuffle .................................................. 64
Gambar 4.31 Sequence DiagramRepeat .................................................. 65
Gambar 4.32 Sequence DiagramPrevious ............................................... 65
Gambar 4.33 Sequence DiagramNext...................................................... 66
Gambar 4.34 Sequence DiagramSearch................................................... 66
Gambar 4.35 Sequence DiagramShuffle All............................................ 67
Gambar 4.36 Sequence DiagramSort By ................................................. 68
Gambar 4.37 Sequence DiagramSetting .................................................. 68
Gambar 4.38 Sequence DiagramAbout ................................................... 69
Gambar 4.39 Class DiagramLibrary Song ............................................... 70
Gambar 4.40 Class DiagramLibrary Album ............................................ 70
Gambar 4.41 Class DiagramLibrary Artis ............................................... 71
Gambar 4.42 Class DiagramPlaylist ........................................................ 71
Gambar 4.43 Class DiagramPlaying Queue ............................................ 72
Gambar 4.44 Class DiagramLyrics .......................................................... 73
Gambar 4.45 Class DiagramScraping Lyrics ........................................... 73
Gambar 4.46 Class DiagramPlayer .......................................................... 74
Gambar 4.47 Class DiagramSearch ......................................................... 75

xiv
Gambar 4.48 Class DiagramShuffle All .................................................. 76
Gambar 4.49 Class DiagramSort By ........................................................ 76
Gambar 4.50 Class DiagramSetting ......................................................... 77
Gambar 4.51 Class DiagramAbout .......................................................... 77
Gambar 4.52 Struktur Navigasi Aplikasi Pemutar Musik ....................... 78
Gambar 4.53 Rancangan Halaman Menu ................................................ 80
Gambar 4.54 Rancangan HalamanLibrary Song ..................................... 80
Gambar 4.55 Rancangan Halaman Library Album ................................. 81
Gambar 4.56 Rancangan Halaman Library Artis..................................... 82
Gambar 4.57 Rancangan Halaman Playlist.............................................. 82
Gambar 4.58 Rancangan HalamanPlaying Queue ................................... 83
Gambar 4.59 Rancangan Halaman Lyrics ............................................... 83
Gambar 4.60 Rancangan HalamanPlayer ................................................ 84
Gambar 4.61 Rancangan HalamanSearch ................................................ 85
Gambar 4.62 Rancangan HalamanSetting ............................................... 85
Gambar 4.63 Rancangan HalamanAbout................................................. 86
Gambar 5.1 Halaman Menu ................................................................... 89
Gambar 5.2 Halaman Library Song ....................................................... 90
Gambar 5.3 HalamanLibrary Album ..................................................... 91
Gambar 5.4 HalamanArtis ..................................................................... 92
Gambar 5.5 HalamanPlaylist ................................................................. 92
Gambar 5.6 HalamanPlaying Queue ...................................................... 93
Gambar 5.7 HalamanLyrics ................................................................... 94
Gambar 5.8 HalamanPlayer ................................................................... 95
Gambar 5.9 HalamanSeacrh .................................................................. 96
Gambar 5.10 HalamanSetting .................................................................. 97
Gambar 5.11 HalamanAbout ................................................................... 98
Gambar 6.1 Tampilan Menu .................................................................. 100
Gambar 6.2 TampilanLibrary Song ....................................................... 102
Gambar 6.3 TampilanLibrary Album .................................................... 103
Gambar 6.4 TampilanAlbum Song ........................................................ 104

xv
Gambar 6.5 TampilanLibrary Artis ....................................................... 105
Gambar 6.6 TampilanArtis Album ........................................................ 106
Gambar 6.7 TampilanPlaylist ................................................................ 107
Gambar 6.8 TampilanPlaying Queue ..................................................... 109
Gambar 6.9 TampilanLyrics .................................................................. 110
Gambar 6.10 TampilanPlayer .................................................................. 112
Gambar 6.11 TampilanSearch.................................................................. 114
Gambar 6.12 TampilanSetting ................................................................. 115
Gambar 6.13 TampilanAbout .................................................................. 116

xvi
BAB I

PENDAHULUAN

1.1 Latar Belakang

Teknologi informasi dan komunikasi di dunia berkembang setiap waktu

dan cukup pesat.Salah satu contohnya pada perkembangan teknologi perangkat

mobile phone.Sebelumnya, mobile phone hanya difungsikan sebagai alat

komunikasi suara dan alat pengiriman pesan saja. Dengan semakin bertambahnya

kebutuhan akan fitur-fitur baru untuk mobile phone, membuat para vendor

mengembangkan teknologi-teknologi baru untuk setiap produk mereka.Terobosan

baru pada mobile phone di tandai dengan munculnya suatu Sistem Operasi yaitu

Android. Android merupakan platform perangkat lunak untuk piranti mobile

phone yang di dukung oleh google OS.Android menggunakan versi modifikasi

dari kernel Linux yang mampu didistribusikan secara terbuka (opensource).Salah

satu teknologi yang diaplikasikan di perangkat mobile phone saat ini yaitu

teknologi audio atau perangkat suara.Fungsi dari audio adalah menghasilkan suara

yang dapat ditangkap oleh telinga manusia.

Pemutar musik memanfaatkan teknologi audio dalam pengaplikasiannya.

Aplikasi pemutar musik merupakan perangkat lunak pemutar audio dalam

berbagai format seperti MP3, WAV, AAC, dan lain-lain. Perkembangan aplikasi

pemutar musik pada android sudah cukup banyak, berbagai aplikasi memiliki

kelebihannya masing-masing, ada yang memiliki kelebihan pada kuliatas suara,

tampilan user interface yang mudah.

1
Aplikasi ini dibangun dengan pemograman java Android menggunakan

softwareADT Bundle yang di dalamnya terdapat Android Studiosebagai editor

bahasa pemograman java,ADT sebagai plugin untuk Android Studio, dan SDK

untuk kepentingan development aplikasi berbasis Android.

Saat ini aplikasi pemutar musik di Playstore hanya untuk memutar musik

yang ada di Android, sangat sedikit aplikasi pemutar musik yang menampilkan

lirik lagu. Aplikasi pemutar musik yang menampilkan lirik lagu di Playstore

sebagian aplikasi berbayar dan harus membeli untuk menikmati fasilitas lirik lagu.

Banyak penikmat musik yang belum mengerti tentang tata cara membeli aplikasi

di Playstore. Dengan sedikitnya aplikasi pemutar musik yang menampilkan lirik

lagu membuat penikmat musik harus mencari sendiri lirik lagu melalui internet

atau sering disebut browsing.

Dari permasalahan tersebut maka peneliti bertujuan untuk membuat dan

merancang sebuah Aplikasi Pemutar Musik Beserta Penampil Lirik Musik

Berbasis Android , agar penikmat musik mudah mencari lirik lagu dari musik

yang sedang diputar.

1.2 Perumusan Masalah

Berdasarkan latar belakang permasalahan yang telah diuraikan maka dapat

diambil perumusan masalah yang akan di teliti adalah sebagai berikut :

1. Tidak semua penikmat musik mengetahui lirik lagu di musik yang

sedang diputar oleh sebab itu di perlukan Aplikasi Pemutar Musik

Beserta Penampil Lirik Musik Berbasis Android.

2
2. Bagaimana membuat aplikasi yang dapat menampilkan lirik lagu dari

musik yang sedang diputar tanpa harus mencari lirik melalui internet

browser.

1.3 Batasan Masalah

Agar pembahasan ini dapat lebih terarah dan menghindari pembahasan

yang terlalu luas, maka pembahasan ini di batasi dengan hal-hal sebagai berikut :

1. File musik yang berformat MP3.

2. Pencarian lirik berdasarkan pada website yang menyediakan lirik.

Website yang digunakan adalah ww.azlyrics.com.

1.4 Tujuan Penelitian

Tujuan dari penelitian ini adalah untuk membuat sebuah Aplikasi Pemutar

Musik Beserta Penampil Lirik Musik Berbasis Android yang dapat menampilkan

lirik lagu dari musik yang sedang diputar.

1.5 Manfaat Penelitian

Adapun mafaat yang diharapkan dari Aplikasi Pemutar Musik Beserta

Penampil Lirik Musik Berbasis Android antara lain :

a. Bagi Pengguna

1. Sebagai Aplikasi yang dapat digunakan sebagai alternatif

dalam memainkan atau memutar file musik.

2. Memudahkan penikmat musik dalam mencari lirik lagu dari

musik yang sedang diputar secara cepat dan tepat.

3
b. Bagi UNISBANK

1. Menjadi bahan dan kerangka acuan bagi mahasiswa dalam

menyusun laporan tugas akhir dan juga dapat sebagai informasi

perbandingan untuk suatu permasalahan bagi mahasiswa.

2. Sebagai tambahan daftar pustaka tentang permasalahan yang

terkait dengan aplikasi pemutar musik.

3. Untuk mendorong pengembangan aplikasi pemutar musik pada

android

c. Bagi Penulis

1. Sebagai bahan penelitian untuk menambah pengetahuan dan

wawasan yang berkaitan dengan aplikasi pemutar musik.

2. Dapat membangun sebuah aplikasi pemutar musik yang dapat

menampilkan lirik pada platfrom android.

1.6 Metodologi Penelitian

Metode penelitian adalah cara yang di gunakan oleh peneliti dalam

mengumpulkan data.

1.6.1 Jenis dan Sumber Data

Data yang di gunakan untuk penelitian ini adalah :

1. Data Primer

Data primer yaitu data yang di peroleh secara langsung pada

sumbernya dalam hal ini adalah website yang menyediakan

lirik.Website yang digunakan adalah ww.azlyrics.com.

4
2. Data Sekunder

Data Sekunder yaitu data yang di peroleh dari literatur, buku-buku,

makalah, jurnal, artikel, dan internet yang menunjang perancangan

sistem ini.

1.6.2 Metode Pengumpulan Data

Metode yang di gunakan dalam proses pengumpulan data sebagai bahan

pembuatan sistem adalah :

1. Survey

Teknik survey di lakukan dengan cara meninjau website yang

menyediakan lirik.Website yang digunakan adalah ww.azlyrics.com.

2. Studi Pustaka

Merupakan teknik pencarian dengan melakukan pencarian data lewat

literatur-literatur yang terkait misalnya buku-buku referensi, artikel,

jurnal, makalah, dll.

1.6.3 Metode Pengembangan Sistem

Pada penelitian ini model proses yang di gunakan adalah model Waterfall.

Model Waterfall adalah sebuah contoh dari proses perencanaan, dimana semua

proses kegiatan harus terlebih dahulu direncanakan dan dijadwalkan sebelum

dikerjakan. (Sommerville 2011).

5
Gambar 1.1 Model Proses Waterfall
(Sumber : Roger S. Pressman, 2011)
Berikut ini adalah penjelasan dari Model Waterfall :

1. Tahap Analisis dan Definisi Persyaratan (Requirements definition)

Proses mengumpulkan informasi kebutuhan sistem/perangkat lunak

melalui konsultasi dengan pengguna sistem. Proses ini mendefinisikan

secara rinci mengenai fungsi-fungsi, batasan dan tujuan dari perangkat

lunak sebagai spesifikasi sistem yang akan dibuat.

Pada tahap ini, penulis melakukan :

a. Merumuskan latar belakang.

b. Mengidentifikasi dan merumuskan masalah.

c. Mengidentifikasi dan merumuskan batasan masalah.

d. Mengidentifikasi dan menganalisa data.

e. Melakukan studi pustaka

6
2. Tahap Perancangan Sistem dan Perangkat Lunak (System and Software

Design)

Proses perancangan sistem membagi persyaratan dalam sistem perangkat

keras atau perangkat lunak. Kegiatan ini menentukan arsitektur sistem

secara keseluruhan. Proses perancangan arsitektural melibatkan

identifikasi komponen-komponen utama sistem dan komunikasi antar

komponen-komponen tersebut.

Pada tahap ini, penulis melakukan :

a. Menentukan rancangan dan desain sistem.

b. Menentukan arsitektur sistem.

c. Menentukan alur kerja sistem.

d. Menentukan metode pengembangan sistem

e. Menentukan kebutuhan perangkat keras dan perangkat lunak.

3. Tahap Implementasi dan Pengujian Unit (Implementation and Unit

Testing)

Pada tahap ini, perancangan perangkat lunak direalisasikan sebagai

serangkaian program atau unit program.Pengujian unit melibatkan

verifikasi bahwa setiap unit telah memenuhi spesifikasinya.

Pada tahap ini, penulis melakukan :

a. Mengimplementasikan perangkat lunak dan perangkat keras.

b. Mengimplementasikan rancangan dan desain sistem.

c. Mengimplementasikan arsitektur sistem.

d. Mengimplementasikan alur kerja sistem.

7
4. Tahap Integrasi dan Pengujian Sistem (Integration and System Testing)

Unit program diintegrasikan dan diuji sebagai sistem yang lengkap untuk

menjamin bahwa persyaratan sistem telah dipenuhi.Setelah pengujian

sistem, perangkat lunak dikirim kepada pelanggan.

Pada tahap ini, penulis melakukan :

a. Pengujian terhadap rancangan dan desain sistem.

b. Pengujian terhadap arsitektur sistem.

c. Pengujian terhadap alur kerja sistem.

5. Tahap Operasi dan Pemeliharaan (Operational and Mintenance)

Tahap ini biasanya merupakan fase siklus hidup yang paling lama.Sistem

diterapkan (diinstal) dan dipakai.Pemeliharaan mencakup koreksi dari

beberapa kesalahan yang tidak ditemukan pada tahapan sebelumnya,

perbaikan atas implementasi unit sistem dan pengembangan pelayanan

sistem, sementara persyaratan-persyaratan baru ditambahkan.

Pada tahap ini, penulis melakukan :

a. Menguji dan menerapkan sistem pada perangkat keras.

b. Mengidentifikasi kesalahan sistem.

c. Mengimplementasikan kesalahan sistem.

d. Melakukan perbaikan pada kesalahan sistem.

8
1.7 Sistematika Penulisan

Secara garis besar skripsi ini terdiri dari 7 (tujuh) bab dengan beberapa sub

bab. Agar mendapat arah dan gambaran yang jelas mengenai hal yang tertulis,

berikut ini sistematika penulisannya secara lengkap:

BAB I PENDAHULUAN

Pada bab ini berisi tentang latar belakang masalah, perumusan masalah,

tujuanpenelitian, manfaat penelitian, batasan masalah, metodologi

penelitian, dan sistematika penelitian.

BAB II TINJAUAN PUSTAKA

Pada bab iniberisi tentang kutipan dari skripsi, jurnal, dan artikel yang

telah ada sebelumnya yang berhubungan dengan masalah penelitian

yang sering di teliti.

BAB IIILANDASAN TEORI

Pada bab ini berisi tentang dasar teori yang di gunakan sebagai

landasan dalam Aplikasi Pemutar Musik Beserta Penampil Lirik Musik

berbasis Android.

BAB IV ANALISIS DAN RANCANGAN SISTEM

Pada bab ini dijelaskan tentang gambaran umum sistem, analisis

kebutuhan sistem, perancangan sistem. Dalam penelitian ini

pembangunan aplikasi menggunakan ADT Bundle Android.

BAB V IMPLEMENTASI

Bab ini berisi tentang implementasi dari program yang di buat, dan

pengujian program yang di buat.

9
BAB VI HASIL PENELITIAN DAN PEMBAHASAN

Bab ini membahas tentang hasil dari penelitian dan program yang

sudah di buat.

BAB VII KESIMPULAN

Pada bab ini berisi tentang kesimpulan serta saran-saran untuk

melengkapi dan menyempurnakan penyusunan sekaligus akhir dari

laporan tugas akhir skripsi.

10
BAB II

TINJAUAN PUSTAKA

Pada bagian ini akan di paparkan tentang tinjauan pustaka yang di pakai

dalam laporan Tugas Akhir “Aplikasi Pemutar Musik Beserta Penampil Lirik

Musik berbasis Android” dengan tinjauan pustaka tersebut adalah hasil

penelitian terdahulu tentang informasi hasil penelitian yang telah di lakukan

sebelumnya dan menghubungkan dengan masalah yang di teliti.

2.1 Penelitian Terdahulu

Devi Hawana Lubis, tahun 2014,dengan judul “Pembuatan Aplikasi

Pemutar Audio Streaming Berbasis Android” menjelaskan bahwa tujuan dari

penelitian ini adalah membuat aplikasi pemutar audio streaming berbasis android

yang merupakan aplikasi untuk memutar lagu-lagu dengan menggunakan URL

sebagai link untuk mengakses lagu dengan memanfaatkan koneksi internet.

Aplikasi ini bernama Mp3-Stream yang dibuat dengan menggunakan tools

Basic4Android. Database yang digunakan adalah MySql.Kelebihan Mp3-Stream

adalah pada penambahan, edit dan delete data yang dapat secara langsung

dilakukan oleh user dalam waktu yang singkat. Hal ini dapat dilakukan karena

data yang disimpan berupa URL dan bukan file lagu sehingga membantu

penghematan storage device. Sedangkan kekurangannya adalah dibutuhkan

koneksi internet yang cepat dan stabil untuk performace yang baik dari aplikasi

Mp3-Stream.

11
Nova Suparmanto, tahun 2013,dengan judul “Analisis Pengembangan

Fun Lyrics (FL): Media PembelajaranBahasa Inggris Melalui Lirik Musik

Untuk Platform Android”menjelaskan bahwa penelitian yang telah di lakukan

ini bertujuan untuk meningkatkan kemampuan siswa dalam belajar bahasa Inggris

khususnya vocabulary melalui lirik lagu.Media pembelajaran Fun Lyrics (FL)

dikembangkan untuk meningkatkan minat belajar siswa melalui media yang

interaktif dan menyenangkan. Terdapat lirik 2 bahasa yaitu bahasa Indonesia dan

Inggris yang dijalankan di smartphone atautablet PC Android. Selain itu

Penelitian ini bertujuan untuk mengetahui proses perancangan dan pembuatan

aplikasi FL, mengetahui analisis tingkat kualitas pengujian kualitas perangkat

lunak yang dikembangkan sesuai standar ISO 9126 dan uji materi, serta

mengetahui analisis hasil software media FL. Metode yang digunakan adalah

Research and Development (R&D), yaitu dengan Identifikasi Potensi dan

Masalah, Analisis Kebutuhan dan Pengumpulan Data, Desain, Implementasi,

Validasi, Revisi, dan Uji Coba. Uji materi diteliti menggunakan checklist berupa

terjemahan lirik lagu dalam bahasa Inggris dan Indonesia.

Bima Injan Pamungkas, tahun 2013, dengan judul“Desain dan

Implementasi Pemutar Musik Berbasis Android” menjelaskan bahwa Musik

adalah suatu hal yang tidak bisa dipisahkan dari manusia pada saat ini. Kalau

dilihat dari perkembangannya, pada zaman dahulu musik digunakan hanya untuk

upacara-upacara ritual keagamaan atau adat istiadat.Tetapi sekarang ini musik

seperti sudah menjadi kebutuhan hidup manusia.Dimana pun mereka berada,

mereka ingin mendengarkan musik yang dapat membuat tenang atau menambah

12
semangat.Untuk memudahkan manusia memutar musik dimanapun mereka

berada, maka penulis mencoba membuat sebuah aplikasi yang dapat membaca

format file musik sebagai pengembangan dari format yang sudah ada. Aplikasi

pemutar musik ini dibuat untuk sebagai alternatif dalam memainkan atau memutar

file musik. Aplikasi ini, dibuat dengan menggunakan Eclipse serta bahasa

pemograman Java dengan operating system (OS) Android. Aplikasi ini akan

berjalan pada sistem operasi android minimum versi 2.3 (Ginggerbread) atau

lebih.

Eric Megah Perdana , tahun 2012 dengan judul “Aplikasi Pencari Lirik

Lagu pada Audio Player Berbasis Mobile Platform Android” menjelaskan

bahwa Audio player didefinisikan sebagai media player yang berfungsi untuk

memutar audio digital, misalnya file audio. Format audio yang sering digunakan

adalah MP3. Namun, beberapa audio player hanya dapat digunakan untuk

memainkan lagu. Tidak memiliki fitur untuk menampilkan lirik lagu. Hal ini

membuat pengguna mengalami kesulitan untuk mendapatkan lirik lagu saat

bermain lagu. Menurut masalah tersebut, akan membuat aplikasi pencari lirik lagu

pada audio player berdasarkan platform mobile Android. Penelitian ini

menggunakan metode prototype untuk mengembangkan aplikasi. Dengan aplikasi

ini, pengguna bisa mendapatkan lirik lagu sambil memainkan lagu, seperti

karaoke. Dengan menggunakan teknik grabbing untuk mengambil lirik dari situs

website dan disimpan ke dalam database. Database yang digunakan untuk

menyimpan lirik lagu dengan menggunakan SQLite.

13
2.2 Perbedaan Penelitian yang Dilakukan Dengan Penelitian yang

Terdahulu

Dalam penelitian ini penulis mempunyai persamaan dengan penelitian

yang telah di lakukan terdahulu maupun yang sudah di jelaskan di atas,

diantaranya tujuan yang di paparkan mempunyai kesamaan dalam pembuatan

aplikasi pemutar musik yang memutar file audio berformat MP3 dan dapat

menampilkan lirik lagu yang sedang diputar.

Perbedaan dari penelitian yang penulis lakukan adalah terletak pada

obyek atau kasus yang di angkat.Perbandingan dengan aplikasi“Pembuatan

Aplikasi Pemutar Audio Streaming Berbasis Android”. Perbedaan terletak

pada cara memutar lagu dengan menggunakan URL sebagai link untuk mengakses

lagu dengan memakai koneksi internet. Pada Aplikasi yang sedang dikembangkan

tidak menggunakan URL untuk memutar lagu, tetapi dengan mencari secara

otomatis data lagu dari media penyimpanan pada smartphone.

Perbandingan dengan aplikasi “Analisis Pengembangan Fun Lyrics

(FL): Media Pembelajaran Bahasa Inggris Melalui Lirik Musik Untuk

Platform Android”. Perbedaan terleteak pada tujuan aplikasi Fun Lyrics untuk

meningkatkan kemampuan siswa dalam belajar bahasa Inggris khususnya

vocabulary melalui lirik lagu. Pada Aplikasi yang sedang dikembangkan tujuan

pembuatan aplikasi untuk menampilkan lirik lagu dari lagu yang sedang diputar,

dan untuk mempermudah dalam mencari lirik lagu.

Perbandingan dengan aplikasi “Desain dan Implementasi Pemutar

Musik Berbasis Android”. Perbedaan terletak pada sistem operasi android, serta

14
tools pembuat aplikasi. Berjalan menggunakan sistem operasi android mininum

versi 2.3 (Gingerbread) dan menggunakan Eclipse sebagai Android Software

Development Kit.Pada aplikasi yang sedang dikembangkan menggunakan

Android Studio sebagai Android Software Development Kit, dan berjalan

menggunakan sistem operasi android minimum versi 4.1 (Jelly Bean).

Perbandingan dengan “Aplikasi Pencari Lirik Lagu pada Audio

Player Berbasis Mobile Platform Android”.Perbedaan terletak pada metode

pengembangan sistem yang menggunakan metode Prototype, dan terletak pada

fitur-fitur aplikasi.Pada aplikasi yang sedang dikembangkan menggunakan

metode pengembangan sistem Waterfall, dan penambahan fitur-fitur pada

aplikasi.

Berdasarkan dari perbandingan yang telah dipaparkan, dapat dijelaskan

Aplikasi Pemutar Musik Berserta Penampil Lirik Musik Berbasis Android

merupakan aplikasi pemutar musik yang dapat menampilkan lirik dari lagu yang

sedang diputar.Untuk menampilkan lirik menggunakan metode scarping lirik

dengan mengambil lirik dari website lalu memotong dan mengambil halaman lirik

dan ditampilkan ke smartphone, serta menambahkan fitur-fitur baru pada aplikasi.

Pembuatan aplikasi ini akan menggunakan Android SDK (Software

Development Kit) sebagai alat bantu dan API dengan menggunakan bahasa

pemrograman JDK (Java Development Kit) yang di perlukan pada platform

Android .

15
2.2.1 Perbedaan Penelitian Dalam Bentuk Tabel

Tabel 2.1 Perbedaan Penelitian

NO Nama Pengarang Judul Metode Output

1 Dewi Hawana Pembuatan Aplikasi System Memutar lagu-lagu

Lubis Pemutar Audio Development dengan menggunakan

streaming Berbasis Life URL sebagai link untuk

Android Cycle (SDLC) mengakses lagu

2 Nova Suparmanto Analisis Research and Meningkatkan

Pengembangan Fun Development kemampuan siswa dalam

Lyrics (FL): Media (R&D) belajar bahasa Inggris

Pembelajaran khususnya vocabulary

Bahasa Inggris melalui lirik lagu

Melalui Lirik Musik

Untuk Platform

Android

3 Bima Injan Desain dan System Sebagai alternatif dalam

Pamungkas Implementasi Development memainkan atau memutar

Pemutar Musik Life file musik yang berformat

Berbasis Android Cycle (SDLC) MP3

4 Eric Megah Aplikasi Pencari Prototype Dapat menampilkan lirik

Perdana Lirik Lagu pada pada saat memainkan

Audio Player lagu, namun tidak dapat

Berbasis Mobile menampilkan lirik lagu

Platform Android sesuai waktu progess dari

lagu yang sedang diputar

16
5 Septadi Nugraha Perancangan Waterfall Menampilkan lirik pada

Aplikasi Pemutar saat lagu diputar, lirik

Musik Beserta diambil dari website

Penampil Lirik www.azlyrics.com.

Musik Berbasis Dengan menggunakan

Android teknik scarping lirik

untuk mengambil lirik

dari website.

17
BAB III

LANDASAN TEORI

3.1 Audio

Audio adalah suara atau bunyi yang dihasilkan oleh getaran suatu benda,

agar dapat tertangkap oleh telinga manusia getaran tersebut harus kuat minimal 20

kali/detik. Suara yaitu suatu getaran yang dihasilkan oleh gesekan , pantulan dan

lain-lain, antara benda-banda. Sedangkan gelombang yaitu suatu getaran yang

terdiri dari Amplitudo dan juga waktu. Suara dibangun oleh periode, Apabila

Tidak Berarti itu bukanlah Suara.

Definisi audio yang lainnya adalah merupakan salah satu elemen yang

penting, karena ikut berperan dalam membangun sebuah sistem Komunikasi

dalam bentuk suara, ialah suatu sinyal elektrik yang akan membawa unsur-unsur

bunyi didalamnya. (Sora :2014)

3.1.1 Jenis Audio

Macam-macam atau Jenis-jenis audio, terdapat berbagai macam audio

yang dikelompok berdasarkan media ataupun perangkat yang sering gunakan,

diantaranya :

1. Audio Streaming adalah suatu istilah yang dipakai untuk mendengarkan

siaran langsung atau live melalui jaringan internet. Seperti contohnya:

Winamp (MP3), RealAudio (RAM) dan juga Liquid Radio.

2. Audio visual adalah suatu istilah yang digunakan untuk seperangkat

sound sistem yang dilengkapi dengan tampilan gambar, biasanya

dipakai untuk presentasi.

18
3. Audio Modem Riser (AMR) adalah suatu istilah yang dipakai untuk

sebuah kartu plug-in untuk motherboard intel yang memuat sirkuit

audio ataupun Modem.

(Sora :2014)

3.1.2 Audio Digital

Audio Digital menggunakan sinyal digital dalam proses reproduksi

suaranya. Sebagai proses digitalisasi terhadap format rekaman musik analog, lagu

atau musik digital mempunyai beraneka ragam format yang bergantung pada

teknologi yang digunakan. (Perdana, 2012)

3.1.3 Format Audio

Ada berbagai macam format atau ekstensi audio yang dapat ditemui

sehari-hari, tapi yang umumnya dikenal oleh masyarakat antara lain :

1. MPEG Audio Layer 3 (MP3) adalah suatu format audio yang

dikembangkan oleh Fraunhoper Institude dengan memiliki bitrate 128

kbps.

2. Waveform Audio (WAV) adalah suatu format audio yang yang

dikembangkan oleh Microsoft dan IBM sebagai standar untuk

menyimpan file audio pada PC, dengan menggunakan coding PCM

(Pulse Code Modulation).

3. Windows Media Audio (WMA) adalah format yang ditawarkan oleh

Microsoft. Format ini di desain khusus untuk digunakan pada Windows

Media Player yang ada pada sistem operasi windows.

19
4. Advanced Audio Coding (AAC) adalah Format yang merupakan bagian

standar Motion Picture Experts Group (MPEG), sejak standar MPEG-2

diberlakukan pada tahun 1997. Sample rate yang ditawarkan sampai 96

KHz dua kali MP3.

5. Ogg Vorbis adalah satu-satunya format audio yang garatis atau terbuka

untuk umum. Kelebihannya ialah terletak pada kualitas audio yang

tinggi walaupun pada bitrate rendah sekalipun.

6. Real Audio adalah suatu format audio yang sering ditemui pada bitrate

rendah. Format jenis ini dikembangkan oleh RealNetworks, digunakan

untuk layanan streaming audio pada bitrate 128 kbps atau lebih dengan

memakai standar AAC MPEG-4.

7. MIDI adalah suatu format audio yang biasanya digunakan untuk

ringtone pada handphone, sebab ukuran filenya yang kecil tapi

sayangnya format audio ini hanya cocok untuk suara yang dihasilkan

oleh synthesizer.

( Sora :2014)

3.2 Audio Player

Audio Player didefinisikan sebagai pemutar media yang berfungsi untuk

memutar audio digital termasuk disc audio seperti CD/DVD dan file audio.

Format audio yang sering digunakan adalah AAC, FLAC, MP3, Ogg, WAV, dan

WMA.

20
Kutipan dari pakar multimedia mengatakan bahwa pengertian audio

adalah sesuatu yang disebabkan perubahan tekanan udara yang menjangkau

gendang telinga manusia. Sehingga dapat disimpulkan bahwa audio player adalah

alat untuk memainkan file media digital yang merupakan perubahan tekanan

udara yang menjangkau gendang telinga manusia. (Perdana, 2012)

3.3 Lirik Lagu

Lirik lagu merupakan ekspresi seseorang tentang suatu hal yang sudah

dilihat, didengar maupun dialaminya. Dalam mengekspresikan pengalamannya

penyair atau pencipta lagu melakukan permainan kata-kata dan bahasa untuk

menciptakan daya tarik dan ciri khas terhadap lirik atau syairnya. Permainan

bahasa ini dapat berupa permainan vokal, gaya bahasa maupun penyimpangan

makna kata dan diperkuat dengan penggunaan melodi dan notasi musik yang

disesuaikan dengan lirik lagunya. Dalam fungsinya sebagai sarana hiburan lirik

mempunyai sasaran informasi yang tepat, enak didengar dan dimengerti oleh

pendengar sehingga apa yang diinginkan oleh penyanyi sampai kepada pendengar.

(Perdana, 2012)

3.4 Android

Android adalah sistem operasi untuk handphone yang berbasis Linux.

Android menyediakan platform terbuka bagi para pengmbang buat menciptakan

aplikasi mereka Android, 5 November 2007, Android bersama Open Handset

Alliance menyatakan mendusendiri untuk digunakan oleh bermacam piranti

bergerak. Awalnya, Google Inc. membeli Android Inc. pendatang baru yang

membuat piranti lunak untuk handphone. Kemudian untuk mengembangkan

21
Android di bentuklah Open Handset Alliance, Konsorium dari 34 perusahaan

piranti keras, piranti lunak, dan telekomunikasi.

Pada saat perilisan perdana kung pengembangan standar terbuka pada

perangkat seluler. Di lain pihak, Google merilis kode-kode Android di bawah

lisensi Apache, sebuah lisensi perangkat software dan standar terbuka perangkat

seluler.

Di dunia ini terdapat dua jenis distributor sistem operasi Android. Pertama

yang mendapat dukungan penuh dari Google atau Google Main Service (GMS)

yang kedua adalah yang benar-benar bebas distribusinya tapa dukungan langsung

Google atau di kenal sebagai Open Handset Distribution (OHD). (Wahyu

Kusuma,dkk,2013)

3.4.1 Arsitektur Android

Google sebagai pencipta Android yang kemudian diasuh oleh Open

Handset Alliance mengibaratkan Android sebagai sebuah tumpukan software.

Setiap lapisan dari tumpukan ini menghimpun beberapa program yang

mendukung fungsi-fungsi spesifik dari sistem operasi. Tumpukan paling bawah

adalah kernel. Google menggunakan kernel Linux versi 2.6 untuk membangun

Android, yang mencakup memory management, security setting, power

management, dan beberapa driver hardware. Bertempat di level yang sama dengan

library adalah lapisan runtime yang mencakup serangkaian inti library Java.

Dengannya, para programmer dapat mengembangkan aplikasi untuk Android

menggunakan bahasa pemrograman Java. Lapisan selanjutnya adalah application

22
framework, yang mencakup program untuk mengatur fungsi - fungsi dasar

smartphone.

Gambar 3.1 Arsitektur Android


(Sumber : Hidayat, 2014)

1. Linux Kernel

Android dibangun di atas kernel Linux 2.6. Namun secara keseluruhan

android bukanlah linux, karena dalam android tidak terdapat paket standar yang

dimiliki oleh linux lainnya. Linux merupakan sistem operasi terbuka yang handal

dalam manajemen memori dan proses. Oleh karenanya pada android hanya

terdapat beberapa servis yang diperlukan seperti keamanan, manajemen memori,

manajemen proses, jaringan dan driver. Kernel linux menyediakan driver layar,

kamera, keypad, WiFi, Flash Memory, audio, dan IPC (Interprocess

Communication) untuk mengatur aplikasi dan lubang keamanan.

23
2. Libraries

Android menggunakan beberapa paket pustaka yang terdapat pada C/C++

dengan standar Berkeley Software Distribution (BSD) hanya setengah dari yang

aslinya untuk tertanam pada kernel Linux. Beberapa pustaka diantaranya:

a) Media Library untuk memutar dan merekam berbagai macam format audio

dan video.

b) Surface Manager untuk mengatur hak akses layer dari berbagai aplikasi.

c) Graphic Library termasuk didalamnya SGL dan OpenGL, untuk tampilan

2D dan 3D.

d) SQLite untuk mengatur relasi database yang digunakan pada aplikasi.

e) SSl dan WebKit untuk browser dan keamanan internet.

3. Android Runtime

Pada android tertanam paket pustaka inti yang menyediakan sebagian

besar fungsi android. Inilah yang membedakan Android dibandingkan dengan

sistem operasi lain yang juga mengimplementasikan Linux. Android Runtime

merupakan mesin virtual yang membuat aplikasi android menjadi lebih tangguh

dengan paket pustaka yang telah ada. Dalam Android Runtime terdapat 2 bagian

utama, diantaranya:

a) Core Libraries : berfungsi untuk menerjemahkan bahasa Java/C

b) Dalvik Virtual Machine : sebuah mesin virtual berbasis register yang

dioptimalkan untuk menjalankan fungsi-fungsi pada Android secara

efisien.

24
4. Application Framework

Kerangka aplikasi menyediakan kelas-kelas yang dapat digunakan untuk

mengembangkan aplikasi android. Selain itu, juga menyediakan abstraksi generik

untuk mengakses perangkat, serta mengatur tampilan user interface dan sumber

daya aplikasi. Bagian terpenting dalam kerangka aplikasi android adalah sebagai

berikut [Hello Android 2nd Edition]:

a) Activity Manager, berfungsi untuk mengontrol siklus hidup aplikasi dan

menjaga keadaan ”Backstack“ untuk navigasi penggunaan.

b) Content Providers, berfungsi untuk merangkum data yang memungkinkan

digunakan oleh aplikasi lainnya, seperti daftar nama.

c) Resuource Manager, untuk mengatur sumber daya yang ada dalam

program. Serta menyediakan akses sumber daya diluar kode program,

seperti karakter, grafik, dan file layout.

d) Location Manager, berfungsi untuk memberikan informasi detail

mengenai lokasi perangkat android berada.

e) Notification Manager, mencakup berbagai macam peringatan seperti,

pesan masuk, janji, dan lain sebagainya yang akan ditampilkan pada status

bar.

5. Application Layer

Puncak dari diagram arsitektur android adalah lapisan aplikasi dan widget.

Lapisan aplikasi merupakan lapisan yang paling tampak pada pengguna ketika

menjalankan program. Pengguna hanya akan melihat program ketika digunakan

tanpa mengetahui proses yang terjadi dibalik lapisan aplikasi. Lapisan ini berjalan

25
dalam Android runtime dengan menggunakan kelas dan service yang tersedia

pada framework aplikasi.

Lapisan aplikasi android sangat berbeda dibandingkan dengan sistem

operasi lainnya. Pada android semua aplikasi, baik aplikasi inti maupun aplikasi

pihak ketiga berjalan diatas lapisan aplikasi dengan menggunakan pustaka API

(Application Programming Interface) yang sama.(http://www.vedcmalang.com/)

3.4.2 Activity Lifecycle Android

Pada saat aplikasi berjalan pada sistem Android sebuah aktifitas program

terjadi dalam beberapa pernyataan program atau tahapan (state) . Setiap pengguna

sistem Android tidak dapat melakukan kontrol terhadap tahapan tersebut, semua

sudah di atur (managed) oleh system. Namun demikian, sebagai pengguna dapat

mengidentifikasi kapan tahapan tersebut terjadi dengan memanggil method-

method ini :

1. onCreate()

2. onStart()

3. onResume()

4. onPause()

5. onStop

6. onDestroy()

7. onRestart()

8. onSaveInstanceState()

9. onRestoreInstanceState()

Lebih jelas tahapan ( state ) yang terjadi bisa dilihat gambar berikut ini :

26
Gambar 3.2 Activity Lifecycle Android
(Sumber :Https://ows.edb.utexas.edu)

Berikut Detail Penjelasan State Method pada class Activity :

1. onCreate( Bundle )

Method ini dipanggil ketika aktifitas pertama kali dimulai. Kita dapat

menggunakan method ini untuk melakukan inisialiasi awal seperti

menentukan antar muka ( user interface ), Method onCreate( ) yang

memiliki satu parameter yang dapat bernilai null atau bernilai informasi

dari state sebelumnya yang dijalankan oleh method onSaveInstanceState(

).

2. onStart( )

Method ini mengindikasikan aktifitas yang siap ditampilkan ke user.

27
3. onResume( )

Method ini dipanggil ketika aktifitas anda dinyatakan siap ber interaksi

dengan user. Ini adalah aktifitas yang paling tepat untuk menyertakan

animasi dan music pada aplikasi anda.

4. onPause( )

Method ini dijalankan ketika aktifitas akan dijalankan di background,

biasanya terjadi ketika aktifitas berjalan di atas aktifitas ini. Pada state ini

sebaiknya anda implementasi persistent data pada program anda, seperti

ketika sebuah database sedang dilakukan proses edit.

5. onStop( )

Method ini dipanggil saat aktifitas anda tidak bisa dilihat lagi oleh user

dan tidak dibutuhkan untuk sementara waktu. Jika memori dalam keadaan

parah (karena banyak resource berjalan) maka method onStop() tidak

pernah akan dipanggil ( system mungkin akan mematikan prosesnya )

6. onRestart( )

Jika method ini dipanggil , berarti aktifitas anda sedang di tampilkan ulang

( redisplay) oleh user dari sebelumnya di stop.

7. onDestroy( )

Method ini dipanggil sebelum sebuah aktifitas di matikan ( di-destroy).

Jika resource memory ketat method onDestroty() tidak pernah akan

dipanggil ( system mungkin akan mematikan prosesnya ).

28
8. onSaveInstanceState(Bundle)

Method ini mengijinkan activity untuk menyimpan setiap statusintance.

Misalnya dalam mengedit teks, kursor bergerak dari kiri kekanan.

9. onRestoreInstanceState(Bundle)

Dipanggil saat activity kembali menginisialisasi dari status sebelumnya

yang disimpan oleh onSaveInstanceState(Bundle).

(http://dev.xbata.com/)

3.4.3 Arsitektur Audio Android

Android Audio Hardware Abstraction Layer (HAL) merupakan driver

audio android yang berfungsi menghubungkan komponen tingkat tinggi untuk

berkomunikasi dengan komponen yang lebih rendah tingkatannya, audio

framework API pada android.media yang mendasari audio driver dengan

hardware.

Arsitektur audio Android mendefinisikan bagaimana fungsi audio

diimplementasikan dan menunjuk pada kode program lainnya yang terlibat dalam

pelaksanaannya.

29
Gambar 3.3 Arsitektur Audio Android
(Sumber : https://source.android.com/)

Berikut penjelasan tentang arsitektur audio android :

1. Application framework

Applicatin framework berisi kode aplikasi, yang menggunakan API

android.media untuk berinteraksi dengan hardware audio. Kode ini

memanggil sesuai class JNI untuk mengakses kode asli yang berinteraksi

dengan hardware audio.

2. JNI

Kode JNI berhubungan dengan android.media untuk memanggil kode

native tingkat rendah untuk mengakses perangkat keras audio.

30
3. Native framework

Native framework menyediakan native yang sama untuk package

android.media, memanggil Binder IPC proxies untuk mengakses layanan

audio dari media server.

4. Binder IPC

Binder IPC proxies memfasilitasi komunikasi yang lebih melalui batas –

batas proses.

5. Media server

Media server berisi layanan audio merupakan kode aktual yang

berinteraksi dengan implementasi HAL.

6. HAL

HAL mendefinisikan dasar interface yang memanggil layanan audio dan

mengimplementasikan hardware audio agar berfungsi dengan benar.

7. Kernel driver

Driver audio berinteraksi dengan hardware dan implementasi HAL.

(https://source.android.com/)

3.5 Android SDK (Software Development Kit)

Android SDK adalah tools API (Aplication Programming Interface) yang

diperlukan untuk mengembangkan aplikasi pada platform Android menggunakan

bahasa pemrograman Java. Sebagai platform aplikasi netral, Android memberi

kesempatan bagi semua orang untuk membuat aplikasi yang dibutuhkan, yang

bukan merupakan aplikasi bawaan Handphone/Smartphone. (Lindung,2012)

31
3.5.1 Android Studio

Android studio merupakan sebuah Integrated Development Environment

(IDE) untuk platform Android. Android Studio ini diumumkan pada tanggal 16

Mei 2013 pada Konferensi Google I/O oleh Produk Manajer Google, Ellie

Powers. Android studio bersifat free dibawah Apache License 2.0. Android Studio

awalnya dimulai dengan versi 0.1 pada bulan mei 2013, Kemudian dibuat versi

beta 0.8 yang dirilis pada bulan juni 2014. Yang paling stabil dirilis pada bulan

Desember 2014, dimulai dari versi 1.0. Android Studio merupakan

pengembangkan dari Eclipse IDE, dan dibuat berdasarkan IDE Java populer, yaitu

IntelliJ IDEA. Android Studio direncanakan untuk menggantikan Eclipse ke

depannya sebagai IDE resmi untuk pengembangan aplikasi Android.

(https://www.academia.edu/)

3.5.2 Fitur – Fitur Android Studio

Sebagai pengembangan dari Eclipse, Android Studio mempunyai banyak

fitur-fitur baru dibandingkan dengan Eclipse IDE. Berbeda dengan Eclipse yang

menggunakan Ant, Android Studio menggunakan Gradle sebagai build

environment. Fitur-fitur lainnya adalah sebagai berikut :

 Menggunakan Gradle-based build system yang fleksibel.

 Bisa mem-build multiple APK .

 Template support untuk Google Services dan berbagai macam tipe

perangkat.

 Layout editor yang lebih bagus.

32
 Built-in support untuk Google Cloud Platform, sehingga mudah untuk

integrasi dengan Google Cloud Messaging dan App Engine.

 Import library langsung dari Maven repository

(Herdi: 2014)

3.5.3 Perbandingan Android Stuio vs Eclipse ADT

Berikut ini perbandingan antara Android Studio dengan Eclipse ADT

Tabel 3.1 Perbandingan Android Studio vs Eclipse ADT


(Sumber : https://en.wikipedia.org/)
Feature Android Eclipse

Studio ADT

Build system Gradle Apache Ant

Maven-based build dependencies Yes No

Build variants and multiple-APK generation Yes No

Advanced Android code completion and Yes No

refactoring

Graphical layout editor Yes Yes

APK signing and keystore management Yes Yes

NDK support Yes Yes

3.6 Database SQLite

Pada Android terdapat fasilitas untuk membuat database yang dikenal

dengan SQLite, SQLite adalah salah satu software basis data yang tertanam yang

sangat populer, kombinasi SQL interface dan penggunaan memory yang sangat

sedikit dengan kecepatan yang sangat cepat. SQLite di android termasuk dalam

33
Android runtime, sehingga setiap versi dari android dapat membuat database

dengan SQLite.

SQLite telah terinclude pada platform Android. SQLite sendiri terkenal

sebagai database yang open-source, stand alone SQL database, berukuran kecil,

tidak membutuhkan administrasi, tanpa server, tanpa file konfigurasi dan juga

telah digunakan pada banyak aplikasi terkenal. Pada Android, database yang

dibuat untuk suatu aplikasi hanya bias diakses oleh aplikasi itu sendiri, aplikasi

lain tidak akan bisa mengaksesnya kecuali jika ingin berbagi databasenya yaitu

dengan menggunakan content provider. Database SQLite merupakan sebuah file

yang dapat diambil, dipindahkan atau meng-copy-nya ke system lain. (Ayu

Kusuma, 2013)

3.7 Scraping Lirik

Scraping atau Web Scraping adalah proses pengambilan sebuah dokumen

semi-terstruktur dari internet, umumnya berupa halaman-halaman web dalam

bahasa markup seperti HTML atau XHTML, dan menganalisis dokumen tersebut

untuk diambil data tertentu dari halaman tersebut untuk digunakan bagi

kepentingan lain. (Turland, 2010)

3.8 Unified Modeling Language (UML)

UML adalah bahasa pemodelan visual, bukan dimaksudkan untuk menjadi

suatu bahasa pemrograman visual, tetapi UML memberikan arah untuk bergerak

ke arah kode. Bahasa pemodelan visual yang ekspresif untuk mengembangkan

dan saling menukar model dengan mudah dan dimengerti secara umum. UML

mendefinisikan semantik dan notasi, bukan sebuah tool.

34
Jadi untuk mengaplikasikan kita dapat menggunakan beberapa tool yang

menggunakan UML sebagai bahasanya diantaranya yaitu Rational Rose dan

Enterprise Architect. (Pamungkas, 2013)

3.8.1 Diagram UML

Adapun jenis - jenis diagram antara lain :

1. Use Case Diagram

Use case adalah abstraksi dari interaksi antara system dan actor. Use case

bekerja dengan cara mendeskripsikan tipe interaksi antara user sebuah

system dengan sistemnya sendiri melalui sebuah cerita bagaimana sebuah

system dipakai. Use case merupakan konstruksi untuk mendeskripsikan

bagaimana system akan terlihat di mata user. Sedangkan use case diagram

memfasilitasi komunikasi diantara analis dan pengguna serta antara analis

dan client.

2. Activity Diagram

Menggambarkan rangkaian aliran dari aktivitas, digunakan untuk

mendeskripsikan aktifitas yang dibentuk dalam suatu operasi sehingga

dapat juga digunakan untuk aktifitas lainnya seperti use case atau interaksi

3. State Diagram

Menggambarkan semua state (kondisi) yang dimiliki oleh suatu objek dari

suatu class dankeadaan yang menyebabkan state berubah. Kejadian dapat

berupa objek lain yang mengirim pesan. State class tidak digambarkan

untuk semua class, hanya yang mempunyai sejumlah state yang terdefinisi

dengan baik dan kondisi class berubah oleh state yang berbeda.

35
4. Class Diagram

Class adalah sebuah spesifikasi yang jika diinstansiasi akan menghasilkan

sebuah objek dan merupakan inti dari pengembangan dan desain

berorientasi objek. Class menggambarkan keadaan (atribut/properti) suatu

sistem, sekaligus menawarkan layanan untuk memanipulasi keadaan

tersebut (metoda/fungsi). Class diagram menggambarkan struktur dan

deskripsi class, package dan objek beserta hubungan satu sama lain seperti

containment , pewarisan, asosiasi, dan lain-lain.

5. Sequence Diagram

Sequence Diagram digunakan untuk menggambarkan perilaku pada

sebuah skenario. Kegunaannya untuk menunjukkan rangkaian pesan yang

dikirim antara objek juga interaksi antara objek, sesuatu yang terjadi pada

titik tertentu dalam eksekusi sistem.

6. Component Diagram

Component diagram menggambarkan struktur dan hubungan antar

komponen piranti lunak, termasuk ketergantungan ( dependency ) di

antaranya. Komponen piranti lunak adalah modul berisi code , baik berisi

source code maupun binary code , baik library maupun executable , baik

yang muncul pada compile time, link time , maupun run time . Umumnya

komponen terbentuk dari beberapa class dan/atau package , tapi dapat juga

dari komponen-komponen yang lebih kecil. Komponen dapat juga berupa

interface, yaitu kumpulan layanan yang disediakan sebuah komponen

untuk komponen lain.

36
7. Deployment Diagram

Deployment/physical diagram menggambarkan detail bagaimana

komponen di-deploy dalam infrastruktur sistem, di mana komponen akan

terletak (pada mesin, server atau piranti keras apa), bagaimana

kemampuan jaringan pada lokasi tersebut, spesifikasi server, dan hal-hal

lain yang bersifat fisikal Sebuah node adalah server, workstation , atau

piranti keras lain yang digunakan untuk men- deploy komponen dalam

lingkungan sebenarnya.

8. Collaboration Diagram

Menggambarkan kolaborasi dinamis seperti sequence diagram. Dalam

menunjukkan pertukaran pesanm collaboration diagram menggambarkan

objek dan hubungannya (mengacu ke konteks). Jika penekanannya pada

waktu atau urutan gunakan sequence diagram, tetapi jika penekanannya

pada konteks gunakan collaboration diagram.

(Meilin, 2010)

3.8.2 Notasi dalam UML

1. Actor

Actor adalah segala sesuatu yang berinteraksi langsung dengan sistem

aplikasi komputer, seperti orang, benda atau lainnya. Tugas actor adalah

memberikan informasi kepada sistem dan dapat memerintahkan sistem

agar melakukan suatu tugas. (Hermawan, 2004)

37
Gambar 3.4 Notasi Actor
(Sumber : Hermawan, 2004)
2. Class

Notasi utama dan yang paling mendasar pada diagram UML adalah notasi

untuk mempresentasikan suatu class beserta dengan atribut dan

operasinya. Class adalah pembentuk utama dari sistem berorientasi objek.

(Hermawan, 2004)

Gambar 3.5 Notasi Class


(Sumber : Hermawan, 2004)
3. Use Case

Use case adalah deskripsi fungsi dari sebuah sistem dari perspektif

pengguna. Use case bekerja dengan cara mendeskripsikan tipikal interaksi

antara user (pengguna) sebuah sistem dengan sistemnya sendiri melalui

sebuah cerita bagaimana sebuah sistem dipakai. (Hermawan, 2004)

Gambar 3.6 Notasi Use Case


(Sumber : Hermawan, 2004)

38
4. Interaction

Interaction digunakan untuk menunjukkan baik aliran pesan atau

informasi antar obyek maupun hubungan antar obyek. Biasanya

interaction ini dilengkapi juga dengan teks bernama operation signature

yang tersusun dari nama operasi, parameter yang dikirim dan tipe

parameter yang dikembalikan. (Hermawan, 2004)

Gambar 3.7 Notasi Interaction


(Sumber : Hermawan, 2004)
5. Interface

Interface merupakan kumpulan operasi tanpa implementasi dari suatu

class. Implementasi operasi dalam interface dijabarkan oleh operasi

didalam class. Oleh karena itu keberadaan interface selalu disertai

oleh class yang mengimplementasikan operasinya. Interface ini

merupakan salah satu cara mewujudkan prinsip enkapsulasi dalam

obyek. (Hermawan, 2004)

Gambar 3.8 Notasi Interface


(Sumber : Hermawan, 2004)

6. Note

Note digunakan untuk memberikan keterangan atau komentar

tambahan dari suatu elemen sehingga bisa langsung terlampir dalam

39
model. Note ini bisa disertakan ke semua elemen notasi yang lain.

(Hermawan, 2004)

Gambar 3.9 Notasi Note


(Sumber : Hermawan, 2004)
7. Depency

Dependency merupakan relasi yang menunjukan bahwa perubahan

pada salah satu elemen memberi pengaruh pada elemen lain. Elemen yang

ada di bagian tanda panah adalah elemen yang tergantung pada elemen

yang ada dibagian tanpa tanda panah. (Hermawan, 2004)

Gambar 3.10 Notasi Depency


(Sumber : Hermawan, 2004)

8. Association

Association menggambarkan navigasi antar class (navigation), berapa

banyak obyek lain yang bisa berhubungan dengan satu obyek

(multiplicity antar class) dan apakah suatu class menjadi bagian dari class

lainnya (aggregation). (Hermawan, 2004)

Gambar 3.11 Notasi Association


(Sumber : Hermawan, 2004)

40
9. Generalization

Generalization menunjukkan hubungan antara elemen yang lebih umum

ke elemen yang lebih spesifik. Dengan generalization, class yang

lebih spesifik (subclass) akan menurunkan atribut dan operasi dari

class yang lebih umum (superclass) atau subclass is superclass .

Dengan menggunakan notasi generalization ini, konsep inheritance dari

prinsip hirarki dapat dimodelkan. (Hermawan, 2004)

Gambar 3.12 Notasi Generalization


(Sumber : Hermawan, 2004)

41
BAB IV

ANALISA DAN RANCANGAN SISTEM

4.1 Deskripsi Sistem

Aplikasi Pemutar Musik Beserta Penampil Lirik Musik Berbasis Android ini

dibuat guna ditujukan bagi pengguna yaitu masyarakat dan penikmat musik.

Aplikasi ini dapat digunakan untuk memutar lagu yang ada di smartphone android

dan dapat menampilkan lirik lagu dari lagu yang sedang diputar.

Gambar 4.1 Proses Scraping Lirik

Pada gambar 4.1 dijelaskan tentang proses scraping lirik untuk mencari

lirik, mengambil lirik, dan menampilkan lirik. Lirik lagu yang akan ditampilkan

diambil berdasarkan dari nama artis dan judul lagu yang sedang diputar. Lagu

dengan format yang benar terdiri dari dua id yaitu id nama artis dan id judul lagu.

Setelah diambil nama artis dan judul lagu, sistem akan mengakses website

42
www.azlyrics.com untuk mencari lirik. Metode pencarian lirik dengan

mencocokkan id nama artis dan id judul lagu dengan id nama artis dan id judul

lagu yang ada di website ww.azlyrics.com. Kemudian akan mendapatkan halaman

HTML lirik lagu, dan halaman HTML akan dipotong untuk mengambil lirik lagu.

Lirik lagu yang telah diambil akan ditampilkan, jika dua id yang terdiri dari id

nama artis dan id judul lagu tidak cocok atau tidak ditemukan pada website

www.azlyrics.com maka lirik tidak akan ditampilkan.

4.2 Perancangan Sistem

Perancangan sistem merupakan suatu proses perencanaan sebuah sistem

yang berjalan dan merupakan tahap lanjutan dari analisa sistem, dimana pada

perancangan sistem digambarkan rancangan sistem yang akan dibangun sebelum

dilakukan pengkodean kedalam suatu bahasa pemrograman. Tujuan dari

perancangan sistem secara global adalah membentuk kerangka sistem pengolahan

data dengan bantuan komputer. Rancangan sistem yang baik akan diterapkan

suatu kejadian untuk menentukan dan mengembangkan metoda prosedur dan

proses suatu data agar tujuan dari suatu organisasi dapat tercapai, sedangkan

tujuan dari perancangan sistem secara umum adalah memberikan gambaran secara

umum kepada pengguna mengenai sistem yang baru.

43
4.2.1 Use Case Diagram

Gambar 4.2 Use Case Diagram

Keterangan Gambar 4.2 Use Case User

1. Dengan menu Library pengguna dapat melihat Song, Albums, Artists.

2. Pengguna dapat melihat daftar putar dengan memilih menu Playlist.

Pengguna juga dapat membuat Playlist sendiri.

3. Pengguna dapat melihat lagu apa saja yang telah diputar dapat memilih

menu Playing Queue.

4. Pengguna dapat melihat lirik lagu yang sedang diputar dengan memilih

menu Lyrics. Scraping lirik merupakan teknik untuk mencari lirik,

mengambil lirik dan menampilkan lirik. Scraping lirik menggunakan

library Jsoup untuk mengakses web tanpa melalui browser. Selain untuk

mengakses web tanpa browser Jsoup juga berfungsi untuk membaca

semua elemen HTML, dan mengambil elemen-elemen HTML yang

diinginkan.

44
5. Dengan menu Setting pengguna dapat melakukan setting pada aplikasi.

6. Pada saat memutar lagu atau Playing Song pengguna dapat menggunakan

Pause, Play, Next, Previous, Shuffle,dan Repeat.

7. Pengguna dapat melakukan pencarian lagu dengan memilih menu Search

8. Pengguna dapat melakukan pengacakan semua lagu dengan memiih menu

Shuffle All.

9. Pengguna juga dapat melakukan pengurutan lagu dengan memilih menu

Sort By.

10. Pengguna dapat melihat informasi pembuat aplikasi dengan memilih menu

About.

4.2.2 Activity Diagram

Activity diagram menggambarkan rangkaian aliran dari aktifitas,

digunakan untuk mendeskripsikan aktifitas yang dibentuk dalam suatu operasi

sehingga dapat juga digunakan untuk aktifitas lainnya seperti use case atau

interaksi.

a. Activity Diagram Library Song

Gambar 4.3 Activity Diagram Library Song

45
Keterangan Gambar 4.3 Activity Diagram Library Song.

1. User membuka Aplikasi Pemutar Musik.

2. Ketika Aplikasi Pemutar Musik dibuka, sistem akan mencari lagu

yang ada pada media penyimpanan handphone.

3. User memilih menu Library dan memilih menu Song, maka sistem

akan menampilkan seluruh lagu.

b. Activity Diagram Library Album

Gambar 4.4 Activity Diagram Library Album

Keterangan Gambar 4.4 Activity Diagram Library Album.

1. User membuka Aplikasi Pemutar Musik.

2. Ketika Aplikasi Pemutar Musik dibuka, sistem akan mencari lagu

yang ada pada media penyimpanan handphone.

3. User memilih menu Library dan memilih menu Album, maka

sistem akan menampilkan daftar album dari lagu yang ada.

46
c. Activity Diagram Library Artis

Gambar 4.5 Activity Diagram Library Artis

Keterangan Gambar 4.5 Activity Diagram Library Artis.

1. User membuka Aplikasi Pemutar Musik.

2. Ketika Aplikasi Pemutar Musik dibuka, sistem akan mencari lagu

yang ada pada media penyimpanan handphone.

3. User memilih menu Library dan pilih menu Artis, maka sistem akan

menampilkan daftar artis dari lagu yang ada.

d. Activity Diagram Playlist

Gambar 4.6 Activity Diagram Playlist

47
Keterangan Gambar 4.6 Activity Diagram Playlist.

1. User memilih menu Playlist, maka sistem akan menampilkan Playlist

2. User memilih Playlist yang telah ditampilkan.

3. Sistem akan menampilkan daftar lagu

4. User melihat lagu yang terdapat pada Playlist.

e. Activity Diagram Playing Queue

Gambar 4.7 Activity Diagram Playing Queue

Keterangan Gambar 4.7 Activity Diagram Playing Queue.

1. User memilih menu Playing Queue.

2. Sistem akan menampilkan daftar lagu yang telah diputar.

3. User melihat daftar lagu apa saja yang telah diputar.

48
f. Activity Diagram Lyrics

Gambar 4.8 Activity Diagram Lyrics

Keterangan Gambar 4.8 Activity Diagram Lyrics.

1. User memilih lagu untuk diputar, maka sistem akan memutar lagu.

2. Ketika user memilih menu Lyrics, maka sistem akan mencari lirik.

3. Pencarian lirik menggunakan teknik Scraping Lirik.

4. Jika sistem menemukan lirik maka lirik akan ditampilkan dan user

dapat melihat lirik lagu.

5. Jika sistem tidak menemukan lirik maka lirik tidak akan tampil.

49
g. Activity Diagram Scraping Lyrics

Gambar 4.9 Activity Diagram Scraping Lyrics

Keterangan Gambar 4.9 Activity Diagram Scraping Lyrics.

1. User memilih menu Lyrics, maka sistem akan mendapatkan judul

lagu dan nama artis dari lagu yang sedang diputar.

2. Sistem mengakses website www.azlyrics.com untuk mencari lirik

lagu.

3. Metode pencarian lirik dengan mencocokkan id nama artis dan id

judul lagu dengan id nama artis dan id judul lagu yang ada di website

ww.azlyrics.com

4. Setelah mencocokkan lirik dan sistem mendapatkan halaman HTML

lirik lagu, dan halaman HTML akan dipotong untuk mengambil lirik

lagu.

5. Setelah mengambil lirik lagu, sistem akan menampilkan lirik lagu

6. User dapat melihat lirik lagu.

50
h. Activity Diagram Playing Song

Gambar 4.10 Activity Diagram Playing Song

Keterangan Gambar 4.10 Activity Diagram Playing Song.

1. User membuka Aplikasi Pemutar Musik.

2. Ketika Aplikasi Pemutar Musik dibuka, sistem akan menampilkan

daftar lagu.

3. User memilih lagu untuk diputar.

4. Sistem memutar lagu yang dipilih oleh user.

i. Activity Diagram Pause

Gambar 4.11 Activity Diagram Pause

51
Keterangan Gambar 4.11 Activity Diagram Pause.

1. User memilih lagu untuk diputar.

2. Sistem memutar lagu yang telah dipilh user.

3. Ketika lagu sudah diputar dan user memilih tombol pause, maka

sistem akan menghentikan lagu.

j. Activity Diagram Shuffle

Gambar 4.12 Activity Diagram Shuffle

Keterangan Gambar 4.12 Activity Diagram Shuffle.

1. User memilih lagu untuk diputar.

2. Sistem memutar lagu yang telah dipilh user.

3. Ketika lagu sudah diputar dan user memilih tombol shuffle, maka

sistem akan memutar lagu dengan urutan acak.

52
k. Activity Diagram Repeat

Gambar 4.13 Activity Diagram Repeat

Keterangan Gambar 4.13 Activity Diagram Repeat.

1. User memilih lagu untuk diputar.

2. Sistem memutar lagu yang telah dipilh user.

3. Ketika lagu sudah diputar dan user memilih tombol repeat, maka

sistem akan memutar ulang daftar lagu.

l. Activity Diagram Previous

Gambar 4.14 Activity Diagram Previous

53
Keterangan Gambar 4.14 Activity Diagram Previous.

1. User memilih lagu untuk diputar.

2. Sistem memutar lagu yang telah dipilh user.

3. Ketika lagu sudah diputar dan user memilih tombol previous, maka

sistem akan memutar lagu sebelumnya.

m. Activity Diagram Next

Gambar 4.15 Activity Diagram Next

Keterangan Gambar 4.15 Activity Diagram Next.

1. User memilih lagu untuk diputar.

2. Sistem memutar lagu yang telah dipilh user.

3. Ketika lagu sudah diputar dan user memilih tombol Next, maka

sistem akan memutar lagu berikutnya.

54
n. Activity Diagram Search

Gambar 4.16 Activity Diagram Search

Keterangan Gambar 4.16 Activity Diagram Search.

1. User memilih menu Search, maka sistem akan menampilkan Search.

2. User mengisikan keyword yang akan dicari.

3. Sistem akan mencari keyword yang telah diisikan oleh user.

4. Jika sistem menemukan hasil keyword maka akan menampilkan

hasil search yang dapat dilihat oleh user, jika sistem tidak

menemukan keyword maka proses pencarian akan berhenti.

o. Activity Diagram Shuffle All

Gambar 4.17 Activity Diagram Shuffle All

55
Keterangan Gambar 4.17 Activity Diagram Shuffle All.

1. User memilih menu Shuffle All.

2. Sistem akan memutar semua lagu yang ada dengan urutan acak.

p. Activity Diagram Sort By

Gambar 4.18 Activity Diagram Sort By

Keterangan Gambar 4.18 Activity Diagram Sort By.

1. User memilih menu Sort By, maka sistem akan menampilkan tipe

sort by.

2. User memilih tipe sort yang diinginkan.

3. Sistem akan mengurutkan lagu berdasarkan sort yang telah dipilih

oleh user, dan sistem akan menampilkan urutan lagu.

56
q. Activity Diagram Setting

Gambar 4.19 Activity Diagram Setting

Keterangan Gambar 4.19 Activity Diagram Setting.

1. User memilih menu Setting, maka sistem akan menampilkan setting

aplikasi.

2. User melakukan setting pada aplikasi.

3. Sistem akan menerapkan setting pada aplikasi yang telah dilakukan

oleh user.

r. Activity Diagram About

Gambar 4.20 Activity Diagram About

57
Keterangan Gambar 4.20 Activity Diagram About.

1. User memilih menu About.

2. Sistem akan menampilkan about yang berisikan informasi pembuat

aplikasi.

4.2.3 Sequence Diagram

Sequence Diagram adalah gambaran urutan kejadian suatu kegiatan yang

digunakan untuk membantu dalam membuat statechart.

a. Sequence Diagram Library Song

Gambar 4.21 Sequence Diagram Library Song

Keterangan Gambar 4.21 Sequence Diagram Library Song.

1. User dapat melihat lagu pada tampilan Library Song Interface.

2. Library Song proses berfungsi untuk mencari lagu pada SongDB

dan mengambil seluruh lagu yang ada.

3. Lagu yang telah diambil dari SongDB akan ditampilkan di Library

Song Interface.

58
b. Sequence Diagram Library Album

Gambar 4.22 Sequence Diagram Library Album

Keterangan Gambar 4.22 Sequence Diagram Library Album.

1. User dapat melihat daftar album pada tampilan Library Album

Interface.

2. Library Album proses berfungsi untuk mencari Album pada

SongDB dan mengambil seluruh Album yang ada.

3. Album yang telah diambil dari SongDB akan ditampilkan di

Library Album Interface.

c. Sequence Diagram Library Artis

Gambar 4.23 Sequence Diagram Artis

59
Keterangan Gambar 4.23 Sequence Diagram Library Artis.

1. User dapat melihat daftar Artis pada tampilan Library Artis

Interface.

2. Library Artis proses berfungsi untuk mencari Artis pada SongDB

dan mengambil seluruh Artis yang ada.

3. Artis yang telah diambil dari SongDB akan ditampilkan di Library

Artis Interface.

d. Sequence Diagram Playlist

Gambar 4.24 Sequence Diagram Playlist

Keterangan Gambar 4.24 Sequence Diagram Playlist.

1. User dapat melihat Playlist pada tampilan Playlist Interface.

2. Playlist proses berfungsi untuk mencari Playlist yang berisi lagu

pada SongDB dan mengambil seluruh lagu yang ada didalam

Playlist.

3. Playlist yang telah diambil dari SongDB akan ditampilkan di

Playlist Interface.

60
e. Sequence Diagram Playing Queue

Gambar 4.25 Sequence Diagram Playing Queue

Keterangan Gambar 4.25 Sequence Diagram Playing Queue.

1. User dapat melihat Playing Queue pada tampilan Playing Queue

Interface.

2. Playing Queue proses berfungsi untuk mencari lagu pada SongDB

dan mengambil seluruh lagu yang ada.

3. Lagu yang telah diambil dari SongDB akan ditampilkan di Playing

Queue Interface.

f. Sequence Diagram Lyrics

Gambar 4.26 Sequence Diagram Lyrics

61
Keterangan Gambar 4.26 Sequence Diagram Lyrics.

1. User memilih lagu untuk diputar. Playing Song proses berfungsi

untuk memutar lagu yang dipilih oleh user.

2. Jika lagu sudah diputar akan ditampilkan ke Player Interface.

3. User dapat melihat lirik pada tampilan Lyrics Interface.

4. Search Lyrics proses berfungsi untuk mencari lirik lagu, dengan

menggunakan teknik Scraping Lyrics.

5. Scraping Lyrics proses berfungsi untuk mendapatkan halaman

HTML lirik lagu pada website www.azlyrics.com, dan memotong

HTML untuk mengambil lirik lagu.

6. Lirik yang telah diambil dari website www.azlyrics.com akan

ditampilkan di Lyrics Interface.

g. Sequence Diagram Scraping Lyrics

Gambar 4.27 Sequence Diagram Scraping Lyrics

Keterangan Gambar 4.27 Sequence Diagram Scraping Lyrics.

1. User dapat melihat lirik pada tampilan Lyrics Interface.

2. Search Lyrics proses berfungsi untuk mencari lirik lagu, dengan

menggunakan teknik Scraping Lyrics.

62
3. Scraping Lyrics proses berfungsi untuk mendapatkan halaman

HTML lirik lagu pada website www.azlyrics.com, dan memotong

HTML untuk mengambil lirik lagu.

4. Lirik yang telah diambil dari website www.azlyrics.com akan

ditampilkan di Lyrics Interface.

h. Sequence Diagram Playing Song

Gambar 4.28 Sequence Diagram Playing Song

Keterangan Gambar 4.28 Sequence Diagram Playing Song.

1. User dapat melihat lagu pada tampilan Library Song Interface.

2. Library Song proses berfungsi untuk mencari lagu pada SongDB

dan mengambil seluruh lagu yang ada.

3. Lagu yang telah diambil dari SongDB akan ditampilkan di Library

Song Interface

4. User memilih lagu yang ditamplikan di Library Song Interface

untuk diputar.

5. Playing Song proses berfungsi untuk memutar lagu yang dipilih

oleh user.

6. Ketika lagu sudah diputar akan ditampilkan di Player Interface.

63
i. Sequence Diagram Pause

Gambar 4.29 Sequence Diagram Pause

Keterangan Gambar 4.29 Sequence Diagram Pause.

1. User memilih lagu untuk diputar. Playing Song proses berfungsi

untuk memutar lagu yang telah dipilih user.

2. Lagu yang sudah diputar akan ditampilkan di Player Interface.

3. Pause Song proses berfungsi untuk menghentikan sejenak lagu

yang diputar.

j. Sequence Diagram Shuffle

Gambar 4.30 Sequence Diagram Shuffle

Keterangan Gambar 4.30 Sequence Diagram Shuffle.

1. User memilih lagu untuk diputar. Playing Song proses berfungsi

untuk memutar lagu yang telah dipilih user.

64
2. Lagu yang sudah diputar akan ditampilkan di Player Interface.

3. Shuffle Song proses berfungsi untuk mengacak urutan lagu.

k. Sequence Diagram Repeat

Gambar 4.31 Sequence Diagram Repeat

Keterangan Gambar 4.31 Sequence Diagram Repeat.

1. User memilih lagu untuk diputar. Playing Song proses berfungsi

untuk memutar lagu yang telah dipilih user.

2. Lagu yang sudah diputar akan ditampilkan di Player Interface.

3. Repeat Song proses berfungsi untuk mengulang daftar lagu.

l. Sequence Diagram Previous

Gambar 4.32 Sequence Previous

65
Keterangan Gambar 4.32 Sequence Diagram Previous.

1. User memilih lagu untuk diputar. Playing Song proses berfungsi

untuk memutar lagu yang telah dipilih user.

2. Lagu yang sudah diputar akan ditampilkan di Player Interface.

3. Previous proses berfungsi untuk memutar lagu sebelumnya.

m. Sequence Diagram Next

Gambar 4.33 Sequence Next

Keterangan Gambar 4.33 Sequence Diagram Next.

1. User memilih lagu untuk diputar. Playing Song proses berfungsi

untuk memutar lagu yang telah dipilih user.

2. Lagu yang sudah diputar akan ditampilkan di Player Interface.

3. Next Song proses berfungsi untuk memutar lagu berikutnya.

n. Sequence Diagram Search

Gambar 4.34 Sequence Diagram Search

66
Keterangan Gambar 4.34 Sequence Diagram Search.

1. User dapat melakukan pencarian lagu dengan menginputkan

keyword yang ada di Search Interface.

2. Search proses berfungsi untuk mencari dan mengambil hasil

keyword yang ada di SongDB.

3. Hasil keyword yang telah diambil dari SongDB akan ditampilkan

di Search Interface.

o. Sequence Diagram Shuffle All

Gambar 4.35 Sequence diagram Shuffle All

Keterangan Gambar 4.35 Sequence Diagram Shuffle All.

1. User dapat melihat lagu pada Library Song Interface dan memilih

pilihan Shuffle All.

2. Shuffle All proses berfungsi untuk memutar semua lagu dengan

urutan acak.

67
p. Sequence Diagram Sort By

Gambar 4.36 Sequence Diagram Sort By

Keterangan Gambar 4.36 Sequence Diagram Sort By.

1. User dapat melihat lagu pada Library Song Interface dan memilih

pilihan Sort By.

2. Sort By proses berfungsi mengurutkan lagu sesuai sort yang ada

dan urutan lagu yang telah diurutkan oleh sort akan ditampilkan di

Library Song Interface.

q. Sequence Diagram Setting

Gambar 4.37 Sequence Diagram Setting

Keterangan Gambar 4.37 Sequence Diagram Setting.

1. User memilih menu setting dan akan ditampilkan Setting Interface.

2. User dapat melakukan setting aplikasi pada Setting Interface.

68
3. Setting proses berfungsi untuk menampilkan setting pada Setting

Interface dan dapat menerapkan setting yang telah dilakukan oleh

user.

r. Sequence Diagram About

Gambar 4.38 Sequence Diagram About

Keterangan Gambar 4.38 Sequence Diagram About.

1. User memilih menu About dan akan ditampilkan About Interface.

2. User dapat melihat About yang berisi tentang informasi pembuat

aplikasi.

3. About proses berfungsi untuk menampilkan informasi About pada

About Interface.

4.2.4 Class Diagram

Class Diagram Menunjukkan aspek statik sistem terutama untuk

mendukung kebutuhan fungsional. Kebutuhan fungsional berarti layanan-layanan

yang harus disediakan sistem ke pemakai.

69
a. Class Diagram Library Song

Gambar 4.39 Class Diagram Library Song

Keterangan Gambar 4.39 Class Diagram Library Song.

1. Library Song terdiri dari 3 class, yaitu Library Song Interface,

Song, dan SongDB.

2. Class SongDB berisi tentang lagu beserta informasi lagu, class

song berfungsi untuk mengambil seluruh lagu yang ada di class

SongDB.

3. Lagu yang diambil dari class SongDB akan ditampilkan di class

Library Song Interface.

b. Class Diagram Library Album

Gambar 4.40 Class Diagram Library Album

Keterangan Gambar 4.40 Class Diagram Library Album.

1. Library Album terdiri dari 3 class, yaitu Library Album Interface,

Album, dan SongDB.

70
2. Class SongDB berisi tentang lagu beserta informasi lagu, class

Album berfungsi untuk mengambil seluruh album yang ada di

class SongDB.

3. Album yang diambil dari class SongDB akan ditampilkan di class

Library Song Interface.

c. Class Diagram Library Artis

Gambar 4.41 Class Diagram Library Artis

Keterangan Gambar 4.41 Class Diagram Library Artis.

1. Library Artis terdiri dari 3 class, yaitu Library Artis Interface,

Artis, dan SongDB.

2. Class SongDB berisi tentang lagu beserta informasi lagu, class

Artis berfungsi untuk mengambil seluruh Artis yang ada di class

SongDB.

3. Artis yang diambil dari class SongDB akan ditampilkan di class

Library Artis Interface.

d. Class Diagram Playlist

Gambar 4.42 Class Diagram Playlist

71
Keterangan Gambar 4.42 Class Diagram Playlist.

1. Playlist terdiri dari 3 class, yaitu Playlist Interface, Playlist, dan

SongDB.

2. Class SongDB berisi tentang lagu beserta informasi lagu, class

Playlist berfungsi untuk mengambil seluruh lagu yang ada di class

SongDB.

3. Lagu yang diambil dari class SongDB akan ditampilkan di class

Playlist Interface.

e. Class Diagram Playing Queue

Gambar 4.43 Class Diagram Playing Queue

Keterangan Gambar 4.43 Class Diagram Playing Queue.

1. Playing Queue terdiri dari 3 class, yaitu Palying Queue Interface,

Song, dan SongDB.

2. Class SongDB berisi tentang lagu beserta informasi lagu, class

Song berfungsi untuk mengambil seluruh lagu yang ada di class

SongDB.

3. Lagu yang diambil dari class SongDB akan ditampilkan di class

Playing Queue Interface.

72
f. Class Diagram Lyrics

Gambar 4.44 Class Diagram Lyrics

Keterangan Gambar 4.44 Class Diagram Lyrics.

1. Lyrics terdiri dari 3 class, yaitu Lyrics Interface, Lyrics, dan

LyricsDB.

2. Class LyricsDB berisi tentang lirik beserta informasi lirik, class

Lyrics berfungsi untuk mengambil seluruh lirik yang ada di class

LyricsDB.

3. Lirik yang diambil dari class LyricsDB akan ditampilkan di class

Lyrics Interface.

g. Class Diagram Scraping Lyrics

Gambar 4.45 Class Diagram Scraping Lyrics

Keterangan Gambar 4.45 Class Diagram Scraping Lyrics.

1. Scraping Lyrics terdiri dari 3 class, yaitu Lyrics Interface, Scraping

Lyrics, dan LyricsDB.

73
2. Class LyricsDB berisi tentang lirik beserta informasi lirik, class

Lyrics berfungsi mencocokkan informasi lirik dan mengambil

seluruh lirik yang ada di class LyricsDB.

3. Lirik yang diambil dari class LyricsDB akan ditampilkan di class

Lyrics Interface.

h. Class Diagram Player

Gambar 4.46 Class Diagram Player

Keterangan Gambar 4.46 Class Diagram Player.

1. Player terdiri dari 7 class, yaitu Player Interface, Shuffle Song,

Pause Song, Previous Song, repeat Song, Playing Song dan Next

Song.

2. Class Player Interface berfungsi untuk menampilkan nama lagu,

nama artis, duration state berserta tombol – tombol perintah.

74
3. Tombol perintah yang ada di class Player Interface akan

memanggil class dari tombol tersebut. Tombol Play akan

memanggil class Playing Song, tombol Pause akan memanggil

class Pause Song, tombol Previous akan memanggil class Previous

Song, tombol Next akan memanggil class Next Song, tombol

Repeat akan memanggil class Repeat Song, dan tombol Shuffle

akan memanggil class Shuffle.

i. Class Diagram Search

Gambar 4.47 Class Diagram Search

Keterangan Gambar 4.47 Class Diagram Search.

1. Search terdiri dari 3 class, yaitu Search Interface, Search, dan

SongDB.

2. Class SongDB berisi tentang lagu beserta informasi lagu, class

Search berfungsi untuk mengambil lagu yang dicari dari class

SongDB.

3. Lagu yang diambil dari class SongDB akan ditampilkan di class

Seacrh Interface.

75
j. Class Diagram Shuffle All

Gambar 4.48 Class Diagram Shuffle All

Keterangan Gambar 4.48 Class Diagram Shuffle All.

1. Shuffle All terdiri dari 3 class, yaitu Library Song Interface,

Shuffle All, dan SongDB.

2. Class SongDB berisi tentang lagu beserta informasi lagu, class

Shuffle All berfungsi untuk mengacak seluruh lagu yang ada di

class SongDB.

3. Pada class Library Song Interface terdapat tombol perintah Shuffle

All. Tombol perintah Shuffle All akan memanggil class Shuffle

All.

k. Class Diagram Sort By

Gambar 4.49 Class Diagram Sort By

Keterangan Gambar 4.49 Class Diagram Sort By.

1. Sort By terdiri dari 3 class, yaitu Library Song Interface, Sort, dan

SongDB.

76
2. Class SongDB berisi tentang lagu beserta informasi lagu, class Sort

berfungsi untuk mengurutkan seluruh lagu yang ada di class

SongDB.

3. Lagu yang telah diurutkan dari class SongDB akan ditampilkan di

class Library Song Interface.

l. Class Diagram Setting

Gambar 4.50 Class Diagram Setting

Keterangan Gambar 4.50 Class Diagram Setting.

1. Setting terdiri dari 2 class, yaitu Setting Interface, dan Setting.

2. Class Setting Interface akan memanggil class Setting pada saat

menampilkan setting dan mengaktifkan setting.

m. Class Diagram About

Gambar 4.51 Class Diagram About

Keterangan Gambar 4.51 Class Diagram About.

1. About terdiri dari 2 class, yaitu About Interface, dan About.

2. Class About Interface akan memanggil class Setting pada saat

menampilkan about.

77
4.2.5 Struktur Navigasi

Pada tahapan ini penulis memberikan gambaran bagaimana bentuk

aplikasi ini dalam bentuk struktur menu navigasi.

Gambar 4.52 Struktur Navigasi Aplikasi Pemutar Musik

Keterangan Gambar 4.52 Struktur Navigasi:

1. Pada tampilan Menu terdapat 7(tujuh) button menu yaitu : Library,

Playlist, Playing Queue, Now Playing, Lyrics, Setting, About.

2. Pada saat pengguna memilih menu Library maka akan ditampilkan Song

yang berupa daftar lagu. Jika memilih Album akan ditampilkan daftar

album, jika pengguna ingin melihat artis maka pilih Artis pada menu

Library.

3. Jika pengguna memilih menu Playlist maka akan ditampilkan playlist atau

daftar putar, pengguna juga dapat membuat daftar putar sendiri yang

terdiri dari kumpulan lagu yang disuka.

78
4. Jika pengguna ingin melihat lagu apa saja yang telah diputar dapat

memilih menu Playing Queue.

5. Jika pengguna memilih menu Now Playing akan ditampilkan player

pemutar musik. Pengguna juga dapat memilih Previous untuk memutar

lagu sebelumnya, Shuffle untuk mengacak lagu, Pause untuk

menghentikan lagu, Play untuk memutar lagu atau melanjutkan lagu yang

telah ter-pause, Repeat untuk mengulang daftar lagu yang diputar, Next

untuk memutar lagu berikutnya.

6. Jika pengguna ingin melihat lirik lagu yang sedang diputar dapat memilih

menu Lyrics.

7. Jika pengguna ingin melakukan setting pada aplikasi dapat memilih

Setting

8. Menu About menampilkan informasi pembuat aplikasi.

4.2.6 Perancangan Desain Interface

Perancangan desain interface adalah bagian yang penting dalam aplikasi,

karena yang pertama kali di lihat ketika aplikasi di jalankan adalah tampilan

antarmuka (interface) aplikasi.

1. Rancangan Halaman Menu

Pada Halaman Menu menampilkan pilihan Library untuk menampilkan

halaman library, Playlist untuk menampilkan halaman Playlist, Playing Queue

untuk menampilkan halaman Playing Queue, Now Playing untuk menampilkan

halaman Player, Lyrics untuk menampilkan Halaman Lyrics, Setting Untuk

Menampilkan Halaman Setting, About untuk menampilkan halaman About.

79
Gambar 4.53 Rancangan Halaman Menu

2. Rancangan Halaman Library Song

Pada halaman Libaray Song akan digambarkan mengenai tampilan

rancangan halaman Library Song. Pada halaman Library Song menampilkan

daftar lagu yang ada. Halaman Library Song berguna untuk memutar lagu dengan

memilih lagu.

Gambar 4.54 Rancangan Halaman Library Song

80
3. Rancangan Halaman Library Album

Pada halaman Library Album akan digambarkan mengenai tampilan

rancangan halaman Library Album. Pada halaman Library Album menampilkan

daftar Album dari lagu yang ada. Tata letak album berupa grid yang berurutan

sesuai dari jumlah album yang ada. Setiap grid album menampilkan nama album

dan nama artis.

Gambar 4.55 Rancangan Halaman Library Album

4. Rancangan Halaman Library Artis

Pada halaman Library Artis akan digambarkan mengenai tampilan

rancangan halaman Library Artis. Pada halaman Library Artis menampilkan

daftar Artis dari lagu yang ada. Tata letak artis berupa grid yang berurutan sesuai

dari jumlah artis yang ada. Setiap grid artis menampilkan nama artis, jumlah

album, dan jumlah lagu.

81
Gambar 4.56 Rancangan Halaman Library Artis

5. Rancangan Halaman Playlist

Pada halaman Playlist akan digambarkan mengenai tampilan rancangan

halaman Playlist. Pada halaman Playlist menampilkan daftar putar lagu yang ada

dan dapat membuat playlist sendiri. Tata letak playlist berupa kolom yang

berurutan sesuai dari jumlah playlist yang ada. Setiap kolom playlist

menampilkan nomor playlist, nama playlist dan jumlah lagu.

Gambar 4.57 Rancangan Halaman Playlist

82
6. Rancangan Halaman Playing Queue

Pada halaman Playing Queue akan digambarkan mengenai tampilan

rancangan halaman Playing Queue. Pada halaman Playing Queue menampilkan

daftar lagu yang telah diputar. Tata letak lagu berupa list yang berurutan sesuai

dari jumlah lagu. Setiap list menampilkan nama artis, dan judul lagu.

Gambar 4.58 Rancangan Halaman Playing Queue

7. Rancangan Halaman Lyrics

Pada halaman Lyrics akan digambarkan mengenai tampilan rancangan

halaman Lyrics. Pada halaman Lyrics menampilkan lirik dari lagu yang sedang

diputar. Lirik yang akan ditampilkan berupa teks.

Gambar 4.59 Rancangan Halaman Lyrics

83
8. Rancangan Halaman Player

Pada halaman Player akan digambarkan mengenai tampilan rancangan

halaman Player. Pada halaman player menampilkan gambar album, judul lagu,

dan duration state. Tombol „A‟ untuk memutar lagu secara acak atau shuffle,

untuk mengulangi lagu atau repeat pengguna memilih tombol „B‟. Untuk memutar

lagu dengan memilih tombol „D‟ atau play, ketika lagu dihentikan akan tombol

„D‟ akan berubah menjadi stop. Untuk memutar lagu sebelumnya dengan memilih

tombol „C‟ atau previous, untuk memutar lagu berikutnya memilih tombol „D‟

atau next.

Gambar 4.60 Rancangan Halaman Player

84
9. Rancangan Halaman Search

Pada halaman Search akan digambarkan mengenai tampilan rancangan

halaman Search. Pada halaman Search dapat mencari lagu yang ada dengan

mengetikan kata di Keyword Search dan menampilan hasil pencarian di Search

Result. Hasil pencarian berupa lagu, album, dan artis

Gambar 4.61 Rancangan Halaman Search

10. Rancangan Halaman Setting

Pada halaman Setting akan digambarkan mengenai tampilan rancangan

halaman Setting. Pada halaman Setting menampilkan setting pada aplikasi. Tata

letak setting berupa list yang berurutan sesuai dari jumlah setting yang ada. Setiap

list setting memiliki fungsi yang berbeda-beda.

Gambar 4.62 Rancangan Halaman Setting

85
11. Rancangan Halaman About

Pada halaman About akan digambarkan mengenai tampilan rancangan

halaman About. Pada halaman About menampilkan informasi pembuat aplikasi.

Informasi yang akan ditampilkan berupa teks dan logo.

Gambar 4.63 Rancangan Halaman About

4.3 Analisa Kebutuhan Perangkat Lunak

Dalam pembuatan aplikasi Pemutar Musik ini menggunakan pemrograman

Java Development Kit (JDK) dan Java Runtime Environment (JRE), karena

pemrograman Java Development Kit (JDK) dan Java Runtime Environment (JRE)

adalah pemrograman perancangan aplikasi berbasis Android. Untuk perancangan

aplikasi Pemutar Musik, maka di butuhkan beberapa software untuk membuat

aplikasi tersebut, yaitu :

1. Sistem Operasi

Untuk penggunaan sistem operasi dapat menggunakan Windows Xp,

Wimdows Vista (32-64 bit), Windows 7 atau 8 (32-64 bit).

86
2. Sofware Program

Dalam hal ini menggunakan Android Studio untuk membuat listing

aplikasi dengan menggunakan bahasa pemrograman java dan XML.

3. Software Grafis

Software yang di gunakan adalah Paint, Adobe Photoshop, dan Sniping

Tools, di gunakan untuk mengedit logo atau gambar dan mengambil

potongan gambar dari aplikasi yang di capture.

4.3.1 Analisa Kebutuhan Perangkat Keras

Untuk mengimplementasikan Aplikasi Pemutar Musik ke dalam perangkat

keras, maka di butuhkan beberapa perangkat keras, adapun perangkat keras yang

di butuhkan adalah sebagai berikut :

1. Handphone

Handphone yang di gunakan untuk menjalankan program aplikasi

Pemustar Musik adalah handphone yang telah menggunakan Sistem

Operasi Android, dan memiliki spesifikasi minimum seperti berikut ini :

1. Sistem Operasi: Android 4.1 Jelly Bean

2. Prosesor : Dual Core 1Ghz

3. Memori : 4GB ROM (Internal) dan MicroSD upto 32GB (Eksternal)

4. RAM : 512 MB

5. Layar : HVGA Capacitive Touchscreen

6. Konektifitas: Bluetooth, USB, GPS, Wifi, Internet

87
2. Kabel Data Serial Port

Kabel ini di gunakan untuk menghubungkan handphone dengan komputer

untuk mentransfer data.

3. Laptop

Dalam pembuatan aplikasi di butuhkan satu unit Laptop dengan spesifikasi

sebagai berikut :

1. Prosesor : Core i3 CPU 2.30GHz

2. VGA : 1Gb

3. RAM : 2Gb

4. Hardisk : 500Gb

4. Bluetooth

Fungsi dari Bluetooth adalah untuk mengirim aplikasi dari Laptop PC ke

Mobile Device.

88
BAB V

IMPLEMENTASI SISTEM

5.1 Halaman Menu

Gambar 5.1Halaman Menu

Halaman menupadagambar 5.1adalah tampilan menuaplikasi

pemutar musik beserta penampil lirik musik berbasis android. Halaman

menu menampilakn pilihan menu yang memiliki fungsi sebagi berikut :

1. MenuLibrary

Menu ini berfungsi untuk menampilkan halaman Library.

2. Menu Playlist

Menu ini berfungsi untuk menampilkan halaman Playlist

89
3. Menu Playing Queue

Menu ini berfungsi untuk menampilkan halaman Playing Queue

4. Menu Now Playing

Menu ini berfungsi untuk menampilkan halaman Player atau

pemutar musik.

5. Menu Lyrics

Menu ini berfungsi untuk menampilkan halaman Lyrics.

6. Menu Setting

Menu ini berfungsi untuk menampilkan halaman Setting.

7. Menu About

Menu ini berfungsi untuk menampilkan halaman About.

5.2 Halaman Library Song

Gambar 5.2 HalamanLibrary Song

90
Pada halaman Library Song berisikan tentang daftar lagu yang telah

terbaca oleh aplikasi pemutar musik. Tampilan daftar lagu berupa list yang

tersusun perbaris . Jika ingin memutar lagu, pengguna harus memilih lagu

dari daftar lagu yang ada di halaman Library Song.

5.3 Halaman Library Album

Gambar 5.3Halaman Library Album

Pada halaman Library Album berisikan tentang daftar Album dari

lagu. Tampilan daftar album berupa grid yang tersusun secara baris dan

kolom. Jika album dipilih akan menampilkan lagu yang terdapat pada album

tersebut.

91
5.4 Halaman Library Artis

Gambar 5.4Halaman Library Artis

Pada halaman Library Artis berisikan tentang daftar Artis dari lagu.

Tampilan daftar album berupa grid yang tersusun secara baris dan kolom.

Jika artis dipilih akan menampilkan album dan lagu yang terdapat pada artis

tersebut.

5.5 Halaman Playlist

Gambar 5.5Halaman Playlist

92
Pada halaman Playlist berisikan tentang daftar putar lagu.

Tampilan daftar putar lagu berupa list yang tersusun secara per kolom. Jika

playlist dipilih akan menampilkan lagu yang terdapat pada playlist tersebut.

Playlist dapat dibuat sendiri dengan menambahkan lagu ke dalam playlist.

5.6 Halaman Playing Queue

Gambar 5.6Halaman Playing Queue

Pada halaman Playing Queue berisikan tentang daftar lagu yang

telah diputar. Tampilan daftar lagu berupa list yang tersusun sesuai urutan

lagu yang diputar. Untuk memutar lagu pada Playing Queue dengan memilih

lagu yang ada.

93
5.7 Halaman Lyrics

Gambar 5.7Halaman Lyrics

Pada halaman Lyrics menampilkan lirik lagu yang sedang diputar,

tampilan lirik berupa teks.Lirik diambil dari website www.azlyrics.com

dengan teknik scraping lirik.Scraping lirik merupakan teknik untuk mencari

lirik, mengambil lirik dan menampilkan lirik. Scraping lirik menggunakan

library Jsoup untuk mengakses web tanpa melalui browser. Selain untuk

mengakses web tanpa browser Jsoup juga berfungsi untuk membaca semua

elemen HTML, dan mengambil elemen-elemen HTML yang diinginkan.

94
5.8 Halaman Player

Gambar 5.8Halaman Player

Pada halaman Player merupakan interface audio player yang

menampilkan judul lagu yang sedang diputar dan progress bar yang

menampilkan informasi progress waktu pada sebuah lagu, menampilkan

gambar album, beserta tombol – tombol kontrol audio player yang memiliki

fungsi sebagi berikut :

1. Tombol Play

Tombol ini berfungsi untuk memutar lagu, tombol ini berubah

menjadi tombol pause ketika lagu dihentikan, jika lagu tombol pause

ditekan maka lagu akan memutar lagi dan tombol pause berubah

menjadi tombol play.

2. Tombol Previous

95
Tombol ini berfungi untuk memutar lagu sebelumnya.

3. Tombol Next

Tombol ini berfungsi untuk memutar lagu berikutnya.

4. Tombol Shuffle

Tombol ini berfungsi untuk memutar lagu secara acak.

5. Tombol Repeat

Tombol ini berfungsi untuk memutar ulang lagu dari awal jika daftar

lagu telah memutar lagu terakhir.

5.9 Halaman Search

Gambar 5.9Halaman Search

Pada halaman Search berfungsi untuk mencari data yang ada di

Library. Dengan mengetikan kata kunci yang terdapat pada seacrh akan

menampilkan Song, Album, dan Artis dari kata kunci yang diketikan.

96
5.10 Halaman Setting

Gambar 5.10Halaman Setting

Pada halaman Setting berisikan tentang setting pada aplikasi.

Setting Now Playing untuk mengubah tema Player, Setting Dark Theme

untuk mengubah tema menjadi gelap, setting Primary Color untuk

mengubah warna tampilan setting Accent Color untuk mengubah warna

tulisan, setting Start Page untuk mengubah tampilan awal aplikasi, setting

Pause on Detach untuk mengaktifan dan menonaktifkan playback atau

memutar kembali lagu saat headphone dipasang.

97
5.11 Halaman About

Gambar 5.11Halaman About

Pada halaman About ini berisikan tentang nama aplikasi dan

informasi pembuat aplikasi beserta logo UNISBANK.

98
BAB VI

HASIL PENELITIAN DAN PEMBAHASAN

6.1 Hasil Penelitian

Pengujian sistem dilakukan untuk mengetahui fungsi sistem dapat

berfungsi dengan baik di mana sistem dapat di jalankan sesuai dengan proses

perancangan yang sudah dibuat. Berikut merupakan hasil pengujian yang telah di

lakukan :

6.2 Pengujian Sistem Pada Handphone Android

Aplikasi Pemutar Musik ini dapat di jalankan pada Handphone dengan

sistem operasi android. Sebelum mengakses aplikasi Pemutar Musik, disarankan

kepada pengguna untuk mengecek koneksi internet pada Handphone. Karena

apabila tidak ada koneksi internet, maka lirik tidak akan bisa tampil pada aplikasi

dan melakukan pengecekan pada format file lagu, format file lagu yang benar

mempunyai dua id yaitu id artis dan id judul lagu. Jika format file lagu tidak benar

dan tidak memiliki salah satu dari id tersebut, maka lirik tidak akan bisa

ditampilkan. Untuk mengubah file format lagu yang tidak benar harus

ditambahkan, cara menambahkan id dengan mengedit file info, tools edit dapat

menggunakan aplikasi winamp pada desktop.

6.3 Tampilan Menu

Halaman menu pada gambar 6.1 adalah tampilan menu Aplikasi Pemutar

Musik Beserta Penampil Lirik Musik Berbasis Android. Halaman menu

menampilakan pilihan menu yang memiliki fungsi sebagi berikut :

99
1. Menu Library

Menu ini berfungsi untuk menampilkan halaman Library.

2. Menu Playlist

Menu ini berfungsi untuk menampilkan halaman Playlist

3. Menu Playing Queue

Menu ini berfungsi untuk menampilkan halaman Playing Queue

4. Menu Now Playing

Menu ini berfungsi untuk menampilkan halaman Player atau pemutar

musik.

5. Menu Lyrics

Menu ini berfungsi untuk menampilkan halaman Lyrics.

6. Menu Setting

Menu ini berfungsi untuk menampilkan halaman Setting.

7. Menu About

Menu ini berfungsi untuk menampilkan halaman About.

Gambar 6.1 Tampilan Menu

100
Pembahasan :

Berikut adalah listing program dari “MainActivity.java” dalam

menampilan menu, jika menu dipilih akan berpindah ke menu yang dipilih :
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

navigationMap.put(Constants.NAVIGATE_LIBRARY, navigateLibrary);
navigationMap.put(Constants.NAVIGATE_PLAYLIST,
navigatePlaylist);
navigationMap.put(Constants.NAVIGATE_QUEUE, navigateQueue);
navigationMap.put(Constants.NAVIGATE_NOWPLAYING,
navigateNowplaying);
navigationMap.put(Constants.NAVIGATE_ALBUM, navigateAlbum);
navigationMap.put(Constants.NAVIGATE_ARTIST, navigateArtist);

mDrawerLayout = (DrawerLayout)
findViewById(R.id.drawer_layout);
panelLayout = (SlidingUpPanelLayout)
findViewById(R.id.sliding_layout);

navigationView = (NavigationView) findViewById(R.id.nav_view);


View header =
navigationView.inflateHeaderView(R.layout.nav_header);

albumart = (ImageView) header.findViewById(R.id.album_art);


songtitle = (TextView) header.findViewById(R.id.song_title);
songartist = (TextView) header.findViewById(R.id.song_artist);
6.4 Tampilan Library Song

Pada halaman Library Song berisikan tentang daftar lagu yang telah

terbaca oleh aplikasi pemutar musik. Tampilan daftar lagu berupa list yang

tersusun perbaris . Jika ingin memutar lagu, pengguna harus memilih lagu dari

daftar lagu yang ada di halaman Library Song.

101
Gambar 6.2 Tampilan Library Song

Pembahasan :

Berikut adalah listing program dari “SongListAdapter.java” dalam

menampilan Library Song untuk menampilkan lagu :

Berikut ItemHolder
public ini adalah onCreateViewHolder(ViewGroup
listing program dari “SongListAdapter.java”
viewGroup, int dalam
i)
{
if (isPlaylist)
menampilkan { yang terdiri dari kumpulan lagu :
Library Song
View v =
LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item
_song_playlist, null);
ItemHolder ml = new ItemHolder(v);
return ml;
} else {
View v =
LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item
_song, null);
ItemHolder ml = new ItemHolder(v);
return ml;
}
}

102
6.5 Tampilan Library Album

Pada halaman Library Album berisikan tentang daftar Album dari lagu.

Tampilan daftar album berupa grid yang tersusun secara baris dan kolom. Jika

album dipilih akan menampilkan lagu yang terdapat pada album tersebut.

Gambar 6.3 Tampilan Library Album

Pembahasan :

Berikut adalah listing program dari “AlbumAdapter.java” dalam

menampilan Library Song untuk menampilkan lagu :

public ItemHolder onCreateViewHolder(ViewGroup viewGroup, int i)


{
if (isGrid) {
View v =
LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.ite
m_album_grid, null);
ItemHolder ml = new ItemHolder(v);
return ml;
} else {
View v =
LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.ite
m_album_list, null);
ItemHolder ml = new ItemHolder(v);
return ml;
}}

103
6.6 Tampilan Album Song

Dengan Memilih Album yang terdapat pada Library Album akan

menampilkan lagu yang ada dalam Album tersebut.

Gambar 6.4 Tampilan Album Song

Pembahasan :

Berikut adalah listing program dari “AlbumSongAdapter.java” dalam

menampilan Album Song untuk menampilkan lagu dari album yang dipilh dari

Library Album :
public ItemHolder onCreateViewHolder(ViewGroup viewGroup, int
viewType) {

View v =
LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.ite
m_album_song, null);
ItemHolder ml = new ItemHolder(v);
return ml;

104
6.7 Tampilan Library Artis

Pada halaman Library Artis berisikan tentang daftar Artis dari lagu.

Tampilan daftar album berupa grid yang tersusun secara baris dan kolom. Jika

artis dipilih akan menampilkan album dan lagu yang terdapat pada artis tersebut.

Gambar 6.5 Tampilan Library Artis

Pembahasan :

Berikut adalah listing program dari “ArtisAdapter.java” dalam

menampilan Library Artis untuk menampilkan Artis dari lagu :

public ItemHolder onCreateViewHolder(ViewGroup viewGroup, int i)


{
if (isGrid) {
View v =
LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.ite
m_artist_grid, null);
ItemHolder ml = new ItemHolder(v);
return ml;
} else {
View v =
LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.ite
m_artist, null);
ItemHolder ml = new ItemHolder(v);
return ml;
}
}

105
6.8 Tampilan Artis Album

Dengan Memilih Artis yang terdapat pada Library Artis akan

menampilkan album dan lagu yang ada dalam Artis tersebut.

Gambar 6.6 Tampilan Artis Album

Pembahasan :

Berikut adalah listing program dari “ArtisAlbumAdapter.java” dalam

menampilan Artis Album untuk menampilkan album dari Artis yang dipilih dari

Library Artis :
public ItemHolder onCreateViewHolder(ViewGroup viewGroup, int i)
{
View v =
LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.ite
m_artist_album, null);
ItemHolder ml = new ItemHolder(v);
return ml;
}

106
Berikut adalah listing program dari “ArtisSongAdapter.java” dalam

menampilan Artis Album untuk menampilkan lagu dari Artis yang dipilih dari

Library Artis :

public ItemHolder onCreateViewHolder(ViewGroup viewGroup, int


viewType) {
if (viewType == 0) {
View v0 =
LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.artis
t_detail_albums_header, null);
ItemHolder ml = new ItemHolder(v0);
return ml;
} else {
View v2 =
LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_
artist_song, null);
ItemHolder ml = new ItemHolder(v2);
return ml;
}
}

6.9 Tampilan Playlist

Pada halaman Playlist berisikan tentang daftar putar lagu. Tampilan daftar

putar lagu berupa list yang tersusun secara per kolom. Jika playlist dipilih akan

menampilkan lagu yang terdapat pada playlist tersebut. Playlist dapat dibuat

sendiri dengan menambahkan lagu ke dalam playlist.

Gambar 6.7 Tampilan Playlist

107
Pembahasan :

Berikut adalah listing program dari “PlaylistDeatilActivity.java” dalam

menampilan Playlist untuk menampilkan playlist, jika playlist dipilih akan

menampilkan lagu dari playlist :


super.onCreate(savedInstanceState);
setContentView(R.layout.activity_playlist_detail);

action = getIntent().getAction();

playlistsMap.put(Constants.NAVIGATE_PLAYLIST_LASTADDED,
playlistLastAdded);
playlistsMap.put(Constants.NAVIGATE_PLAYLIST_RECENT,
playlistRecents);
playlistsMap.put(Constants.NAVIGATE_PLAYLIST_TOPTRACKS,
playlistToptracks);
playlistsMap.put(Constants.NAVIGATE_PLAYLIST_USERCREATED,
playlistUsercreated);

recyclerView = (RecyclerView) findViewById(R.id.recyclerview);


blurFrame = (ImageView) findViewById(R.id.blurFrame);
playlistname = (TextView) findViewById(R.id.name);
foreground = findViewById(R.id.foreground);

recyclerView.setLayoutManager(new LinearLayoutManager(this));

setAlbumart();

6.10 Tampilan Playing Queue

Pada halaman Playing Queue berisikan tentang daftar lagu yang telah

diputar. Tampilan daftar lagu berupa list yang tersusun sesuai urutan lagu yang

diputar. Untuk memutar lagu pada Playing Queue dengan memilih lagu yang ada.

108
Gambar 6.8 Tampilan Playing Queue

Pembahasan :

Berikut adalah listing program dari “PlayingQueueAdapter.java” dalam

menampilan Playing Queue untuk menampilkan lagu yang telah diputar:


public ItemHolder onCreateViewHolder(ViewGroup viewGroup, int i)
{
View v =
LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.ite
m_playing_queue, null);
ItemHolder ml = new ItemHolder(v);
return ml;

6.11 Tampilan Lyrics

Pada halaman Lyrics menampilkan lirik lagu yang sedang diputar,

tampilan lirik berupa teks. Lirik diambil dari website www.azlyrics.com dengan

teknik scraping lirik. Scraping lirik merupakan teknik untuk mencari lirik,

mengambil lirik dan menampilkan lirik. Scraping lirik menggunakan library Jsoup

untuk mengakses web tanpa melalui browser. Selain untuk mengakses web tanpa

browser Jsoup juga berfungsi untuk membaca semua elemen HTML, dan

mengambil elemen-elemen HTML yang diinginkan.

109
Gambar 6.9 Tampilan Lyrics

Pembahasan :

Berikut adalah listing program dari “LyricsActivity.java” dalam

menampilan lirik dari lagu yang sedang diputar:


super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lyrics);

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);


setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
action = getIntent().getAction();
getSupportActionBar().setTitle(R.string.lyrics);

Jika informasi lagu yang terdiri dari id song, id artis tidak lengkap atau

tidak ditemukan pada website www.azlyrics.com, maka tidak akan bisa

menampilkan lirik dan muncul pesan “Check Your Input data”. Jika koneksi

internet mati maka akan muncul pesan “Check Your Internet Connection”

Berikut adalah listing program dari “LyricsFragment.java” untuk

menampilkan pesan tersebut :


catch (HttpStatusException e) {
output = "Check your input data";
Log.d("LyricFinder", e.toString());
} catch (Exception e) {
System.err.println("Some error: " + e);
output = "Check your internet connection";
Log.d("LyricFinder", e.toString());
}
110
Teknik yang digunakan untuk pencarian lirik dengan Scraping berikut

listing program dari “LyricsFragment.java” :


private void loadLyrics(){

try {
AsyncTaskRunner runner = new AsyncTaskRunner();
String htmlArtist = Artist.replaceAll("[\\s'\"-]", "")
.replaceAll("&", "and").replaceAll("[^A-Za-z0-9]",
"");
String htmlSong = Song.replaceAll("[\\s'\"-]", "")
.replaceAll("&", "and").replaceAll("[^A-Za-z0-9]",
"");
String url =
"http://www.azlyrics.com/lyrics/"+htmlArtist.toLowerCase()+"/"+html
Song.toLowerCase()+".html";
runner.execute(url);

6.12 Tampilan Player

Pada halaman Player merupakan interface audio player yang menampilkan

judul lagu yang sedang diputar dan progress bar yang menampilkan informasi

progress waktu pada sebuah lagu, menampilkan gambar album, beserta tombol –

tombol kontrol audio player yang memiliki fungsi sebagi berikut :

1. Tombol Play

Tombol ini berfungsi untuk memutar lagu, tombol ini berubah

menjadi tombol pause ketika lagu dihentikan, jika lagu tombol pause

ditekan maka lagu akan memutar lagi dan tombol pause berubah

menjadi tombol play.

2. Tombol Previous

Tombol ini berfungi untuk memutar lagu sebelumnya.

3. Tombol Next

Tombol ini berfungsi untuk memutar lagu berikutnya.

111
4. Tombol Shuffle

Tombol ini berfungsi untuk memutar lagu secara acak.

5. Tombol Repeat

Tombol ini berfungsi untuk memutar ulang lagu dari awal jika daftar

lagu telah memutar lagu terakhir.

Gambar 6.10 Tampilan Player

Pembahasan :

Berikut ini adalah listing program dari “BaseActivity.java” dalam

menampilan lirik dari lagu yang sedang diputar:


public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
if (!TimberUtils.hasEffectsPanel(BaseActivity.this)) {
menu.removeItem(R.id.action_equalizer);
}
ATE.applyMenu(this, getATEKey(), menu);
return true;
}

112
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
super.onBackPressed();
return true;
case R.id.action_settings:
NavigationUtils.navigateToSettings(this);
return true;
case R.id.action_shuffle:
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
MusicPlayer.shuffleAll(BaseActivity.this);
}
}, 80);

return true;
case R.id.action_search:
NavigationUtils.navigateToSearch(this);
return true;
case R.id.action_equalizer:
NavigationUtils.navigateToEqualizer(this);
return true;
6.13 Tampilan Search
}
Pada halaman
return Search berfungsi untuk mencari data
super.onOptionsItemSelected(item); yang ada di Library.
}
Dengan mengetikan kata kunci yang terdapat pada seacrh akan menampilkan

Song, Album, dan Artis dari kata kunci yang diketikan.

113
Gambar 6.11 Tampilan Search

Pembahasan :

Berikut adalah listing program dari “SearchActivity.java” dalam

menampilan hasil pencarian :


public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search);

mImm = (InputMethodManager)
getSystemService(Context.INPUT_METHOD_SERVICE);

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);


setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

recyclerView = (RecyclerView)
findViewById(R.id.recyclerview);
recyclerView.setLayoutManager(new
LinearLayoutManager(this));
adapter = new SearchAdapter(this);
recyclerView.setAdapter(adapter);
}

114
6.14 Tampilan Setting

Pada halaman Setting berisikan tentang setting pada aplikasi. Setting Now

Playing untuk mengubah tema Player, Setting Dark Theme untuk mengubah tema

menjadi gelap, setting Primary Color untuk mengubah warna tampilan setting

Accent Color untuk mengubah warna tulisan, setting Start Page untuk mengubah

tampilan awal aplikasi, setting Pause on Detach untuk mengaktifan dan

menonaktifkan playback atau memutar kembali lagu saat headphone dipasang.

Gambar 6.12 Tampilan Setting

Pembahasan :

Berikut adalah listing program dari “SettingActivity.java” dalam

menampilkan setting :
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);


setSupportActionBar(toolbar);

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

action = getIntent().getAction();

115
6.15 Tampilan About

Pada halaman About ini berisikan tentang nama aplikasi dan informasi

pembuat aplikasi beserta logo UNISBANK.

Gambar 6.13 Tampilan About

Pembahasan :

Berikut adalah listing program dari “AboutActivity.java” dalam

menampilkan about :
setContentView(R.layout.activity_about);

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);


setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
action = getIntent().getAction();
getSupportActionBar().setTitle(R.string.about);

116
BAB VII

PENUTUP

Sebagai penutup dari skripsi yang telah dibuat, pada bab VII berisi tentang

kesimpulan dan saran yang di buat berdasarkan dari penjelasan yang telah di

uraikan pada bab-bab sebelumnya mengenai Aplikasi Pemutar Musik Beserta

Penampil Lirik Musik berbasis Android. Semoga dengan adanya kesimpulan dan

saran akan dapat bermanfaat bagi pengguna program pemutar musik dengan

maksimal.

Berdasarkan penelitian dan pembahasan untuk mencari alternatif

pemecahan masalah yang telah dibahas pada bab-bab sebelumnya, maka dapat

mengambil kesimpulan seperti di bawah ini :

7.1 Kesimpulan

Dari hasil pengujian dapat di simpulkan beberapa hal sebagai berikut :

1. Aplikasi Pemutar Musik dapat menampilkan lirik lagu yang sedang

diputar. Lirik diambil dari website www.azlyrics.com. Scraping lirik

merupakan teknik untuk mencari lirik, mengambil lirik dan menampilkan

lirik. Scraping lirik menggunakan library Jsoup untuk mengakses web

tanpa melalui browser. Selain untuk mengakses web tanpa browser Jsoup

juga berfungsi untuk membaca semua elemen HTML, dan mengambil

elemen-elemen HTML yang diinginkan.

2. Aplikasi Pemutar Musik dapat menampilkan data Song, Album, Artis.

3. Aplikasi Pemutar Musik dapat memutar lagu yang ada dan ditampilkan

dalam Player. Aplikasi juga dapat mengacak lagu dengan Shuffle,

117
memutar ulang lagu dengan Repeat, memutar lagu sebelumnya dengan

Previous, memutar lagu berikutnya dengan Next.

4. Aplikasi Pemutar Musik dapat menampilkan Playing Queue.

5. Aplikasi Pemutar Musik dapat memutar acak semua lagu dengan Shuffle

All.

6. Aplikasi Pemutar Musik dapat mengurutkan lagu dengan pilihan yang ada

di Sort By.

7. Aplikasi ini menampilkan setting untuk melakukan Setting pada aplikasi.

7.2 Saran

Adapun saran untuk pengembangan aplikasi Pemutar Musik adalah sebagai

berikut :

1. Melengkapi atau mengganti metode pencarian lirik.

2. Pengembangan aplikasi yang dapat menampilkan lirik dengan format file

lagu yang benar, jika format tidak benar maka tidak akan bisa

menampilkan lirik.

3. Menambahkan fitur-fitur yang berbeda.

118
DAFTAR PUSTAKA

Academia dalam artikel “Modul Programming Android dengan Android Studio

– I” pada https://www.academia.edu/9990291/Modul_Programming_

Android_dengan_Android_Studio_-_I.html. [Di akses pada 17 Desember

2015, Jam 19:20]

Dev Xbata Dalam artikel “Android Life Cycle” pada artikel

http://dev.xbata.com/smartphone/daur-hidup-life-cycles-activity-class-

pada-android.html. [Di akses pada 26 April 2015, Jam 12:40]

Herdi, Hafizh dalam artikel “Belajar Membuat Aplikasi Android Menggunakan

Android Studio” pada http://www.twoh.co/2014/09/belajar-membuat-

aplikasi-android-menggunakan-android-studio.html. [Di akses pada 15

Desember 2015, Jam 21:30]

Hermawan, Julius. 2004. Analisa Desain & Pemrograman Berorientasi Obyek

dengan UML dan Visual Basic.NET, Andi, Yogyakarta.

Hidayat, Hari dalam artikel “Berlatih Membikin Aplikasi Android Memakai

Eclipse Bagian 2” pada http://socmedtech.com/id/memahami-arsitektur-

android-os.html. [Di akses pada 2 Mei 2015, Jam 09:10]

Injan Pamungkas, Bima. 2013. Desain dan Implementasi Pemutar Musik

Berbasis Android. Manajemen Informatika. AMIKOM.

Kusuma,A. 2013. Aplikasi pencarian Apotek 24 jam di Kota Semarang.

Semarang.
Kusuma,R.W. 2013. Aplikasi Location Based Service (LBS) Taman Mini

Indonesia Indah (TMII) Berbasis Android. Universitas Gunadarma.

Lindung,Y.D. 2012. Implementasi Android SDK Dalam Pembuatan Aplikasi

Mobile “Kalkulator Mipa” Untuk Sekolah Menengah Pertama. Teknik

Informatika. AMIKOM.

Megah Perdana, Eric. 2012. Aplikasi Pencari Lirik Lagu pada Audio Player

Berbasis Mobile Platform Android. Teknik Informatika. UKSW.

Meilin, Intan dalam artikel “UML” pada http://dantesquad.blogspot.co.id/

2010/10/uml.html. [Di akses pada 5 Juni 2015, Jam 15:15]

Ows Edb Utexas dalam artikel “Android(SDK)” pada https://ows.edb.utexas.edu

/site/collaborative-bluetooth-edumanet/android-sdk-2.html. [Di akses pada

22 November 2015, Jam 18:35]

Pressman, Roger S. 2011. Software Engineering: A Practitioner's Approach.

McGraw-Hill Higher Education. Amerika.

Sommerville, Ian. 2011. Software Engineering (Rekayasa Perangkat Lunak).

Jakarta: Erlangga.

Sora N dalam artikel “Pengertian Audio Dan Media Audio Secara Lengkap” pada

http://www.pengertianku.net/2014/11/pengertian-audio-dan-media-audio-

secara-lengkap.html. [Di akses pada 20 April 2015, Jam 20:50]

Source Android dalam artikel “Audio” pada https://source.android.com/

devices/audio.html. [Di akses pada 23 April 2015, Jam 10:05]

Turland, M. (2010). Php Architect’s Guide to Web Scraping with PHP.

Introduction-Web Scraping Defined, str, 2.


Wikipedia dalam artikel “Android Studio” pada https://en.wikipedia.org/wiki/

Android_Studio.html. [Di akses pada 15 Desember 2015, Jam 16:30


LAMPIRAN

A. Listing Program XML

1. activity_about.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:layout_gravity="top"
android:elevation="5dp"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

<FrameLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="?attr/actionBarSize"/>

</FrameLayout>

2. activity_lyrics.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:layout_gravity="top"
android:elevation="5dp"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

<FrameLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="?attr/actionBarSize"/>

</FrameLayout>
3. activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">

<include layout="@layout/include_list_viewpager" />

<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:menu="@menu/drawer_view" />

</android.support.v4.widget.DrawerLayout>
4. activity_nowplaying.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
5. activity_playlist_detail.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">

<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:id="@+id/blurFrame"
android:transitionName="transition_album_art"/>

<View
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/foreground"
android:transitionName="transition_foreground"/>

6. activity_search.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:orientation="vertical">

<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:elevation="5dp" />

<android.support.v7.widget.RecyclerView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/recyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fadeScrollbars="true"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />

</LinearLayout>
7. activity_setting.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:layout_gravity="top"
android:elevation="5dp"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

<FrameLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="?attr/actionBarSize"/>

</FrameLayout>
8. album_song_sort_by.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

<item
android:id="@+id/menu_sort_by"
android:showAsAction="never"
android:orderInCategory="50"
android:title="@string/menu_sort_by">
<menu>
<item
android:id="@+id/menu_sort_by_az"
android:title="@string/sort_order_entry_az"/>
<item
android:id="@+id/menu_sort_by_za"
android:title="@string/sort_order_entry_za"/>
<item
android:id="@+id/menu_sort_by_year"
android:title="@string/sort_order_entry_year"/>
<item
android:id="@+id/menu_sort_by_track_number"
android:title="@string/sort_order_entry_track_number"/>
<item
android:id="@+id/menu_sort_by_duration"
android:title="@string/sort_order_entry_duration"/>
</menu>
</item>

</menu>
9. drawer_view.xml
<?xml version="1.0" encoding="utf-8"?>

<menu xmlns:android="http://schemas.android.com/apk/res/android">

<group
android:id="@+id/group1"
android:checkableBehavior="single">
<item
android:id="@+id/nav_library"

android:title="@string/library" />
<item
android:id="@+id/nav_playlists"

android:title="@string/playlists" />
<item
android:id="@+id/nav_queue"

android:title="@string/playing_queue" />
<item
android:id="@+id/nav_nowplaying"
android:checkable="false"
android:title="@string/now_playing" />
<item

android:id="@+id/nav_lyrics"
android:title="@string/lyrics" />

</group>
10. menu_main.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity">

<item android:id="@+id/action_shuffle"
android:title="@string/action_shuffle_all"
android:orderInCategory="10" app:showAsAction="never" />

<item android:id="@+id/action_equalizer"
android:title="@string/action_equalizer"
android:orderInCategory="100" app:showAsAction="never" />

<item android:id="@+id/action_settings"
android:title="@string/action_settings"
android:orderInCategory="101" app:showAsAction="never" />

<item
android:id="@+id/action_search"
android:orderInCategory="1"
android:icon="@drawable/ic_action_search"
app:showAsAction="always"
android:title="@string/search"/>

</menu>
11. menu_playlist.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<item
android:id="@+id/action_new_playlist"
android:orderInCategory="9"
android:title="New playlist"
app:showAsAction="never" />

</menu>
12. menu_search.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<item
android:id="@+id/menu_search"
android:icon="@drawable/ic_action_search"
android:orderInCategory="1"
app:actionViewClass="android.support.v7.widget.SearchView"
app:showAsAction="ifRoom|collapseActionView"
android:title="@string/search"/>

</menu>
B. Listing Program Java

1. AboutActivity.java
package com.player.musiclyrics.activities;
public class AboutActivity extends BaseThemedActivity implements
ColorChooserDialog.ColorCallback, ATEActivityThemeCustomizer {

String action;

@Override
public void onCreate(Bundle savedInstanceState) {

if
(PreferencesUtility.getInstance(this).getTheme().equals("dark"))
setTheme(R.style.AppThemeNormalDark);
else if
(PreferencesUtility.getInstance(this).getTheme().equals("black"))
setTheme(R.style.AppThemeNormalBlack);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_about);

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);


setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
action = getIntent().getAction();
getSupportActionBar().setTitle(R.string.about);

FragmentManager manager = getSupportFragmentManager();


FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.fragment_container, new
AboutFragment()).commit();
}

@Override
public boolean onOptionsItemSelected(final MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
default:
break;
}
return super.onOptionsItemSelected(item);
}
@StyleRes
@Override
public int getActivityTheme() {
return
PreferenceManager.getDefaultSharedPreferences(this).getBoolean("dark_them
e", false) ?
R.style.AppThemeDark : R.style.AppThemeLight;
}

@Override
public void onColorSelection(@NonNull ColorChooserDialog dialog,
@ColorInt int selectedColor) {
final Config config = ATE.config(this, getATEKey());
switch (dialog.getTitle()) {
case R.string.primary_color:
config.primaryColor(selectedColor);
break;
case R.string.accent_color:
config.accentColor(selectedColor);
break;
}
config.commit();
recreate();
}

2. BaseActivity.java
package com.player.musiclyrics.activities;
public class BaseActivity extends ATEActivity implements
ServiceConnection, MusicStateListener {

private final ArrayList<MusicStateListener> mMusicStateListener = new


ArrayList<>();
private MusicPlayer.ServiceToken mToken;
private PlaybackStatus mPlaybackStatus;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

mToken = MusicPlayer.bindToService(this, this);

mPlaybackStatus = new PlaybackStatus(this);

@Override
protected void onStart() {
super.onStart();

final IntentFilter filter = new IntentFilter();


// Play and pause changes
filter.addAction(MusicService.PLAYSTATE_CHANGED);
// Track changes
filter.addAction(MusicService.META_CHANGED);
// Update a list, probably the playlist fragment's
filter.addAction(MusicService.REFRESH);
// If a playlist has changed, notify us
filter.addAction(MusicService.PLAYLIST_CHANGED);
// If there is an error playing a track
filter.addAction(MusicService.TRACK_ERROR);

registerReceiver(mPlaybackStatus, filter);
}

@Override
protected void onStop() {
super.onStop();

@Override
public void onResume() {
super.onResume();
onMetaChanged();
}

@Override
protected void onDestroy() {
super.onDestroy();
// Unbind from the service
if (mToken != null) {
MusicPlayer.unbindFromService(mToken);
mToken = null;
}

try {
unregisterReceiver(mPlaybackStatus);
} catch (final Throwable e) {
}
mMusicStateListener.clear();

public boolean onOptionsItemSelected(MenuItem item) {


switch (item.getItemId()) {
case android.R.id.home:
super.onBackPressed();
return true;
case R.id.action_settings:
NavigationUtils.navigateToSettings(this);
return true;
case R.id.action_shuffle:
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
MusicPlayer.shuffleAll(BaseActivity.this);
}
}, 80);

return true;
case R.id.action_search:
NavigationUtils.navigateToSearch(this);
return true;
case R.id.action_equalizer:
NavigationUtils.navigateToEqualizer(this);
return true;

}
return super.onOptionsItemSelected(item);
}

3. LyricsActivity.java
package com.player.musiclyrics.activities;
public class LyricsActivity extends BaseThemedActivity implements
ColorChooserDialog.ColorCallback, ATEActivityThemeCustomizer {

String action;

@Override
public void onCreate(Bundle savedInstanceState) {

if
(PreferencesUtility.getInstance(this).getTheme().equals("dark"))
setTheme(R.style.AppThemeNormalDark);
else if
(PreferencesUtility.getInstance(this).getTheme().equals("black"))
setTheme(R.style.AppThemeNormalBlack);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lyrics);

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);


setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
action = getIntent().getAction();
getSupportActionBar().setTitle(R.string.lyrics);

FragmentManager manager = getSupportFragmentManager();


FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.fragment_container, new
LyricsFragment()).commit();
}

@Override
public boolean onOptionsItemSelected(final MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
default:
break;
}
return super.onOptionsItemSelected(item);
}

@StyleRes
@Override
public int getActivityTheme() {
return
PreferenceManager.getDefaultSharedPreferences(this).getBoolean("dark_them
e", false) ?
R.style.AppThemeDark : R.style.AppThemeLight;
}

@Override
public void onColorSelection(@NonNull ColorChooserDialog dialog,
@ColorInt int selectedColor) {
final Config config = ATE.config(this, getATEKey());
switch (dialog.getTitle()) {
case R.string.primary_color:
config.primaryColor(selectedColor);
break;
case R.string.accent_color:
config.accentColor(selectedColor);
break;
}
config.commit();
recreate(); }

4. LyricsFragment.java
package com.player.musiclyrics.fragments;

public class LyricsFragment extends Fragment implements


SwipeRefreshLayout.OnRefreshListener{

private SwipeRefreshLayout swipeView;


String output;
String Artist=null;
String Song=null;
TextView lrcView;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup
container, Bundle savedInstanceState) {
View rootView = inflater.inflate(
R.layout.fragment_lyrics, container, false);

swipeView = (SwipeRefreshLayout)
rootView.findViewById(R.id.swipe_view);
swipeView.setOnRefreshListener(this);
swipeView.setColorSchemeColors(R.color.colorAccent,
R.color.colorAccentDarkTheme, R.color.colorAccentDarkDefault);
swipeView.setDistanceToTriggerSync(20);// in dips
swipeView.setSize(SwipeRefreshLayout.DEFAULT);// LARGE also can
be used

Artist = MusicPlayer.getArtistName();
Song = MusicPlayer.getTrackName();
Typeface myTypeface =
Typeface.createFromAsset(getActivity().getAssets(), "materialdesignicons-
webfont.ttf");
lrcView = (TextView) rootView.findViewById(R.id.lrc_view);
lrcView.setTypeface(myTypeface);

swipeView.setRefreshing(true);
swipeView.post(new Runnable() {
@Override
public void run() {
loadLyrics();
swipeView.setRefreshing(false);
}
});

return rootView;
}

private void loadLyrics(){

try {
AsyncTaskRunner runner = new AsyncTaskRunner();
String htmlArtist = Artist.replaceAll("[\\s'\"-]", "")
.replaceAll("&", "and").replaceAll("[^A-Za-z0-9]",
"");
String htmlSong = Song.replaceAll("[\\s'\"-]", "")
.replaceAll("&", "and").replaceAll("[^A-Za-z0-9]",
"");
String url =
"http://www.azlyrics.com/lyrics/"+htmlArtist.toLowerCase()+"/"+htmlSong.t
oLowerCase()+".html";
runner.execute(url);
}catch (Exception e){
getActivity().finish();
Toast.makeText(getActivity(), "Please select song first "+e,
Toast.LENGTH_LONG).show();
//output = "Check your internet connection";
}
}

@Override
protected String doInBackground(String... params) {
String url = params[0];
try {
Document document = Jsoup.connect(url)
.userAgent("Mozilla").get();

document.outputSettings(new
Document.OutputSettings().prettyPrint(false));
document.select("br").append("\\n");
Elements lyrics = document.select("b + br + br + div");
String s = lyrics.html().replaceAll("\\\\n", "\n");
output = Jsoup.clean(s, "", Whitelist.none(), new
Document.OutputSettings().prettyPrint(false));
output = output.replace("\n\n", "\n");
output = output.substring(4);
} catch (HttpStatusException e) {
output = "Check your input data";
Log.d("LyricFinder", e.toString());
} catch (Exception e) {
System.err.println("Some error: " + e);
output = "Check your internet connection";
Log.d("LyricFinder", e.toString());
}

return output;
}

@Override
protected void onPostExecute(String result) {
lrcView.setText(result);
}
@Override
protected void onPreExecute() {
}
@Override
protected void onProgressUpdate(String... text) {
}

}
}

5. MainActivity.java
package com.player.musiclyrics.activities;
public class MainActivity extends BaseActivity implements
ATEActivityThemeCustomizer {

private static MainActivity sMainActivity;


SlidingUpPanelLayout panelLayout;
NavigationView navigationView;
TextView songtitle, songartist;
ImageView albumart;
String action;
Map<String, Runnable> navigationMap = new HashMap<String,
Runnable>();
Handler navDrawerRunnable = new Handler();
Runnable runnable;
Runnable navigateLibrary = new Runnable() {
public void run() {

navigationView.getMenu().findItem(R.id.nav_library).setChecked(true);
Fragment fragment = new MainFragment();
FragmentTransaction transaction =
getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.fragment_container,
fragment).commitAllowingStateLoss();

}
};
Runnable navigateNowplaying = new Runnable() {
Runnable navigateArtist = new Runnable() {
public void run() {
long artistID =
getIntent().getExtras().getLong(Constants.ARTIST_ID);
Fragment fragment =
ArtistDetailFragment.newInstance(artistID, false, null);
FragmentManager fragmentManager =
getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.fragment_container, fragment).commit();
}
};

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home: {
if (isNavigatingMain()) {
mDrawerLayout.openDrawer(GravityCompat.START);
} else super.onBackPressed();
return true;
}
}
return super.onOptionsItemSelected(item);
}

switch (menuItem.getItemId()) {
case R.id.nav_library:
runnable = navigateLibrary;

break;
case R.id.nav_playlists:
runnable = navigatePlaylist;

break;
case R.id.nav_nowplaying:
NavigationUtils.navigateToNowplaying(MainActivity.this,
false);
break;
case R.id.nav_queue:
runnable = navigateQueue;

break;
case R.id.nav_lyrics:
NavigationUtils.navigateToLyrics(MainActivity.this);
break;
case R.id.nav_settings:
NavigationUtils.navigateToSettings(MainActivity.this);
break;
case R.id.nav_about:
NavigationUtils.navigateToAbout(MainActivity.this);

break;
}
public void setDetailsToHeader() {
String name = MusicPlayer.getTrackName();
String artist = MusicPlayer.getArtistName();

if (name != null && artist != null) {


songtitle.setText(name);
songartist.setText(artist);
}

@Override
public void onMetaChanged() {
super.onMetaChanged();
setDetailsToHeader();
}

@Override
public void onResume() {
super.onResume();
sMainActivity = this;
}
}

6. PlaylistDetailActivity.java
package com.player.musiclyrics.activities;
public class PlaylistDetailActivity extends BaseThemedActivity implements
ATEActivityThemeCustomizer {

String action;
long playlistID;
HashMap<String, Runnable> playlistsMap = new HashMap<>();
Runnable playlistLastAdded = new Runnable() {
public void run() {
new loadLastAdded().execute("");
}
};
Runnable playlistRecents = new Runnable() {
@Override
public void run() {
new loadRecentlyPlayed().execute("");

}
};
Runnable playlistToptracks = new Runnable() {
@Override
public void run() {
new loadTopTracks().execute("");
}
};
Runnable playlistUsercreated = new Runnable() {
@Override
public void run() {
new loadUserCreatedPlaylist().execute("");

}
};
private AppCompatActivity mContext = PlaylistDetailActivity.this;
private SongsListAdapter mAdapter;
private RecyclerView recyclerView;
private ImageView blurFrame;
private TextView playlistname;
private View foreground;

@TargetApi(21)
@Override
public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_playlist_detail);

action = getIntent().getAction();

playlistsMap.put(Constants.NAVIGATE_PLAYLIST_LASTADDED,
playlistLastAdded);
playlistsMap.put(Constants.NAVIGATE_PLAYLIST_RECENT,
playlistRecents);
playlistsMap.put(Constants.NAVIGATE_PLAYLIST_TOPTRACKS,
playlistToptracks);
playlistsMap.put(Constants.NAVIGATE_PLAYLIST_USERCREATED,
playlistUsercreated);

recyclerView = (RecyclerView) findViewById(R.id.recyclerview);


blurFrame = (ImageView) findViewById(R.id.blurFrame);
playlistname = (TextView) findViewById(R.id.name);
foreground = findViewById(R.id.foreground);

recyclerView.setLayoutManager(new LinearLayoutManager(this));

setAlbumart();

if (MusiclyricsUtils.isLollipop() &&
PreferencesUtility.getInstance(this).getAnimations()) {
getWindow().getEnterTransition().addListener(new
EnterTransitionListener());
} else {
setUpSongs();
}

7. SearchActivity.java
package com.player.musiclyrics.activities;
public class SearchActivity extends BaseThemedActivity implements
SearchView.OnQueryTextListener, View.OnTouchListener {

private SearchView mSearchView;


private InputMethodManager mImm;
private String queryString;
private SearchAdapter adapter;
private RecyclerView recyclerView;

private List searchResults = Collections.emptyList();

@Override
public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search);

mImm = (InputMethodManager)
getSystemService(Context.INPUT_METHOD_SERVICE);

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);


setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

recyclerView = (RecyclerView) findViewById(R.id.recyclerview);


recyclerView.setLayoutManager(new LinearLayoutManager(this));
adapter = new SearchAdapter(this);
recyclerView.setAdapter(adapter);
}

@Override
public boolean onCreateOptionsMenu(final Menu menu) {

getMenuInflater().inflate(R.menu.menu_search, menu);

mSearchView = (SearchView)
MenuItemCompat.getActionView(menu.findItem(R.id.menu_search));

mSearchView.setOnQueryTextListener(this);
mSearchView.setQueryHint(getString(R.string.search_library));

mSearchView.setIconifiedByDefault(false);
mSearchView.setIconified(false);

MenuItemCompat.setOnActionExpandListener(menu.findItem(R.id.menu_search),
new MenuItemCompat.OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
return true;
}

@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
finish();
return false;
}
});
menu.findItem(R.id.menu_search).expandActionView();
return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(final MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
default:
break;
}
return super.onOptionsItemSelected(item);
}

8. SettingActivity.java
package com.player.musiclyrics.activities;
public class SettingsActivity extends BaseThemedActivity implements
ColorChooserDialog.ColorCallback, ATEActivityThemeCustomizer {

String action;

@Override
public void onCreate(Bundle savedInstanceState) {

if
(PreferencesUtility.getInstance(this).getTheme().equals("dark"))
setTheme(R.style.AppThemeNormalDark);
else if
(PreferencesUtility.getInstance(this).getTheme().equals("black"))
setTheme(R.style.AppThemeNormalBlack);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);


setSupportActionBar(toolbar);

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

action = getIntent().getAction();

if (action.equals(Constants.SETTINGS_STYLE_SELECTOR)) {
getSupportActionBar().setTitle(R.string.now_playing);
String what =
getIntent().getExtras().getString(Constants.SETTINGS_STYLE_SELECTOR_WHAT)
;
Fragment fragment = StyleSelectorFragment.newInstance(what);
FragmentManager fragmentManager =
getSupportFragmentManager();
fragmentManager.beginTransaction()
.add(R.id.fragment_container, fragment).commit();
} else {
getSupportActionBar().setTitle(R.string.settings);
PreferenceFragment fragment = new SettingsFragment();
android.app.FragmentManager fragmentManager =
getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.fragment_container, fragment).commit();
}

@Override
public boolean onOptionsItemSelected(final MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
default:
break;
}
return super.onOptionsItemSelected(item);
}

@Override
public void onColorSelection(@NonNull ColorChooserDialog dialog,
@ColorInt int selectedColor) {
final Config config = ATE.config(this, getATEKey());
switch (dialog.getTitle()) {
case R.string.primary_color:
config.primaryColor(selectedColor);
break;
case R.string.accent_color:
config.accentColor(selectedColor);
break;
}
config.commit();
recreate();

9. AlbumAdapter.java
public class AlbumAdapter extends
RecyclerView.Adapter<AlbumAdapter.ItemHolder> {

private List<Album> arraylist;


private Activity mContext;
private boolean isGrid;

public AlbumAdapter(Activity context, List<Album> arraylist) {


this.arraylist = arraylist;
this.mContext = context;
this.isGrid =
PreferencesUtility.getInstance(mContext).isAlbumsInGrid();

}
@Override
public ItemHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
if (isGrid) {
View v =
LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_album_g
rid, null);
ItemHolder ml = new ItemHolder(v);
return ml;
} else {
View v =
LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_album_l
ist, null);
ItemHolder ml = new ItemHolder(v);
return ml;
}
}

@Override
public int getItemCount() {
return (null != arraylist ? arraylist.size() : 0);
}

public void updateDataSet(List<Album> arraylist) {


this.arraylist = arraylist;
}

public class ItemHolder extends RecyclerView.ViewHolder implements


View.OnClickListener {
protected TextView title, artist;
protected ImageView albumArt;
protected View footer;

public ItemHolder(View view) {


super(view);
this.title = (TextView) view.findViewById(R.id.album_title);
this.artist = (TextView)
view.findViewById(R.id.album_artist);
this.albumArt = (ImageView)
view.findViewById(R.id.album_art);
this.footer = view.findViewById(R.id.footer);
view.setOnClickListener(this);
}

@Override
public void onClick(View v) {
NavigationUtils.navigateToAlbum(mContext,
arraylist.get(getAdapterPosition()).id,
new Pair<View, String>(albumArt,
"transition_album_art" + getAdapterPosition()));
}
10. AlbumSongAdapter.java
package com.player.musiclyrics.adapters;
public class AlbumSongsAdapter extends
RecyclerView.Adapter<AlbumSongsAdapter.ItemHolder> {

private List<Song> arraylist;


private Activity mContext;
private long albumID;
private long[] songIDs;

public AlbumSongsAdapter(Activity context, List<Song> arraylist, long


albumID) {
this.arraylist = arraylist;
this.mContext = context;
this.songIDs = getSongIds();
this.albumID = albumID;
}

@Override
public ItemHolder onCreateViewHolder(ViewGroup viewGroup, int
viewType) {

View v =
LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_album_s
ong, null);
ItemHolder ml = new ItemHolder(v);
return ml;
}

public class ItemHolder extends RecyclerView.ViewHolder implements


View.OnClickListener {
protected TextView title, duration, trackNumber;
protected ImageView menu;

public ItemHolder(View view) {


super(view);
this.title = (TextView) view.findViewById(R.id.song_title);
this.duration = (TextView)
view.findViewById(R.id.song_duration);
this.trackNumber = (TextView)
view.findViewById(R.id.trackNumber);
this.menu = (ImageView) view.findViewById(R.id.popup_menu);
view.setOnClickListener(this);
}

@Override
public void onClick(View v) {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
MusicPlayer.playAll(mContext, songIDs,
getAdapterPosition(), albumID, MusiclyricsUtils.IdType.Album, false);
NavigationUtils.navigateToNowplaying(mContext, true);
}

11. ArtistAdapter.java
package com.player.musiclyrics.adapters;

public class ArtistAdapter extends


RecyclerView.Adapter<ArtistAdapter.ItemHolder> implements
BubbleTextGetter {

private List<Artist> arraylist;


private Activity mContext;
private boolean isGrid;

public ArtistAdapter(Activity context, List<Artist> arraylist) {


this.arraylist = arraylist;
this.mContext = context;
this.isGrid =
PreferencesUtility.getInstance(mContext).isArtistsInGrid();
}
@Override
public ItemHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
if (isGrid) {
View v =
LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_artist_
grid, null);
ItemHolder ml = new ItemHolder(v);
return ml;
} else {
View v =
LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_artist,
null);
ItemHolder ml = new ItemHolder(v);
return ml;
}
}

@Override
public void onBindViewHolder(final ItemHolder itemHolder, int i) {
final Artist localItem = arraylist.get(i);

itemHolder.name.setText(localItem.name);
String albumNmber = MusiclyricsUtils.makeLabel(mContext,
R.plurals.Nalbums, localItem.albumCount);
String songCount = MusiclyricsUtils.makeLabel(mContext,
R.plurals.Nsongs, localItem.songCount);

itemHolder.albums.setText(MusiclyricsUtils.makeCombinedString(mContext,
albumNmber, songCount));
public class ItemHolder extends RecyclerView.ViewHolder implements
View.OnClickListener {
protected TextView name, albums;
protected ImageView artistImage;
protected View footer;

public ItemHolder(View view) {


super(view);
this.name = (TextView) view.findViewById(R.id.artist_name);
this.albums = (TextView)
view.findViewById(R.id.album_song_count);
this.artistImage = (ImageView)
view.findViewById(R.id.artistImage);
this.footer = view.findViewById(R.id.footer);
view.setOnClickListener(this);
}

@Override
public void onClick(View v) {
NavigationUtils.navigateToArtist(mContext,
arraylist.get(getAdapterPosition()).id,
new Pair<View, String>(artistImage,
"transition_artist_art" + getAdapterPosition()));
}

}
}

12. ArtistAlbumAdapter.java
package com.player.musiclyrics.adapters;
public class ArtistAlbumAdapter extends
RecyclerView.Adapter<ArtistAlbumAdapter.ItemHolder> {

private List<Album> arraylist;


private Activity mContext;

public ArtistAlbumAdapter(Activity context, List<Album> arraylist) {


this.arraylist = arraylist;
this.mContext = context;

@Override
public ItemHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v =
LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_artist_
album, null);
ItemHolder ml = new ItemHolder(v);
return ml;
}

@Override
public void onBindViewHolder(ItemHolder itemHolder, int i) {

Album localItem = arraylist.get(i);

itemHolder.title.setText(localItem.title);
String songCount = MusiclyricsUtils.makeLabel(mContext,
R.plurals.Nsongs, localItem.songCount);
itemHolder.details.setText(songCount);

ImageLoader.getInstance().displayImage(MusiclyricsUtils.getAlbumArtUri(lo
calItem.id).toString(), itemHolder.albumArt,
new DisplayImageOptions.Builder().cacheInMemory(true)
.showImageOnFail(R.drawable.ic_empty_music2)
.resetViewBeforeLoading(true)
.build());

if (MusiclyricsUtils.isLollipop())
itemHolder.albumArt.setTransitionName("transition_album_art"
+ i);

@Override
public int getItemCount() {
return (null != arraylist ? arraylist.size() : 0);
}

public class ItemHolder extends RecyclerView.ViewHolder implements


View.OnClickListener {
protected TextView title, details;
protected ImageView albumArt;
protected CardView rootView;

public ItemHolder(View view) {


super(view);
this.rootView = (CardView) view.findViewById(R.id.root_view);
this.title = (TextView) view.findViewById(R.id.album_title);
this.details = (TextView)
view.findViewById(R.id.album_details);
this.albumArt = (ImageView)
view.findViewById(R.id.album_art);
view.setOnClickListener(this);
}

@Override
public void onClick(View v) {
NavigationUtils.navigateToAlbum(mContext,
arraylist.get(getAdapterPosition()).id,
new Pair<View, String>(albumArt,
"transition_album_art" + getAdapterPosition()));
}

}
}

13. ArtistSongAdapter.java
package com.player.musiclyrics.adapters;

public class ArtistSongAdapter extends


RecyclerView.Adapter<ArtistSongAdapter.ItemHolder> {

private List<Song> arraylist;


private Activity mContext;
private long artistID;
private long[] songIDs;

public ArtistSongAdapter(Activity context, List<Song> arraylist, long


artistID) {
this.arraylist = arraylist;
this.mContext = context;
this.artistID = artistID;
this.songIDs = getSongIds();
}

@Override
public ItemHolder onCreateViewHolder(ViewGroup viewGroup, int
viewType) {
if (viewType == 0) {
View v0 =
LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.artist_detai
l_albums_header, null);
ItemHolder ml = new ItemHolder(v0);
return ml;
} else {
View v2 =
LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_artist_
song, null);
ItemHolder ml = new ItemHolder(v2);
return ml;
}
}

public class ItemHolder extends RecyclerView.ViewHolder


implements View.OnClickListener {
protected TextView title, album;
protected ImageView albumArt, menu;
protected RecyclerView albumsRecyclerView;

public ItemHolder(View view) {


super(view);

this.albumsRecyclerView = (RecyclerView)
view.findViewById(R.id.recycler_view_album);

this.title = (TextView) view.findViewById(R.id.song_title);


this.album = (TextView) view.findViewById(R.id.song_album);
this.albumArt = (ImageView) view.findViewById(R.id.albumArt);
this.menu = (ImageView) view.findViewById(R.id.popup_menu);
view.setOnClickListener(this);
}
@Override
public class SpacesItemDecoration extends
RecyclerView.ItemDecoration {
private int space;

public SpacesItemDecoration(int space) {


this.space = space;
}

@Override
public void getItemOffsets(Rect outRect, View view,
RecyclerView parent,
RecyclerView.State state) {

//the padding from left


outRect.left = space;
}
}
}

14. PlayingQueueAdapter.java
package com.player.musiclyrics.adapters;
public class PlayingQueueAdapter extends
RecyclerView.Adapter<PlayingQueueAdapter.ItemHolder> {

public int currentlyPlayingPosition;


private List<Song> arraylist;
private Activity mContext;
private String ateKey;

public PlayingQueueAdapter(Activity context, List<Song> arraylist) {


this.arraylist = arraylist;
this.mContext = context;
this.currentlyPlayingPosition = MusicPlayer.getQueuePosition();
this.ateKey = Helpers.getATEKey(context);
}

@Override
public ItemHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v =
LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_playing
_queue, null);
ItemHolder ml = new ItemHolder(v);
return ml;
}
@Override
public int getItemCount() {
return (null != arraylist ? arraylist.size() : 0);
}

public long[] getSongIds() {


long[] ret = new long[getItemCount()];
for (int i = 0; i < getItemCount(); i++) {
ret[i] = arraylist.get(i).id;
}

return ret;
}

public Song getSongAt(int i) {


return arraylist.get(i);
}

public void addSongTo(int i, Song song) {


arraylist.add(i, song);
}

public void removeSongAt(int i) {


arraylist.remove(i);
}

public class ItemHolder extends RecyclerView.ViewHolder implements


View.OnClickListener {
protected TextView title, artist;
protected ImageView albumArt, reorder, menu;
private MusicVisualizer visualizer;

public ItemHolder(View view) {


super(view);
this.title = (TextView) view.findViewById(R.id.song_title);
this.artist = (TextView) view.findViewById(R.id.song_artist);
this.albumArt = (ImageView) view.findViewById(R.id.albumArt);
this.menu = (ImageView) view.findViewById(R.id.popup_menu);
this.reorder = (ImageView) view.findViewById(R.id.reorder);
visualizer = (MusicVisualizer)
view.findViewById(R.id.visualizer);
view.setOnClickListener(this);
}

@Override
public void onClick(View v) {
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
MusicPlayer.setQueuePosition(getAdapterPosition());
Handler handler1 = new Handler();
handler1.postDelayed(new Runnable() {
@Override
public void run() {
notifyItemChanged(currentlyPlayingPosition);
notifyItemChanged(getAdapterPosition());
}

15. SongListAdapter.java
package com.player.musiclyrics.adapters;
public class SongsListAdapter extends
RecyclerView.Adapter<SongsListAdapter.ItemHolder> implements
BubbleTextGetter {

public int currentlyPlayingPosition;


private List<Song> arraylist;
private AppCompatActivity mContext;
private long[] songIDs;
private boolean isPlaylist;
private int lastPosition = -1;
private String ateKey;

public SongsListAdapter(AppCompatActivity context, List<Song>


arraylist, boolean isPlaylistSong) {
this.arraylist = arraylist;
this.mContext = context;
this.isPlaylist = isPlaylistSong;
this.songIDs = getSongIds();
this.ateKey = Helpers.getATEKey(context);
}

@Override
public ItemHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
if (isPlaylist) {
View v =
LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_song_pl
aylist, null);
ItemHolder ml = new ItemHolder(v);
return ml;
} else {
View v =
LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_song,
null);
ItemHolder ml = new ItemHolder(v);
return ml;
}
}
public class ItemHolder extends RecyclerView.ViewHolder implements
View.OnClickListener {
protected TextView title, artist;
protected ImageView albumArt, popupMenu;
private MusicVisualizer visualizer;

public ItemHolder(View view) {


super(view);
this.title = (TextView) view.findViewById(R.id.song_title);
this.artist = (TextView) view.findViewById(R.id.song_artist);
this.albumArt = (ImageView) view.findViewById(R.id.albumArt);
this.popupMenu = (ImageView)
view.findViewById(R.id.popup_menu);
visualizer = (MusicVisualizer)
view.findViewById(R.id.visualizer);
view.setOnClickListener(this);
}

@Override
public void onClick(View v) {
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
MusicPlayer.playAll(mContext, songIDs,
getAdapterPosition(), -1, MusiclyricsUtils.IdType.NA, false);
Handler handler1 = new Handler();
handler1.postDelayed(new Runnable() {
@Override
public void run() {
notifyItemChanged(currentlyPlayingPosition);
notifyItemChanged(getAdapterPosition());
}

16. MusicPlayer.java
package com.player.musiclyrics;
public class MusicPlayer {

private static final WeakHashMap<Context, ServiceBinder>


mConnectionMap;
private static final long[] sEmptyList;
public static IMusiclyricsService mService = null;
private static ContentValues[] mContentValuesCache = null;

static {
mConnectionMap = new WeakHashMap<Context, ServiceBinder>();
sEmptyList = new long[0];
}

public static void asyncNext(final Context context) {


final Intent previous = new Intent(context, MusicService.class);
previous.setAction(MusicService.NEXT_ACTION);
context.startService(previous);
}

public static void previous(final Context context, final boolean


force) {
final Intent previous = new Intent(context, MusicService.class);
if (force) {
previous.setAction(MusicService.PREVIOUS_FORCE_ACTION);
} else {
previous.setAction(MusicService.PREVIOUS_ACTION);
}
context.startService(previous);
}

public static void cycleRepeat() {


try {
if (mService != null) {
switch (mService.getRepeatMode()) {
case MusicService.REPEAT_NONE:
mService.setRepeatMode(MusicService.REPEAT_ALL);
break;
case MusicService.REPEAT_ALL:

mService.setRepeatMode(MusicService.REPEAT_CURRENT);
if (mService.getShuffleMode() !=
MusicService.SHUFFLE_NONE) {

mService.setShuffleMode(MusicService.SHUFFLE_NONE);
}
break;
default:
mService.setRepeatMode(MusicService.REPEAT_NONE);
break;
}
}
} catch (final RemoteException ignored) {
}
}
public static void playArtist(final Context context, final long
artistId, int position, boolean shuffle) {
final long[] artistList = getSongListForArtist(context,
artistId);
if (artistList != null) {
playAll(context, artistList, position, artistId,
IdType.Artist, shuffle);
}
}

public static void playAlbum(final Context context, final long


albumId, int position, boolean shuffle) {
final long[] albumList = getSongListForAlbum(context, albumId);
if (albumList != null) {
playAll(context, albumList, position, albumId, IdType.Album,
shuffle);
}
}

public static void playNext(Context context, final long[] list,


final long sourceId, final IdType sourceType) {
if (mService == null) {
return;
}
try {
mService.enqueue(list, MusicService.NEXT, sourceId,
sourceType.mId);
final String message = makeLabel(context,
R.plurals.NNNtrackstoqueue, list.length);
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
} catch (final RemoteException ignored) {
}
}

public static void shuffleAll(final Context context) {


Cursor cursor = SongLoader.makeSongCursor(context, null, null);
final long[] mTrackList =
SongLoader.getSongListForCursor(cursor);
final int position = 0;
if (mTrackList.length == 0 || mService == null) {
return;
}
try {
mService.setShuffleMode(MusicService.SHUFFLE_NORMAL);
final long mCurrentId = mService.getAudioId();
final int mCurrentQueuePosition = getQueuePosition();
if (position != -1 && mCurrentQueuePosition == position
&& mCurrentId == mTrackList[position]) {
final long[] mPlaylist = getQueue();
if (Arrays.equals(mTrackList, mPlaylist)) {
mService.play();
return;
}
}
mService.open(mTrackList, -1, -1, IdType.NA.mId);
mService.play();
cursor.close();
cursor = null;
} catch (final RemoteException ignored) {
}
}

Anda mungkin juga menyukai