简易mp3播放器(SDL)

来源:互联网 发布:js上下移动div 编辑:程序博客网 时间:2024/05/22 09:39

本文是根据http://blog.csdn.net/pennyshe/article/details/6553888修改的,在此声明!

写一个简单的mp3播放器,去掉了界面。有个问题就是不能自动播放下一曲。

 注:需要安装SDL2-2.0.3、SDL2_mixer-2.0.0http://www.libsdl.org/projects/SDL_mixer和smpeghttp://download.csdn.net/detail/zdf511391565/8025611(播放mp3用的)

具体安装方法详见:http://blog.csdn.net/gameboy12615/article/details/5723836

mp3编码器(LAME):http://sourceforge.net/projects/lame/files/lame

  gcc -o mp3SDLplay mp3SDLplay.c -L/usr/lib -lSDL2 -lSDL2_mixer

  ./mp3SDLplay /home/armmlinux/Music/huomiao.mp3 or

./mp3SDLplay /home/armmlinux/Music/*.mp3

 

[cpp] view plaincopy
  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. #include <string.h>  
  4. #include <signal.h>  
  5. #include "SDL2/SDL.h"  
  6. #include "SDL2/SDL_mixer.h"  
  7. char songlist[50][50];  
  8. Mix_Music *music = NULL;  
  9. int sum ,playing;  
  10. int quit;  
  11. int Sdl_init()  
  12. {  
  13.     if( SDL_Init(SDL_INIT_AUDIO)<0){  
  14.         fprintf(stderr,"Couldn't Initialize SDL: %s/n",SDL_GetError());  
  15.             return 0;  
  16.     }  
  17.       
  18. //  int audio_rate = 22050;  
  19.     int audio_rate = 44100;  
  20.     Uint16 audio_format = AUDIO_S16SYS;  
  21. //  Uint16 audio_format = AUDIO_S16;  
  22.     int audio_channels = 2;  
  23.     int audio_buffers = 4096;  
  24. //  int audio_buffers = 1024;  
  25.     int audio_volume = MIX_MAX_VOLUME;  
  26.     char channeltype[][10] = {"","mono","stereo","surround"};  
  27.     if(Mix_OpenAudio(audio_rate, audio_format, audio_channels,audio_buffers)<0){  
  28.         fprintf(stderr,"Couldn't Open Audio: %s/n",SDL_GetError());  
  29.         return 0;  
  30.     }  
  31.     Mix_QuerySpec(&audio_rate,&audio_format,&audio_channels);  
  32.     Mix_VolumeMusic(audio_volume);  
  33.     Mix_SetMusicCMD(getenv("MUSIC_CMD"));  
  34.     fprintf(stdout,"Open Audio at %d Hz,%d bit,%s (%s),%d bytes buffer/n",audio_rate,audio_format& 0xFF ,channeltype[audio_channels],(audio_format&0x1000)?"BE":"LE",audio_buffers);      
  35.     return 1;  
  36. }  
  37. void PlayMusic(int track)  
  38. {  
  39.     if(track<0 || track >=sum){  
  40.         fprintf(stderr,"Input Error/n");  
  41.         return ;  
  42.     }  
  43.     if(Mix_PlayingMusic()){  
  44.         Mix_FadeOutMusic(1000);  
  45.         SDL_Delay(1000);  
  46.     }  
  47.     if(music != NULL)  
  48.         Mix_FreeMusic(music);  
  49.       
  50.     music = NULL;  
  51.     music = Mix_LoadMUS(songlist[track]);  
  52.     if(music == NULL){  
  53.         fprintf(stderr,"Couldn't load %s: %s",songlist[track],SDL_GetError());  
  54.         return ;  
  55.     }  
  56.     if(Mix_FadeInMusic(music,-1,2000) == -1){  
  57.         fprintf(stderr,"Couldn't Play %s: %s",songlist[track],SDL_GetError());  
  58.         return ;  
  59.     }  
  60.     fprintf(stdout,"Now Playing ♪♫♫♪ %s/n",songlist[track]);  
  61.     playing = track;  
  62. }  
  63. void PlayNext()  
  64. {  
  65.     PlayMusic((playing+1)%sum);  
  66. }  
  67. void PlayPrevious()  
  68. {  
  69.     PlayMusic((playing-1+sum)%sum);  
  70. }  
  71. void SetVolume(int vol)  
  72. {     
  73.     if(vol < 0 || vol > MIX_MAX_VOLUME){  
  74.         fprintf(stderr,"Volume Value Error.(0 - %d)/n", MIX_MAX_VOLUME); return ;  
  75.     }  
  76.     Mix_VolumeMusic(vol);  
  77. }  
  78. void PauseMusic()  
  79. {  
  80.     if(Mix_PlayingMusic())  
  81.         Mix_PauseMusic();  
  82. }  
  83. void ResumeMusic()  
  84. {  
  85.     if(Mix_PausedMusic())  
  86.         Mix_ResumeMusic();  
  87.     else if(!Mix_PlayingMusic())  
  88.         PlayMusic(playing);  
  89. }  
  90. void StopMusic()  
  91. {  
  92.     if(Mix_PlayingMusic())  
  93.         Mix_HaltMusic();  
  94. }  
  95. void ListMusic()  
  96. {  
  97.     int i;  
  98.     fprintf(stdout,"***********SONGLIST*************/n");  
  99.     for(i=0;i<sum;i++)  
  100.         fprintf(stdout,"%d: %s/n",i+1,songlist[i]);  
  101.     fprintf(stdout,"********************************/n");  
  102. }  
  103. void PrintCliInfo()  
  104. {  
  105.         fprintf(stdout,"*************HELP***************\n");  
        fprintf(stdout,"      p(pause) c(continue)\n");  
        fprintf(stdout,"      f(previous) n(next)\n");  
        fprintf(stdout,"      l(list) t#(play#)\n");  
        fprintf(stdout,"      s(stop)     v#(volume:0~%d)\n",MIX_MAX_VOLUME);  
        fprintf(stdout,"      h(help) d#(delete#))\n");  
        fprintf(stdout,"      q(quit)\n");  
        fprintf(stdout,"********************************\n");  
  106. }  
  107. void PrintHelpInfo()  
  108. {  
  109.         fprintf(stdout,"Uage:easymp3 [option]... [file]...\n");  
        fprintf(stdout,"[option]\n");  
        fprintf(stdout,"--help\tprintf help and quit!\n"); 
  110. }  
  111. void Control()  
  112. {  
  113.     PlayMusic(playing);  
  114.     char cmd[20];  
  115.     int i;  
  116.     while(!quit){  
  117.         fprintf(stdout,"Enter :");  
  118.         fscanf(stdin,"%s",cmd);  
  119.         switch(*cmd){  
  120.             case 'q':  
  121.                 Mix_HaltMusic();  
  122.                 quit = 1;  
  123.                 break;  
  124.             case 'n':  
  125.                 PlayNext();  
  126.                 break;  
  127.             case 'p':  
  128.                 PauseMusic();  
  129.                 break;  
  130.             case 'c':  
  131.                 ResumeMusic();  
  132.                 break;  
  133.             case 's':  
  134.                 StopMusic();  
  135.                 break;  
  136.             case 'f':  
  137.                 PlayPrevious();  
  138.                 break;  
  139.             case 'h':  
  140.                 PrintCliInfo();  
  141.                 break;  
  142.             case 'd':  
  143.                 for(i=atoi(cmd+1);i<sum;i++)  
  144.                     strcpy(songlist[i-1],songlist[i]);  
  145.                 sum--;  
  146.                 break;  
  147.             case 't':  
  148.                 PlayMusic(atoi(cmd+1)-1);  
  149.                 break;  
  150.             case 'l':  
  151.                 ListMusic();  
  152.                 break;  
  153.             case 'v':  
  154.                 Mix_VolumeMusic(atoi(cmd+1));  
  155.                 break;    
  156.             default:  
  157.                 break;  
  158.         }  
  159.     }  
  160. }  
  161. void FreeSDL()  
  162. {  
  163.     if(Mix_PlayingMusic())  
  164.         Mix_HaltMusic();      
  165.     if( music != NULL){  
  166.         Mix_FreeMusic(music);  
  167.         music = NULL;  
  168.     }  
  169.     Mix_CloseAudio();  
  170.     SDL_Quit();  
  171. }  
  172. int main(int argc, char *argv[])  
  173. {  
  174.     quit = 0;  
  175.     int i;  
  176.     for(i=1; i<argc &&  *argv[i] == '-'; i++ ){  
  177.         if(!strcmp(argv[i],"--help")){  
  178.             PrintHelpInfo();      
  179.             return 0;  
  180.         }  
  181.     }  
  182.     if(i>=argc){  
  183.         PrintHelpInfo();  
  184.         return 0;  
  185.     }  
  186.     if(!Sdl_init()){  
  187.         return 0;  
  188.     }  
  189.     for(sum=0;i<argc;i++,sum++)  
  190.         strcpy(songlist[sum],argv[i]);  
  191.     playing = 0;  
  192.     PrintCliInfo();  
  193.     Control();  
  194.     FreeSDL();  
  195.     return 0;  
  196. }  

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 别的家长动手打自己的孩子怎么办? 一岁3个月宝宝骨龄偏小怎么办 宝宝9个月了越来越粘人怎么办? 孩子突然说话结巴口吃了怎么办啊 很久不说话了不敢说话了怎么办 宝宝2岁了还不会说话怎么办 2岁的宝宝还不会说话怎么办 小宝宝有四个月了母乳不够吃怎么办 一个月的宝宝吐奶厉害怎么办 新生儿吐奶吐一次吐的特别多怎么办 把孩子打了一次现在说话结巴怎么办 宝宝五岁了口吃越来越严重了怎么办 幼儿把自己的舌头扣破皮了怎么办 6岁宝贝烧到39度怎么办 2岁半的宝宝说话结巴怎么办 2周3宝宝不会说话胆小怎么办 宝宝我2岁多了说话有点结巴怎么办 两岁宝宝说话突然结巴了怎么办 两岁3宝宝叫她名字不理人怎么办 九个月的宝宝身高不达标怎么办 3岁宝宝又吐又拉怎么办 宝宝发烧39度怎么办手脚很烫 两岁宝宝吃什么吐什么怎么办 7岁宝宝吃多了吐怎么办 7个月的宝宝大便干燥怎么办 10个月宝宝便秘大便干燥怎么办 一岁半宝宝老是拉糊糊状大便怎么办 外阴部长了一个疙瘩有点痒怎么办 小孩打架被另一个小孩家人告怎么办 德保豆浆机有电但不工作怎么办 刚买的笔记本c盘不足怎么办 qq糖粘在喉咙气管里怎么办 穿上旗袍后感觉后腰处不平整怎么办 机打票给客人给错联怎么办?急 ps修证件照感觉不太立体怎么办 手机百度上下载的文档打不开怎么办 5岁宝宝乘飞机没带证件怎么办 网上订飞机票忘记订儿童票了怎么办 两岁宝宝对牛奶鸡蛋过敏了怎么办 两岁宝宝坐不住好跑怎么办 宝宝两岁多了不愿意坐小马桶怎么办