Kamis, 05 November 2015

Your Own Music Player

Sesuai yang telah dijanjikan di post sebelumnya menganai pendahulan thread, post kali ini akan membahas sebuah problem case yang membutuhkan teknik thread dalam penyelesaiannya.

Apabila pada post sebelumnya code bertujuan untuk membuat persegi dan segitiga secara bersama-sama, maka pada post kali ini akan berada pada satu tingkat lebih rumit yakni membuat sebuah music player standard


Oke, nggak akan se-ekstrim itu sampai user interfacenya berbasis desktop. Music player yang akan kita buat menggunakan terminal atau comand prompt.

================================================================
                                 =========PROBLEM CASE===========
================================================================

Music player yang akan dibuat harus mempunyai fitur-fitur berikut :

>>help              (menampilkan fitur)
>>list                (menampilkan file-file musik di dalam folder "playlist")
>>play              (memutar sebuah musik)
>>pause            (mem-pause musik yang sedang dijalankan)
>>continue       (meng-unpause musik yang sedang di-pause)
>>stop              (men-terminate musik player)

================================================================

Dalam kasus ini, yang berbeda dari kasus sebelumnya dan perlu treatment lebih adalah :

- memerlukan input -> fitur music player yang akan ditampilkan membuat user harus memberikan input perintah, tetapi di dalam fungsi thread tidak bisa meminta input, karena itu apabila meminta input dari user harus ada di dalam fungsi main. Selain itu input dibutuhkan juga untuk meminta judul lagu yang akan diputar.

- thread berjalan dipengaruhi suatu kondisi -> ada berbagai macam thread yang dibuat dalam program ini, namun thread yang berjalan haruslah sesuai dengan perintah yang diinputkan oleh user. Menjalankan thread Maka dalam hal ini bisa menggunakan branching if

- menggunakan banyak perintah system -> hal yang tidak dapat kita hindari yakni berinteraksi dengan system, seperti menggunakan system("pkill") untuk mematikan proses,  system("clear") untuk membersihkan layar, system("mpg123") untuk mem-play musik, dan lain-lain.

================================================================

Dengan memperhatikan 3 hal diatas, kita dapat membuat hasil code seperti berikut :

>>thread 1 : help (menampilkan fitur)


>>thread 2 : list (menampilkan daftar musik di folder playlist)


>>thread 3 : play (memutar musik)


>>thread 4 : pause (mem-pause musik)


>>thread 5 : continue (meng-unpause musik)


>>thread 6 : stop (mematikan musik)


>>fungsi main : membuat percabangan untuk memanggil thread


================================================================

Kalau digabungkan menjadi satu :

================================================================

#include <stdio.h>
#include <string.h>
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

pthread_t tid[7];
char lagu[10];
char ads[100];

void* playandcount(void *arg)
{
pthread_t id=pthread_self();
if(pthread_equal(id,tid[1]))
    {
system("clear");
        printf(">>help\n");
printf(">>list\n");
printf(">>play\n");
printf(">>pause\n");
printf(">>continue\n");
printf(">>stop\n");
}
else if(pthread_equal(id,tid[2]))
    {
system("clear");
        chdir ("/home/laily/Documents/MODUL3/soalshift/playlist");
system("ls | grep .mp3");
}
else if(pthread_equal(id,tid[3]))
    {
        system("pkill mpg123");
        system("clear");
        snprintf(ads, sizeof(ads), "mpg123 %s",lagu);
        system(ads);
}
else if(pthread_equal(id, tid[4]))
    {
system("clear");
sleep(3);
system("pkill -STOP mpg123");
}
else if(pthread_equal(id, tid[5]))
    {
system("clear");
sleep(3);
system("pkill -CONT mpg123");
}
else if(pthread_equal(id,tid[6]))
    {
system("clear");
sleep(3);
system("pkill mpg123");
}
return NULL;
}

int main(void)
{
system("clear");
while(1)
{
char comm[10];
int err=0;
scanf("%s",comm);
if (err!=0) printf("\ncan't create thread : [%s]", strerror(err));
else if (strcmp(comm,"help")==0)
            {
                err=pthread_create(&(tid[1]), NULL, &playandcount, NULL);
            }
            else if (strcmp(comm,"list")==0)
            {
                err=pthread_create(&(tid[2]), NULL, &playandcount, NULL);
            }
            else if (strcmp(comm,"play")==0)
            {
                scanf("%s",lagu);
                err=pthread_create(&(tid[3]), NULL, &playandcount, NULL);
            }
            else if (strcmp(comm,"pause")==0)
            {
                err=pthread_create(&(tid[4]), NULL, &playandcount, NULL);
            }
            else if (strcmp(comm,"continue")==0)
            {
                err=pthread_create(&(tid[5]), NULL, &playandcount, NULL);
            }
            else if (strcmp(comm,"stop")==0)
            {
                err=pthread_create(&(tid[6]), NULL, &playandcount, NULL);
            }
            else printf("Wrong Input\n");
}
return 0;
    }


================================================================

Tidak terlalu sulit bukan? Demikian tutorial cara membuat music player standard with thread kali ini, semoga bermanfaat

Tidak ada komentar:

Posting Komentar