?? mciwave.cpp
字號:
// MCIWave.cpp: implementation of the CMCIWave class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "WAVMCIDemo.h"
#include "MCIWave.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CMCIWave::CMCIWave()
{
//進行狀態指示變量的初始化
m_bPlaying = FALSE;
m_bRecord = FALSE;
m_bOpen = FALSE;
m_wDeviceID = 0;
}
CMCIWave::~CMCIWave()
{
Close();//關閉WAV文件
}
DWORD CMCIWave::Open(CString strFileName)
{
if (m_bOpen)//如果文件已經打開
{
Close();//關閉該文件
}
DWORD dwOpenFlag;//打開標記
MCI_OPEN_PARMS mciOpenParam;//MCI_OPEN_PARMS結構
mciOpenParam.lpstrDeviceType = "WaveAudio";//MCI設備類型
mciOpenParam.lpstrElementName = strFileName;//打開文件名
//初始化MCI設備
dwOpenFlag = mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_ELEMENT|MCI_OPEN_TYPE, (DWORD)(LPVOID)&mciOpenParam);
if (dwOpenFlag)//初始化失敗
return dwOpenFlag;//返回錯誤代碼
m_wDeviceID = mciOpenParam.wDeviceID;//設備ID
m_bOpen = TRUE;
dwOpenFlag = 0;
MCI_SET_PARMS mciSetParam;
mciSetParam.dwTimeFormat = MCI_FORMAT_MILLISECONDS;//時間參數設置為毫秒
//改變時間控制設置
dwOpenFlag = mciSendCommand(m_wDeviceID,MCI_SET,MCI_SET_TIME_FORMAT,(DWORD)(LPVOID)&mciSetParam);
if (dwOpenFlag)//設置失敗
return dwOpenFlag;//返回錯誤代碼
return 0;
}
DWORD CMCIWave::Play()
{
MCI_PLAY_PARMS mciPlayParam;
DWORD dwPlayFlag;
dwPlayFlag = mciSendCommand(m_wDeviceID, MCI_PLAY, NULL, (DWORD)(LPVOID)&mciPlayParam);//開始播放數據
if (dwPlayFlag)//播放失敗
return dwPlayFlag;//返回錯誤代碼
else
{
m_bPlaying = TRUE;
return 0;
}
}
void CMCIWave::Stop()
{
mciSendCommand(m_wDeviceID, MCI_STOP, NULL, NULL);//停止播放
}
DWORD CMCIWave::Record()
{
if (m_bOpen)//如果有文件打開
Close();//關閉文件
DWORD dwRecordFlag;
MCI_OPEN_PARMS mciOpenParam;
mciOpenParam.lpstrDeviceType = " waveAudio ";
mciOpenParam.lpstrElementName = NULL;
//初始化MCI設備
dwRecordFlag = mciSendCommand(NULL, MCI_OPEN,MCI_OPEN_ELEMENT | MCI_OPEN_TYPE | MCI_WAIT, (DWORD)(LPVOID)&mciOpenParam);
if (dwRecordFlag)//初始化失敗
return dwRecordFlag;//返回錯誤代碼
m_wDeviceID = mciOpenParam.wDeviceID;
MCI_RECORD_PARMS mciRecordParam;
//開始記錄數據
dwRecordFlag = mciSendCommand(m_wDeviceID, MCI_RECORD,MCI_RECORD_OVERWRITE, (DWORD)(LPVOID)&mciRecordParam);
if (dwRecordFlag)//記錄數據失敗
return dwRecordFlag;//返回錯誤代碼
m_bRecord = TRUE;
m_bOpen = TRUE;
return 0;
}
DWORD CMCIWave::Save(CString strFileName)
{
if (m_bRecord)//正在錄音
return 0;//返回
Stop();//停止
MCI_SAVE_PARMS mciSaveParam;
mciSaveParam.lpfilename = strFileName;
//保存WAV數據到文件
DWORD dwSaveFlag = mciSendCommand(m_wDeviceID, MCI_SAVE,MCI_SAVE_FILE | MCI_WAIT, (DWORD)(LPVOID)&mciSaveParam);
if (dwSaveFlag)//保存失敗
return dwSaveFlag;//返回錯誤代碼
m_bRecord = FALSE;
return 0;
}
DWORD CMCIWave::Close()
{
if (m_wDeviceID)//有MCI設備在工作
{
DWORD dwCloseFlag;
mciSendCommand(m_wDeviceID, MCI_STOP, MCI_WAIT, NULL);//停止工作
dwCloseFlag = mciSendCommand(m_wDeviceID, MCI_CLOSE, NULL, NULL);//關閉設備
if (dwCloseFlag)
{
AfxMessageBox("關閉時出現錯誤");
return dwCloseFlag;
}
}
//設置狀態變量
m_bRecord = FALSE;
m_bOpen = FALSE;
m_bPlaying = FALSE;
m_wDeviceID = NULL;
return 0;
}
DWORD CMCIWave::GetSampleRate()
{
MCI_STATUS_PARMS mciStatusParam;
mciStatusParam.dwItem = MCI_WAVE_STATUS_SAMPLESPERSEC;//采樣頻率
//MCI設備的狀態信息(采樣頻率)
DWORD dwStatusFlag = mciSendCommand(m_wDeviceID, MCI_STATUS,MCI_WAIT | MCI_STATUS_ITEM, (DWORD)(LPVOID)&mciStatusParam);
if (dwStatusFlag)
return dwStatusFlag;//返回錯誤代碼
else
return mciStatusParam.dwReturn;//返回采樣頻率
}
DWORD CMCIWave::GetChannel()
{
MCI_STATUS_PARMS mciStatusParam;
mciStatusParam.dwItem = MCI_WAVE_STATUS_CHANNELS;//聲道數
//MCI設備的狀態信息(聲道數)
DWORD dwStatusFlag = mciSendCommand(m_wDeviceID, MCI_STATUS,MCI_WAIT | MCI_STATUS_ITEM, (DWORD)(LPVOID)&mciStatusParam);
if (dwStatusFlag)
return dwStatusFlag;
else
return mciStatusParam.dwReturn;//返回聲道數
}
DWORD CMCIWave::GetBitLength()
{
MCI_STATUS_PARMS mciStatusParam;
mciStatusParam.dwItem = MCI_WAVE_STATUS_BITSPERSAMPLE;//聲音位長
//MCI設備的狀態信息(聲音位長)
DWORD dwStatusFlag = mciSendCommand(m_wDeviceID, MCI_STATUS,MCI_WAIT|MCI_STATUS_ITEM, (DWORD)(LPVOID)&mciStatusParam);
if (dwStatusFlag)
return dwStatusFlag;
else
return mciStatusParam.dwReturn;//返回位長
}
DWORD CMCIWave::GetWaveLength()
{
MCI_STATUS_PARMS mciStatusParam;
mciStatusParam.dwItem = MCI_STATUS_LENGTH;//音頻長度
//返回MCI設備的狀態信息(音頻長度)
DWORD dwStatusFlag = mciSendCommand(m_wDeviceID, MCI_STATUS,MCI_WAIT | MCI_STATUS_ITEM, (DWORD)(LPVOID)&mciStatusParam);
if (dwStatusFlag)
return dwStatusFlag;
else
return mciStatusParam.dwReturn;//返回音頻長度
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -