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



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

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

你将找到伟大的代码片段查找提到的API函数:

  • http://read.pudn.com/downloads49/sourcecode/comm/voice_compress/166198/sb2/sb2Dlg.cpp__.htm
  • http://bcbjournal.org/articles/vol2/9808/Low-level_wave_audio__part_2.htm
  • http://frolov-lib.ru/books/bsp/v15/ch2_4.htm(如果你读俄语,情况似乎就是这样)

我就是这样做的(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)); }

相关内容

  • 没有找到相关文章

最新更新