以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 C/C++编程思想 』  (http://bbs.xml.org.cn/list.asp?boardid=61)
----  录制并存储数字化波形声音的方法  (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=35474)


--  作者:卷积内核
--  发布时间:7/11/2006 9:48:00 AM

--  录制并存储数字化波形声音的方法
录制并存储数字化波形声音的方法

/////////////////////////////////////////////////////////////////////////

// RecordWAVEFile

// 使用 MCI_OPEN, MCI_RECORD和MCI_SAVE命令消息录制并存储数字

// 化波形声音

// 参数:dwMilliSeconds —— 录音的时间(ms)

//      lpszFileName —— 指定的存盘文件名

//

// 返回值:0 —— 成功

//       非0 —— 失败,返回值为MCI错误码

/////////////////////////////////////////////////////////////////////////

DWORD RecordWAVEFile(DWORD dwMilliSeconds, LPSTR lpszFileName)

{

    UINT wDeviceID;

    DWORD dwReturn;

    MCI_OPEN_PARMS mciOpenParms;

    MCI_RECORD_PARMS mciRecordParms;

    MCI_SAVE_PARMS mciSaveParms;

    MCI_PLAY_PARMS mciPlayParms;

    // 用新文件打开波形声音,以进行录音

    mciOpenParms.lpstrDeviceType = "waveaudio";

    mciOpenParms.lpstrElementName = "";

    if (dwReturn = mciSendCommand(0, MCI_OPEN,

             MCI_OPEN_ELEMENT | MCI_OPEN_TYPE,

             (DWORD)(LPVOID) &mciOpenParms))

    {

             // 打开设备失败,返回错误码

             return (dwReturn);

    }

    // 打开设备成功,获取设备ID

    wDeviceID = mciOpenParms.wDeviceID;

    // 按指定的时间(ms)长度开始录音,等待录音结束再继续执行程序

    // 设备的时间格式应设为ms

    mciRecordParms.dwTo = dwMilliSeconds;

    if (dwReturn = mciSendCommand(wDeviceID, MCI_RECORD,

        MCI_TO | MCI_WAIT, (DWORD)(LPVOID) &mciRecordParms))

    {

        mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);

        return (dwReturn);

    }

    // 播放录音,并提示用户存盘

    mciPlayParms.dwFrom = 0L;

    if (dwReturn = mciSendCommand(wDeviceID, MCI_PLAY,

             MCI_FROM | MCI_WAIT, (DWORD)(LPVOID) &mciPlayParms))

    {

             mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);

             return (dwReturn);

    }

    if (MessageBox(hMainWnd, "将录音存盘吗 ?",

             "", MB_YESNO) == IDNO)

    {

             mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);

             return (0L);

    }

    // 将录音存为lpszFileName文件, 等待存盘结束再继续执行程序

    mciSaveParms.lpfilename = lpszFileName;

    if (dwReturn = mciSendCommand(wDeviceID, MCI_SAVE,

             MCI_SAVE_FILE | MCI_WAIT, (DWORD)(LPVOID) &mciSaveParms))

    {

             mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);

             return (dwReturn);

    }

    return (0L);

}


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
46.875ms