본문 바로가기
Programming/C

[C] 간단한 MP3 플레이어 제작

by 기딩 2024. 1. 10.
728x90

로컬 파일에 있는 노래를 재생할 수 있는 간단한 MP3 플레이어를 제작했다.
프로젝트 진행 기간 : 2023.8.4 ~ 8.10

개발 툴 : visual studio 2022

언어 : C

 

기능

1. MP3 라이브러리 (메모장) 조회

2. 플레이리스트 노래 재생

3. 라이브러리 노래 추가

4. 라이브러리 노래 삭제

5. 프로그램 종료

 

실행 결과

라이브러리 노래 추가

 

이를 반복한 후, 라이브러리 조회

 

라이브러리 노래 삭제하기

2번 노래였던 "고백"이 사라지고 3번이었던 "눈"이 2번 트랙이 됨

 

 

프로젝트 폴더에 txt 파일에 라이브러리 반영

플레이리스트에서 원하는 노래 재생

사진으로 확인할 수는 없지만, 컴퓨터에서 해당 노래가 재생되고 있다.

 

 

 

문제점

라이브러리에 노래를 추가할 때, 공백이 들어가면

공백을 기준으로 2개의 노래가 저장된다.

 

소스코드, 실행파일

노래 재생에 필요한 exe 실행 파일 첨부

mplayer-64.zip
7.48MB

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
FILE* pFile;

#define ARRAYSIZE 100
#define SONGNAME_SIZE 25
#define SONGARTIST_SIZE 25
#define TRACK_NUMBER
#define FILE_PATH "mp3_list.txt"

void Show_mp3_library(void);
void mp3_play(void);
void add_song(void);
void delete_song(void);


typedef struct mp3rec
{
    char songname[SONGNAME_SIZE];
    char artist[SONGARTIST_SIZE];
    char track[30];
    int minutes;
    int seconds;
} MP3REC;

MP3REC song_list[ARRAYSIZE];
int songcount = 0;

char name_line[SONGNAME_SIZE + 2];
char artist_line[SONGARTIST_SIZE + 2];
int minutes;
int seconds;

int main(void)
{
    int menuchoice = 0;

    while (menuchoice != 5)
    {
        printf(" ---------------------------------------------\n");
        printf("|             ||MP3 Player||                  |\n");
        printf(" ---------------------------------------------");

        printf("\n1:~ Show the MP3 Library");
        printf("\n2:~ Play an MP3 Song");
        printf("\n3:~ Add Song to the MP3 Library");
        printf("\n4:~ Delete Song in the MP3 Library");
        printf("\n5:~ Quit the Program");

        printf("\n\nEnter Choice From 1-5: ");
        scanf("%d", &menuchoice);

        switch (menuchoice)
        {
        case 1:
            Show_mp3_library();
            break;

        case 2:
            mp3_play();
            break;

        case 3:
            add_song();
            break;

        case 4:
            delete_song();
            break;

        case 5:
            exit(0);
            break;

        default:
            printf("\n[!] Invalid Choice: 1-5 Only Please\n\n");
        }

    };
}


void Show_mp3_library(void)
{
    printf("\n\n Show the MP3 Library\n\n");

    FILE * fp = fopen(FILE_PATH, "r");
    if (fp == NULL) {
        printf("mp3_list를 열 수 없습니다.\n");
    }
    else {
        printf("---------[ Library ]---------\n");
        printf("MUSIC N. ARTIST - SONG \n");
        printf("------------------------------\n");
        char word[ARRAYSIZE];
        int line_count = 0;
        while (fgets(word, ARRAYSIZE, fp) != NULL) {
            line_count++;
            printf("MUSIC %d. %s", line_count, word);
        }
        fclose(fp);
        printf("\n\n\n\n");       
    }
}

