Yahoo.. ketemu lagi nih…sekarang kita akan membahas soal
pembuatan music player menggunakan dalam terminal menggunakan bantuan vlc.
Pertama-tama, untuk membuat music player kita membutuhkan bantuan
multi threading. Apa itu Multi Threading?
Ok mari kita bahas Thread terlebih dahulu.
Thread merupakan bagian dari proses yang ada dalam system operasi.
Thread dibagi menjadi dua, Single Threading dan Multi Threading. Single
Threading biasanya digunakan untuk mengendailkan jalannya proses. Sedangkan
Multi Threading merupankan thread yang lebih dari satu berjalan bersamaan,
sehingga kita dapat menjalankan lebih dari satu tugas dalam waktu yang sama.
Kenapa kita butuh Multi Threading?
Dalam music player kita dapat memberikan perintah fungsi
seperti pause atau stop pada saat musik berjalan, nah maka dari itu setidaknya
ada 2 atau lebih tugas yang dijalankan yaitu musik tersebut dan pemberian
perintah.
Mari kita simak kodingan program dibawah ini
#include<stdio.h>
#include<string.h>
#include<pthread.h>
#include<stdlib.h>
#include<unistd.h>
pthread_t tid[4];
int length=0;
char song[1024];
void*
playAndCount(void *arg){ //fungsi yang
dijalankan sebagai thread
unsigned long i=0;
pthread_t id = pthread_self();
if(pthread_equal(id,tid[0])){
sleep(length);
system("pkill vlc");
}
else if(pthread_equal(id,tid[1])){
char cmd[1024];
sprintf(cmd,"cvlc
Playlist/%s",song);
system(cmd);
}
else if(pthread_equal(id,tid[2])){
sleep(length);
system("pkill -STOP vlc");
}
else if(pthread_equal(id,tid[3])){
sleep(length);
system("pkill -CONT vlc");
}
return NULL;
}
int main(void)
{
close(STDERR_FILENO);
int i=0;
int err;
char opt[1024];
int flag=0;
while(1)
{
if(i<=3){
err = pthread_create(&(tid[i]),
NULL, &playAndCount, NULL);
if(err!=0)
printf("\ncan't create
thread : [%s]", strerror(err));
}
printf("input options: ");
scanf("%s",opt);
if(strcmp(opt,"PLAY")==0){
printf("input lagu:
");
scanf("%s",song);
if(flag==1) system("pkill
vlc");
i=1;
flag=1;
}
else
if(strcmp(opt,"PAUSE")==0){
printf("input waktu:
");
scanf("%d",
&length);
i=2;
}
else
if(strcmp(opt,"CONTINUE")==0){
printf("input waktu:
");
scanf("%d",
&length);
i=3;
}
else
if(strcmp(opt,"STOP")==0){
printf("input waktu:
");
scanf("%d",
&length);
i=0;
flag=0;
}
else {
i=4;
if(strcmp(opt,"LIST")==0){
system("ls Playlist | grep .mp3");}
else
if(strcmp(opt,"HELP")==0)
{
printf("=================KEYS================\n");
printf("PLAY : Play inputed music\n");
printf("PAUSE :
Pause music\n");
printf("CONTINUE :
Continue paused music\n");
printf("STOP : Stop music\n");
printf("LIST : Show playlist\n");
printf("EXIT : Exit Player\n");
printf("HELP : Show help keys\n");
}
else
if(strcmp(opt,"EXIT")==0) {
system("pkill
vlc");
break;
}
}
}
pthread_join(tid[0],NULL);
pthread_join(tid[1],NULL);
pthread_join(tid[2],NULL);
pthread_join(tid[3],NULL);
return 0;
}
Di
kodingan diatas kita menggunakan 4 thread + 1 proses utama (main) ini dapat
dilihat dari pendeklarasian :
pthread_t tid[4];
4 thread ini masing masing digunakan untuk pause music, play
music, pause music, dan continue.
fungsi void* playAndCount(void *arg)akan dijalankan
sebagai thread.
Untuk Play music kita menggunakan perintah yaitu system(“cvlc
nama_lagu”); dapat dilihat di thread tid[1].
Untuk Stop music kita menggunakan system("pkill
vlc"); dapat dilihat di thread tid[0]. sleep(length);
yang digunakan di thread ini dan beberapa thread lainnya digunakan untuk waiting
time sebelum kita menstop(tid[0]) atau pause(tid[2]) atau continue(tid[3])
selama length detik, jadi perintah stop akan dijalankan setelah length detik
yang kita inputkan.
Untuk Pause music perintah yang digunakan adalah system("pkill
-STOP vlc"); dalam thread[2].
Untuk Continue music yang telah di pause perintah yang
digunakan adalah system("pkill -CONT vlc"); dalam
thread[3].
Untuk Membuat thread, kita gunakan perintah dibawah
ini
err =
pthread_create(&(tid[i]), NULL, &playAndCount, NULL);
if(err!=0)
printf("\ncan't
create thread : [%s]", strerror(err));
tid[i] adalah thread yang akan dijalankan yang ada
dalam fungsi playAndCount seperti play, pause, continue, dan stop dimana i akan
diisi oleh angka 0 sampai 3 di baris bawahnya tergantung apa yang kita inputkan.
Lagu-lagu yang bisa dijalankan adalah lagu yang ada
dalam folder Playlist di folder yang sama dengan programnya. Untuk melihat lagu
apa saja yang bisa kita putar, dapat menggunakan system("ls
Playlist | grep .mp3"); dimana perintah tersebut akan melist
semua file mp3 yang ada dalam folder Playlist. Perintah ini dapat kita jalankan
dengan mengetik “LIST” ketika program berjalan.
Karena dalam main kita menggunakan while(1) dimana
program itu akan terus berjalan tanpa henti, maka kita perlu perintah untuk
keluar dengan menggunakan perintah break; yang ada
dalam pilihan “EXIT”.
Perintah ptherad_join yang ada setelah while seperti
dibawah ini,
pthread_join(tid[0],NULL);
pthread_join(tid[1],NULL);
pthread_join(tid[2],NULL);
pthread_join(tid[3],NULL);
digunakan untuk menunggu thread lain yang sedang berjalan
agar selesai terlebih dahulu sebelum keluar dari program sehingga tidak terjadi
error.
Demikian post kali ini tentang thread dan pembuatan music
player… Semoga bermanfaat.. sampai jumpa di post lain…
No comments:
Post a Comment