• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 用線程播放WAV的類

    發表于:2007-07-04來源:作者:點擊數: 標簽:
    上海大學 夏偉頻 在應用程序中播放WAV 文件是常有的事,但是如果沒有開啟新的線程, 那么在WAV 的播放過程中該程序將停止響應, 直到播放結束。為了解決這個問題,筆者編寫了一個CthreadPlayWav 類。 一、源代碼如下: ///////////////////////////////// // //
    上海大學 夏偉頻

      在應用程序中播放WAV 文件是常有的事,但是如果沒有開啟新的線程, 那么在WAV 的播放過程中該程序將停止響應, 直到播放結束。為了解決這個問題,筆者編寫了一個CthreadPlayWav 類。

    一、源代碼如下:

    /////////////////////////////////
    //
    //ThreadPlayWav.h
    //
    / *
    Purpose: Defines the interface for play wav file
         with thread
    */
    #ifndef __ThreadPlayWav_H__
    #define __ThreadPlayWav_H__
    class CThreadPlayWav
    {
    public:
     void SetWavID(CString strWavID)
     {m_strWavID= strWavID;}
      CString GetWavID(){return m_strWavID;}
      void PlayWav();
      CThreadPlayWav(){m_strWavID="none";};
    protected:
      static CString m_strWavID;
      CWinThread *m_pThreadPlay;
      static UINT ThreadPlay(LPVOID pParam);
    };
    #endif //__ThreadPlayWav_H__
    /////////////////////////////
    //
    //ThreadPlayWav.cpp
    //
    #include "stdafx.h"
    #include "MMSystem.h"
    #include "ThreadPlayWav.h"
    CString CThreadPlayWav::m_strWavID;
    void CThreadPlayWav::PlayWav()
    {
       m_pThreadPlay=AfxBeginThread(ThreadPlay,this,
       THREAD_PRIORITY_NORMAL);
    }
    // 參考自anthony petruso 的playwav resource
    UINT CThreadPlayWav::ThreadPlay(LPVOID pParam) {
      BOOL brtn;
      LPCTSTR lpres;
      HGLOBAL hres;
      HRSRC hresinfo;
      HMODULE nl=::AfxGetInstanceHandle ();
      // find the wave resource
      hresinfo=::FindResource(nl,m_strWavID,"wave");
      if(hresinfo == NULL)
        return false;
      // load the wave resource
      hres = ::LoadResource (nl,hresinfo);
      if (hres == NULL)
       return false;
      // lock the wave resource and play it
      lpres=(LPCTSTR)::LockResource (hres);
      if(lpres==NULL)
       return false;
    brtn = ::sndPlaySound (lpres,SND_MEMORY | SND_SYNC);
     if(brtn == NULL)
     return false;
      // free the wave resource and return suclearcase/" target="_blank" >ccess or failure
      ::FreeResource (hres);
      return 0;
      }

    二、使用方法如下:

      將需要播放的WAV 文件COPY 至工程的\RES 子目錄下, 并在工程的資源文件(rc 文件) 中加入以下格式的內容:WAV 文件標識wave WAV 文件所在的完整路徑
      例如:mywav wave d:\c\playwav\res\hello.wav;
      加入庫文件,進入【Project/Settings... 】中的Link 頁,在Object/library modules 中填入winmm.lib;
      將ThreadPlayWav.h 和ThreadPlayWav.cpp 復制到工程目錄,并用【Project/Add to project/Files... 】將該兩個文件加入工程;
      在需要使用CthreadPlayWav 類的代碼頭部加入#include "ThreadPlayWav.h";
      定義實例,例如:CthreadPlayWav playwav;
      用成員函數SetWavID() 設置WAV 文件標識,例如:playwav.SetWavID("mywav");
      用成員函數PlayWav() 播放WAV 文件。

    三、注釋:

      m_strWavID WAV 文件標識;
      void SetWavID(CString strWavID) 設置WAV 文件標識;
      CString GetWavID() 取出WAV 文件標識;
      PlayWav() 啟動線程,該線程調用ThreadPlay;
      ThreadPlay(LPVOID pParam) 真正播放WAV 的函數,必須定義為全局或靜態函數?!?/p>

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>