{
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);
} 领用上面的函数就可以播放MP3,wav等格式的音乐了 不知道这里有没有大神路过呀,其最近遇到了一个问题,这个函数可以播放很多的音乐但是有那么几个钉子户,就是不能播放会产生一个错误,错误提示如下
C:\Users\gongfan\Desktop\1.jpeg
有好几天了就是找不到解决方案。
我怀疑可能是因为MP3的id3v2中有了同步信号,导致解码器不能识别正常的播放位置造成的,可是在网上实在收不到相关的帖子。
或许还有其他的问题,希望高手指点迷津呀!!!
非常感谢 写出来 我也看看呀 许许 发表于 2014-7-27 23:05
void _play(TCHAR *filename)
{
display_filename(get_current_play(filename));
写一个win32汇编的可以吗我不知道 mciSendString 在汇编怎么调用 wiliam 发表于 2014-7-24 21:39
用win32汇编该怎么调用呢
invoke mcisendstring,参数列表。
具体参数真么用你就需要看msdn了 我要鱼币我要鱼币我要鱼币我要鱼币我要鱼币我要鱼币我要鱼币 问题就是图片显示的那个样子
我读去了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;
俺也觀摩看看 看着各种api就烦 扔给你一份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;
}
wiliam 发表于 2014-7-24 21:39
用win32汇编该怎么调用呢
这个需要你自己查api了,灵活带来的是n多可配置项,慢慢查msdn吧…… 汇编不是很懂,需要学习一下!!!!
页:
1
[2]