?? mp3sound.cpp
字號:
#include "stdafx.h"
#include "Mp3Sound.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
Mp3Sound::Mp3Sound()
{
TCHAR szFilePath[MAX_PATH + 1];
GetModuleFileName(NULL, szFilePath, MAX_PATH);
(_tcsrchr(szFilePath, '\\'))[1] = '\0'; //刪除文件名,只獲得路徑
strcpy(szFilePath+strlen(szFilePath), "sound\\backmusic.mp3");
Open(szFilePath);
}
Mp3Sound::~Mp3Sound()
{
Close();
}
////////////////////////////////////////////////////////////////////////
/*
* 函數名稱:Open
* 函數介紹:用mci命令打開MP3文件
* 輸入參數:
CString strPath, MP3文件的路徑
* 輸出參數:無
* 返回值 :mci命令的錯誤信息
*/
DWORD Mp3Sound::Open(const CString &strPath)
{
MCI_OPEN_PARMS mciOP;
DWORD dwReturn;
ASSERT(m_wID == NULL);
//由mci判斷文件類型
mciOP.lpstrDeviceType=NULL;
mciOP.lpstrElementName=strPath;
dwReturn=mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_ELEMENT | MCI_WAIT | MCI_OPEN_SHAREABLE,
(DWORD)(LPVOID)&mciOP);
if (dwReturn==0)
{ m_wID=mciOP.wDeviceID;
if (this->GetLength(&m_dwLength)!=0)
m_dwLength=0;
}
else
m_wID=NULL;
return dwReturn;
}
////////////////////////////////////////////////////////////////////////
/*
* 函數名稱:Close
* 函數介紹:用mci命令關閉當前打開的MP3文件
* 輸入參數:無
* 輸出參數:無
* 返回值 :mci命令的錯誤信息
*/
DWORD Mp3Sound::Close()
{
MCI_GENERIC_PARMS mciGP;
DWORD dwReturn;
dwReturn = mciSendCommand(m_wID, MCI_CLOSE, MCI_NOTIFY|MCI_WAIT,
(DWORD)(LPVOID)&mciGP);
m_wID = NULL;
return dwReturn;
}
////////////////////////////////////////////////////////////////////////
/*
* 函數名稱:Play
* 函數介紹:用mci命令播放已打開(當前)的MP3文件
* 輸入參數:無
* 輸出參數:無
* 返回值 :mci命令的錯誤信息
*/
DWORD Mp3Sound::Play()
{
MCI_PLAY_PARMS mciPP;
return mciSendCommand(m_wID, MCI_PLAY, MCI_NOTIFY,
(DWORD)(LPVOID)&mciPP);
}
////////////////////////////////////////////////////////////////////////
/*
* 函數名稱:Pause
* 函數介紹:用mci命令暫停播放
* 輸入參數:無
* 輸出參數:無
* 返回值 :mci命令的錯誤信息
*/
DWORD Mp3Sound::Pause()
{
MCI_GENERIC_PARMS mciGP;
return mciSendCommand(m_wID, MCI_PAUSE, MCI_NOTIFY|MCI_WAIT,
(DWORD)(LPVOID)&mciGP);
}
////////////////////////////////////////////////////////////////////////
/*
* 函數名稱:Resume
* 函數介紹:用mci命令恢復播放
* 輸入參數:無
* 輸出參數:無
* 返回值 :mci命令的錯誤信息
*/
DWORD Mp3Sound::Resume()
{
MCI_GENERIC_PARMS mciGP;
return mciSendCommand(m_wID, MCI_RESUME, MCI_NOTIFY|MCI_WAIT,
(DWORD)(LPVOID)&mciGP);
}
////////////////////////////////////////////////////////////////////////
/*
* 函數名稱:Stop
* 函數介紹:用mci命令停止播放(效果與Pause相同)
* 輸入參數:無
* 輸出參數:無
* 返回值 :mci命令的錯誤信息
*/
DWORD Mp3Sound::Stop()
{
MCI_GENERIC_PARMS mciGP;
return mciSendCommand(m_wID, MCI_STOP, MCI_NOTIFY|MCI_WAIT,
(DWORD)(LPVOID)&mciGP);
}
////////////////////////////////////////////////////////////////////////
/*
* 函數名稱:SeekTo
* 函數介紹:用mci命令跳到指定位置
* 輸入參數:
* DWORD dwTo, 指定位置,單位為秒
* 輸出參數:無
* 返回值 :mci命令的錯誤信息
*/
DWORD Mp3Sound::SeekTo(DWORD dwTo)
{
DWORD dwReturn;
if (dwTo>0 && dwTo<m_dwLength)
{ MCI_SEEK_PARMS mciSP;
mciSP.dwTo=dwTo*1000;
dwReturn = mciSendCommand(m_wID, MCI_SEEK, MCI_WAIT|MCI_NOTIFY|MCI_TO,
(DWORD)(LPVOID)&mciSP);
}else if (dwTo>=m_dwLength)
dwReturn = SeekToEnd();
else
dwReturn = SeekToStart();
return dwReturn;
}
////////////////////////////////////////////////////////////////////////
/*
* 函數名稱:SeekToStart
* 函數介紹:用mci命令跳到當前MP3文件開始處
* 輸入參數:無
* 輸出參數:無
* 返回值 :mci命令的錯誤信息
*/
DWORD Mp3Sound::SeekToStart()
{
MCI_SEEK_PARMS mciSP;
return mciSendCommand(m_wID, MCI_SEEK, MCI_WAIT|MCI_NOTIFY|MCI_SEEK_TO_START,
(DWORD)(LPVOID)&mciSP);
}
////////////////////////////////////////////////////////////////////////
/*
* 函數名稱:SeekToEnd
* 函數介紹:跳到當前MP3文件末尾處
* 輸入參數:無
* 輸出參數:無
* 返回值 :mci命令的錯誤信息
*/
DWORD Mp3Sound::SeekToEnd()
{
MCI_SEEK_PARMS mciSP;
return mciSendCommand(m_wID, MCI_SEEK, MCI_WAIT|MCI_NOTIFY|MCI_SEEK_TO_END,
(DWORD)(LPVOID)&mciSP);
}
////////////////////////////////////////////////////////////////////////
/*
* 函數名稱:GetLength
* 函數介紹:用mci命令取得當前打開的MP3文件的長度
* 輸入參數:無
* 輸出參數:
* DWORD *dwLength, 輸出MP3文件的長度,單位為秒
* 返回值 :mci命令的錯誤信息
*/
DWORD Mp3Sound::GetLength(DWORD *dwLength)
{
MCI_STATUS_PARMS mciSP;
mciSP.dwItem=MCI_STATUS_LENGTH;
DWORD dwReturn=mciSendCommand(m_wID, MCI_STATUS, MCI_STATUS_ITEM,
(DWORD)(LPVOID)&mciSP);
if (dwReturn==0)
*dwLength=mciSP.dwReturn/1000;
return dwReturn;
}
////////////////////////////////////////////////////////////////////////
/*
* 函數名稱:GetPos
* 函數介紹:用mci命令取得當前打開的MP3文件的當前位置
* 輸入參數:無
* 輸出參數:
* DWORD *dwPos, 輸出MP3文件的當前位置,單位為秒
* 返回值 :mci命令的錯誤信息
*/
DWORD Mp3Sound::GetPos(DWORD *dwPos)
{
MCI_STATUS_PARMS mciSP;
mciSP.dwItem=MCI_STATUS_POSITION;
DWORD dwReturn=mciSendCommand(m_wID, MCI_STATUS, MCI_STATUS_ITEM,
(DWORD)(LPVOID)&mciSP);
if (dwReturn==0)
*dwPos=mciSP.dwReturn/1000;
return dwReturn;
}
////////////////////////////////////////////////////////////////////////
/*
* 函數名稱:SetMute
* 函數介紹:用mci命令設置靜音或取消靜音
* 輸入參數:
* BOOL bMute, 設置靜音(bMute=true)或取消靜音(bMute=false)
* 輸出參數:無
* 返回值 :mci命令的錯誤信息
*/
DWORD Mp3Sound::SetMute(BOOL bMute)
{
MCI_SET_PARMS mciSP;
mciSP.dwAudio=MCI_SET_AUDIO_ALL;
DWORD dwFlags;
if (bMute)
dwFlags=MCI_WAIT|MCI_SET_AUDIO|MCI_SET_OFF;
else
dwFlags=MCI_WAIT|MCI_SET_AUDIO|MCI_SET_ON;
return mciSendCommand(m_wID, MCI_SET, dwFlags,
(DWORD)(LPVOID)&mciSP);
}
////////////////////////////////////////////////////////////////////////
/*
* 函數名稱:IsPlaying
* 函數介紹:用mci命令詢問是否正在播放
* 輸入參數:無
* 輸出參數:無
* 返回值 :BOOL, 返回正在播放(true)或不是正在播放(false)
*/
BOOL Mp3Sound::IsPlaying()
{
MCI_STATUS_PARMS mciSP;
mciSP.dwItem=MCI_STATUS_MODE;
DWORD dwReturn=mciSendCommand(m_wID, MCI_STATUS, MCI_STATUS_ITEM,
(DWORD)(LPVOID)&mciSP);
if (dwReturn==0)
if (mciSP.dwReturn==MCI_MODE_PLAY)
return true;
return false;
}
////////////////////////////////////////////////////////////////////////
/*
* 函數名稱:IsPlaying
* 函數介紹:用mci命令詢問有否文件打開
* 輸入參數:無
* 輸出參數:無
* 返回值 :BOOL, 返回已有文件打開(true)或沒有文件打開(false)
*/
BOOL Mp3Sound::IsOpened()
{
MCI_STATUS_PARMS mciSP;
mciSP.dwItem=MCI_STATUS_MODE;
DWORD dwReturn=mciSendCommand(m_wID, MCI_STATUS, MCI_STATUS_ITEM,
(DWORD)(LPVOID)&mciSP);
if (dwReturn==(DWORD)0)
if (mciSP.dwReturn==MCI_MODE_OPEN ||
mciSP.dwReturn==MCI_MODE_PLAY ||
mciSP.dwReturn==MCI_MODE_PAUSE ||
mciSP.dwReturn==MCI_MODE_STOP ||
mciSP.dwReturn==MCI_MODE_SEEK
)
return true;
return false;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -