WIN32平台下madplay默认采用WaveOut播放输出,本文实现为其增加Direct Sound输出。在Windows XP,VC++ 6.0测试通过。
(一)优秀的MP3解码器libmad简介
libmad是跨平台的基于命令行的MP3播放解码器,使用定点解码,可用于没有浮点运算的嵌入式系统。
(二)下载及测试
1、从官方网站ftp://ftp.mars.org/pub/mpeg/下载madplay-0.15.2b.tar.gz,libmad-0.15.1b.tar.gz,libid3tag-0.15.1b.tar.gz,还要从ftp://ftp.mars.org/pub/mpeg/extra/下载libz-1.1.4.tar.gz,共四个文件。将四个压缩包保存在同一目录,例如d:/madplay。
2、用WINRAR“解码压到当前目录”方法将四个压缩包解压,在d:/madplay下将有四个文件夹:madplay-0.15.2b,libmad-0.15.1b,libid3tag-0.15.1b,libz-1.1.4。
3、用VC++ 6.0打开D:/madplay/madplay-0.15.2b/msvc++下的madplay工程。修改VC++ 6.0的编译环境:Tools -> Options -> Directories标签 -> Directories框下增加如下两行:
D:/MADPLAY/LIBMAD-0.15.1B/MSVC++
D:/MADPLAY/LIBID3TAG-0.15.1B
点击OK保存设置退出。再为编译连接后的可执行文件指定运行参数:Project -> settings -> 点中左侧madplay -> 右侧Program arguments框内填入你硬盘上保存的一个MP3文件,例如:D:/MP3/test.mp3,单击OK保存设置退出。
按Ctrl+F5编译连接运行,就可以听到播放你选择的MP3歌曲了。
(三)为madplay增加Direct Sound输出
madplay采用WaveOut作为播放输出,用DS输出的优点不再我说了吧。
1、在audio.h中查找到“audio_ctlfunc_t audio_win32;”这一行,在下面增加一行:
audio_ctlfunc_t audio_dsound;
2、在config.h中找到“#define AUDIO_DEFAULT audio_win32”这一行,将这一行注释掉,然后在下面增加一行:
#define AUDIO_DEFAULT audio_dsound
3、在工作区中选择FileView标签,点击madplay files下的Source Files,添加文件aduio_dsound.c
我写的aduio_dsound.c的内容如下,添加了比较详细的注释。
/*
aduio_dsound.c
功能: 用 Direct Sound 为MP3解码器libmad播放输出.兼容 VC++ 6.0 的directx 7.0
接口函数: audio_dsound()
2008.08
*/
/*
libmad解码器头文件
*/
#include "audio.h"
/*
Direct Sound 的头文件和库
*/
#include<dsound.h>
#pragma comment(