基于SDL的mp3播放器

SDL虽然本身提供播放音乐都功能但是不好用,SDL_mixer为SDL提供了快捷的音乐播放功能。但是SDL_mixer本身只能播放wav格式的音乐,并不能播放mp3,为了能完美支持mp3,需要为SDL_mixer提供mp3的解码库,

Mp3的解码库有很多中,可以用smpeg,libmad,用播放音乐的效果上来说本文注重讲解libmad。

首先为SDL_mixer安装libmad解码库,下载好libmad后直接./configure make make install,然后配置SDL_mixer的Makefile文件,要去掉默认的smpeg,换成libmad,可以用如下命令设置

./configure --enable-music-mp3-mad-gpl --enable-music-mp3=no

然后 make make install .

SDL_mixer的libmad解码库就安装成功了。

下面是mp3播放器的源代码

/*
这是一个mp3播放器的源码,是基于SDL图形库,SDL_gfx,SDL_mixer以及libmad解码库,
linux 编译方法 gcc player.c -o player -I/SDL头文件所在的目录 -L/SDL的图形库所在的目录
-lSDL -lSDL_gfx -lSDL_mixer
write by douyuan888 2013-7-5
*/
#include "SDL/SDL.h"
#include "SDL/SDL_mixer.h"
#include "math.h"
#include "string.h"
#include "SDL/SDL_gfxPrimitives.h"
void Init()//初始化音视频
{
if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO)== -1)
{
printf("SDL_INIT fault !\n");
exit(-1);
}
}
SDL_Surface *Creat_Screen(int w,int h)//创建一个屏幕
{
return SDL_SetVideoMode(w ,h , 0 ,SDL_SWSURFACE );
}
void Free_Image(SDL_Surface * image)//释放SDL_Surface所申请的空间
{
SDL_FreeSurface(image);
}
void Open_Audio()//打开音频驱动  设置比特率 和 采样率,
{
int audio_rate = 22050;
Uint16 audio_format = MIX_DEFAULT_FORMAT;
int audio_channel = 2;
int audio_buffer = 1024;
if (Mix_OpenAudio(audio_rate, audio_format, audio_channel, audio_buffer) != 0)
{
fprintf(stderr, "Unable to initialize audio: %s\n", Mix_GetError());
exit(1);
}
}
void Close_Audio()//关闭音频驱动
{
Mix_CloseAudio();
}
Mix_Music * Load_Musci(char *filename)//加载音乐 filename是音乐的绝对路径
//至于支持什么格式与解码库有关系。libmad 几乎支持所有的常见格式
{
Mix_Music *music = NULL;
music = Mix_LoadMUS(filename);
if (music == NULL)
{
fprintf(stderr, "Unable to load mp3 file: %s\n", Mix_GetError());
}
return music ;
}
int Start_Play(Mix_Music * music)//播放音乐
{
if (Mix_PlayMusic(music, 0) == -1)
{
fprintf(stderr, "Unable to play mp3 file: %s\n", Mix_GetError());
return -1;
}
else
return 0 ;
}
void Music_Pause()//暂停音乐
{
Mix_PauseMusic();
}
void Music_Resume()//取消暂停 状态
{
Mix_ResumeMusic();
}
void Halt_Music()//停止
{
Mix_HaltMusic();
}
int Event()//事件循环
{
int flag = 1 ;
SDL_Event event ;
while (flag == 1 )
{
SDL_WaitEvent(&event);
switch(event.type)
{
case SDL_QUIT:
flag = 0;
}
}
}
int main(int argc ,char **argv)
{
Init();
SDL_Surface *screen = NULL ;
Mix_Music * music = NULL ;
screen = Creat_Screen(320,240);//创建一个 320*240的屏幕
boxColor(screen,0, 0, 320, 240, 0xff00ffff);//填充颜色
SDL_UpdateRect(screen , 0 , 0 , 0 , 0 );
Open_Audio();
music = Load_Musci("./test.mp3") ;//在之处可以加载许多中格式的音乐
Start_Play(music);
Event();
Close_Audio();
Free_Image(screen) ;
}