void mp3_play(void)
{
    printf("\n\n Play an MP3 Song\n\n");
    
    int song_num;
    char mp3filename[ARRAYSIZE];
    char commandarray[ARRAYSIZE];
    char song1[ARRAYSIZE] = "NewJeans - Hype Boy.mp3";
    char song2[ARRAYSIZE] = "Surl - Cilla.mp3";
    char song3[ARRAYSIZE] = "The Black Skirt - EVERYTHING.mp3";
    char song4[ARRAYSIZE] = "Jaurim - 있지.mp3";
    char song5[ARRAYSIZE] = "Actic Mokeys - 505.mp3";


    printf("---------[ PLAYLIST ]---------\n");
    printf("TRACK 1. NewJeans - Hype Boy\n");
    printf("TRACK 2. Surl - Cilla\n");
    printf("TRACK 3. The Black Skirt - EVERYTHING\n");
    printf("TRACK 4. Jaurim - 있지\n");
    printf("TRACK 5. Actic Mokeys - 505\n\n");

    printf("play song number : ");
    scanf("%d", &song_num);
    if (song_num == 1)  strcpy(mp3filename, song1);
    else if (song_num == 2)  strcpy(mp3filename, song2);
    else if (song_num == 3)  strcpy(mp3filename, song3);
    else if (song_num == 4)  strcpy(mp3filename, song4);
    else if (song_num == 5)  strcpy(mp3filename, song5);
    else {
        printf("[!] Invlid Choice : 1-5 Only please");
    }
    //sprintf(commandarray, "C:\\mplayer\\\"%s\"", mp3filename); //바로 mp3 실행

    sprintf(commandarray, "C:\\mplayer\\mplayer-64\\mplayer.exe \"C:\\mplayer\\%s\"", mp3filename);
    //system("C:\\mplayer\\mplayer-64\\mplayer.exe \"C:\\mplayer\\NewJeans - Hype Boy.mp3\"");

    printf("\nAttempting to Run Command: %s...\n\n", commandarray);
    printf("ılı.lıllılı.ıllı.ılı.lıllılı.ıllı.♪~\n");
    system(commandarray);

    

    int menuchoice;
    printf("\n1: Play other song");
    printf("\n2: Back To Menu");

    printf("\n\nEnter Choice From 1-2: ");
    scanf("%d", &menuchoice);

    switch (menuchoice)
    {
        case 1:
            mp3_play();
            break;
        case 2:
            main();
            break;       
        default:
            printf("\nInvalid Choice: 1-2 Only Please\n");
            int menuchoice;
            printf("\n1: Play other song");
            printf("\n2: Back To Menu");

            printf("\n\nEnter Choice From 1-2: ");
            scanf("%d", &menuchoice);
            break;
    }
  
}

void add_song(void)
{
    printf("\n\n add song to the mp3 library\n\n");
    FILE* fp = fopen(FILE_PATH, "a");
    if (fp == NULL) printf("mp3_list를 열 수 없습니다.\n");
    else {
        char input_artist[ARRAYSIZE];
        char input_song[ARRAYSIZE];
        printf("추가할 가수 : ");
        //scanf("%s",song_list[0].artist);
        scanf("%s", input_artist);

        printf("곡 제목 : ");
        //scanf("%s", song_list[0].)
        scanf("%s", input_song);

        fprintf(fp, "\n%s - %s", input_artist, input_song);
        fclose(fp);
    }
}

void delete_song(void)
{
    printf("\n\n Delete File\n\n");

    int track_number;

    int line_count = 1;
    FILE* fp = fopen(FILE_PATH, "r");
    FILE* tmpfile = fopen("temp.txt", "w");
    if (fp == NULL || tmpfile == NULL) 
        printf("파일을 열 수 없습니다.");

    printf("Please Enter the track number that you wish to delete:");
    scanf("%d", &track_number);

    char word[ARRAYSIZE];
    while (fgets(word, ARRAYSIZE, fp) != NULL) {

        if (line_count == track_number) line_count++;
        else {
            fprintf(tmpfile, "%s", word);
            line_count++;
        }
    }
    fclose(fp);
    fclose(tmpfile);

    int nResult = remove(FILE_PATH);
    if (nResult == 0) printf("원래 파일 삭제 완료\n");
    else printf("다시 확인하십시오.\n");

    rename("temp.txt", "mp3_list.txt");
    printf("%d번 트랙이 삭제되었습니다.\n\n\n", track_number);
}

 

728x90

'Programming > C' 카테고리의 다른 글

[C언어] 17. 동적메모리와 연결리스트  (0) 2023.10.19
16. 전처리 및 다중 소스 파일  (1) 2023.10.19
15. 스트림과 파일 입출력  (1) 2023.10.19
13. 구조체  (0) 2023.10.19
12. 문자열  (0) 2023.10.19