[C/C++] 自己的mp3播放器【带频谱】

[C/C++] 自己的mp3播放器【带频谱】_第1张图片
开发了有一段时间了,说来还真是很长时间了。有兴趣可以参考我在Codeproject上发布的三篇文章。
http://www.codeproject.com/KB/audio-video/DSound_Spectrum.aspx
http://www.codeproject.com/KB/audio-video/DirectSound_Spectrum2.aspx
http://www.codeproject.com/KB/audio-video/DSound_Spectrum3.aspx
以上三篇文章或多或少都存在一些问题,其中最普遍的问题是频谱显示的并不是实时(real-time)的。但截图显示的这个版本是准确的了(我认为)。源码还在整理中,整理完毕后即发布到Codeproject上。

实现思路:
1、MP3解码由libmad开源解码库完成;
2、两个线程:播放线程,频谱线程,其中频谱线程使用的数据来自播放线程;
3、播放线程总是通过解码器获取4608字节数据,为什么要这个数字?这个是看了网上的相关文档和自己不断的测试得到的,这个数据可以有效的降低因为声卡回放引入的延时,少于这个数字将播放不正常;
4、频谱线程根据当前播放的时间获取到正在播放的PCM数据,使用FFT计算后绘图显示。

版本历史:
2009-02-08:支持拖拽,mp3,wma,ogg,wav支持,支持拖拽音频文件到exe启动播放 
2009-02-09:BUG修复:在单CPU上出现线程死锁,在双CPU上未出现
2009-03-27:支持APE格式
2009-03-30:支持FLAC格式 
2009-05-04:添加暂停、停止操作,结束一直以来朋友们提出没有暂停和停止操作的历史
2009-05-05:为播放、暂停、停止,退出操作添加系统热键,分别为Ctrl+1、Ctrl+2、Ctrl+3、Ctrl+4
2009-05-06:为播放、暂停、停止,退出操作添加系统热键, 分别为A、D、S、X,即按A或Ctrl+1为播放,D或Ctrl+2为暂停,S或Ctrl+3为停止、X或Ctrl+4为退出

最新版本下载
=======================================================
it's a long story to tell about this article, if you are interest in this project, please visit those three articles were posted on codeproject.
http://www.codeproject.com/KB/audio-video/DSound_Spectrum.aspx
http://www.codeproject.com/KB/audio-video/DirectSound_Spectrum2.aspx
http://www.codeproject.com/KB/audio-video/DSound_Spectrum3.aspx
those three atticles have some bugs, and the main problem is spectrum display what is not real-time. but this version is real-time(i think).
the latest version support mp3, wma, wav, ogg, ape, flac now,  and you can download it with this link: AudioPlayer_20090506065.zip

你可能感兴趣的:([C/C++] 自己的mp3播放器【带频谱】)