基于SDL的mp3播放器相关推荐

  1. 基于QT实现Mp3播放器(代码部分)

    前言     最近有一个课程实验,利用window上的API接口实现MP3播放器. 突发奇想,在linux下用相关接口做一个MP3播放器.最先的打算是完全使用纯C写的,但后来感觉编写调试实在费劲.于是 ...

  2. 基于QT实现Mp3播放器(理论论述部分)

    前言     最近有一个课程实验,利用window上的API接口实现MP3播放器. 突发奇想,在linux下用相关接口做一个MP3播放器.最先的打算是完全使用纯C写的,但后来感觉编写调试实在费劲.于是 ...

  3. 基于Stm32的MP3播放器设计与实现

    原创博文,转载请注明出处 这是我高级电子技术试验课做的作业,拿来共享一下.项目在安福莱例程基础之上进行的功能完善,里面的部分内容可参考安福莱mp3例程.当然用的板子也是安福莱的板子,因为算起来总共做了 ...

  4. C语言头文件下载迅雷,[C语言] 基于GStreamer编写Mp3播放器

    #include #include //消息处理函数 static gboolean bus_call(GstBus * bus, GstMessage *msg, gpointer data) { ...

  5. 基于QT的mp3播放器设计

    1.首先在ui中画出两个新建项,分别命名为OpenAction和DeleteAction,并拖到头部. 2. 选择转到槽. 3.选择table weight 4.选择转到槽里的double 5.mai ...

  6. 远程WEB控制MP3播放器设计(基于mini2440)

    网上有很多 基于mini2440的MP3播放器设计的资料,多是按键控制,这里博主做了些轻微改动,利用远程WEB来控制MP3播放,具体怎么实现,下面会给出,大家先看看效果: WEB界面: 后台运行: 因 ...

  7. 基于嵌入式ARM的mp3播放器的设计

    一.       设计题目:基于ARM的mp3播放器的设计 二.       课程设计教学目的: 1.了解并掌握系统电路的一般设计方法,具备初步的独立设计能力: 2.掌握Unix/Linux系统原理: ...

  8. SigmaTel使出专利杀手锏,中国MP3播放器产业链均受影响

    作者:李明骏 在不久的将来,任何一家生产MP3播放器的制造商如果要在市场上销售,都可能会因为使用了SigmaTel公司拥有的专利而需要向该公司支付专利使用费.这是笔者在不久前召开的中国集成电路研讨会暨 ...

  9. 最简单的基于FFMPEG+SDL的音频播放器

    ===================================================== 最简单的基于FFmpeg的音频播放器系列文章列表: <最简单的基于FFMPEG+SDL ...

最新文章

  1. MIT Graph实践概述
  2. maven 创建module失败 ,异常Unable to read parent POM
  3. 【Nvivo教程】使用Nvivo构建计算的本体
  4. 中国功率半导体产业销售规模与投资策略研究报告2022版
  5. JS面向对象,创建,继承
  6. LeetCode Algorithm 451. 根据字符出现频率排序
  7. Windows Embedded CE 6.0开发初体验(五)构建CE平台
  8. MVC简单介绍(转)
  9. PG: Setting up streaming log replication (Hot Standby )
  10. python 内置浏览器robobrowser_Python RoboBrowser – 如何从此页面获取内容
  11. leetcode - Anagrams
  12. 优秀的CSS框架---bootstrap
  13. DPDK Release 21.05
  14. 批量修改图幅lisp_【CAD应用技巧】批量自动修改图形文件的程序
  15. Android应用上架国内各大应用市场对应用Logo、应用截图要求整理
  16. vue 多个页面调同一个接口,传不同的参数,使用 Vuex 来实现传不同参数调统一接口
  17. 初窥门径——字典的更好使用方式
  18. PIP更新问题丨You should consider upgrading via the 'python -m pip install —upgrade pip' command.
  19. 定理在数学中的简写形式_高中数学联赛常用定理
  20. 科大讯飞Windows麦克风监听语音唤醒+语音识别demo

热门文章

  1. 远程连接桌面出现内部错误
  2. IP组播---IGMP、MLD、IGMP SSM Mapping、IGMP Snooping详解
  3. 原装LEUZE多光束安全传感器MLD510-R4
  4. 仿掌上英雄联盟云顶之弈 - 微信小程序版
  5. Facebook Home效应,KakaoTalk也要推启动器
  6. ASM中的几个迷魂的概念
  7. 计算机专业放假回家修电脑,放假回家各种修电脑
  8. 产品经理究竟每天在干什么?
  9. perl json encode_json decode_json
  10. visio反向工程使用mysql