许许 发表于 2014-7-27 23:05:19

void _play(TCHAR *filename)
{
        display_filename(get_current_play(filename));
        TCHAR cmd;
        TCHAR shortName;
        GetShortPathName(filename, shortName, sizeof(shortName) / sizeof(TCHAR));
        wsprintf(cmd, TEXT("play%s"), shortName);
        mciSendString(cmd, NULL, 0, NULL);
}

许许 发表于 2014-7-27 23:06:10

领用上面的函数就可以播放MP3,wav等格式的音乐了

许许 发表于 2014-7-27 23:12:48

不知道这里有没有大神路过呀,其最近遇到了一个问题,这个函数可以播放很多的音乐但是有那么几个钉子户,就是不能播放会产生一个错误,错误提示如下
C:\Users\gongfan\Desktop\1.jpeg
有好几天了就是找不到解决方案。

我怀疑可能是因为MP3的id3v2中有了同步信号,导致解码器不能识别正常的播放位置造成的,可是在网上实在收不到相关的帖子。

或许还有其他的问题,希望高手指点迷津呀!!!

非常感谢

shehdok 发表于 2014-7-28 11:12:40

写出来 我也看看呀

wiliam 发表于 2014-7-28 13:10:10

许许 发表于 2014-7-27 23:05
void _play(TCHAR *filename)
{
        display_filename(get_current_play(filename));


写一个win32汇编的可以吗我不知道 mciSendString 在汇编怎么调用

1144290241 发表于 2014-7-28 19:16:24

wiliam 发表于 2014-7-24 21:39
用win32汇编该怎么调用呢

invoke mcisendstring,参数列表。
具体参数真么用你就需要看msdn了

single 发表于 2014-7-28 22:10:19

我要鱼币我要鱼币我要鱼币我要鱼币我要鱼币我要鱼币我要鱼币

许许 发表于 2014-7-29 14:56:42

问题就是图片显示的那个样子

许许 发表于 2014-7-29 15:00:10

我读去了MP3文件中的id3v2信息发现他们的不同之处是:

1.可以播放的MP3 在标签头的flag第一位是0

2.不可以播放的MP3 在标签头的flag位是 1

标签头的定义
typedef struct _LABELHEAD
{
        char header;
        char version;
        char reversion;
        unsigned char flag;
        unsigned char size;
} LABELHEAD, *pLABELHEAD;

careless 发表于 2014-7-30 15:45:09

俺也觀摩看看

doomsday 发表于 2014-7-30 22:01:12

看着各种api就烦

1236 发表于 2014-7-30 23:12:35

扔给你一份C语言源码,直接改成WIN32就行真不会了就push call
// Music.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#pragma commet(lib,"WINMM.LIB")


int WINAPI mainproc (HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{


        switch(msg)
        {

        case        WM_INITDIALOG:

                                                        break;
        case        WM_CLOSE:
                                        EndDialog(hwnd,NULL);
                                        break;
        case        WM_COMMAND:
                        switch(LOWORD(wParam))
                        {       
                        case    IDC_OPEN:                       

                                                OPENFILENAME ofn;
                                                char szFile;//MAX_PATH操作系统定义的最大路径的长度
                                               
                                                ZeroMemory(&ofn,sizeof(ofn));
                                                ofn.lStructSize = sizeof(ofn);//定义结构体的大小,判断是win95还是win2000系统
                                                ofn.lpstrFile = szFile;//
                                                ZeroMemory(szFile,sizeof(szFile)/sizeof(char));
                                                ofn.nMaxFile = sizeof(szFile);
                                                ofn.lpstrFilter ="mp3文件\0*.mp3\0所有文件\0*.*\0\0";//过滤器
                                                ofn.Flags = OFN_EXPLORER |OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
                                                GetOpenFileName(&ofn);
                                       
                                                SetDlgItemText(hwnd,IDC_EDIT1,szFile);       
                                                break;
                                       
                        case        IDC_PLAY:

                                                TCHAR play1;
                                                TCHAR play2;               
                                                TCHAR getpath;                       
                                                GetDlgItemText(hwnd,IDC_EDIT1,getpath,sizeof(getpath));                                //得到编辑框上面的路径名
                                                GetShortPathName(getpath,play1,sizeof(play1));                                                //得到短路径play1保存短路径
                                                wsprintf(play2,"play %s",play1);                                                                        //在路径前面加上个play
                                                SetDlgItemText(hwnd,IDC_EDIT1,play1);                                                                //显示出来短路径
                                                mciSendString(play2,NULL,0,NULL);                                                                        //播放
                                                break;                                                                                                                                //退出 下面的跟这个同理


                  case        IDC_PAUSE:        //暂停
                                                       
                                                        TCHAR pause1;
                                                        TCHAR pause2;
                                                        TCHAR getpath1;
                                                        GetDlgItemText(hwnd,IDC_EDIT1,getpath1,sizeof(getpath1));        //="play e:/1.mp3";
                                                        GetShortPathName(getpath1,pause1,sizeof(pause1));        //短路径
                                                        wsprintf(pause2,"pause %s",pause1);
                                                        SetDlgItemText(hwnd,IDC_EDIT1,pause1);       
                                                        mciSendString(pause2,NULL,0,NULL);
                                                        break;

                        case        IDC_RESUME: //恢复
                               
                                                        TCHAR resume1;
                                                        TCHAR resume2;
                                                        TCHAR getpath3;
                                                        GetDlgItemText(hwnd,IDC_EDIT1,getpath3,sizeof(getpath3));        //="play e:/1.mp3";
                                                        GetShortPathName(getpath3,resume1,sizeof(resume1));        //短路径
                                                        wsprintf(resume2,"resume %s",resume1);
                                                        SetDlgItemText(hwnd,IDC_EDIT1,resume1);       
                                                        mciSendString(resume2,NULL,0,NULL);
                                                        break;

                        case        IDC_CLOSE: //停止
                                                       
                                                        TCHAR close1;
                                                        TCHAR close2;
                                                        TCHAR getpath2;
                                                        GetDlgItemText(hwnd,IDC_EDIT1,getpath2,sizeof(getpath2));        //="play e:/1.mp3";
                                                        GetShortPathName(getpath2,close1,sizeof(close1));        //短路径
                                                        wsprintf(close2,"close %s",close1);
                                                        SetDlgItemText(hwnd,IDC_EDIT1,close1);       
                                                        mciSendString(close2,NULL,0,NULL);
                                                        break;               
                                                       
                        }
       
       
        }
        return 0;
}

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR   lpCmdLine,
                     int       nCmdShow)
{
        DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,mainproc);

        return 0;
}

1144290241 发表于 2014-9-1 21:25:23

wiliam 发表于 2014-7-24 21:39
用win32汇编该怎么调用呢

这个需要你自己查api了,灵活带来的是n多可配置项,慢慢查msdn吧……

夜神月0_0 发表于 2014-9-3 08:47:04

汇编不是很懂,需要学习一下!!!!
页: 1 [2]
查看完整版本: 如何写一个win32程序并且自动播放音乐