首页
论坛
专栏
课程

[旧帖] [原创]基于Winamp输入模块编写音乐播放器的一点心得 0.00元

2010-4-7 11:24 828

[旧帖] [原创]基于Winamp输入模块编写音乐播放器的一点心得 0.00元

2010-4-7 11:24
828
--------=========================----------------  
        Goldenspdier[G-Spider 月窟]
--------=========================---------------- 

    于2010年4月4日星期天,八小时未进米食,一气呵成,纯Win32汇编环境(masm32 V10.0),
参考其中自带的example(LCD界面设计2000 by Thomas Bleeker [exagone])
在几十KB的代码中游走实属不易,愿为看雪做一点贡献。 完成之后心情超好啦~~~~

使用说明:(初始版本)
  1.点选menu弹出文件窗口,得到音频文件[支持mp3格式]
  2.点play播放(注意不要重复点击该按钮,否则不能保证流畅播放)
  3.调节音量有+,-按钮
  4.部分功能有待完善

更新说明:  (更新版本,已上传)
  1.接口实现上有很大调整,有助于扩展成支持多种格式。
  2.支持mp3格式,新增对.FLAC无损音频文件的支持,以满足音乐发烧友对音质的要求

使用说明:
  1.点选menu弹出文件窗口,得到mp3,flac音频文件
  2.点play播放(注意不要重复点击该按钮,否则不能保证流畅播放)
  3.调节音量有+,-按钮
  4.部分功能有待完善


[公告]安全服务和外包项目请将项目需求发到看雪企服平台:https://qifu.kanxue.com

上传的附件:
最新回复 (2)
gldnspider 2010-4-7 11:55
2
0
之前并没有考虑要扩展支持多种音频格式,对于多种格式支持时出现了小麻烦。
开始时,准备用In_Module中的
int   (*IsOurFile)(char   *szFile); //   检查文件格式
发现不好用,无论与否好像都返回0,这样我就没办法了,并且占CPU很多。
   于是自己搞个扩展名识别也行的,如对于.mp3和.flac格式分别调用各自的模块就搞定了。
所以要实现扩展名识别。
------------------------------------
PathFindExtension        //得到文件扩展名api

Searches a path for an extension.

LPTSTR PathFindExtension(
    LPCTSTR pPath        //输入参数是一个路径地址,返回扩展名首址;
                        //如"D:\masm32\lcd\lcd.asm",则可返回".asm"的首址
    );                        //汇编中返回值在eax中

Parameters
pPath
[in] Pointer to a null-terminated string of maximum length MAX_PATH that
contains the path that contains the extension for which to search.
Return Values
Returns the address of the "." preceding the extension within pPath
if an extension is found, or the address of the trailing NULL character otherwise.

Requirements
  Version 4.71 and later of Shlwapi.dll

  Windows NT/2000: Requires Windows 2000 (or Windows NT 4.0 with Internet Explorer 4.0 or later).
  Windows 95/98/Me: Requires Windows 98 (or Windows 95 with Internet Explorer 4.0 or later).
  Header: Declared in Shlwapi.h. //masm32中用include Shlwapi.inc
  Import Library: Shlwapi.lib.

------------------------------------
功能实现如下:
.data
stOpenFileName        OPENFILENAME                 <?>
szTitleSave        db        "Open MUSIC file...",0
szExt                db        '*.*',0
szMp3                db        '.mp3',0
szFilter        db        'MUSIC Files(*.mp3,*.flac)',0,'*.*',0,0

.data?
szBuffer        db        256         dup        (?)
.........
;*******************************************************************
//利用托此控件来得到我们所要的路径地址(在szBuffer缓存中)
_GetFileName        proc       

                mov        stOpenFileName.Flags,OFN_PATHMUSTEXIST or OFN_FILEMUSTEXIST
                mov        stOpenFileName.lStructSize,SIZEOF stOpenFileName
                mov        eax,hDlg
                mov        stOpenFileName.hWndOwner,eax
                mov        stOpenFileName.lpstrFilter,offset szFilter        ;扩展名
                mov        stOpenFileName.lpstrFile,offset szBuffer        ;文件名路径缓冲
                mov        stOpenFileName.nMaxFile,255                        ;文件名缓冲长度
                mov        stOpenFileName.lpstrInitialDir,0
                mov        stOpenFileName.lpstrTitle,offset szTitleSave
                mov        stOpenFileName.lpstrDefExt,offset szExt
                invoke        GetOpenFileName,offset stOpenFileName
                .if        eax == FALSE
                        ret
                .endif
               
               
                ret

_GetFileName        endp
;********************************************************************

invoke         _GetFileName
invoke  PathFindExtension,offset szBuffer//得到扩展名地址(返回值在eax中)
invoke  lstrcmpi, offset szMp3, eax        //进行比较两个扩展名字符串是否相等(如果相等则返回0)
.if  eax==0        
        ........//做出相应动作
郑小林 2010-4-7 11:59
3
0
看下自己的KX
游客
登录 | 注册 方可回帖
返回