Chinaunix首页 | 论坛 | 博客
  • 博客访问: 39542
  • 博文数量: 12
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 10
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-26 10:44
文章分类
文章存档

2016年(2)

2015年(10)

我的朋友

分类: C/C++

2016-02-25 11:35:44

SDL本身的音频的扩展是通过SDL_Mixer来扩展的.从文档来看.可以支持Wav,MP3,OGG,FAC,MIDI几种常用的音频的格式.

 

SDL_mixer 本身只提供WAV的解码播放功能.其余格式都是封装第三方库来实现的.下面重点播放MP3能力的支持.

 

MP3SDL_mixter LINUX版是播放可以采用两种库来支持.一种是smpeg,另一种是常用的MP3解码库 libmad

 

  网上有人提到用smpeg 库实现MP3播放,但实践发现.smpeg采用C++编程, SDL_mixer.运行中调用失败.因为SDL_mixer 本身用GCC编译,无法调用C++的库.如果把SDL_mixer G++重编译,则意味着C程序无法使用它了.通过分析SDL_mixer 相关代码,发现可以用libmad来进行mp3播放.

   下面是加入libmad 支持方法

首先编译libmad,简单的  ./configure ; make ; make install 即可

然后重新配置SDL_mixerMakefile ,取消默认的smpeg,换成libmad的支持.采用如下语句来生成相应的Makefile.

 

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

 

   然后 make ; make install 即可实现MP3 的播放.

 

  SDL_mixer提供了三个测试程序 playwav ,playmus ,playmidi来演示如何使用SDL_mixer进行播放.

 

使用流程

1.初始化

int sound_init()

{

   #define TMP_FREQ  MIX_DEFAULT_FREQUENCY 

   #define TMP_FORMAT   MIX_DEFAULT_FORMAT  

   #define TMP_CHAN 2

   #define TMP_CHUNK_SIZE 512  

 

  return Mix_OpenAudio(TMP_FREQ,TMP_FORMAT,TMP_CHAN,TMP_CHUNK_SIZE);

}

 

 

2.关闭音频设备

void sound_cleanup()

{

   Mix_CloseAudio();

}

 

3.播放音乐文件

Mix_Music * sound_play(char * filename)

{

  Mix_Music * mix_music;

 

  /* 装入声音文件 */

  if((mix_music  = Mix_LoadMUS(filename)) == NULL)

    {

        fprintf(stderr,"Load %s failure ,%s\n",filename,Mix_GetError());

       return NULL;

    } 

 

   /* 播放*/

   if(Mix_PlayMusic(mix_music,-1) == -1)

    {

            fprintf(stderr,"play %s failure ,%s\n",filename,Mix_GetError());  

             return NULL;

    }

   return Mix_Music;

}

 

其它音频操作

 

Mix_VolumeMusic(audio_volume); //设置音量

 

Mix_FreeMusic(music); //关闭打开音频文件

 

 

阅读(1585) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~