Sabtu, 07 November 2015

Thread - Music Player


Di post kali ini akan membahas mengenai Thread di dalam sistem operasi. Thread itu bagian dari sebuah proses. Biasanya thread digunakan untuk menjalankan 2 aktivitas dalam waktu yang bersamaan.

Agar lebih jelasnya, ayo membuat program pemutar musik yang bisa dijalankan menggunakan terminal di linux dan berbasis konsol. Jadi nanti programnya ada fitur-fitur play, pause, stop seperti pemutar musik biasanya.

Nah, musik umum filenya kan ber-ekstensi .mp3 maka agar bisa diputar gunakan software "mpg123", jika belum ada silahkan install terlebih dahulu (bisa langsung online "sudo apt-get install mpg123"). Untuk lebih jelasnya lagi langsung ae yoo...

Musik Player mempunyai fitur-fitur :
  • Help      
  • List      
  • Play 
  • Pause        
  • Continue
  • Stop
Dalam program ini nantinya akan ada fungsi thread yang berisi berbagai macam thread (play, pause, dll), user bisa menginputkan perintah yang sesuai dengan thread yang sedang dijalankan.

Selanjutnya membuat fungsi threadnya

Thread 0. Membuat tampilan menu



Thread 1. Menampilkan lagu yang ada di folder playlist


Thread 2. Membuat thread play



Thread 3. Membuat thread pause











Thread 4. Membuat thread continue










Thread 5. Membuat thread stop











dan selanjutnya adalah membuat fungsi main nya (full code)

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

pthread_t tid[8];
char namalg[100];
char lg[100];
int n;

void* PlayAndCount(void *arg)
{
    unsigned long i=0;
    pthread_t id = pthread_self();
    int iter;
    if(pthread_equal(id,tid[0]))
    {
        //menampilkan menu
        system("clear");
        printf("1. Help\n");
        printf("2. List\n");
        printf("3. Play\n");
        printf("4. Pause\n");
        printf("5. Continue\n");
        printf("6. Stop\n");
    }
    else if(pthread_equal(id,tid[1]))
    {
        //menampilkan list lagu
        system("clear");
        chdir("/home/anandi/Desktop/modul3/playlist");
        system("ls|grep .mp3");
       
    }
    else if(pthread_equal(id,tid[2]))
    {
        //play
        system("pkill mpg123");       
        system("clear");
        snprintf(lg, sizeof(lg), "mpg123 %s", namalg);
        system(lg);
       
    }
    else if(pthread_equal(id,tid[3]))
    {
        //pause
        system("clear");
        sleep(n);
        system("pkill -STOP mpg123");
       
    }
    else if(pthread_equal(id,tid[4]))
    {
        //continue
        system("clear");
        sleep(n);
        system("pkill -CONT mpg123");
    }
    else if(pthread_equal(id,tid[5]))
    {
        //stop
        system("clear");
        sleep(n);
        system("pkill mpg123");
    }
    return NULL;
}

int main(void)
{
      while(1)
    {
        char kata[100];
        int err=0;
        scanf("%s", kata);
          
        if(err!=0) printf("\ncant create thread : [%s]", strerror(err));
        else if(strcmp(kata, "Help")==0) err=pthread_create(&(tid[0]), NULL, &PlayAndCount, NULL);
        else if(strcmp(kata, "List")==0) err=pthread_create(&(tid[1]), NULL, &PlayAndCount, NULL);
        else if(strcmp(kata, "Play")==0)
        {
            scanf("%s", namalg);
            err=pthread_create(&(tid[2]), NULL, &PlayAndCount, NULL);
        }
        else if(strcmp(kata, "Pause")==0)
        {
            scanf("%d", &n);
            err=pthread_create(&(tid[3]), NULL, &PlayAndCount, NULL);
        }
        else if(strcmp(kata, "Continue")==0)
        {
            scanf("%d", &n);
            err=pthread_create(&(tid[4]), NULL, &PlayAndCount, NULL);
        }
        else if(strcmp(kata, "Stop")==0)
        {
            scanf("%d", &n);
            err=pthread_create(&(tid[5]), NULL, &PlayAndCount, NULL);
        }
    }

    return 0;   
}
Jalankan di terminal, simpan file menggunakan .c jangan lupa di compile lihat apa yang terjadi.
Yak cukup sekian, cukup susah juga bagi saya wkwk, kurang sekurang kurangnya mohon maaf yang sebesar besarnya
Semoga Bermanfaat :)


Tidak ada komentar:

Posting Komentar