win32 mp3.docx
《win32 mp3.docx》由会员分享,可在线阅读,更多相关《win32 mp3.docx(16页珍藏版)》请在冰豆网上搜索。
![win32 mp3.docx](https://file1.bdocx.com/fileroot1/2023-1/27/590d046f-ce66-4b34-8271-9a8cf8f66f05/590d046f-ce66-4b34-8271-9a8cf8f66f051.gif)
win32mp3
//mp3.cpp:
Definestheentrypointfortheapplication.
//交流:
496087450
#include"stdafx.h"
#include"resource.h"
//#include
//#include
#include
#include
#include
#pragmacomment(lib,"WINMM.LIB")
#defineMAX_LOADSTRING100
#defineID_TIME1
#defineTIMER1000
//GlobalVariables:
HINSTANCEhInst;//currentinstance
TCHARszTitle[MAX_LOADSTRING];//Thetitlebartext
TCHARszWindowClass[MAX_LOADSTRING];//Thetitlebartext
MCI_OPEN_PARMSop;
MCI_PLAY_PARMSpp;
#definebtn22
#definebtn11
#definebtn33
#definebtn44
#definebtn55
typedefstructMUSIC_TITAL_INFO
{
charhead[3];//TAG
charMUSIC_NAME[30];//存储标题信息
charArtist[30];//存储歌手信息
charAlbum[30];//存储专辑信息
charYEAR[4];//存储年代信息
charComments[28];//存储备注信息,28个字节(有时为30字节)
charGenre[2];//存储音乐风格信息,保留位,1个字节
//charReserved;//保留位,1个字节(有时没有意思
//charTrack;//音轨(曲号)保留位,1个字节(有时没有)
}MUSIC;
//Fowarddeclarationsoffunctionsincludedinthiscodemodule:
ATOMMyRegisterClass(HINSTANCEhInstance);
BOOLInitInstance(HINSTANCE,int);
LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);
LRESULTCALLBACKAbout(HWND,UINT,WPARAM,LPARAM);
intAPIENTRYWinMain(HINSTANCEhInstance,
HINSTANCEhPrevInstance,
LPSTRlpCmdLine,
intnCmdShow)
{
//TODO:
Placecodehere.
MSGmsg;
//HACCELhAccelTable;
//Initializeglobalstrings
LoadString(hInstance,IDS_APP_TITLE,szTitle,MAX_LOADSTRING);
LoadString(hInstance,IDC_MP3,szWindowClass,MAX_LOADSTRING);
MyRegisterClass(hInstance);
//Performapplicationinitialization:
if(!
InitInstance(hInstance,nCmdShow))
{
returnFALSE;
}
while(GetMessage(&msg,NULL,0,0))
{
if(!
TranslateAccelerator(msg.hwnd,NULL,&msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
returnmsg.wParam;
}
ATOMMyRegisterClass(HINSTANCEhInstance)
{
WNDCLASSEXwcex;
wcex.cbSize=sizeof(WNDCLASSEX);
wcex.style=CS_HREDRAW|CS_VREDRAW;
wcex.lpfnWndProc=(WNDPROC)WndProc;
wcex.cbClsExtra=0;
wcex.cbWndExtra=0;
wcex.hInstance=hInstance;
wcex.hIcon=LoadIcon(hInstance,(LPCTSTR)IDI_MP3);
wcex.hCursor=LoadCursor(NULL,IDC_ARROW);
wcex.hbrBackground=(HBRUSH)(COLOR_INACTIVECAPTION);
//COLOR_BACKGROUND);//COLOR_WINDOWTEXT);//COLOR_MENUTEXT);//
wcex.lpszMenuName=NULL;//(LPCSTR)IDC_MP3;
wcex.lpszClassName=szWindowClass;
wcex.hIconSm=LoadIcon(wcex.hInstance,(LPCTSTR)IDI_SMALL);
returnRegisterClassEx(&wcex);
}
BOOLInitInstance(HINSTANCEhInstance,intnCmdShow)
{
HWNDhWnd;
hInst=hInstance;//Storeinstancehandleinourglobalvariable
hWnd=CreateWindow(szWindowClass,szTitle,WS_OVERLAPPEDWINDOW&~WS_THICKFRAME&~WS_MAXIMIZEBOX,//ws_minimizebox,
CW_USEDEFAULT,CW_USEDEFAULT,155,205,NULL,NULL,hInstance,NULL);
if(!
hWnd)
{
returnFALSE;
}
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
returnTRUE;
}
staticinttotal_file_num=0;
staticOPENFILENAMEofn;//配置打开对话框参数
staticcharszOpenFileNames[80*MAX_PATH];//初始化时用来获取文件名的变量
staticcharszFileName_Path[255][MAX_PATH];//记录歌曲的绝对路径,包含文件名
staticcharszFile[MAX_PATH];//存储路径
staticintcurrent_music_num=0;
boolinit_dev=0;
boolis_play=0;
intvol_flag=0;
intopen=1;/////
MUSICm;
//boolflags=0;
BOOLOpenFileDlg()
{
returnGetOpenFileName(&ofn);//打开设置好的对话框
}
voidFileInit(HWNDhwnd)
{
ZeroMemory(&ofn,sizeof(ofn));
ofn.lStructSize=sizeof(ofn);
ofn.lpstrFile=szOpenFileNames;
ofn.lpstrFile[0]=TEXT('\0');
ofn.nMaxFile=sizeof(szOpenFileNames);
ofn.lpstrFilter=TEXT("所有支持文件(*.wav,*.mp3,*.wma)\0*.wav;*.mp3;*.wma\0wave文件(*.wav)\0*.wav\0mp3文件(*.mp3)\0*.mp3\0wma文件(*.wma)\0*.wma\0");
ofn.nFilterIndex=1;
ofn.lpstrFileTitle=NULL;
ofn.nMaxFileTitle=0;
ofn.lpstrInitialDir=NULL;
ofn.hwndOwner=hwnd;
ofn.Flags=OFN_EXPLORER|OFN_PATHMUSTEXIST|OFN_ALLOWMULTISELECT;
}
intadd_file(HWNDhwnd)
{
FileInit(hwnd);//文件初始化
if(TRUE==OpenFileDlg())
{
lstrcpyn(szFile,szOpenFileNames,ofn.nFileOffset);
szFile[ofn.nFileOffset]='\0';
intnLen=lstrlen(szFile);
if(szFile[nLen-1]!
='\\')//如果选了多个文件,则必须加上'\\'
{
lstrcat(szFile,TEXT("\\"));
}
char*p=szOpenFileNames+ofn.nFileOffset;//把指针移到第一个文件
while(*p)
{
lstrcpy(szFileName_Path[total_file_num],szFile);//将路径复制给szFileName_Path
lstrcat(szFileName_Path[total_file_num],p);//加上文件名
p+=lstrlen(p)+1;//移至下一个文件
total_file_num++;
}
}
return0;
}
voidinit_play()
{
op.lpstrElementName=szFileName_Path[current_music_num];//文件路径
mciSendCommand(op.wDeviceID,MCI_OPEN,MCI_OPEN_ELEMENT,(DWORD)&op);
mciSendCommand(op.wDeviceID,MCI_PLAY,MCI_NOTIFY,(DWORD)&pp);//播放文,为了避免这种情况可以设为MCI_NOTIFY
}
intup_down(booldown)
{
mciSendCommand(op.wDeviceID,MCI_CLOSE,MCI_NOTIFY,(DWORD)&op);//播放文,为了避免这种情况可以设为MCI_NOTIFY
if(down)
{
if(current_music_num+1==total_file_num)
current_music_num=0;
else
current_music_num++;
}
else
{
if(current_music_num==0)
current_music_num=total_file_num-1;
else
current_music_num--;
}
init_play();
return0;
}
voidctl_volume(HWNDhwnd,intad_flag)
{
TCHARcmd[256];//用来储存格式化后的指令
intnVolume;//把得到的文本型音量数据转换成整形,方便作加减处
TCHARvolume[256];//用来储存从音乐中拿来的音量大小数据
wsprintf(cmd,"status%svolume",szFileName_Path[current_music_num]);//件路径
mciSendString(cmd,volume,sizeof(volume),hwnd);//把当前的音量状态存在volume字符串中
nVolume=atoi(volume);//字符串转化成整型
wsprintf(cmd,"setaudio%svolumeto%i",szFileName_Path[current_music_num],nVolume-100*ad_flag);
mciSendString(cmd,"",0,hwnd);//把结果安装回去
}
inthaha(charstr[])
{
intnum=0;
for(unsignedinti=0;i<3;i++)
{
num=num+str[i]-'0';
num=num*10;
}
returnnum/10;
}
/*-------------------------------------------
floatset()
{
charcmd[256],len[256],c[3];
intcurrent=0;
inttotal=0;
wsprintf(cmd,"status%sposition",szFileName_Path[current_music_num]);
mciSendString(cmd,len,255,NULL);
strncpy(c,len,3);
current=haha(c);
wsprintf(cmd,"status%slength",szFileName_Path[current_music_num]);
mciSendString(cmd,len,255,NULL);
strncpy(c,len,3);
total=haha(c);
return(1.0*current/total);///total;
}
-----------------------------------------------------------*/
voidread_music(chars[])
{
FILE*fp;
fp=fopen(s,"r");
fseek(fp,-128,SEEK_END);
fread(&m,sizeof(structMUSIC_TITAL_INFO),1,fp);
if(!
(m.head[0]=='T'&&m.head[1]=='A'&&m.head[2]=='G'))
lstrcpy(m.MUSIC_NAME,"Fileisn'tstandard!
");
}
DWORDmci_get_length()
{
DWORDdwlength;
MCI_STATUS_PARMSmcisp;
mcisp.dwItem=MCI_STATUS_LENGTH;
DWORDdwreturn=mciSendCommand(op.wDeviceID,MCI_STATUS,MCI_STATUS_ITEM,
(DWORD)(LPVOID)&mcisp);
if(dwreturn==0)
dwlength=mcisp.dwReturn/1000;
returndwlength;
}
DWORDmci_get_pos()
{
DWORDdwpos;
MCI_STATUS_PARMSmcisp;
mcisp.dwItem=MCI_STATUS_POSITION;
DWORDdwreturn=mciSendCommand(op.wDeviceID,MCI_STATUS,MCI_STATUS_ITEM,
(DWORD)(LPVOID)&mcisp);
if(dwreturn==0)
dwpos=mcisp.dwReturn/1000;
returndwpos;
}
floatpercent=0;
DWORDlength=0;//mci_get_length();
LRESULTCALLBACKWndProc(HWNDhWnd,UINTmessage,WPARAMwParam,LPARAMlParam)
{
intwmId,wmEvent;
PAINTSTRUCTps;
HDChdc;
TCHARszHello[MAX_LOADSTRING];
LoadString(hInst,IDS_HELLO,szHello,MAX_LOADSTRING);
switch(message)
{
caseWM_CREATE:
{
//SetWindowLong(hWnd,GWL_STYLE,GetWindowLong(hWnd,GWL_STYLE)&~WS_CAPTION);
//SetWindowPos(hWnd,NULL,0,0,0,0,SWP_NOSIZE);//*|SWP_NOMOVE*/|SWP_NOZORDER|SWP_DRAWFRAME);
HWNDhButton1=CreateWindow(_T("button"),_T("<<"),
WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,5,100,28,40,hWnd,(HMENU)btn1,hInst,NULL);
HWNDhButton2=CreateWindow(_T("button"),_T("play/stop"),
WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,34,100,80,40,hWnd,(HMENU)btn2,hInst,NULL);
HWNDhButton3=CreateWindow(_T("button"),_T(">>"),
WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,115,100,28,40,hWnd,(HMENU)btn3,hInst,NULL);
HWNDhButton4=CreateWindow(_T("button"),_T("open"),
WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,34,75,80,24,hWnd,(HMENU)btn4,hInst,NULL);
HWNDhButton5=CreateWindow(_T("button"),_T("volume"),
WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,34,141,80,24,hWnd,(HMENU)btn5,hInst,NULL);
//SetBkColor(hdc,RGB(17,105,238));
op.dwCallback=NULL;
op.lpstrAliase=NULL;
op.lpstrDeviceType=_T("MPEGAudio");//设备类型,大多数文件可以这样设置
op.lpstrElementName=NULL;//_T("D:
\\s.mp3");//文件路径
op.wDeviceID=NULL;//打开设备成功以后保存这个设备号备用
strcpy(m.MUSIC_NAME,"NoFile");
//mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_ELEMENT,(DWORD)&op);
}break;
caseWM_COMMAND:
wmId=LOWORD(wParam);
wmEvent=HIWORD(wParam);
//Parsethemenuselections:
switch(wmId)
{
casebtn1:
{
if(vol_flag)
{
ctl_volume(hWnd,1);SetTimer(hWnd,ID_TIME,TIMER,NULL);
}
else
{
up_down(0);
if(open==0)
{
read_music(szFileName_Path[current_music_num]);
length=mci_get_length();
}
InvalidateRect(hWnd,NULL,0);
}
}break;
casebtn2:
{
//TextOut(hdc,40,200,"音量调节中..",strlen("音量调节中.."));
if(!
init_dev)//firstinit_dev_and_play
{
pp.dwFrom=0;
pp.dwCallback=(DWORD)hWnd;
init_play();
init_dev=1;
is_play=1;
if(open==0)
read_music(szFileName_Path[current_music_num]);
length=mci_get_length();
SetTimer(hWnd,ID_TIME,TIMER,NULL);
InvalidateRect(hWnd,NULL,0);
break;
}
if(is_play)
{
mciSendCommand(op.wDeviceID,MCI_PAUSE,MCI_NOTIFY,(DWORD)&op);
is_play=0;