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 :
(Saefurrohman, S.Kom, M.Cs) Pembimbing
ii
Februari 2016
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 : 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
Februari 2016
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,
Informasi.
vi
selaku
Dekan
Fakultas
Teknologi
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 beliaubeliau, 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
Sistematika Penulisan. ....................................................
9
1.7
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.5
BAB IV
3.4.1
Arsitektur Android .............................................. 22
3.4.2
Activity Lifecycle Android ................................. 26
3.4.3
Arsitektur Audio Android ................................... 29
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
ANALISA DAN PERANCANGAN SISTEM 4.1
Deskripsi Sistem ............................................................. 42
4.2
Perancangan Sistem............... ......................................... 43
4.3
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
Analisa Kebutuhan Perangkat Lunak......... ..................... 86
ix
4.3.1
BAB V
Analisa Kebutuhan Perangkat Keras ................... 87
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 ......................................................
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
6
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
Analisis
Research and
Meningkatkan
Pengembangan Fun
Development
kemampuan siswa dalam
Lyrics (FL): Media
(R&D)
belajar bahasa Inggris
2
Nova Suparmanto
Pembelajaran
khususnya vocabulary
Bahasa Inggris
melalui lirik lagu
Melalui Lirik Musik Untuk Platform Android 3
4
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
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 methodmethod 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, framework API pada android.media yang
audio
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
Gradle
Apache Ant
Maven-based build dependencies
Yes
No
Build variants and multiple-APK generation
Yes
No
Advanced Android code completion and
Yes
No
Graphical layout editor
Yes
Yes
APK signing and keystore management
Yes
Yes
NDK support
Yes
Yes
Build system
refactoring
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 ini adalah onCreateViewHolder(ViewGroup listing program dari “SongListAdapter.java” public viewGroup, int dalam i) { if (isPlaylist) { yang terdiri dari kumpulan lagu : menampilkan 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);
6.13
return true; case R.id.action_search: NavigationUtils.navigateToSearch(this); return true; case R.id.action_equalizer: NavigationUtils.navigateToEqualizer(this); return true;
Tampilan Search
} Pada halaman Search berfungsi untuk mencari data return 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-classpada-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-membuataplikasi-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-arsitekturandroid-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-audiosecara-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
2.
activity_lyrics.xml
3.
activity_main.xml
4.
activity_nowplaying.xml
5.
activity_playlist_detail.xml
6.
activity_search.xml
android:fitsSystemWindows="true" android:orientation="vertical">
7.
activity_setting.xml
8.
album_song_sort_by.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" > - <menu>
android:title="@string/sort_order_entry_az"/>
9.
drawer_view.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android">
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">
android:title="@string/action_shuffle_all" android:orderInCategory="10" app:showAsAction="never" />
11.
menu_playlist.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto">
12.
menu_search.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto">
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(); } }
BaseActivity.java
2.
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(), "materialdesigniconswebfont.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 private private private private private
AppCompatActivity mContext = PlaylistDetailActivity.this; SongsListAdapter mAdapter; RecyclerView recyclerView; ImageView blurFrame; TextView playlistname; 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();
AlbumAdapter.java
9.
public class AlbumAdapter extends RecyclerView.Adapter { private List arraylist; private Activity mContext; private boolean isGrid; public AlbumAdapter(Activity context, List 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 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(albumArt, "transition_album_art" + getAdapterPosition())); }
10.
AlbumSongAdapter.java
package com.player.musiclyrics.adapters; public class AlbumSongsAdapter extends RecyclerView.Adapter { private private private private
List<Song> arraylist; Activity mContext; long albumID; 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 implements BubbleTextGetter { private List arraylist; private Activity mContext; private boolean isGrid; public ArtistAdapter(Activity context, List 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(artistImage, "transition_artist_art" + getAdapterPosition())); } } }
ArtistAlbumAdapter.java
12.
package com.player.musiclyrics.adapters; public class ArtistAlbumAdapter extends RecyclerView.Adapter { private List arraylist; private Activity mContext; public ArtistAlbumAdapter(Activity context, List 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(albumArt, "transition_album_art" + getAdapterPosition())); } } }
13.
ArtistSongAdapter.java
package com.player.musiclyrics.adapters; public class ArtistSongAdapter extends RecyclerView.Adapter { private private private private
List<Song> arraylist; Activity mContext; long artistID; 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 { 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()); }
MusicPlayer.java
16.
package com.player.musiclyrics; public class MusicPlayer { private static final WeakHashMap mConnectionMap; private static final long[] sEmptyList; public static IMusiclyricsService mService = null; private static ContentValues[] mContentValuesCache = null; static { mConnectionMap = new WeakHashMap(); 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) { } }