使用WaveOutOpen播放.wav(C ++)

时间:2012-10-09 09:30:03

标签: c++ c winapi waveout

我需要使用waveOutOpen函数播放音频文件(.wav)。我找到了这个手册。 http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=4422&lngWId=3但我不知道如何更改.wav文件。请帮帮我......

2 个答案:

答案 0 :(得分:0)

您需要mmioOpenmmioRead函数来读取.WAV文件中的有效负载数据,而且您可以使用waveOut* API对缓冲区进行排队。如果数据是PCM,您可以直接发送它进行播放,否则您可能需要使用ACM API解压缩。

您将查找提到的API函数的优秀代码片段:

答案 1 :(得分:-1)

这是我的工作方式(wav文件存储在资源中):

static void PlaySound(LPCTSTR lpszSound)
{
   HRSRC hRes; // resource handle to wave file
   HGLOBAL hData;
   BOOL bOk = FALSE;
   if ((hRes = ::FindResource(AfxGetResourceHandle(), lpszSound,
     _T("WAVE"))) != NULL &&
     (hData = ::LoadResource(AfxGetResourceHandle(), hRes)) != NULL)
   {
      // found the resource, play it
    bOk = ::sndPlaySound((LPCTSTR)::LockResource(hData),
         SND_MEMORY|SND_ASYNC|SND_NODEFAULT);
    ::FreeResource(hData);
   }
   //if (!bOk)
   //{
   //   static BOOL bReported = FALSE;
   //   if (!bReported)
   //   {
   //      AfxMessageBox(IDS_CANNOT_PLAY_SOUND);
   //      bReported = TRUE;       // once please
   //   }
   //}
}

inline static void PlaySound(UINT nIDS)
{ ::PlaySound(MAKEINTRESOURCE(nIDS)); }