mingw +msys
./configure
make
make install
----------------------------------
得到 libmpg123.a
---------------------------------
可看行编译/doc/examples中的代码
特别是mpg123_to_wav.c
关键函数:
mpg123_read( mh, buffer, buffer_size, &done );用于将mp3解码出PCM数据
PCM数据大小为buffer_size(建议大小),实际送入buffer中的数据大小为done字节。
通常buffer_size=done,一般只有解码到尾部时,不够了,就有buffer_size>done。
每调用一次,解码下一段,直到解码完毕,小解码片段为4608字节在44100下约播放26ms 所以通过设置的更大一点,比如:buffer_size=buffer_size*114=4608*114 约播放3s。
---------------------------------
sndfile仅仅用于简单的WAV格式封装(数据为上面解码出的PCM数据,格式头通过mpg123_getformat等已知)
所以可自己实现wav的封装,而不用sndfile。
---------------------------------
对mpg123_to_wav.c简单的扩展应用:
一个完整的mp3解码->PCM数据->低级wavOut*** 播放测试(XP ,win7通过),双缓冲,消息处理。
---------------------------------
mingw下编译:
gcc -c mp3_play.c -Iinclude -Llib -lmpg123 -lwinmm
windres mp3_resource.rc resource.o
gcc mp3_play.o resource.o -Llib -lmpg123 -lwinmm -Wl,-subsystem,windows -o mp3_play.exe
./mp3.play.exe
---------------------------------
得到了win32窗体的集成版mp3播放程序(对于调用动态库的更容易,直接vc下编译即可)。
上面的可执行文件下载mp3_player